전에 http://blog.iolate.kr/48 이런 글을 쓴 적이 있는데

저 방법은 탈옥해서 사용가능한 시디아에 올리는 앱이나 사용할 수 있는 방법이여서

검색으로 들어와서는 실망한 사람이 많았을 것이다.


맥부기 돌아다니다가 재밌는 프레임워크를 발견했는데 앱 설치 여부 구하기란 유입경로가 계속 들어와 있어서 간단히 소개해본다.

프레임워크 형태로 제공되며 무료, github 에서 다운받을 수 있다.

프레임워크 주제에 공식홈페이지도 있다..ㅋㅋ


http://www.ihasapp.com/


프레임 워크 이름은 IHasApp.

요구 조건은 iOS5 이상이다.

혹시나 공식홈이 짤린다면 github 주소는 https://github.com/danielamitay/iHasApp



사용해보진 않았지만 설명이나 소스를 봐서는

iTunes 에 검색을 해서 설치되었다고 뜨는지, 안되었다고 뜨는지 확인하는 구조인 것 같다.


따라서 앱아이디 데이터를 포함한 180KB 정도의 파일이 포함되며 컴파일시 빼버린다면 웹에서 저 파일을 얻어와서 검색을 한다.



(사용해보지 않아서 확실하진 않지만)이것만 봤을땐 확인을 위해 엄청 느린 속도와 많은 인터넷 사용을 할 것 같아서 비효율적이기 짝이 없는 소스 같지만 소개는 빠르다고 소개하고 있으며

어차피 앱 설치여부를 구하려는 많은 개발자들은 특정 앱 몇몇을 검색하는 용도일 것 같으니 적절히 소스를 수정한다면 원하는 답을 낼 수 있는 괜찮은 소스인 것 같다.


단, 이 방법 역시 설치된 앱의 버젼정보는 구할 수 없다..;;ㅎ



iOS5 이상인 것이 사파리에서 iOS 가 앱 설치여부를 구하는게 안되서 iOS5 이상이라면 어쩔수 없지만 프레임워크 상의 json 이나 기타 호환문제로 iOS5 이상 지원이라면 각자의 개발 수정으로 그 하위의 버젼도 호환해줄수 있을것 같으니 직접 해보길 바람. ㅋㅋ

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

BeeAppControl - iOS의 게임 등 앱을 키보드로 제어  (10) 2013.01.14
GSEvent.h (for hid-support)  (0) 2012.12.23
Cydia Store 결제 체크  (7) 2012.04.11
Cydia Store 에 앱 올리기  (2) 2012.04.08
iOS 지도앱 openURL  (3) 2012.02.27

예상보다 조금 일찍 쓰게 됬음.. (원래 지금 쓸 생각 없었는데...ㅋㅋㅋ)


별건 없고......

보통 예제소스들은 fopen 으로 되어 있는데 대부분의 호스팅들은 보안상 저걸 막아버려서 쓸 수가 없음.

그래서 curl 로 만들어진 예제 소스를 첨부하니, 조금만 수정해서 쓰시면 되겠습니다아아아


이때 사용하는 http://cydia.saurik.com/api/check 라는 주소는 똑바로 쓰지 않으면 그냥 없는 페이지 처럼 보이므로 나처럼 url 바로 적어보는 삽질하지말고 아래 소스 따라가자..




보면 대충 다 알겠지???

난 이걸 include 해서 사용한다..

package - product 라던가, version 의 유무라던가, 기타 것들은 딱히 필요없을 것 같으니 생략함.

필요하면 레퍼런스 찾아보셔요. http://test.saurik.com/cydia-packagers/API4%2520v10.pdf


우선 조금 부가 설명을 하자면, mode 가 두가지 있는데 차이점을 모르겠다.. reculsive 가 조 금더 깊은 모드(그러니까 좀더 고급적인??)라고 설명하던데 난 차이를 모르겠더라...

대충 읽어봤을땐 결제에 사용하는 이메일 같은게 날라온다고 하는 것 같았는데 실제로 그렇지도 않고... local 이든 reculsive 든 같은 내용들을 뿌려주는 것 같았다.(구매 방식(paypal,amazon) 이라던가..)


저 소스에서는 Product 를 쓰지 않았지만, 레퍼런스를 본다면 Package 대신 Product 항목을 쓸 수도 있다.

