The Code Project Open License (CPOL)
1. 저작권 보호 기능을 제공한다
2. 상용 소프트웨어에서 사용 가능하다.
3. 명시적 특허권 행사가 가능하다.
4. 독점 프로그램(비공개 소스에서) 에서 사용할 수있다
5. 버그 패치 및 기능 확장 공개의 의무는 없다
6. 라이센스 전파의 의무는 없다.

 

The Common Development and Distribution License (CDDL)
1. 저작권 보호 기능을 제공한다.
2. 상용 소프트웨어에서 사용 가능하다.
3. 버그 패치 및 기능 확장 공개의 의무가 있다.
4. 명시적 특허권 행사가 가능하다.
5. 독점 프로그램(비공개 소스에서) 에서 사용할 수있다.
6. 라이센스 전파의 의무는 없다.

 

The Microsoft Public License (Ms-PL)
1. 저작권 보호 기능을 제공한다.
2. 상용 소프트웨어에서 사용 가능하다.
3. 독점 프로그램(비공개 소스에서) 에서 사용할 수있다.
4. 명시적 특허권 행사가 가능하다.
5. 버그 패치 및 기능 확장 공개의 의무는 없다.
6. 라이센스 전파의 의무는 없다.

 

The Mozilla Public License 1.1 (MPL 1.1)
1. 저작권 보호 기능을 제공한다.
2. 상용 소프트웨어에서 사용 가능하다.
3. 버그 패치 및 기능 확장 공개의 의무가 있다.
4. 명시적 특허권 행사가 가능하다.
5. 독점 프로그램(비공개 소스에서) 에서 사용할 수있다.
6. 라이센스 전파의 의무는 없다.

 

The Common Public License Version 1.0 (CPL)
1. 저작권 보호 기능을 제공한다.
2. 상용 소프트웨어에서 사용 가능하다.
3. 버그 패치 및 기능 확장 공개의 의무가 있다.
4. 명시적 특허권 행사가 가능하다.
5. 독점 프로그램(비공개 소스에서) 에서 사용할 수있다.
6. 라이센스 전파의 의무는 없다.

 

The Eclipse Public License 1.0
1. 저작권 보호 기능을 제공한다.
2. 상용 소프트웨어에서 사용 가능하다.
3. 버그 패치 및 기능 확장 공개의 의무가 있다.
4. 명시적 특허권 행사가 가능하다.
5. 독점 프로그램(비공개 소스에서) 에서 사용할 수있다.
6. 라이센스 전파의 의무는 없다.

 

The MIT License
1. 저작권 보호 기능을 제공한다.
2. 상용 소프트웨어에서 사용 가능하다.
3. 독점 프로그램(비공개 소스에서) 에서 사용할 수있다.
4. 버그 패치 및 기능 확장 공개의 의무는 없다.
5. 명시적 특허권 행사가 불가능 하다.
6. 라이센스 전파의 의무는 없다.

 

The BSD License
1. 저작권 보호 기능을 제공한다.
2. 상용 소프트웨어에서 사용 가능하다.
3. 독점 프로그램(비공개 소스에서) 에서 사용할 수있다.
4. 버그 패치 및 기능 확장 공개의 의무는 없다.
5. 명시적 특허권 행사가 불가능 하다.
6. 라이센스 전파의 의무는 없다.

 

The Apache License, Version 2.0
1. 저작권 보호 기능을 제공한다.
2. 상용 소프트웨어에서 사용 가능하다.
3. 명시적 특허권 행사가 가능하다.
4. 독점 프로그램(비공개 소스에서) 에서 사용할 수있다.
5. 버그 패치 및 기능 확장 공개의 의무는 없다.
6. 라이센스 전파의 의무는 없다.

 

The Creative Commons Attribution-ShareAlike 2.5 License
1. 저작권 보호 기능을 제공한다.
2. 상용 소프트웨어에서 사용 가능하다.
3. 라이센스 전파를 필요로 한다.
4. 버그 패치 및 기능 확장 공개의 의무는 없다.
5. 명시적 특허권 행사가 불가능 하다.
6. 독점 프로그램(비공개 소스에서) 에서 사용할 수없다.

 

