iOS open project 이니 뭐니도 나온 상황이고, THEOS 가 훨씬 쓰기 편하다...

아래는 XCode4 나오면서 안되므로 무시하시길.
사실 저거 쓰면서 나도 뭐가 뭔지 몰라서 그냥 복,붙에 불과하다..ㅋㅋ



///////////////////////////////////////////////////////////////////////////////////////////////////

참고 싸이트

modmyi.com http://modmyi.com/forums/iphone-ipod-touch-sdk-development-discussion/728944-tutorial-how-compile-mobile-substrate-extension-xcode.html )

devbug.me http://devbug.me/606?category=2 )



1. XcodeSubstrate.zip 을 받는다. 주소 : http://cl.ly/9b3963d250f4673ccf51

(직접 헤더를 덤프하여 사용하려면 상단 modmyi 의 링크로 따라가서 Ok here we go 하위에 있는 XcodeSubstrateNoHeaders.zip 을 받는다)


그리고 압축풀고 나온 Mobile Substrate Extension 폴더는

/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Project Templates/Application

하위에 집어 넣는다.

템플릿이 4.0 기반이라 XCode에서 프로젝트 생성시 4.0으로 생성된다. 프로젝트 설정에서 바꿔주도록 하자.

버젼 문제는 아래에서 추가 설명


2. class-dump 를 이용하여 springboard 의 헤더파일을 가져온다.

class-dump-3.3.3.dmg (맥용) / apt-get install class-dump (아이폰)


맥-터미널 :

class-dump -H /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk/System/Library/CoreServices/SpringBoard.app/SpringBoard -o ~/Desktop/SpringBoard/

(맥에서 파일,폴더를 드래그 하여 터미널 위로 드랍시킬 경우 커서가 위치한 곳에 파일/폴더의 경로를 뿌려준다.

또한 class-dump 를 설치하고 싶지 않은 사람은 디스크 마운트 상태에서 class-dump를 복사하지 않고 사용이 가능하다.

ex> /Volumes/class-dump-3.3.3/class-dump  -H ~~~

뭐 편한대로 사용하도록 하자.


아이폰-터미널 : class-dump -H /System/Library/CoreServices/SpringBoard.app/SpringBoard -o ~/SpringBoard/

(아이폰에서 ssh를 깔아놓고 맥에서 터미널로 접근해서 하는 것을 추천한다.

이 글에서는 컴퓨터에서 추출한 헤더 파일을 사용하므로 일단 방법만을 적어놨을 뿐이고 실제 진행시에는 컴퓨터에서 추출하도록 하자.)


폴더이름은 SpringBoard 그대로 하도록! 뒤에 가서 헷갈린다... 오류 날경우 폴더를 만들어 놓고 실행!

그리고 폴더 채로 /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk/usr/include/

하위로 이동하도록 한다


또한 Springboard/SpringBoard.h 파일을 열어서

7번째 줄의
#import "UIApplication.h"

#import "UIKit/UIApplication.h"
로 수정,

54번째 줄의
struct _opaque_pthread_t {
    long _field1;
    struct __darwin_pthread_handler_rec *_field2;
    char _field3[596];
} *_backgroundMIGServerThread;

을 주석 처리 한다.

devbug님이 게시한 방법이며, 이외에도 해줄곳이 많다고 한다. 일단 여기까지-

아이폰에서 class-dump를 했을 경우 파일이 위와 같지 않다. 나도 이런면을 잘아는게 아니라

그냥 다른글을 옮길 뿐이니 그냥 가르쳐주는대로 하도록 하자..ㅠㅠ


3. 1에서 압축을 풀었던 폴더 내에 있는 substrate.h 파일을 2에서 이동한 ~~/include/ 하위로 옮긴다.

SpringBoard 하위로 옮기지 않도록 유의하자.

noheader 버젼을 받은 사람이라면 이 파일이 없을 것이다. 아이폰에서 /Library/Frameworks/CydiaSubstrate.framework/Headers/CydiaSubstrate.h

경로의 파일을 이름을 바꿔서 집어 놓도록 하자.


4. 압축을 푼 폴더 내에 혹은 아이폰 내부(/usr/lib/libsubstrate.dylib) 에 있는 libsubstrate.dylib

/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/ 로 이동한다


이후 Xcode에 가면 새 프로젝트 선택시 MobileSubstrate Extension 이 나타난다.


빌드 시 device모드로 놓고 build and run 이 아닌 그냥 build를 하도록 하자.

개발자 등록을 하지 않았거나 xcode에 code sign 작업을 해놓지 않았을 경우 에러가 뜨게 된다.


빌드 후 프로젝트 폴더 내의 Release-iphoneos / Debug-iphoneos 폴더 아래에 있는 .app 파일을 패키지 보기로 연후

프로젝트 이름의 확장자 없는 실행 화일만 빼내어 .dylib 확장자를 붙인다.

이후 아이폰의 /Library/MobileSubstrate/DynamicLibraries/ 경로에 집어넣고 리스프링 하면 확인할 수 있다.



아래는 modmyi 에서 알려주는 SDK가 4.0 이 아닐경우의 프로젝트 설정이다.

어차피 xcode가 영어니까 그냥 그대로 복사해 오도록 하겠다..

--------------------------

  1. In the menu bar, click Project > Edit Project Settings
  2. Click the "Build" tab at the top
  3. Drop down the Configuration box and change it to Debug
  4. Change the Base SDK to iPhone Device 4.0
  5. Drop down the Configuration box and change it to Release
  6. Change the Base SDK to iPhone Device 4.0
  7. Close the window
  8. Expand the Frameworks folder in the sidebar to reveal the red Foundation and UIKit frameworks, then delete them both
  9. Control-click the Frameworks folder > Add > Existing Frameworks...
  10. Choose Foundation and UIKit from the list
--------------------------
다른 SDK의 경우 특히 8~10 작업을 해주지 않을 경우 컴파일 오류가 날것이다..(아마..)
modmyi에서는 4.0 이 아닌곳에서 쓰는것을 주의하라고는 하지만.. 그냥 무시하자.. 그렇다고 4.1 / 4.2.1 용이 있는것도 아닌것 같다..






가장 좋은건 그냥 modmyi 가서 원문을 읽어보자.. devbug님이 소개한 class-dump 관련한 내용을 제하고는 모두 들어있다.


'개발개발 > Mac, iOS' 카테고리의 다른 글

BundleIdentifier로 앱 정보 구하기  (4) 2011.02.23
앱 설치 여부 구하기  (0) 2011.02.22
DEBIAN PACKAGING (deb) 만들기 (수정)  (1) 2011.01.30
PreferenceLoader 사용법  (0) 2011.01.30
cydia 앱, MobileSubstrate  (0) 2011.01.07

+ Recent posts