이건 Cydia Connect 에 로그인하면 내 패키지의 product 명이 뭔지 알 수 있다.

저 소스를 vendor 로 등록되기 전에 쓴 것이라 난 Product 와 Package 의 차이점을 몰라 한참 고민했었지... ㄱ-


Vendor 와 Signature 는 Cydia Connect에 로그인해야 알 수 있다.




API Credentials 란 부분 보이지??




요런 화면을 볼 수 있다.

Vendor ID 는 일반적으로는 bigboss 에서 등록하는 아이디가 되는 것 같은데,

좀 다른 케이스를 봐서 확신은 못하겠다...ㅋㅋ

하여간 저 Secret Key 를 소스의 Signature 에 넣어주면 된다.


Secret Key 가 왜 Secret Key 인지. 즉 저걸 왜 비밀로 유지해야하는지는 모르겠지만(크게 상관없을 것 같은데..)

저 키 때문인지, 다른 이유도 있는지 하여간 기기에서 cydia 서버로 바로 확인하는건 금지하고 있다.(이 경우 Secret Key 를 일반 유저가 알 수 있으니까.) 즉, 내 서버를 한번 거쳐서 조회해야 한다.



처음 Vendor 로 등록하는 사람들은 Secret Key 등을 알 수 없으므로 서버에선 무조건 승인 메세지를 보내주고, 후에 서버에서 php소스를 수정해 주는 방식으로 해주면 됨.

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

GSEvent.h (for hid-support)  (0) 2012.12.23
앱 설치여부 구하기 (앱스토어 사용가능!)  (0) 2012.12.08
Cydia Store 에 앱 올리기  (2) 2012.04.08
iOS 지도앱 openURL  (3) 2012.02.27
참고하면 좋은 싸이트들  (0) 2011.12.04

거창하게 적고 싶은 마음도 있지만, 어차피 보는 사람 몇 없을거니 그냥 대충 적기로 합시다..


Cydia Store 에 앱을 올린다면 알만한 전제, 정의, 설명 다 생략합니다.

제가 Bigboss 를 사용해서 올리므로, Bigboss 기준임.


이런걸 봤을겁니다...

시디아 스토어 체크하고 밑에 저기 나열한것만 다 적으면 되는 줄 알았음.....ㅠㅠ

0) 원하는 가격. - 나중에 수정 가능하다

1) 이름 (나의 경우 Kim, Seung-ho)

2) South Korea

3) just me~~

4) paypal email


저거대로 작성해서 보내면 Optimo 로 부터 장문의 메일을 받을 수 있을거임..

1. 미국인이 아니므로, w-8ben 서류 작성을 요구함. optimo 는 18세 미만이면 부모님이나 다른 어른의 이름으로 하라지만 이리저리 봐도 크게 문제 없을 것이라 판단하여 일단 무시하고 내 이름으로 서명해서 보냈음. (밑에서 다시 조금 자세히 설명)


2. Cydia Store number 필요 - PC 에서 http://cydia.saurik.com/connect 로 로그인 하거나, cydia 에서 직접 로그인 하면 #00000 식의 번호를 확인할 수 있다. 이것이 내 아이디.


3. 판매 대금에 대한 설명 - 70% / 30% 가져가며, 70% 에 대해 정부에 세금 떼야함. 조금 길어서 접었다. 주저리주저리 펼쳐보자..ㅎㅎ



4. app id 에 대해. 이게 무료앱은 상관이 없는데 유료앱은 아닌가 봄. bundle identifier 의 도메인에 대한 소유권이 있어야 함. 즉 kr.iolate.touchpose 로 앱을 올렸다면 touchpose.iolate.kr 로 접속이 가능해야하며, 그 도메인을 내가 소유하고 있어야 함. 만약 도메인이 없을 경우 org.thebigboss.[product name] 으로 해서 올리게 됨.


5. 기기 제한을 알려달라고 한다. 즉, 지원하는 기기가 아니면 애초에 팔지를 않겠다는 거.

테스트 하거나 대충 range 를 보내주자.


처음 유료앱을 올리게 되면 이렇게 해야할 것이 이것저것 많다.. 특히 다른건 똥씹은 표정으로 그냥 하면 되는데(일단 세금 문제는 무시하자..) w-8ben 에 당황...