The zlib/libpng License
1. 저작권 보호 기능을 제공한다.
2. 상용 소프트웨어에서 사용 가능하다.
3. 독점 프로그램(비공개 소스에서) 에서 사용할 수있다.
4. 버그 패치 및 기능 확장 공개의 의무는 없다.
5. 명시적 특허권 행사가 불가능 하다.
6. 라이센스 전파의 의무는 없다.

 

A Public Domain dedication
1. 상용 소프트웨어에서 사용 가능하다.
2. 독점 프로그램(비공개 소스에서) 에서 사용할 수있다.
3. 저작권 보호 기능을 제공하지 않아도 된다.
4. 버그 패치 및 기능 확장 공개의 의무는 없다.
5. 명시적 특허권 행사가 불가능 하다.
6. 라이센스 전파의 의무는 없다.

 

The GNU Lesser General Public License
1. 저작권 보호 기능을 제공한다.
2. 상용 소프트웨어에서 사용 가능하다.
3. 버그 패치 및 기능 확장 공개의 의무가 있다.
4. 독점 프로그램(비공개 소스에서) 에서 사용할 수있다.
5. 라이센스 전파를 필요로 한다.
6. 명시적 특허권 행사가 불가능 하다.

 

The GNU General Public License (GPL)
1. 저작권 보호 기능을 제공한다.
2. 상용 소프트웨어에서 사용 가능하다.
3. 버그 패치 및 기능 확장 공개의 의무가 있다.
4. 라이센스 전파를 필요로 한다.
5. 명시적 특허권 행사가 불가능 하다.
6. 독점 프로그램(비공개 소스에서) 에서 사용할 수없다.

 

물론!! 위 내용을 신뢰 하는건 좋지만, 100% 믿진 말길바란다.

절대 책임지지 않으니 ㅎㅎ

사이트에 명시된 라이센스를 보고, 이해가 안되면 직접 통화하는 열의를 보여야 XX같은 저작권법에서 자유로워진다 ^^

'기타' 카테고리의 다른 글

dd-wrt dns 설정  (1) 2015.01.15
Facebook 전체공개 게시물 댓글달기 권한  (1) 2015.01.08
청소년 나이 제한 정리  (0) 2014.01.28
티스토리 RSS 설정  (6) 2013.12.05
마인크래프트 논리 게이트  (1) 2011.01.20

iOS6 는

http://blog.iolate.kr/140

이 글에서...

단 이건 탈옥 전용..ㅎㅎ


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


뭐 이러니 저러니 해도 밑에 방법보단

설정 - 재설정 - 모든 설정 재설정 이 정답(순정/탈옥 둘다)인 듯 합니다.

어플리케이션 데이터를 가져오는지 아닌지는 모르겠지만(테스트 해본다는걸 까먹었네요)

일단 앱이 설치되어있을 경우 확실히 데이터가 돌아오지 않고 유지되므로 밑져야 본전이신 분들은

iCloud 에서 데이터 복원을 원하는 앱을 삭제 후 설정 재설정을 시도해 보세요.


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


1/14 0:20 수정 - 통화기록, 메세지, 배경화면, 아이콘 배열 등은 모두 복원됬는데 응용프로그램데이터가 복원이 되지 않는 황당한 결과 발견...
백업이 삭제됬거나 데이터가 있으면 복원되지 않는다 등 여러 이유가 있을 수 있겠지만 일단은 그렇다구요...
- 해보진 않았지만 앱을 삭제후 "백업에서 복원"하는 것을 추천.. 복원완료시 알아서 다시 다운로드 시작함..

0:44 - 음악,동영상,사진 등은 이렇게 복원할 경우 정상사용이 불가능 할 수 있습니다....
아이폰 내부적으로 원파일과는 별개로 따로 리스트화 된 파일이 있는데 그거랑 안맞는지 기타용량으로 분류해 버리는 군요... 그것들이 모조리 기타용량으로 가버렸는데 동기화 후 기타용량이 사라질 지는 미지수...(지금 동기화 중) 사라집니다.

17:35 - 설정 - 일반 - 재설정 - 모든 설정 재설정
을 해도 데이터를 날리지 않고 초기화면으로 진입가능합니다. 이경우 순정도 가능하겠지요..
그런데 "새로운 아이폰"으로 설정했는데 이것도 설치한 앱의 데이터가 남아있는건 그대로네요.. 백업에서 복원은 안해봐서 모르겠습니다만....


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




