Work/iOS

아이폰 개발자 등록없이 디바이스 디버깅 하기 (Developing without Provisioning Profile)

kevin. 2010. 7. 14. 18:03
원문 : http://iphonedevwiki.net/index.php?title=Xcode#cite_note-1

* 컴파일 해서 폰에 올리기
    - 이것은 굳이 구글링을 하지 않아도 네이버에서도 찾을 수 있음.
    - 키체인을 만들고 Developer/Platforms/iPhoneOS.platform/Info.plist의 XCiPhoneOSCodeSignContext를 XCCodeSignContext로 바꾸어 주면 간단히 해결!
    - 문자열 바꿀 때 몇몇 라인을 바꾸라고 되어있는데.. 그냥 모두 바꿔버려도 됨.


* 디바이스 디버깅을 위한 작업

2. ldid를 /usr/local/bin에 넣는다.
3. 다음의 코드를 카피하여 /usr/local/bin/ldid2로 만든다.
#!/bin/sh
 
hasGTA=`expr "$*" : '.* -gta .*'`;
objpath=${!#}/`expr ${!#} : '.*/\([^/]\{1,\}\)\.app$'`;
 
if [[ $hasGTA == 0 ]]; then
 /usr/local/bin/ldid -S $objpath;
else
 TF=`mktemp -t x`;
 echo "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"><plist version=\"1.0\"><dict><key>get-task-allow</key><true/></dict></plist>" > $TF;
 /usr/local/bin/ldid -S$TF $objpath;
 rm $TF;
fi;
4. 다음 파일을 열어 CommandLine = "/usr/bin/codesign" 를 CommandLine = "/usr/local/bin/ldid2"로 바꾼다.
/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneOS Build System Support.xcplugin/Contents/Resources/iPhoneCodeSign.xcspec

5. 위 파일을 저장하고 XCode가 실행중이라면 재시작한다.

6. 아이폰의 /usr/libexec/installd 를 맥으로 복사한다. (편한 폴더에 카피해놓자. 만약을 위해 원본을 따로 저장해두자)

7. 아래 명령어를 순서대로 실행한다.
install_name_tool -change /usr/lib/libmis.dylib /usr/lib/libmiss.dylib installd
ldid -S installd
8. 다음의 코드를 카피하여 libmiss.c 파일을 만든다. (편한 폴더에서 작업하면 된다.)
extern int MISValidateSignature() { return 0; }

9. 위에서 만든 libmiss.c를 컴파일 하기 위하여 아래 명령어를 수행한다.
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk -dynamiclib -install_name /usr/lib/libmiss.dylib -current_version 1 -compatibility_version 1 -Wl,-reexport-lmis -flat_namespace -o libmiss.dylib libmiss.c

10. (7)에서 수정한 installd 는 아이폰의 /usr/libexec/installd에 넣어주고 (원래 있던 installd를 반드시 백업하자!!!) (9)에서 만든 libmiss.dylib는 아이폰의 /usr/lib에 넣어준다.

11. XCode 메뉴에서 Project->Edit Project Setting->Code Signing 에서 Other Code Signing Flags를 선택한 후 더하기 '+' 버튼을 누르고 -gta 추가. (모든 Configuration 즉 debug, release에 모두 해줘야 함.)


여기까지 했으면 이제 디바이스 디버깅 모드로 컴파일 하면 디바이스에서 디버깅이 가능하다!

% 참고로 나의 경우에는 10번에서 installd를 아이폰에 넣었더니 아이폰이 무한 사과에 빠졌다 ㅠㅠ.. 
다행히 백업해 놓은것이 있었고 iPhone Explorer가 작동되어 파일을 원래것으로 교체했더니 정상부팅 되었고..
이상하게도 디바이스 디버깅도 가능하게 되었다.
즉 installd를 교체하지 않았다는 이야기.. 탈옥과정에서 저것이 자동으로 수정이 되었나?
어쨋든 잘되니.. ^^

도움이 되셨기를....