우선 양식은 http://www.irs.gov/pub/irs-pdf/fw8ben.pdf 여기 있다. 막막해 하지 말고 저거 인쇄하고! 펜 들고! 시작!

Part 1 에 이름, 2에 국가(South Korea), 3 에 Individual 체크, 4에 영문주소, 5,6,7,8 다 건너뛰고 Part2 에 9-a 체크, 옆에 빈칸에 South Korea 적고 젤밑에 Sign Here 에 이름 적고 우측에 Date. 밑에 형식있으니 그 형식대로 적으면 끝.

한 문장으로 설명했음!! 이렇게 적은 후 잘 보이게 스캔해서 optimo 이메일로 보내주면 된다.


처음 보낼 경우 w-8ben 때문인지 시간이 좀 걸린다.

나의 경우 일요일날 보냈고(옵티모가 일요일날 확인할거라고 미리 말해줬었다) 그 주 목요일날(밤이니까 금요일?) 등록됬다.


이후 http://cydia.saurik.com/connect 로 로그인 하면 Vendor 로 정식 등록됬음을 알 수 있다..^^





특이한 점은 Package 가 아니라 Product 란 개념으로 관리된다. 즉, 여러 패키지를 하나의 Product 로 묶어서 하나 구입하면 다 구매처리 되는 방식이 가능한것으로 보이지만, 안해봤고 확인도 안해봐서 정확하지는 않다..^^

Total Sales 랑 Pending Earnings 보고 있음 재밌음..ㅋㅋ 참고로 Pending Earnings 는 시디아 수수료 30% 제한 금액이다. 즉 추가의 세금이 없다면 저 돈이 paypal 을 통해 입금된다.

보면 알다싶이 판매 그래프도 제공한다.

Device Compatibility 는 지원 버젼 수정. 여기 해당하는 버젼이 아니면 유저가 구입이 불가능 하다.

Price Points 는 가격 변경. 가격을 수정할 수 있으며, 즉시 적용 된다는 듯...

Give Free Copy 는 말그대로 무료카피 선물. Cydia id number 를 필요로 한다.



한국내에 Cydia Store 진입을 원하는 사람이 있다면 이것만으로 충분한 자료가 되었다고 생각함.

(아, 세금문제는 누구 저한테도 좀 알려주세요..ㅠㅠ w-8ben 나이제한이 세금때문에 그런것 같은데.. 긴가민가함)


또한.. 저기 Total Sales 에 보면 341 명인데 실제 기기 등록수는 1만여대가 넘는다. 즉 크랙이 판을 친다는 얘기.

크랙방지 꼭 넣자..... 다음엔 Cydia Store 결제 체크 API 에 대한 글을 쓸 예정!


구글:
지정된 핀(임의 위치): http://maps.google.com/maps?f=q&q=좌표
그냥 핀 찍고 위치 공유로 나오는 주소를 때려 넣으면 됨. 좌표 뒤에 검색어 등은 지워도 됨. 있으면 작동 안할 수도 있음.
ex> @"http://maps.google.com/maps?f=q&q=35.855387,128.637478"
등록된 위치: maps://?q=검색어&cid=아이디
이 역시 지도 앱에서 검색한 후에 링크를 쏘는 것 추천...
특이하게 cid 가 있어도 쿼리 이름이 없으면 안되더라..지정된 핀의 경우 그냥 풀 URL 다 날려도 iOS 가 알아서 지도 앱을 실행시켜 주는데 등록된 위치의 경우 안되더라..
앱으로 직접 url 쏴줘야 함.
ex> @"maps://?q=%EA%B2%BD%EC%8B%A0%EA%B3%A0%EB%93%B1%ED%95%99%EA%B5%90&cid=16795864946373944557"

다음:

(요넘 힘들었다.. 결국 다음팀에 문의..ㅋ)
지정된 핀: daummaps://look?p=좌표
이 넘 역시 핀 찍고 주소 공유하면 http://local~~ 어쩌구 주소가 나오는데 그 뒷부분만 빼오면 된다.
ex> daummap://look?p=35.850000,128.630000

검색 결과: daummaps://search?q=검색어
정말로 검색 결과를 보여줌. 예시 필요도 없다. 위에 그대로 쿼리로 쏴도 된다..ㅋ