iOS5 가 발표되면서 새로 추가된 기능 중 하나인 iCloud.

iCloud 에는 iCloud 에 백업하기란 기능이 존재한다.
기존에 아이튠즈에 아이폰의 데이터가 저장하는 것이 아닌, iCloud 서버에 아이폰의 설정을 백업해 놓는 기능이다.
하지만 사용하다 보니 기존과는 다르게 불편한 점이 하나 있는데,

바로 처음 설정 이후에는 초기화, 혹은 복원을 하지 않으면 "백업에서 복원" 을 할 수 없단 점이다.

(내가 필요해서) 방법을 찾아보니, 생각보다 쉽게 할 수 있었다.
단점이라면, 탈옥이 필수이고... 트윅 하나를 설치해야 한다는 점?

난 결과만 쓰는걸 좋아하지 않으므로 과정도 일일히 나열할 것이지만 관심없는 사람이 많을 것이므로 접어둠..ㅠ



1. ifile 이나 터미널 등 알아서 /User/Library/Preferences/com.apple.purplebuddy.plist 를 지워주자. 왜지우는지 궁금하면 위에 과정 펴봐!


백업할 필요없다. 과감히 지워라.ㅋ


2. 그 다음 트윅하나가 필요하다..
얼마전 내가 만든 AppDialer 란 트윅을 설치하면 된다. 딱히 홍보하려고 한건 아니고.. 필요하기도 하고 내가 만든거라 젤 먼저 떠올랐으니 마땅한 대안이 없는 사람은 군말말고 시디아에서 검색해서 설치하도록 하자..
(뭐,, 내가 말하는 트윅말고도 알아서 앱을 실행시킬 다른 방법이 있으면 실행시켜라...)

 설치후 리스프링 하고 나면 스프링보드 상에 아래와 같은 AppDialer 아이콘이 생길것이다.(아이콘은 바뀔 수도 있다. 알아서 찾자..ㅋ)
설정 앱 안에 보면 AppDIaler 메뉴가 있다.





3. 실행후 다이얼, 혹은 패턴 마음에 드는 것 하나를 골라서 Activator 설정을 해주고(아무거나 해줘도 된다 어차피 한번 쓰고 말거니까.) 다이얼, 혹은 패턴 설정에서 아이템을 아무거나 하나 추가하도록 하자. 


나의 경우 다이얼, 33번으로 했다. 다이얼이든 패턴이든 아이템을 추가하고 몇번인지, 혹은 어떻게 그렸는지만 기억해두자.




4. 위와 같은 화면이 나타나면 URL 이란 부분을 누르자. 얼럿뷰가 하나 나타나서 입력을 요구 할 것이다.
 doubletap://com.apple.purplebuddy <- 공백 없이 이부분을 적어주자.
(원랜 적어둔 상태에서 스샷을 찍을려고 했는데 나중에 확인해보니 이모양;;ㅠㅠ)
오타 나지 않도록 주의~~ ㅋ



5. 완료했으면 아까 등록했던 Activator 액션을 통해 AppDaler 를 호출하자. 아마 아이템을 추가했을때와 똑같은 윈도우가 다시 등장할 것이다. 그럼 등록한 번호를 누르고 Call 버튼을 누르거나, 등록했던 패턴을 그려주도록 하자.




누르고 나면........






짠~! 설정화면이 정상적으로 떴다!!

처음 설정했던 것처럼 진행하면서 iCloud 백업에서 복원을 선택해 주자.
 





(탈옥 후라 openSSH 가 설치되어 있어서 복원중 스샷을 찍고 파일을 빼내오는게 가능했다 ㅋㅋㅋ)



솔직히 살짝 긴가민가 했지만,

완료후 재부팅 되면서 복원 완료~!!!

복원 후에 비밀번호와 관련된 설정은 복원되지 않으니 모두 설정해주고 평소처럼 쓰면 된다.

만세~!!! 


FTP
#apt-get install
vsftpd
#vi /etc/vsftpd.conf

anoymous_enable=NO
local_enable=YES
write_enable=YES
local_unmask=022
추가)  file_open_mode=0644

