아이폰기본사용2010. 9. 8. 19:00

 
서론은 그만하고  아이팟에 내가 만든 어플 올리는 방법을 소개하겠다.

환경은 아래와 같다.
iPod Touch 2세대 (2.2.1) - 해킹된 버전(jailbreak)
OSX 10.5.4  (실제로 쓴건 iDeneb 10.5.4... 맥 살 돈이 없고..난 쓰고 싶을 뿐이고..)
Xcode Version 3.1.2

잘 모르는 사람을 대상으로 쓴 글이기에 주로 스크린샷으로 설명을 대체하겠다.

1. 프로젝트를 하나 만들어서 NIB파일을 더블클릭해 아무 컨트롤 또는 HelloWorld를 입력
  (시뮬레이터에서 컴파일하고 테스트는 가능하다 Device로 선탁해서 컴파일 하면
   Codesign어쩌고저쩌고 에러가 뜬다.)

2. 프로젝트 셋팅으로 들어간다.
  

3. 프로젝트 셋팅 화면에서 위 4개의 탭중 Build탭을 선탁 한 후 
  아래 "Add User-Defined Setting"을 클릭하여 화면과 같이 2개 값을 입력한다.
  (보기좋게 Show항목을 User-Defined Settings으로 해놓으면 좋다.)

4. 인증서를 생성해야 한다. 
  (참고 : Obtaining a Signing Identity )
  아래 위치에 있는 "키체인 접근"이란 프로그램을 실행시킨다.
  (영문 : Application > Utilities > Keychain Access )
5. 이제 인증서를 생성하자. 그냥 화면대로 따라하면 된다.
  메뉴 중 "키체인 접근 > 인증 지원 > 인증서 생성" 을 클릭한다.
  (영문 : Keychain Access menu > Certificate Assistant > Create a Certificate )

6. 인증서 생성을 클릭하면 아래와 같은 화면이 보인다.
  그곳에서 이름란에 반드시 "iPhone Developer" 라고 입력한다. (철자 틀림 주의)
  유형은 "자체 서명 루트", 기본값 무시 체크 를 한다. 그리고 계속 버튼을 클릭
  (영문 : 자체 서명 루트 == Self Signed Root)
7. 인증 정보란에는 
  다른 입력란은 Default로 입력되는 내용을 그대로 놔두고 
  인증 유형을 "코드 서명" 으로 변경하고 "계속"버튼을 누른다.
  (영문 : 코드서명 == Code Signing)
 8. 개인정보 란에는 그냥 그냥 적는다. (이름란에는 iPhone Developer... 이렇게 안적으면 어떻게 되는지 모름)
   그리고 인증서 생성 될때까지 완료 누른다.
아래와 같이 인증서 생성 완료~!!!


9. 프로젝트 디렉토리 안에 있는 Info.plist파일을 체크(수정)한다.
 만약 Info.plist파일안에
  CFBundleIdentifier 와 CFBundleName항목이 없다면 아래와 같이 추가한다. 또는 임의로 넣어주어도 된다.
 (아래 화면에서 잘 찾아서... 참고로 key와 string이 한쌍이다.)

10. 위 까지 한 후 빌드(Target : Device 2.2.1)를 하게 되면 아래와 같은 창이 뜨고 "허용"을 누르면 
   뭔가 에러가 나서 프로그램이 실행되지 않는다.
11. 그래서 방금 전 수정했던  Info.plist파일에 
  SignerIdentity란 키로 "Apple iPhone OS Application Signing"이란 값을 입력해 준다.

12. 이제 Build & Run(Go)를 누르면 실제 디바이스에서 동작하는 것을 확인 할 수 있을 것이다.
  (타겟을 iPhone 2.2.1로 설정)



우선 1차 목표는 끝냈고 문제는 어둠의 루트에서 흐르는 해킹된 어플파일 처럼 ipa파일로 만드는 방법이다.
(그래야 보관도 편하고 그러니깐... 일일이 ipod꼽고 Xcode켜고 빌드 해서 넣을 순 없잔아~)
ipa파일을 ipod에 넣는 방법은 인터넷에 많이 있으니깐 알아서... (~^_____^)~

1. 타켓을 만들어야 한다.
  과녁표시 아이콘이 그것인데 마우스 오른쪽 클릭 한 후 "Add > New Target" 을 클릭

2. 옆 메뉴 중에 Other 에 있는 Aggregate를 선택하여 Next를 클릭하자

3. Target Name은 적당히 지어주고 비록 프로젝트가 1개밖에 없지만
  현재 선택된 프로젝트가 내가 ipa로 만들고 싶은 프로젝트인지 확인한다. 그런 후 Finish클릭~

4.  Finish를 클릭하면 아래와 같은 팝업창이 뜨는 것을 확인 할 수 있다.
  당황하지 말고 상단 4개의 탭중 가장 왼쪽에 있는 Gerneral탭을 클릭한다.
5. Gerneral을 클릭하면 아래와 같은 화면이 뜨는데 Direct Dependencie...란 이름을 가진 리스트박스 바로 아래있는
  + 버튼을 눌러 프로젝트를 선택 하고 Add Target버튼을 클릭해 줍니다.
  (화면에 보이는 IPA라고 과녁표시는 무시해버리세요~ 테스트로 먼저 해본거라...)
 

  위 작업을 모두 하면 아래와 같은 화면을 볼 수 있습니다.


6. 스크립트 작성을 위해 방금 전에 만든 타겟에 마우스 오른쪽 버튼 클릭 한 후
  "Add > New Build Phase > New Run Script Build Phase" 를 클릭합니다.