등록된 위치: daummaps://place?id=아이디
이 넘은 핀 찍고 주소 공유하면 http://~~~~place?confirmid=아이디
이렇게 주소를 준다. confirm 만 지워주면 됨. 노란색 핀으로 찍어준다.ㅋ
ex> @"daummaps://place?id=8197517"

네이버:
별거 없다. 모바일 페이지로 들어가면 앱에서 보기 링크가 있는데 그거 클릭해서 주소 빼오면 된다.
참고로 iOS 디바이스에서 실행하면 바로 지도앱이 켜져 버리니 불가능 하고, 사파리에서 모바일 페이지로 진입 후,
개발자 모드를 켜서 user agent 를 iOS 로 바꿔준다. 그러면 앱으로 보기 버튼이 활성화 되는데 그거 누르면 주소를 알아낼 수가 있다. 더럽게 길기도 하고 그 많은 값 중 하나라도 빼면 제대로 작동안함.

등록된 위치 뿌려주는 예시:
@"navermaps://?menu=location&pinType=place&lat=35.855549&lng=128.637438&title=%EA%B2%BD%EC%8B%A0%EA%B3%A0%EB%93%B1%ED%95%99%EA%B5%90&pinId=11594033" 



참고로 사파리가 아니라 앱에서 openURL 로 실행할 때 url에 한글이 있을경우 escape 해서 보내야 함.
NSURL 이 알아서 해줄줄 알았건만, 한글로 보내면 아예 URL 자체를 무시해버린다..

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

Cydia Store 결제 체크  (7) 2012.04.11
Cydia Store 에 앱 올리기  (2) 2012.04.08
참고하면 좋은 싸이트들  (0) 2011.12.04
SpringBoard 설정들 (계속 업데이트 예정)  (2) 2011.12.03
Window 띄우기  (3) 2011.12.03
시디아앱, 트윅 관련하여 참고하면 좋은 싸이트들.
참고 한다기 보다는 필요에 의해 구글링 하다 보면 이 싸이트들을 자주 보게 될 것이다.