/etc/init.d/  restart 



SAMBA
# smbpasswd -a ID 
mariadb 받을거면 mysql 은 알아서 바꾸자.
걍 복붙하다 귀찮아졌네

1. apache2/php5/mysql
# apt-get install apache2 libapache2-mod-auth-mysql mysql-server mysql-client php5-common php5 libapache2-mod-php5 php5-mysql phpmyadmin 

mariadb

sudo apt-get install python-software-properties

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db

sudo add-apt-repository 'deb http://ftp.kaist.ac.kr/mariadb/repo/5.5/ubuntu precise main'

sudo apt-get update

sudo apt-get install mariadb-server


(setting path)

apache: /etc/apache2/apache2.conf
apache root: /etc/apache2/sites-available/default
VirtualHost - # a2ensite

mysql: /etc/mysql/my.cnf
php: /etc/php5/apache2/php.ini

 
2. (optional) phpmyadmin
# apt-get install phpmyadmin

#vi /etc/apache2/apache2.conf
#Enable PHPMyAdmin 
Include /etc/phpmyadmin/apache.conf

phpmyadmin.mo

한글화 파일
/usr/share/phpmyadmin/locale/ko/LC_MESSAGES



 http://blog.naver.com/jangstargosu?Redirect=Log&logNo=140148388066




Indexes

/etc/apache2/site-available/default
Options Indexes 


VirtualHost
http://uyeong.tistory.com/172 

그냥 글로만 보던 일인데..
내폰에 일어났다...ㅠㅠㅠ

아참! 결론만 말하자면, 그냥 복원후 재탈옥이 낫다... 그리고 동기화 다시 해야 할지라도 그게 빠르다;;;ㅠ

(이 후 내용은 주저리 주저리.. 딱히 별 내용 없고 끌리는 대로 써서 안그래도 글 못쓰는데 많이 엉망이니 관심없으면 그냥 뒤로가기를 누르자..)

일단 저게 왜 일어나나면...
우선 탈옥했다면 SBSettings 등 에서 내부 메모리 용량이 System/Media 로 나뉘어져 있는 것을
본 사람도 있을 것이다.
정확히 어떤식으로 구분되어 있는건진 잘 모르겠지만, 쨋든 아이폰 내에서 파티션이 두개 나뉘어져 있다고 보면 된다.
root 에 있는 var 을 제외한 폴더들은 시스템, 그리고 /var 하위는 따로, 로 대충 나뉘어져 있는 것로 추정된다.
(별로 중요한게 아니라 딱히 확인해보고 싶은 생각도 없고 그럴 필요도 없으니 대충 넘어가자..ㅋㅋ)

일반 순정상태라면 System 부분은 건드릴 일이 없으니 크게 상관이 없다.
하지만 탈옥시 탈옥 어플리케이션과 기타 파일들이 System 용량을 잡아먹게 된다.
이 때문에 시스템 어플리케이션, 벨소리, 배경화면 등을 /var/stash 로 집어넣고 본래 위치에는 심볼릭 링크를 걸어두는 작업을 하는 것이다.
(iOS, Mac, Linux 같이 Unix 기반의 운영체제들은 링크라도 일반 폴더와 거의 흡사하게 인식을 한다.
즉, 링크 폴더의 경로를 가지고 하위로 갈 수 있다...)

처음 탈옥 후 시디아 설치시 File System 어쩌구 하면서 잠깐 작업하는게 있을 것이다. 
이때 위의 작업을 시디아가 해주는 것으로 보인다.


나의 경우엔 그 작업 중에 시디아가 죽어버렸다.. 딴짓 하고 있어서 정확히 왜 죽은지는 모르겠지만.....
중간에 파일을 /var/stash 로 이동하기만 하다가 링크를 만들어 두지 않은 상태에서 죽어버렸으니 당연히 다음 리스프링 부터 앱이 모두 사라져버렸을 수 밖에...;;;

음악,앱은 물론이고 6000여장의 사진도 이미 동기화 한 터라 최대한 살리기 위해 별짓을 다해봤지만.....
답이 없다..ㅠㅠㅠ