7. 스크립트를 아래와 같이 작성 해 줍니다.
  참고로 띄어쓰기 조심~!!! ( if 와 [ 사이 공백 존재합니다..... 쉘스크립트 해본지 오래되서 공백안줘서 헤멘 1인)

   만약 ipa가 잘 만들어지지 않는다면 시험삼아 위에서 3번째줄까지 (if ~ fi ) 를 삭제하고 다시 해 보세요.

------------------------------------------------------------------------------------------------------
if [ $BUILD_STYLE != "AdHoc_Distribution" ]; then
exit
fi

# compress application.

/bin/mkdir $CONFIGURATION_BUILD_DIR/Payload
/bin/cp -R $CONFIGURATION_BUILD_DIR/프로젝트이름.app $CONFIGURATION_BUILD_DIR/Payload

cd $CONFIGURATION_BUILD_DIR

# zip up the Test Project
/usr/bin/zip -r 프로젝트이름.ipa Payload iTunesArtwork
------------------------------------------------------------------------------------------------------

8. ipa로 만들기 위해 아래와 같이 설정을 해 줍니다.

9. 빌드 하기 전 "Build > Clean"을 해 주는건 제 습관입니다.... 그냥 습관이에요~ ㅋㅋ
아무튼 빌드하게 되면 아래와 같이 ipa파일이 생성되는 것을 볼 수 있습니다.


글로 하자면 몇 줄 (약 20~30줄)안에 모두 설명가능한거지만
혹시 헤매고 있을 처음하시는 분을 위해 스크린샷으로 도배를 하였습니다.
(다들 알고 있는 것을 해 버린거 아닌가 모르겠네요...)

아무튼 경험상 처음하면 가장 고마운게 스크린샷으로 설명해 주시는 분이라 저도 스크린샷으로.. ^^;
이상 끝

돈없는 자취생은 하루하루 삽질해가며 이러고 있답니다. 쩝..... 

참고 URL
- 애플 개발자 사이트 : http://developer.apple.com
- 아이팟터치팬 : http://www.ipodtouchfans.com  (http://www.ipodtouchfans.com/forums/showthread.php?t=167311)
- http://www.hackint0sh.org/forum/f9/70075.htm
- http://www.iphonedevx.com/?p=59
- security 문제 해결 : http://isagoksu.com/2009/development/iphone/how-to-get-rid-of-security-policy-error/
 


출처 : http://blog.naver.com/PostView.nhn?blogId=baek2187&logNo=150067093058
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 8. 26. 07:57

[출처: 맥부기 카페 http://cafe.naver.com/mcbugi.cafe]

//----------------Arial 폰트군---------------------------

#define ArialFont0@"Arial"

#define ArialFont1@"Arial-ItalicMT"

#define ArialFont2@"Arial-BoldMT"

#define ArialFont3@"Arial-BoldItalicMT"

#define ArialFont4@"ArialRoundedMTBold"

#define ArialFont5@"ArialHebrew"

#define ArialFont6@"ArialHebrew-Bold"

#define ArialFont7@"ArialUnicodeMS"

//----------------AmericanTypewriter 폰트군---------------

#define AmericanFont0@"AmericanTypewriter"

#define AmericanFont1@"AmericanTypewriter-Bold"

//----------------AppleGothic 폰트군----------------------

#define AppleGothic0@"AppleGothic"

//----------------Courier 폰트군--------------------------

#define CourierFont0@"Courier"

#define CourierFont1@"Courier-Bold"

#define CourierFont2@"Courier-Oblique"

#define CourierFont3@"Courier-BoldOblique"

//----------------Courier New폰트군-----------------------

#define CourierNewFont0@"CourierNewPSMT"

#define CourierNewFont1@"CourierNewPS-ItalicMT"

#define CourierNewFont2@"CourierNewPS-BoldMT"

#define CourierNewFont3@"CourierNewPS-BoldItalicMT"

//----------------DB LCD Temp 폰트군----------------------

#define DBLCDFont0@"DBLCDTEmpBlack"

//----------------Geeza Pro 폰트군------------------------

#define GeezaFont0@"GeezaPro"

#define GeezaFont1@"GeezaPro-Bold"

//----------------Georgia 폰트군--------------------------

#define GeogiaFont0@"Geogia"

#define GeogiaFont1@"Geogia-Italic"

#define GeogiaFont2@"Geogia-Bold"

#define GeogiaFont3@"Geogia-BoldItalic"

//----------------Heiti J 폰트군--------------------------

#define HeitiJFont0@"STHeitiJ-Light"

#define HeitiJFont1@"STHeitiJ-Medium"

//----------------Heiti K 폰트군--------------------------

#defineHeitiKFont0@"STHeitiK-Light"

#defineHeitiKFont1@"STHeitiK-Medium"

//----------------Heiti SC 폰트군-------------------------

#defineHeitiSCFont0@"STHeitiSC-Light"

#define HeitiSCFont1@"STHeitiSC-Medium"

//----------------Heiti TC 폰트군-------------------------

#define HeitiTCFont0@"STHeitiTC-Light"

#define HeitiTCFont1@"STHeitiTC-Medium"

//----------------Helvetica 폰트군------------------------

#define HelveticaFont0@"Helvetica"

#define HelveticaFont1@"Helvetica-Oblique"

#define HelveticaFont2@"Helvetica-Bold"

#define HelveticaFont3@"Helvetica-BoldOblique"

//----------------Helvetica Neue 폰트군-------------------

#define HelveticaNFont0@"HelveticaNeue"

#define HelveticaNFont1@"HelveticaNeue-Bold"

//----------------Hiragino Kaku Gothic 폰트군-------------

#define HiraginoFont0@"HiraKakuProN-W3"

#define HiraginoFont1@"HiraKakuProN-W6"

//----------------Marker Felt 폰트군----------------------

#define MarkerFont0@"MarkerFelt-Thin"

//----------------Thonburi 폰트군-------------------------

#define ThonburiFont0@"Thonburi"

#define ThonburiFont1@"Thonburi-Bold"

//----------------Times New Roman 폰트군------------------

#define TimesFont0@"TimesNewRomanPSMT"

#define TimesFont1@"TimesNewRomanPS-ItalicMT"

#define TimesFont2@"TimesNewRomanPS-BoldMT"

#define TimesFont3@"TimesNewRomanPS-BoldItalicMT"

//----------------Trebuchet MS 폰트군---------------------

#define TreFont0@"TrebuchetMS"

#define TreFont1@"TrebuchetMS-Italic"

#define TreFont2@"TrebuchetMS-Bold"

#define TreFont3@"TrebuchetMS-BoldItalic"

//----------------Verdana 폰트군--------------------------

#define VerdanaFont0@"Verdana"

#define VerdanaFont1@"Verdana-Italic"

#define VerdanaFont2@"Verdana-Bold"

#defineVerdanaFont3@"Verdana-BoldItalic"

//----------------Zapfino 폰트군--------------------------

#define ZapfinoFont0@"Zapfino"



[출처: 맥부기 카페 http://cafe.naver.com/mcbugi.cafe]



출처 : http://blog.naver.com/PostView.nhn?blogId=baek2187&logNo=150071512733
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 8. 26. 07:57

[UIDevice currentDevice].model 이 아이팟인지, 아이폰인지.
[UIDevice currentDevice].systemName 에는 그냥 iPhone OS 라고 나오고..
[UIDevice currentDevice].systemVersion 이 펌 버전이 나오는 군요.


 

[출처: 맥부기 카페 http://cafe.naver.com/mcbugi.cafe]



출처 : http://blog.naver.com/PostView.nhn?blogId=baek2187&logNo=150071368720
Posted by 오늘마감

댓글을 달아 주세요

아이폰기본사용2010. 8. 26. 07:57

6월 19일 아이폰(iPhone) 3GS가 미국을 비롯한 유럽 몇 개국에서 정시 발매를 시작했습니다. 정식 출시되기 전에 이미 3GS 사진이 유출되기도 했었습니다. 그런데 이번에는 출시된 지 만 하루가 지나기도 전에 3GS 전체 분해 과정이 사진과 함께 자세히 올라왔습니다. 분해 과정 설명도 비교적 자세하게 잘 해 놓았습니다. 분해 과정을 설명해 놓은 곳은 Rapidrepair 라는 애플 제품 및 ZUNE, XBOX, 플레이스테이션, 닌텐도 전문 수리 사이트입니다. 영문 설명과 함께 보다 자세한 분해 과정을 보시려면 이곳 을 클릭해 주세요. ^^




#1 - LCD 스크린, #2 - 디지털 변환 장치, #3 - 이어(Ear) 스피커, #5 - 헤드폰 잭, #6 - 무선 
P.S. #3 번은 #1번과 #2번 아래에 숨어 있다. 



이것이 배터리입니다. 배터리의 지속 시간을 문제삼는 사람들이 많아서 크기가 많이 작을 줄 알았는데 생각보다 많이 작지는 않네요.  
배터리 정보는 다음과 같습니다. 
APN: 616-0434
VPN: APPLE-08-003-01(GG)
Li-ion Polymer Battery: 3.7V 4.51Whr


드디어 완전히 다 분해한 모습입니다. 

왼쪽이 3GS, 오른쪽이 3G 시스템 보드이다. 

사진만 봐도 엄청 복잡하네요. 저를 비롯한 보통 사람들은 분해 엄두도 못낼 정도로 복잡해 보입니다. 

CPU - Samsung
339S0073ARM
K2132C2P0-50-F
0N1480911
APL0298
N1TVY0Q 0919

NAND Flash Memory - Toshiba TH58NVG702ELA89
IA8816
TAIWAN
09209AE

System Memory - 337S3754
CMA
G0919
5Y9307885E4

Infineon - 36MY1EE
A9177314
Z171033B

iPhone 3G S                           Palm Pre CPU Samsung S5PC100 Texas Instruments OMAP 3430 ARM Cortex A8 600 MHz, PowerVR SGX graphics ARM Cortex A8 600MHZ, PowerVR SGX 530 (GPU), 430MHz C64x, DSP and ISP (Image Signal Processor) Baseband Processor Updating soon Qualcomm MSM6801A Storage Internal 16/32 GB Internal 8 GB Memory 256 MB RAM 256MB DDR2  LCD 3.5-inch 480-by-320-pixel at 163 ppi Multi-Touch display 3.1-inch 480-by-320-pixel Multi-Touch display Connectivity
UMTS/HSDPA (850, 1900, 2100 MHz)
UMTS/HSDPA (1900, 2100 MHz) GSM/EDGE (850, 900, 1800, 1900 MHz) GSM/EDGE (850, 900, 1800, 1900 MHz)


iPhone 2G iPhone 3G iPhone 3G S Palm Pre CPU Baseband Processor Storage Memory LCD Battery Connectivity Size Camera 
 


출처 : http://blog.naver.com/PostView.nhn?blogId=baek2187&logNo=150074791078
Posted by 오늘마감

댓글을 달아 주세요

아이폰기본사용2010. 8. 25. 08:27

 
중요한 부분은 굵은 글씨로 처리하였고, 스샷에 빨간색 네모박스처리하였습니다!

밑에 과정을 실행하기전에, 아이튠 계정에 로그인되어있는 계정을 꼭 '로그아웃' 해주시고 해주세요!

 우선, 가장 처음에 해야하는 것이 리딤코드든 프리앱이든~ 미국 아이튠스토어에 접근을 해야하는 겁니다. 보통 처음 아이튠을 시작하시는 분들이라면 아이튠스토어가 '한국'쪽으로 되어있기 때문에 '미국'으로 바꾸면서 바로 계정을 만드는 곳으로 가봅시다!

http://itunes.com/app/FingerPhysicsfree

위에 주소로 접속합니다!!


아마, 맥을 사용하시는 분들은 위와 같은 메세지가 뜨실 겁니다. '확인'을 누르시면 되는데, 윈도우도 바로 아이튠이 실행이 됩니다. 아이튠이 실행되면,  스토어 국가를 바꿀 거냐라는 메세지가 뜹니다 ' Change Store ' 를 클릭해주세요! 그럼 밑에와 같은 창이 뜹니다!

------------------------------------------------------------------------------------------------------------------------
혹시나 밑에와 같은 메세지가 뜨실 경우!



밑에 ''more...' 을 클릭하신 후 열어주셔서, 밑에 과정을 해주세요!
( 맥북프로에서는 잘 되는데, 집에있는 맥에서는 저런 메시지가 뜨네요. 바로 수정..)

아래 more 클릭

more...


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

다른 것은 신경쓰지 마시고, 바로 위에 GET APP 를 클릭을 합니다!!!

로그인 창이 떴습니다. '새로운 계정 생성' 을 클릭합시다.
위에 약관 동의에 체크해주시고, Continue 로 다음 단계로 넘어갑니다.


자 이제는 아이디를 만드는 페이지입니다.

Password : 비밀번호
Verify : 비밀번호 재입력

Question : who are you?
Answer : i'm a superman

-질문과 답은 마음대로 적으셔도 됩니다. 그냥 처음에 적기 애매하시는 분들을 위해 제가 적어놓은거니;; 원하시는 것으로 하세요.


 자 무슨 신용카드가 어쩌구 보통 어려워 하시는 분들이 이 곳에서 헤매시는데, 제가 하라는 대로만 하시면 문제 없이 될 겁니다.

Creadit Card : 무조건 None 입니다. 혹시 나중에 결제 하실 분이시라도 갖고 계신 것이 미국에서 만든 신용카드가 아니시라면, 역시  None 을 입력해주세요! 한국에서 만든 Visa 나 Master 신용카드 정보 입력은 홍콩계정에서 입력하셔야 합니다. 여기선 한국카드 안됩니다!! 이건 뒷 부분에서 다루겠습니다.

Salutaion : 자신의 성별 및 결혼을 했는지 안했는지 확인하는 곳입니다. 명칭은 초등학교이상 제대로 나오셨다면, 다 아시는 부분이니 패스하겠습니다. 저는 미혼의 남성이라 Mr. 로 하였습니다.

First Name : 자신의 영문이름
Last Name : 자신의 영문 성

Address : 1 infinite loop
City : Cupertino
State : CA
Zip code : 95014
Phone : 000 0000000 (앞자리 3개, 뒷자리 7개)

주소는 애플의 미국주소입니다^^
안 보이시는 분들을 위해 주소부분 스샷

자 모두 입력하셨으면, Continue!!! 


페이지에서 done 을 클릭하시면 일단 성공입니다! 다음으로 자신이 위에 적어놓은 이메일 계정에 접속 해주세요!


계정을 활성화하기위해 자신의 이메일의 받은편지함으로 이동해주세요! 그럼 iTunes Store 에서 보낸 메일이 하나 있을겁니다. 거기서 내용에 파란글씨의 링크가 있을거에요. 클릭하시면! 계정 활성화 완료입니다!

모두모두 완료!!! 그 계정 쓰시면 되구요! 결제가 필요없으신 분은 이 곳까지 보시면 됩니다.

---------------------------------------------------------------------------------------------------------
추가로 '카드정보' 도 입력해주시고 싶으신 분들은 다음 과정을 봐주세요!

먼저, 아까 만드신 계정으로 '로그인' 을 해주세요.


그럼, 위와 같은 화면이 뜹니다. 오른쪽 상단에 자신의 아이디(이메일)을 클릭합니다. 그러면, Accoount Redeem wish list 등등의 메뉴가 뜨는데 Account 를 클릭해줍니다!


 국가를 홍콩으로 변경해주는 작업을 해야합니다. 미국계정에서의 카드입력은 주소 불일치로 되지가 않기 때문에 홍콩에서 입력합니다. Change country 를 클릭해주세요.


다음 화면에서 Select a coutry or region 부분에서 Hong Kong 을 선택하고 Change Country 를 클릭해줍니다.


그러면, 아까 미국계정 등록할 때와 마찬가지로 약관에 '동의' 하는 페이지가 나오는데 역시 체크하고 다음 페이지로 넘어가면 카드정보 입력할 수 있는 페이지가 나옵니다.


자, 여기서는 결제하고자하는 카드의 정보를 입력해주시면 됩니다. 이름과 주소도 한국주소에 맞게 변경하셔도 됩니다. 어차피 도시와 주는 미국주소로 되어있기 때문에 상관이 없습니다.

위에 과정을 마치시면 일단 카드정보 입력은 끝나구요. p.s : 잘쓰시다가 어느 순간부터 zip code 다 뭐다 막히시는 분들은 미국계정에서 카드정보를 다시 none 으로 해놓고, 위에 홍콩계정에서 카드정보입력 다시 하고~ 미국으로 넘어가는 것을 한번 더 반복하시면 됩니다~ 좀 귀찮은 일이지만.. 쓸 방법은 이것 뿐이네요. 저도 한 번 막혔는데 계정유지한상태에서 해보니 다시 되네요^^

 


출처 : http://blog.naver.com/PostView.nhn?blogId=baek2187&logNo=150075696337
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 8. 24. 09:32

Application 안에 특정 Application 에 대한 AppStore 링크를 넣을 필요가 있는 경우가 있습니다.


그래서, 사용자가 프로그램에서 특정 버튼을 터치 하면 응용 프로그램이 종료되면서
iPhone /iPod Touch 안의 AppStore 프로그램이 실행되고, 곧장 정해진 프로그램의 페이지로 이동됩니다.

예를 들어, 가장 쉽게 생각할 수 있는 경우로 Full Version - Lite Version 의 두 가지 버전을 릴리즈해서 운영하는 경우를 생각해 볼 수 있겠습니다.
이 경우, 무료로 배포되는 Lite 버전(즉, Free 버전)안에서 어떤 동작을 하면 유료 버전을 구입할 수 있는 앱스토어 페이지가 나타나도록 하면 좋을 것입니다. 물론, 현재는 무료 버전 안에서도 유료 구매가 가능하도록 '프로그램 안에서 구매' 기능이 허용되고 있지만, 각각의 방식에는 장단점이 있는 듯 합니다. 아직 많은 사람들이 가장 전통적인 방법에 속하는 유료/무료 따로 릴리즈 방식을 사용하고 있습니다.


그렇다면, iPhone 프로그램 안에서 앱스토어 링크를 넣는 방법은? 간단히 하자면, 데스크탑에서 iTunes 를 실행한 후 원하는 프로그램의 링크를 얻어서 붙여 넣으면 됩니다. 이 경우 링크는 다음과 같은 형태가 됩니다.


그래서 이것을 사용해서 다음과 같은 코드를 삽입하겠지요.

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://itunes.apple.com/kr/app/funny-cartoon-face/id333209093?mt=8"]];



그런데, 이것은 동작은 하지만, 몇 가지 문제가 있습니다.

첫째로, http 프로토콜을 사용한다는 것입니다. 따라서, iPhone 에서 실제 테스트를 해 보면, 사파리 브라우저가 실행된 다음, 몇 단계의 리다이렉션이 수행되고, 다시 브라우저가 자동 종료되면서 AppStore 가 실행됩니다.
분명 사용자들이 짜증날 것입니다.

두 번째로, 이것은 심각한 문제인데, 바로 주소 안에 '국가 정보'가 들어가 있다는 것입니다. 위에서 예로 들은 URL 안에도 'kr' 이라는 경로명이 있어서, 한국 스토어로 지정되어 있습니다.
그래서, 이 URL은 한국 앱스토어 계정으로 사용하고 있는 사용자들에게는 아무 문제가 없지만, 그 이외의 사용자들은 다른 나라 계정으로 바꾸라는 에러 메시지가 나타나게 됩니다.

하나의 프로그램으로 전 세계 사람들이 다운로드 받아서 사용하는데, 그 안에 내포된 링크는 특정 국가용 AppStore 링크만 넣을 수 있다는 것은 큰 문제가 됩니다. 사용자의 국가 설정을 일일이 확인해서 적당한 링크로 바꾸자면? 생각만 해도 끔찍하군요.




그러면, 먼저 두 번째 문제의 해결책부터 알아봅시다.

애플에서는 앱스토어 링크를 보다 사람이 기억하기 쉬운 형태의 URL을 사용할 수 있도록 지원하고 있습니다. 예를 들어, 위의 링크는 아래의 링크로 대체할 수 있습니다.


프로그램의 이름만으로 쉽게 기억할 수 있는 URL 입니다. 게다가 더 좋은 점은!!  바로 URL 안에 국가를 지정하는 경로명이 없다는 것입니다. 이 하나의 URL 만으로 각 사용자가 가지고 있는 계정에 따라 해당 국가의 스토어 안에서 프로그램을 찾아가게 됩니다.
이 URL 은 따로 신청해서 만들거나 하는 절차가 필요 없습니다. 앱스토어에 등록된 프로그램은 모두 이같은 형태의 URL을 사용할 수 있습니다. 단, 프로그램의 이름이 영문자가 아닌 한글이나, 특수 문자가 들어간 경우에 대해서는 어떻게 사용하는지 아직 찾지 못했습니다.


첫 번째 문제의 해결책으로 돌아가 보겠습니다.

이것도 간단합니다. iPhone Application 안에서 앱스토어 링크를 사용하는 경우, http 프로토콜을 사용하지 말고 다른 것을 사용하면 됩니다. 바로 http:// 대신에itms://itunes.com/app/FunnyCartoonFace

itms:// 을 사용하면 사파리 브라우저를 거치지 않고 곧장 AppStore 가 실행될 것입니다. 깔끔합니다.
 


출처 : http://blog.naver.com/PostView.nhn?blogId=baek2187&logNo=150079506777
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 8. 24. 09:32

 
공부를 하다 보면 책에 나오는 간단 간단한 소스가 아닌 전체 프로그램에 대한 소스를 보고 싶어질 때가 있습니다.
그래서 자료를 찾아 보았습니다. 참고하세요.

<트위터 클라이언트>
http://github.com/blog/329-natsuliphone-iphone-twitter-client
http://code.google.com/p/tweetero/
http://github.com/facebook/three20
http://code.google.com/p/iphoneebooks/
http://iphone.wordpress.org/
http://www.funambol.com/solutions/iphone.php
http://code.google.com/p/cocos2d-iphone/
http://code.google.com/p/mintgostop/  (고스톱)
http://www.joystiq.com/2009/03/24/carmack-releases-open-source-wolfenstein-for-iphone/
http://kldp.net/projects/taekbae/src
http://www.iphonear.org/
http://apparentlogic.com/openflow/
http://www.codingventures.com/2008/12/useful-open-source-libraries-for-iphone-development/
http://open.iphonedev.com/
http://joehewitt.com/post/the-three20-project/
 


출처 : http://blog.naver.com/PostView.nhn?blogId=baek2187&logNo=150079874332
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 8. 24. 09:32
[펌] NSDate를 여러가지 형태로 변환하기

http://b4you.net/blog/231]

NSDate를 사용하다 보면 unix timestamp형식으로 바꾼다던가, 년/월/일 정보를 가져온다던가 기타 등등 기능이 필요할 때가 있습니다.

그냥 NSDate에서 다 지원해주면 좋겠지만.. 안타깝게 그러진 않네요 -ㅁ-;

NSDate를 다른 형태의 데이터로 변환하는 방법을 정리 해 보았습니다.

1. NSDate to unix timestamp
NSDate의 timeIntervalSince1970를 이용하시면 됩니다.
예: 현재의 시간을 unix timestamp로 변환하기

int timestamp =[[NSDate date] timeIntervalSince1970];


2. unix timestamp to NSDate
NSDate의 dateWithTimeIntervalSince1970:를 이용하시면 됩니다.
예: 2009-06-26 10:51:39의 unix timestamp를 NSDate로 변환하기
NSDate*date =[NSDate dateWithTimeIntervalSince1970:1245981099];


3. NSDate to date component
이건 좀 복잡한데.. 년/월/일 시/분/초 를 구할 때 사용합니다. NSCalendar와 NSDateComponents를 이용하여 구합니다.
예: 2009-06-26 10:51:39의 unix timestamp로 NSDate객체 생성한 뒤 해당 객체를 년/월/일 시/분/초 로 분할하여 표시하기
NSDate*date;NSDateComponents*com;     date =[NSDate dateWithTimeIntervalSince1970:1245980099]; com =[[NSCalendar currentCalendar] components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit) fromDate:date];


4. date component to NSDate
년/월/일 시/분/초 로 부터 NSDate객체를 생성할 때 사용합니다. 마찬가지로 NSCalendar를 이용합니다.
예: 2009-06-26 10:51:39 시간을 가리키는 NSDate객체 생성하기
NSDate*date;NSDateComponents*com;NSDateFormatter*formatter; com =[[NSDateComponents alloc] init];[com setYear:2009];[com setMonth:6];[com setDay:26];[com setHour:10];[com setMinute:51];[com setSecond:39]; date =[[NSCalendar currentCalendar] dateFromComponents:com]; formatter =[[NSDateFormatter alloc] init];[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];NSLog(@"%@",[formatter stringFromDate:date]);[formatter release];[com release];
[출처: http://b4you.net/blog/231]


출처 : http://blog.naver.com/PostView.nhn?blogId=baek2187&logNo=150080586541
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 8. 23. 09:37
[펌] 쓰레드 기초

아아폰에서 모든 어플리케이션은 기본적으로 하나의 쓰레드를 가지고 있다. 이 쓰레드는 UIApplication 클래스에서 자동으로 생성하며 프로그램의 메인 룹이 이곳에서 실행된다. 하지만 어떤 작업이 그 작업을 마치는데 너무 오랜 시간이 걸린다면 그 작업을 새로은 쓰레드로 만들어서 실행하는 것이 좋다. 메인 쓰레드는 기본적으로 사용자와 상호 작용을 해야하는데, 어떤 작업이 시간을 너무 소모하면 사용자가 프로그램이 멈춘 것으로 오해 할 수 있다.

아이폰 OS 에서 쓰레드는 리눅스와 유닉스에서 지원하는 POSIX 쓰레드를 그대로 이용할 수 있다. 또한 코코아 터치 프레임워크 자체에서도 NSThread 라는 클래스를 이용해서 쓰레드를 좀 더 편리하게 생성할 수 있게 해 준다. 만약 이미 POSIX 로 작성된 코드를 가지고 있는 경우라면 새롭게 NSThread로 포팅하지 않고 바로 사용하는 것이 좋을 것이다.

이제 부터 코코아 터치가 제공하는 쓰레드 기능을 하나씩 구현해 보도록하자. POSIX 쓰레드는 이책에서는 따로 설명하지 않겠다.

* 쓰레드 생성하기

먼저 NSThread 객체를 이용해서 쓰레드를 생성해 보자. 다음은 NSThread 의 클래스 메서드를 이용하는 방법이다.

01: [NSThread
02: detachNewThreadSelector:@selector(threadFunc:)
03: toTarget:self
04: withObject:nil
05: ];

detachNewThreadSelector 메서드는 지정한 객체의 메서드를 이용해서 새로운 쓰레드를 생성해 준다. 위 코드에서 생성된 쓰레드는 바로 실행을 시작한다. 다음은 쓰레드를 생성하는 다른 방법이다.

01: NSThread* myThread = [[NSThread alloc]
02: initWithTarget:self
03: selector:@selector(threadFunc:)
04: object:nil
05: ];
06: [myThread start];

위 코드는 alloc, init 으로 생성을 먼저 한 후에 실행은 나중에 start 메서드를 호출할때 하도록 할 수 있다.

마지막으로 NSObject 를 이용해서 쓰레드를 생성하는 방법도 있다.

01: [objectA
02: performSelectorInBackground:@selector(doSomething)
03: withObject:myName];

 

* 쓰레드 메서드 구현하기

쓰레드에서 실행될 메서드는 다음과 같이 정의한다. 전달되는 인자는 쓰레드를 생성할 때 설정했던 object 가 넘어온다.

01: - (void)doSomething:(NSString*)name {
02: NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
03:
04: // 작업
05:
06: [pool release];
07: }

오토릴리즈(autoreleae) 풀은 객체 중에서 autorelease 메서드를 호출해서 생성된 객체들을 관리한다. 오토릴리즈 풀을 생성하면 그 이후로 생성되는 모든 autorelease 객체를 마지막에 생성된 오토릴리즈 풀 객체가 관리한다. 그리고 오토릴리즈 풀을 해제(release) 하면 이때 모든 오토릴리즈 객체도 같이 해제된다.

모든 쓰레드는 자신만의 오토릴리즈 스택을 관리하기 때문에, 쓰레드를 생성한 후 반드시 오토릴리즈 풀을 생성해야 한다.

* 런 루프

런 루프는 쓰레드가 외부와 통신하기 위해서 존재한다. 런 루프는 자신(쓰레드)에게 전달된 이벤트가 있는지를 검사하고, 만약 존재하는 경우 알맞은 메서드를 호출해 준다. 런 루프가 처리하는 이벤트는 크게 두가지가 있다.

• 입력 소스
    • performSelector:: 계열의 메서드를 호출해서 지정한 셀렉터를 실행시켜달라는 외부의 요청.
• 타이머
    • 타이머를 생성하면 그 타이머는 코드가 실행된 쓰레드의 런 루프에 소속된다. 런 루프는 타이머중에서 지정한 시간이 경과한 것들을 검사해서 메서드를 호출해 준다.

다음 코드를 보자.

01: if ( tapCount == 2) {
02: // 5개 모두 보여주자.
03: [self performSelector:@selector(showAllCircles) withObject:nil afterDelay:0.3];
04: NSLog(@"Scheduled");
05: }
06: ... 생략 ...
07: if (tapCount > 2) {
08: [UIView cancelPreviousPerformRequestsWithTarget:self];
09: NSLog(@"Cancelled");
10: }

이때 이미 쓰레드에 입력 소스를 추가하는 작업을 구현한 것이다. performSelector:withObject:afterDelay 메서드를 호출하면 현재 쓰레드의 런 루프에 입력 소스로써 등록이 된다. 그리고 런 루프가 실행될 때 자신에게 등록된 모든 입력 소스를 검사해서 조건이 만족되는 (여기서는 0.3초 경과) 경우 해당 메서드를 호출(예제에서는 showAllCircles)해 주는 것이다.

만약 스스로 쓰레드를 생성했다면 런 루프가 자동으로 실행되지는 않는다. 그래서 자신의 쓰레드 함수에서 직접 런 루프를 실행시켜서 주기적으로 외부의 이벤트에 대응할 수 있도록 만들어야 한다. 하지만 쓰레드가 하나의 작업만 수행하고 종료되는 경우라면 반드시 필요하지는 않다. 하지만 무한 루프를 돌면서 지속적으로 상호작용이 필요한 쓰레드라면 반드시 런 루프를 실행해 주도록 하자.

01: - (void)doSomething:(NSString*)name {
02: NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
03:
04: NSRunLoop* myRunLoop = [NSRunLoop currentRunLoop];
05: BOOL stop=NO;
06:
07: while(!stop) {
08: // 작업
09: [myRunLoop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]];
10: }
11:
12: [pool release];
13: }

4행에서 현재 쓰레드의 런 루프를 얻어온다. 그리고 9행에서 런 루프를 실행시킨다. 이 때 runIntilDate 메서드는 지정한 시간까지 런 루프를 실행시켜 준다. 하지만 런 루프가 아무런 할 일이 없다면 바로 종료된다.

* 쓰레드의 대안

쓰레드를 생성하는 코드를 직접 작성하지 않고도 간접적으로 쓰레드를 생성하게 할 수 있다. 이때 NSInvocationOperation 객체를 이용한다.

01: NSInvocationOperation* op =
02: [[[NSInvocationOperation alloc]
03: initWithTarget:self
04: selector:@selector(myMethod:) object:data] autorelease];

위 코드는 NSInvocationOperation 객체를 생성해 준다. 다음으로 할 일은 동작을 시작시키는 일이다.

01: NSOperationQueue* queue = [[NSOperationQueue alloc] init];
02: [queue setMaxConcurrentOperationCount:1];
03: [queue addOperation:op];

위 코드와 같이 NSOperatonQueue 객체를 생성하고 그 객체에 작업을 등록해 주면 된다.

[출처: http://maclove.pe.kr/30]



출처 : http://blog.naver.com/PostView.nhn?blogId=baek2187&logNo=150059860556
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 8. 23. 09:36
[펌] 개발 완료, App Store에 올리기
개발 완료, App Store에 올리기
 
 
키체인에 배포용 키가 설치되어 있어야 합니다 (http://cafe.naver.com/mcbugi/8953)

먼저 개발자 포탈 사이트에서 배포용 프로비션 프로파일을 만듭니다.

물론 미리 App ID는 만들어 둡니다. (http://cafe.naver.com/mcbugi/8964)

포탈 메뉴에서 Provisioning 메뉴로 들어가서 Distribution 탭으로 들어갑니다.


New Profile을 클릭해서 새로 하나 만듭니다.

올리는 어플 하나당 프로파일이 하나씩 필요합니다.

Profile Name에 어플 이름을 적고

AppID 에서 만든 앱 아이디를 선택합니다

그리고 Submit을 클릭해서 완료합니다


잠시 기다렸다가 새로고침해서 만들어진 프로파일을 다운로드 합니다.


다운 받은 프로파일을 실행해서 설치합니다.

여기까지는 애드훅 설치법과 비슷합니다. (http://cafe.naver.com/mcbugi/9042)


이제 xCode에서 배포할 어플 프로젝트를 엽니다.

info.plist 파일에서 Bundle identifier항목에 만든 AppID를 동일하게 씁니다.



새파일 만들기로 Entitlements.plist파일을 만듭니다.
Adhoc에서는 내용에서 채크를 뺏지만 여기서는 그냥 놔둡니다.





이번에는 프로젝트 설정으로 갑니다. (프로젝트 부분 더블 클릭)

Configurations탭에서 Release를 선택한후 하단에 Duplicate를 클릭합니다.


그리고 새로 만들어진 것을 Distribution으로 이름을 바꿔줍니다


Build탭으로 갑니다

Configuration항목을 Distribution으로 바꾼뒤 Code Signing부분을 봅니다


먼저 Code Signing Entitlements를 수정합니다

아까 만든 파일명을 그대로 적어줍니다
 


Code Signing Identity와 바로 아래 두곳을 맞는 AppID에 찾아서 선택합니다


보통 iPhone Distribution: 이름 및 회사명으로 되어 있습니다



빌드 메뉴에서 Device로 선택하고 버전을 맞춘뒤 항목을 Distribution으로 맞춥니다


CMD + B나 빌드 메뉴에 빌드로 빌드해줍니다.


그럼 Products에 어플.app가 있는것을 볼수 있습니다

항목을 오른쪽 클릭해서 나오는 메뉴에서 Reveal in Finder명령으로 해당 파일의 위치를 엽니다



파인더에서 파일이 두개가 보입니다.


dSYM은 빼고  해당 어플만 압축합니다..




여기까지 파일 준비는 되었습니다



이제는 아이튠스 코넥트에서 올릴 어플 정보를 씁니다

아이튠스 코넥트로 들어갑니다 (https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa)


Manage Your Applications 항목으로 갑니다

 Add New Applicatioin메뉴를 클릭해서 새로 어플 추가를 합니다


어플의 암호화 관련 질문입니다 NO로 하고 다음으로 넘어갑니다



Application Name: 올릴 어플의 이름입니다.
Application Description: 설명을 적습니다
Device Requirements: 지원 기기입니다. iPhone and iPod Touch가 모든 기기 지원이라 보면 됩니다.
다음 두개는 카테고리 선택입니다. 

Copyright은 적당히 저작권 정보를 씁니다 예) smoon.kr 2009 등등;;;

Version Number: 버전 번호 입니다 보통 1.0

SKU Number: 자세히는 모르지만 지신이 구별할 어플 실별 코드라고 보면 됩니다. 전 보통 AppID를 사용합니다

Keywords 검색어 입니다 (전엔 없었는데;;;)

Application URL: 어플 소개 홈피 주소입니다.
Support URL: AS를 위한 사이트 주소입니다
다음은 연락처 이멜 주소입니다

Demo Account: 어플의 종류에 따라서 로그인 인증이 필요한 것도 있습니다.  이럴경우 미리 만들어서 적어줘야 합니다. 심사의원이 따로 가입까지는 안합니다;;; 게임의 경우 테스트용도의 아이디를 대줘야 합니다.

다음  하단의 Continue를 클릭해서 넘어갑니다


등급 설정입니다. 거의 게임이나 폭력성 어플에 해당합니다
적당히 판단하에 선택합니다

다음으로 넘어가면 파일 올리기입니다


Application에 아까 만들어둔 압축파일을 올립니다. 올리는데 시간이 좀 걸리고
다 올라가면 검사도 하기 때문에 에러가 날경우 어딘가 인증 작업을 잘못 했거나 아이콘이 규격에 안맞거나 등등 
원인을 메세지를 알려줍니다.

Large 512...는 대형 아이콘 파일입니다.  JPEG형식에 크기 512 픽셀 정사각형의 이미지를 준비해서 올립니다.
앱스토어에 뜨는 아이콘은 이 파일입니다. 실제 앱 아이콘과 전혀 틀리면 리젝의 원인이 되기도 합니다.

Primary Screenshot 기본 스샷입니다 JPEG로 320 x 480크기만 됩니다

나머지는 추가 스샷으로 기본 스샷과 같은 조건이면 최대 4개 까지 올릴수 있습니다

다 올리면 다음으로 넘어갑니다


가격 설정입니다.

원하는 가격을 설정후 앱스토어에 올라갈 날자를 정합니다 보통 일주일에서 10일 정도 걸리 대충 그 이후로 정합니다.


언어 선택입니다. 그냥 넘어갑니다.

(너무 대충;;;)
마지막으로 적은 정보를 확인뒤 Submit Application을 클릭해서 완료 합니다


그러면 스샷에서는 Ready for Sale이라 뜨지만;;;
in Review라고 뜰것입니다.
 


출처 : http://blog.naver.com/PostView.nhn?blogId=baek2187&logNo=150079423102
Posted by 오늘마감

댓글을 달아 주세요