1. iPhone Developmene Wiki (http://iphonedevwiki.net)
-> 업데이트 안된지 좀 오래 된 것같지만, 그래도 상당히 좋음.
생각지도 못한 곳에서 의외의 도움을 많이 받았던 싸이트.
재밌는 정보도 많고..... 


2. LibActivator 소스 (https://github.com/rpetrich/libactivator)
남의 소스를 보면서 배우는 것도 꽤나 좋은 방법이라고 생각함.
특히 나의 경우 Activator 의 경우 보고 배운 부분이 굉장히 많음.
처음엔 멍 하지만 하나하나 보다 보면 재밌음... 


3. deVbug 님의 AlwaysiPodPlay 소스 (https://github.com/devbug/AlwaysiPodPlay)
다른 걸 보란게 아니고 License 표기를 위한 TextView 를 비롯한
PreferenceBundle 의 사용법을 보면 좋을 듯..


4. PreferenceBundle Doc 문서
http://www.touchrepo.com/guides/preferencebundles/PreferenceBundles.doc 
예전 내용이라 현재는 작동 안하는 부분 등도 많지만, 자료가 잘 없는 PreferenceLoader 특성상, 정말 고마운 문서..



5. 스택 오버 플로우 (http://stackoverflow.com/)
두말할 필요가 있겠는가!! ㅋ
잘 없지만 간혹 트윅 관련 질문이 올라오고, 아이폰에서는 불가능하다는 대부분의 답변 중 또 간혹 제대로된 답이 있는...
꼭 트윅이 아니더라도 뭔갈 찾기 좋음..ㅋ


6. 레포들
빅보스 : http://thebigboss.org/
ModMyi : http://modmyi.com/
뭐 크게 자료가 있었던 기억은 없지만, 간간히 있었던 듯....
빅보스의 토글을 제하고는 저기 들어가서 검색보다는 구글링 하다보면 저 싸이트를 볼 수 있을 것이다...;;ㅋ


7. saurik 의 블로그 (http://www.saurik.com/)
시디아 개발자, saurik 의 블로그.
내용은 거의 없지만, 다른 곳에서 찾기 힘든 것들이 있다.(그런 만큼 크게 쓸모 있는 사람도 많지 않으리...)
글 목록을 찾기 힘든데 오른쪽 사진 밑에 최근 글 목록이 있다.. 그냥 그게 다인듯....?

 ㄴ 덧, 크게 필요한 내용은 아니지만, 시디아 메인페이지 하단에

요런 개발자들을 위한 메뉴가 있었다. ㅋ
뭐.. 딱히 볼만한 내용은 없다....









현재 생각나는건 여기까지...
뭐 더 있겠나 싶냐만은, 혹시나 더 있으면 추가하도록 하겠음..

아! 중요한 두 싸이트를 빼먹을뻔 했군!
바로 내 블로그
http://blog.iolate.kr ! 바로 이 블로그
와,(ㅋㅋㅋㅋㅋㅋ)

deVbug 님의 블로그 ( http://devbug.me ) 도 도움이 될겁니다!!! (한글이라 더 좋고~ ㅋ)


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

Cydia Store 에 앱 올리기  (2) 2012.04.08
iOS 지도앱 openURL  (3) 2012.02.27
SpringBoard 설정들 (계속 업데이트 예정)  (2) 2011.12.03
Window 띄우기  (3) 2011.12.03
LibActivator Event View / Call Listener  (0) 2011.11.14

WiFi On/Off 등 SpringBoard 에서의 설정이나 기타 이벤트들을 정리할 예정인 페이지.
Ring/Silent 토글과 같이 정말 알려주기 배아픈 것들은 조금만 생각해보고...;;ㅋㅋ(사실 아이폰 외에 다른데서 잘 작동할 지도 미지수..)

//========================================//
[Change Log]

2011 Dec. 1 글 작성, WiFi, Bluetooth, Rotation Lock, AirplaneMode, Brightness, SSH 추가
2012 Dec. 19 추가한줄 알았던 Ring/Silent 수정(ㅋ), 밝기 iOS6 지원 수정

ps. 헐.. 1년이나 지났다니.....


//========================================//

1. WiFi

 
2. Bluetooth
 
3. Rotation Lock
 
4. Ring/Silent
 
5. Airplane Mode (tested on 3Gs / iOS5.0)
 
6. Brightness
 
7. SSH (maybe stupid way..) 
 



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

iOS 지도앱 openURL  (3) 2012.02.27
참고하면 좋은 싸이트들  (0) 2011.12.04
Window 띄우기  (3) 2011.12.03
LibActivator Event View / Call Listener  (0) 2011.11.14
PreferenceBundles 에서 UIViewController 사용하기  (0) 2011.08.12

원래 앱 개발시, 개발자 레퍼런스나 기타 강좌들을 통해 이런 말을 보게 될 것이다.
"아이폰엔 하나의 윈도우(UIWindow) 만 존재 할 수 있다."

뭐 정확하진 않아도 대강 저런 어조였는데 저건 앱스토어 "앱" 이야기 이고
트윅에선 임의로 여러가지의 윈도우를 띄울 수 있다. 

최근에 내가 만들었던 앱다이얼러라던가.. SBSettings 의 설정 화면 등이 UIWindow 를 더 띄운 예이고
추가로 Activator 의 제스쳐 감지도 보이지 않는 최상위 윈도우를 Activator 에서 만들어서 감지한다.


만드는 법은 간단하다.
아! 그리고 일단 UIWindow 는 UIView 의 하위객체란건 알아두자..ㅋㅋ

UIWindow* aWindow = [[UIWindow alloc] initWithFrame:CGRect];
aWindow.windowLevel = 1500;

aWindow.hidden = FALSE;


그냥 저렇게 하면 나타난다...ㅋㅋㅋ
[aWindow makeKeyAndVisible]; 등으로도 나타나게 할 순 있지만 keyWindow 로 만들 것이 아니니까
그냥 hidden값만 바꿔주면 된다. (keyWindow 는 아이폰이든 맥이든 하나만 존재 가능.. 이라곤 하던데 예전에 makeKey 를 남발해도 크게 문제는 없더라.. 단지 자잘한 오류를 경험했기에 비추....)

크기를 전체화면이 아니게 할 경우 윈도우 이 외 부분은 원래 그대로 터치가 되니 윈도우를 하나 더 만들어서 막거나, 애초에 전체화면으로 만들거나 등등 알아서 머리 잘 쓰자..

숨기기와 관련해서.. hidden =TRUE; 가 아니라 alpha 를 0으로 줘서 숨길 경우 잠금화면->홈 화면 으로 갈때 등 특정 상황에서 숨겨뒀던 윈도우 잔상이 나타나는 버그가 있으니 참고. 


여기서 끝내긴 아쉬우니, 내가 좀 삽질했던 회전 관련 팁..
View 도 아니고, 애플이 제공하는 틀 안도 아니기에 화면 회전 관련이 좀 불편하다..

기기 방향을 알기 위해서 [[UIApplication sharedApplication] statusBarOrientation] 를 호출 하면 된다.

주석 달아놨으니 참고하자.



반환값은 int 인데
1: 세로  2: 180도 회전  3: 반시계 방향 90도  4: 시계방향 90도
로 기억한다... (3,4 가 바뀔 수 있으니 구분하는게 중요하다면 확인해 볼것. 단지 화면 돌리기만 할 것이라면 밑에 알아서 되어 있으니 신경 안써도 된다.)

그러고 나서 값에 맞게 WIndow 를 돌려줘야 한다. 

1,2,3,4 가 각각 어떤 방위인지는 5줄 위에 적어둔 걸로 기억한다. 주석따윈 귀찮으니 알아서 보자..



윈도우는 이렇게 돌려주면 되는데..........................
이게 X 같은게 돌리고 나면 Window 하위로 붙이는 뷰는 회전된 윈도우의 해당 방위에 맞게 알아서 잘 되는데 문제는 Window 자신의 좌표가 좀 꼬인다.. 

화면을 돌리더라도, 기기 내부 앱이든 뭐든이 회전하더라도 좌표의 기준점, 즉 (0,0) 의 위치가 변하지 않는다! 게다가 x축 y축 방향도 변하지 않는다!!
즉, 90도를 돌린 경우에 사용자가 보는 세로가 그대로 x축이고 가로는 y축.....
좀 다르게 말하자면,, 방위에 따라서 화면 좌측 상단의 좌표(3Gs 기준)가 (0,0) (320,0) (0, 480) (320, 480) 으로 제각각이다.. 크게 상관 없는 사람들도 있겠지만 나의 경우 이 좌표 떄문에 매우 곤란 했었다..

지금 와서 생각해보면 상위에 전체 화면의 윈도우를 하나 더 띄우고 내부에 뷰로 작업하는 것도 괜찮을 것이라는 생각이 든다.. 필요한 사람은 어떻게든 알아서 해보셔~


아 빼먹을 뻔 했다. 화면 회전 이벤트 감지는
SpringBoard 의 noteInterfaceOrientationChanged 이벤트를 체크하면 된다. 이 부분은 알아서..
한참 트윅제작 강의를 하고 계신 deVbug 님이 써주시거나 내가 곧 쓸 수도 있다.... 




내가 잘못했다거나, 더 좋은 방법이 있지만 몰라서 못 적은 거일 수도 있다. 
혹시나 더 좋은 방법, 혹은 다른 팁 등이 있다면 댓글로 살포시........ㅎㅎ 돕고 삽시다 좀!!! ㅋ 



솔직히 이런것들 한국인보단 외국인들이 훨씬 많이 보겠지만
영어로 쓰는건 많이 무리가 있으니.....ㅋㅋ

우선 첫번째, 설정에서 Activator Listener 뷰를 가져오는 방법.
THEOS 에 포함된 헤더엔 관련 부분이 빠져 있으니 그냥 https://github.com/rpetrich/libactivator/ 에서 libactivator.h 를 가져오도록 하자.

libactivator.h 임포트 후에
 

LAEventSettingsController *vac = [[[LAEventSettingsController alloc] initWithModes:[NSArray arrayWithObjects:@"springboard"@"application"@"lockscreen"nil] eventName:eventName] autorelease];

[self pushController:vac];


와 같이 호출해 주면 된다. 

근데,, 사실 저 코드 만으로는 문제가 있는게, PreferenceBundle Extension 에서 네비게이션의 뒤로가기 버튼을 누를 경우
-(void)setRootController:(id)controller; 메소드를 호출하게 된다.
따라서  LAEventSettingsController 를 상속받는 새로운 클래스를 만들고 -(void)setRootController:(id)controller; 메소드를 만들어 두자..

수정된듯...


======================================================

다음은 Activator Listener 직접 호출. Activator 에다가 이벤트를 등록하지 않고 직접적으로 호출하는 방법이며, Listener 이름만 알고 있으면 된다.
(참고로 Activator 는 리스프링 직후 트윅들이 Activator 에 이벤트를 등록하면서 넘겨주는 delegate 를 가지고 있다가  activator:receiveEvent:forListenerName: 메소드를 호출해주는, 싱글톤 방법을 사용한다.)

역시나 LibActivator 소스에서 가져오는 libactivator.h 를 임포트 해주고
아래와 같이 해주면 된다.
 

event 는 굳이 안만들고 msgSend 에서 event 대신 nil 값을 넣어줘도 크게 상관은 없다...ㅎㅎ



iOS5 에선 수정되었음. 단, iOS4 와의 호환성을 위해서라면 여전히 유효한....
PreferenceLoader 자체가 설정을 "로드" 해주는게 다라서 PL 버젼 보다는 iOS 버젼을 따라가는듯...


======
당췌 PreferenceBundles 부분은 관련 문서를 구할 수가 없다..
게다가 open source 인데 소스가 git 에서 사라진 상태;;(검색해도 안나오고 말이쥐;;)
(수정.. 소스가 있긴 있다. 근데 이제보니 별로 도움안되는 소스더라..)

이런 상황에서 용케 만드는 사람들이 신기하군..ㅠㅠ


하여간,
PSViewController 에서 다음 뷰로 넘기기 위해선
PushViewController:animated:  가 아니라 PushController: 를 사용하면 되는데
문제는 PSViewController 클래스만 지원한다..

아니, UIViewController 도 되긴 되는데 UIViewController 로 넘어간 후에 뒤로가기를 누르면 튕겨버린다.
이유는 뒤로가면서 원래 보던 뷰에 setRootController:(id)controller 라는 메소드를 호출하는데
UIViewController 에는 해당 메소드가 없다..ㅠ

PreferenceBundles 에서 사용되는 클래스들은 일반적으로 쓰는 클래스를 하나도 상속 받지 않더라..ㅠ
(뭐 NSObject 정도는 상속 받겠지만)

게다가 PSViewController 에는 addSubView: 같은 메서드도 없다! 이런...


방법은
1. PSViewController 에서 -(id)view 를 재정의 한다.
 즉 -(id)view 메소드에서 내가 쓰려는 뷰나 뷰컨트롤러를 만들고 그 뷰를 return 해주면 된다.

하지만 나의 경우엔 LibActivator 의 EventSettingView 를 가져오는데 저렇게 하니 깨짐;;ㅠㅠ

그래서 곰곰히 생각해보다가 해결!!

2. UIViewController 에서 setRootController: 정의 하면 된다 ㅋ
원랜 Preference 소스 보고 원래대로 작동하게 할려고 했는데 소스도 없고 테스트 해보니 걍 아무 작업 안해줘도 잘만 되더라.


@interface newView : UIViewController
- (void)setRootController:(id)controller;
@end

@implementation newView
- (void)setRootController:(id)controller
{
return;
}
@end


그리고 newView 를 호출해서 pushController 해주면 끗~!

iOS 버젼따라 오류가 날 수도 있다. 그러면 그 메소드들을 다시 오버라이드 해주자.
나의 경우 iOS4, 5 에서 전혀 문제 없었다.


뭐 간단한 몇몇 가지는 libactivator.h 를 import 하는 것으로 사용이 가능하지만(뭐 THEOS 에 들어있는 헤더는 몇가지가 빠진거라서 제대로 쓰려면 Activator 오픈소스에서 가져와야 한다)

libactivator.dylib 을 링크 해줘야만 작동되는 기능들도 있다. 

애초에 XCode 쓸때도 플래그는 잘 모른다고 무시하고  다른 프레임워크 처럼 Link Binary 만 해줘도 잘 됬었는데
THEOS 에서는 어떻게 해야할지 모르겠더라;;ㅠㅠㅠ


해결법은
$THEOS/lib/ 에 libactivator.dylib 을 복사해 넣은 뒤

Makefile 에
[BUNDLE NAME]_LDFLAGS = -lactivator 
를 추가해주면 된다. 

+ Recent posts