외부에서 앱을 넣으면 실행화일의 권한이 644로 세팅되어서 권한 설정이 필요하게 된다. 이게 별루라면 옮겨진 시디아만이라도 링크 해놓으면 이후 작업을 할 수 있을 것이다.
즉 권한 설정 혹은 심볼릭 링크를 만들 수만 있으면 해결되는데 둘다 터미널, 혹은 ssh 접근이 가능해야 할 수 있는 작업이고 아이폰 내의 파일 이동은 iPhone Explorer, iFunbox, DiskAid 등 많이 시도해 봤지만 안되더라..ㅠ
쉘 스크립트를 실행할 방법은 떠오르지도 않고....

openssh 설치 도 시도해봤지만, 수동으로 파일을 하나하나 옮겼을 때는 소유주/권한 문제가 있는지
ssh_exchange_identification: Connection closed by remote host 란 오류를 내면서 연결이 되지 않는다..ㅠㅠ(물론 openssl 도 같이 설치 시도 했다)
Cydia 의 Autoinstall 은 작동하길 바라면서 시도해봤는데 이것도 안되더라..ㅠㅠ(이게 작동하지 않는 이유는 모르겠다..ㅠ)
될리 없겠지만, 탈옥 작업도 한번 더 시도해봤다. 시디아를 설치해 주길 바라면서..ㅠㅠ -> 역시나 안됨..ㅠㅠ

반탈인 관계로 이 삽질 하면서 DFU 만 2~30번은 들어간 것 같다..ㅠㅠ
커스텀 번들로 터미널만 넣어주는 작업을 할 수 있을까 생각해 봤는데 커스텀 번들 업데이트가 가능한지도 모르겠고 가능한지도 모르겠다...ㅠ

탈옥툴들은 오픈 소스인 경우가 많으므로(redsn0w 는 모르겠다.. greenpoison 은 소스 공개 해주더라..) 탈옥 작업시 다른 프로그램을 설치하면 되지 않을까? 란 생각을 한 순간
일이 커지기 전에 그냥 DFU 모드 진입 후 복원 버튼을 눌렀다...(;;;)

복원 후 재설치가 생각했던 것 만큼 오래 걸리지 않더라.. 


쨋든, 혹시나 후에 기본어플이 사라지는 일이 생기고, 터미널, 시디아, openssh 아무 것도 없는 상황에서
복원할 시간이 없다고/하기 귀찮다고 어떻게든 고치려는 마음을 먹었다면.. 어서 그 마음을 접기를.....
혹시나 다른 생각이 있다면 시도 해보는걸 말리진 않겠지만..ㅋㅋㅋ




ps1, 탈옥팀들은 afc2add 를 기본 설치 하지 말고 apt7(apt-get), openssh 혹은 Terminal 을 설치해주거나, 선택지를 제공해 줬으면 좋겠다... 그게 설치되어 있었다면 훨씬 쉽게 일이 풀렸을 텐데!!

ps2, 이제와서 생각해보니 데몬을 하나 만들어서 해주면 어떨까? 란 생각도 든다. Cydia AutoInstall 데몬도 딱히 작동하진 않았지만, 쨋든 SSH데몬이 작동을 시작하긴 했잖아? 혹시나 다음에 이런일이 있는 사람은 복원하기 싫고 시간이 많다면 시도해보길... 
시디아앱, 트윅 관련하여 참고하면 좋은 싸이트들.
참고 한다기 보다는 필요에 의해 구글링 하다 보면 이 싸이트들을 자주 보게 될 것이다.

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 값을 넣어줘도 크게 상관은 없다...ㅎㅎ



LibActivator Setting Saving Path :
/var/mobile/Library/Caches/libactivator.plist
(휘바골드 님 수정 요청 감사합니다~ ㅎㅎ)

복원 후 Activator 설정을 다시 해주기 귀찮다면 저 파일을 백업해 놓자.
권한은 mobile/mobile 666 

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

iOS5, 초기화 하지 않고 iCloud 에서 복원하기  (18) 2012.01.13
탈옥 중 기본 어플 사라짐  (2) 2011.12.19
Mac OS X Lion. 매직마우스 불편 설정 방법  (3) 2011.07.22
맥에서 스캔하기  (2) 2011.07.10
iPhoto 휴지통  (0) 2011.06.04

+ Recent posts