작년 1월에 소개했던  2010/01/24 - 내가 쓰는 아이폰 앱 #1 이후로 1년만에 포스팅하는 앱 관련 이야기 입니다. 지난 포스팅을 돌아보니 아이폰이 국내에 들어온지 1년이 넘은 지금, 그 이후로 굉장히 좋은 앱들이 많이 나온것을 느끼고 있습니다. 게다가 아이패드까지 나오게 되면서 국내에도 앱들이 홍수처럼 쏟아지고 있지요.

그런 와중에 사용자에 의해서 좋은 앱들이 가려지고 있습니다. 사용자들 본인들이 아이폰을 사용하는 용도가 모두 틀리기 때문에 각각 많이 쓰는 앱들이 차이가 날 수 있겠지만, 이런 기회에 다른 사람들은 어떤 앱을 많이 쓰고 있는지 알아보는것도 괜찮겠지요?

이번 포스팅은 그런 의미에서 제가 요즘들어 가장 많이 쓰는 앱들 10개를 뽑아본것입니다. :)

그럼 한번 알아볼까요?


#1. Seoul Bus 2


아이폰 필수 앱이죠? 요즘 버스 정류장엔 버스 오기 10분전부터 사람들이 붐빈다고 합니다. 스마트폰에서 버스시간 미리 보고서 시간 맞춰 나온다는거 같아요. :) 이 앱 덕분에 회사에서 퇴근할때도 버스시간 맞춰서 나가고 추운 겨울에는 버스 정류장에서 버스 올때까지 벌벌 떠는 일도 줄어 들었지요. 항상 정확한건 아니라서 약 3~4분 정도의 여유를 두고 정류장에 도착하는게 안전합니다. :)





#2. 지하철


지하철 노선도 앱입니다. 작년 포스팅에서는 iKorway 를 사용하고 있었는데, 업데이트도 중단되고 유료였지만 이앱은 무료에다가 아이패드/아이폰 유니버셜 앱이라서 한번 아이튠즈에 설치하면 아이폰/아이패드에서 동시에 설치가 가능합니다. 지도 해상도가 높아서 용량이 꽤 됩니다만 그만큼 값어치를 합니다. :)







#3. 다음지도


여전히 가장 많이 사용하는 지도앱입니다. 작년 포스팅에도 들어 있네요. :) 요즘엔 네이버지도가 많이 따라 왔는데 여전히 다음지도가 지도는 최고인거 같아요. 가끔 서버에 문제가 있는지 느릴때가 있는데, 그럴때는 서브로 네이버 지도를 사용합니다. 사실 호불호가 갈리는 앱이라 딱히 뭐가 더 좋다라고는 말 할 수 없네요.







#4. Things


할일 관리 앱입니다. 아이폰/아이패드 용으로 따로 나와 있구요. 맥을 사용하신다면 맥용 프로그램으로도 나와 있습니다. GTD Tool 로는 꽤 유명한 앱이고 맥용 프로그램과 싱크가 되어서 할일 관리하는데 탁월한 효과를 발휘 합니다. 유료로 지른 후에는 다른 Todo 앱은 사용하지 않게 되네요. :)






#5. me2day


아이폰 사용하시면서 가장큰 변화는 SNS 에 발을 들여 놓게 되는것이지요. 언제 어디서나 접속해서 확인하고 관리하고 싶은 SNS 의 특성상 스마트폰은 최적의 도구라고 할 수 있습니다. 따라서 각종 SNS 앱들이 나와 있습니다. 우리나라에는 토종 SNS 인 me2day 가 있는데, 제가 me2day 를 사용하고 있는지라 하루에도 몇번씩 실행하는 앱입니다. 참고로 제 me2day 주소는 여기 입니다. 친신해 주세요. :)





#6. 네이버웹툰


시간죽이기 끝판왕격인 앱입니다. 만화를 보려고 실행해서 하나 제대로 걸리면 시간가는줄 모릅니다. 화장실갈때 가장 유용하게 쓰이구요. 잠깐 시간 보낼때 SNS 와 더불어서 가장 손이 많이 가는 앱입니다. 제가 가장 챙겨보는 만화는 '노블레스'! 안보신 분들은 한번 챙겨 보시길. :)






#7. 카카오톡


메세징앱으로 국내 점유율 1위를 달리고 있는앱입니다. 약관 문제라던가 최근 업데이트에서 일부 사용자들에게서 친>구목록이 다 날라가는등 사건사고가 좀 있어서 일부 사용자들이 이탈하는 현상도 있었지만 여전히 가장 많은 사용자>들이 사용하는 메세징앱입니다. 사실 이런류의 메신저툴들은 친구들에 의해서 사용이 결정되곤 하는데 저역시도 대부분의 친구들이 카카오톡을 사용하는 덕에 옮길래야 옮길수가 없네요. :) MSN 메신저가 NateOn 메신저를 이길수 없는 이유이기도 하죠? ㅋㅋ




#8. 카카오아지트


카카오톡을 만든 회사에서 만든 폐쇄형 동아리 서비스(?)의 앱버전 입니다. 지금 다니고 있는 회사에서 회사내 협업>을 카카오아지트를 통해서 하고 있어서 처음 사용해 봤습니다. 나름 완성도 있게 잘 만들어져 있어서 비슷한 툴이 필요한 사람들에게 권하고 있습니다. 각종 자료와 게시물들을 공유하고 끼리끼리 노는데 카키오아지트 만한 툴도 없는>거 같습니다.





#9. TiltShift Generator


나온지 한참 됐는데, 여전히 제일 자주 사용하는 사진 보정 툴 입니다. 미투데이에 올리는 거의 모든 사진은 이 툴을 통해 한번 보정을 한 후에 올립니다. 간편한 조작으로 굉장히 훌륭한 결과물을 만들어줍니다. 사진과 관련한 여러가지 앱들이 있지만, 아직 이 앱이 제겐 최고의 툴로 자리잡고 있습니다.






#10. 웨더스타


매일 아침 실행하는 앱입니다. 오늘의 날씨를 알아보는 앱이지요. 우리나라 기상청 정보를 실시간으로 받아와서 제공해 주는 앱입니다. 우리나라 기상청 예보가 잘 틀리긴 하지만, 그래도 믿을만한곳은 기상청밖에 없지요.;; 여러가지 모드로 날씨정보를 제공해서 굉장히 편리하게 사용할 수 있습니다.






이상입니다. 도움이 되셨나요? 이미 너무나도 유명한 앱들이라 신선한것을 원하셨던 분들은 약간 김빠지실수도 있겠어요. 다음에 기회가 되면 재미있었던 앱들만 소개하는 포스팅을 해도 재미있을꺼 같네요. :) 



블로그 이미지

하루하루

하루하루를 열심히 살아가는 그런 사람이 되고자 합니다. 오늘을 후회없이 말이지요.

,

아마도 아이폰 개발을 하면서 제일 먼저 하게 되는것은 아마도 UIViewController 의 life cycle 을 이해하는 것일 것입니다. UIViewController 을 만들어 낼때는 두가지 방법이 있습니다. IB 를 이용해서 xib 를 만들어서 하는 방법과, 그냥 IB 를 이용하지 않고 (xib 없이) 오로지 코딩을 통해서만 하는 방법입니다. 이러한 두가지 방법중 어떤 방법을 사용하더라도 UIViewController 의 life cycle 을 이해 하는것은 굉장히 중요합니다. 언제 어느 시점에 적절한 뷰 생성과, 배치 , 해제를 해줘야 할지 알아야 하기 때문이지요. 

UIViewController 의 life cycle 은 나름대로 이해하기 굉장히 쉽습니다. 컨트롤러가 가지고 있는 메소드의 이름들은 그저 이름만 봐도 이해를 할 수 있게 쉽고 동작에 맞는 이름들로 되어 있고, 그 구조 또한 간단하기 때문입니다. 

하지만, 딱 하나의 메소드인 viewDidUnload 만은 이해하기 참 힘들었습니다. 굉장히 간단하고, 평범한 메소드 입니다. 그 뜻은 컨트롤러의 뷰가 내려갈때 불리는 함수 입니다. 근데 이것이 참 애매하기 짝이 없습니다. 

뷰가 내려갈때란 어떤때를 말하는 것일까요? Controller 가 dealloc 될때 일까요? 저도 처음엔 컨트롤러가 해제될때 dealloc 되면서 뷰가 내려갈테니까 viewDidUnload 가 불리는줄 알았습니다. 하지만, 절대로 불리지 않더군요. 그저 dealloc 만 로그창에 찍고 있을 뿐이었습니다. 그래서 좀더 세심하게 수많은 문서를 보고 구글링을 해보았지만, 돌아오는 답변은, 거의 두가지로 압축이 되더군요. 

첫째. viewController 의 view 가 nil 로 세팅될때 불리는 함수이다. 
둘째. 메모리 워닝이 통지 될때 (시스템의 메모리 워닝은 UIViewController 에게 Notification을 줍니다.) 가려진 뷰를 가지고 있는 컨틀롤러의 viewDidUnload 가 불린다.

하지만, 여전히 불리는 시점이 명확하지 않았고, 사용되지 않는다는것이 굉장히 애매했습니다. 

그래서 샘플 코드를 작성해 보았습니다.


  1. View Base 로 프로젝트를 하나 만듭니다.
  2. UIViewController 2개를 만듭니다.
    1. RedViewController , BlueViewController
    2. 각 컨트롤러의 뷰의 색깔을 빨강과 파랑으로 만들어 줍니다.
  3. 새로 만든 두개의 컨트롤러의 뷰를 기본 base view 에 차례대로 붙입니다.
  4. base view 하단 에는 red button, blue button 을 만들어서 각 버튼을 눌렀을때 각 버튼에 맞는 뷰가 보이도록 코딩 합니다.
    1. 이때 사용할 방법이 두가지가 있습니다. 첫째는 각 뷰의 hidden 프로퍼티를 사용하여 보여질 뷰에만 NO 를 세팅하고, 감춰질 뷰는 YES 를 세팅하는 방법.
    2. 두번째가 감춰질 뷰는 removeFromSuperview 메세지를 보내 base view 에서 떼어냈다가 보여질 시점에 다시 addSubview or insertview 하는 방법.
  5. 그리고, 시뮬레이터에서 가상으로 memory warning 을 발생시키도록 합니다.


위 순서중에 4번을 눈여겨 보시기 바랍니다. 4번의 방법중에 , 첫번째 방법으로 구현하고 5번을 실행할때와, 두번째 방법으로 구현하고 5번을 실행할때 중 어떤 방법으로 구현했을때 viewDidUnload 가 발생하게 될까요?

네. 결론은 두번째 방법으로 구현했을 경우 입니다. 즉, 현재 뷰에서 보여주지 않을 뷰는 (필요하지 않은 뷰는) 구지 super view 에 붙여 놓고 있을 필요가 없습니다. removeFromSuperview 메세지를 보내서 떼어 놔야 iOS 에서 "아~ 이 view 는 사용하지 않는 view구나" 라고 인식합니다. 따라서 iOS 에서 통지하는 Memory Warning 메세지를 View Controller 가 받았을때 자신이 가지고 있는 view 를 사용하지 않고 있다면 view 에 nil 을 세팅하게 되고, 그때, viewDidUnload 가 불리게 됩니다.

디바이스에서는 메모리가 항상 부족하므로, 필요없는 뷰는 그때그때 떼어내고 필요할때 붙여서 쓰면 되고, memory warning 이 발생했을시에는 viewDidUnload 에서 필요없는 객체들 또는 뷰들을 해제시켜 메모리를 확보하면 메모리 크래쉬로 앱이 죽는 일은 쉽게 일어나지 않을것입니다.

코드는 한줄 없이 장황하게 글로만 써서 죄송합니다. 샘플코드 첨부합니다. :) 주석은 없습니다. :-p


블로그 이미지

하루하루

하루하루를 열심히 살아가는 그런 사람이 되고자 합니다. 오늘을 후회없이 말이지요.

,

iOS 개발을 하다보면 화면에 직접 그림을 그리거나 이미지를 리사이즈 하거나 크롭하는등의 이미지 핸들링을 할 때가 있습니다. 이때 많은 분들이 공개되어 있는 샘플 소스를 참조하여서 프로그래밍을 하실텐데요. 대부분의 분들이 이해없이 그냥 저렇게 사용하니 그냥 습관적으로 사용하는 부분이 있습니다. 바로 CGContextTranslateCTM 와 CGContextScaleCTM  이라는 함수 입니다. 

저도 그냥 샘플소스 복사해서 쓰다가, 이번기회에 이해를 좀 해보았습니다. 역시나 이해하고나니 별거 아니더라는... -_-;;;

일단 제 경우에는 문서에 나와있는 말이 좀 애매해서 문서만 보고서는 이해가 좀 힘들었습니다. 그래서 제 나름대로 정의를 내려보면 다음과 같습니다. 


void CGContextTranslateCTM ( CGContextRef c, CGFloat tx, CGFloat ty ); 

컨텍스트 좌표의 원점(0,0)을 x , y 크기 만큼 이동 시켜 줍니다. 

예를 들어 

CGContextTranslateCTM(context, 0.0, 480);
이라고 사용하면 일반적으로 iOS 에서 사용하는 좌표의 원점인 왼쪽 위의 원점이 왼쪽 아래로 잡히게 됩니다. 


void CGContextScaleCTM ( CGContextRef c, CGFloat sx, CGFloat sy );

컨텍스트 x,y 좌표의 +,- 방향을 바꾸고 좌표계의 비율을 변경 해 줍니다. 

예를 들어

CGContextScaleCTM(context, 1.0, -1.0);
이라고 사용하면 X,Y 축의 비율은 1.0으로 동일하고, Y 축 좌표가 아래에서 위로가는 방향이 + 방향으로 변경됩니다.


예제코드를 통해서 확실히 의미를 이해해 보도록 하겠습니다. 


위와 같이 코드를 작성하면 결과는 다음과 같이 됩니다. 


이미지도 Quartz 로 불러온것이기 때문에 Quartz 좌표계를 따르는데요, 이때문에 위 두 함수를 적용하지 않은채 컨텍스트에 그림을 그리면 이미지가 상하 반전되어서 나오게 됩니다. 따라서 좌표계를 반전 시켜주시고 그림을 그리면 원상태로 나오게 되는것이지요. 

Quartz 의 좌표의 원점은 왼쪽 아래고, + 방향은 위쪽과 오른쪽 입니다. 이점을 먼저 인지 하시고 위 함수들의 변수값을 조정하시면서 테스트를 해보시면 좀더 이해가 빨리 됩니다. 

블로그 이미지

하루하루

하루하루를 열심히 살아가는 그런 사람이 되고자 합니다. 오늘을 후회없이 말이지요.

,

거의다 만든 앱을 테스트 하는 도중에 희안한 현상을 목격했다.

이미지를 불러와서 위에 뿌려주는 페이지가 있었는데 부분에서 4.0 디바이스 에서는 나오는데 3.1.3 디바이스에서는 이미지가 안나오는 .


소스엔 아주 평범한 함수 호출뿐. 특이 사항은 없었다


알고보니 문제는 이미지 파일명에 있었다

이미지를 불러올때는 다음과 같은 방법을 많이 사용한다.  


UIImage *temp_img = [UIImage imageNamed:@"temp.png"];


이때 주의 해야할 것이 imageNamed 함수에 파라메터로 넘어가는 파일이름에 확장자를 붙이느냐 마느냐가 나름 중요한(?) 사항 이었다.


iOS 4.0에서는 파일이름에 확장자를 붙이지 않아도 이미지를 불러온다. 하지만, 3.x 대에서는 확장자까지 정확히 써주지 않으면 불러오지 못한다


아주 사소하지만 나름 무지 고민하게 만든 에피소드였다.

같은 삽질 하는 분들이 없도록 부끄럽지만 공개함. :)


블로그 이미지

하루하루

하루하루를 열심히 살아가는 그런 사람이 되고자 합니다. 오늘을 후회없이 말이지요.

,

xcode 환경에서 디버깅을 하기 위해서 많이 쓰는 함수가 NSLog() 함수이다.

디버그 모드에서야 로그 찍어 보느라 많이쓰지만, 릴리즈를 할때 그대로 둔다면 앱의 성능에 문제가 생길 수도 있다. 그래서 릴리즈 할때는 NSLog를 주석처리하고 릴리즈 하게 되는데 그게 여간 귀찮은 작업이 아닐 수 없다.

구글링 하다가 우연히 아래와 같은 을 발견. 나말고도 다른 많은 분들이 비슷한 방법을 사용중인가보다.

우선, 프로젝트명_Prefix.pch 의 이름을 가지고 있는 프로젝트 프리픽스 파일을 열어서 코드를 마지막에 추가한다.


#ifdef DEBUG
    #define NSLog(fmt, ...) NSLog((@"%s[Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
    #define NSLog(...)
#endif



그리고 디버그 모드에서만 NSLog 가 작동을 하도록 #define DEBUG 1 설정이 디버그 모드에서 자동으로 설정되도록 만들어준다.
프로젝트 Info 창을 띄워서 OTHER_CFLAGS 라는 항목을 검색한다. 만약에 없으면 Info 창 왼쪽 하단의 톱니바퀴를 눌러서 Add User-Defined Setting 메뉴를 통해서 OTHER_CFLAGS 라는 항목을 추가한다.

항목을 찾았으면(or 추가했으면) -DDEBUG=1 이라는 값을 세팅해 준다. 이제 디버그 모드에서는 로그가 출력되고, 릴리즈 모드에서는 출력이 안된다.
이를 아예 자주쓰는 템플릿에 넣어두면 새로 만드는 프로젝트마다 자동으로 적용되어 있어 더 편하게 작업할 수 있다.


템플릿이 저장되어 있는 디렉토리는 다음과 같다.


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


참고: http://iphoneincubator.com/blog/debugging/the-evolution-of-a-replacement-for-nslog


블로그 이미지

하루하루

하루하루를 열심히 살아가는 그런 사람이 되고자 합니다. 오늘을 후회없이 말이지요.

,

오늘은 아이폰 앱 소개를 해보려고 합니다. 국내에 아이폰이 정식 발매된지도 벌써 두달이 되어가고 있네요. 많이 이슈도 되었고, 많은 분들이 선택도 해주시고 계십니다.

그런데, 우연찮게 들은 충격적인 소식이 있었습니다. 아이폰을 구매하신분이 2주가 지났는데도 출시폰 그대로 사용하고 계신다는 겁니다.

오. 마이. 갓.

이럴수가. 스마트폰에 대한 모욕이었죠. 어쩌면 어떤 앱을 설치해야 하는지 몰라서 일수도 있겠다는 생각을 했습니다. 그래서 제가 아이폰을 쓰면서 괜찮다고 생각하는 앱을 조금씩 생각날때 마다 정리해서 알려드릴려고 합니다.

시작할까요? ^^

#1. WhatsApp - $0.99

아이폰 사용자끼리 문자 메세지를 주고 받을 수 있는 어플 입니다. 저는 한때 무료일때 설치해서 지금까지 잘 쓰고 있습니다. 기능추가가 많이 되어 지금은 멀티미디어 뿐만아니라, 현재 자기 위치까지 알려줄수 있다고 하네요. 이 어플의 제일큰 장점은 메세지를 주고 받을 사람을 메신저 처럼 따로 등록하지 않아도 된다는 점입니다. 자신의 주소록에 사용자가 등록되어 있으면 Whatsapp 어플이 알아서 찾아줍니다. ^^ 물론, SMS 처럼 따로 비용이 발생하지 않습니다.

#2. Daum 지도- free

국내 지도 어플중에 최고라고 생각하는 어플입니다. 필요할때 즉시 로드뷰로 보고싶은 곳을 찾아볼 수 있으며 실시간 교통상황도 살펴 볼 수 있습니다. 국내 양대 포털중 하나인 다음에서 서비스 하고 있습니다. 가격은 포털에서 서비스 하는만큼 공짜. :)

#3. spDial - free

아이폰에 기본으로 들어있는 전화 어플을 대체할 만큼 강력한 기능으로 무장하고 나온 어플입니다. 기능을 강화한 전화 어플중에는 가격대비 가장 뛰어나다고 생각하고 있습니다. 가격이 무료이니 당연한 건가요? ㅋㅋㅋ 업데이트도 꾸준히 이루어 지고 있습니다. 제 아이폰 dock 에 당당히 전화 어플을 제치고 자리를 차지하고 있는 녀석입니다.

한국인에게 익숙한 초성검색과 전화번호 뒷자리 검색을 지원하고 단축키 등을 지원합니다.

#4. iKorway - $0.99

국내 지하철 어플중 최고라고 생각하는 어플 입니다. 완성도가 매우 뛰어나고, 정보의 양이 매우 방대 합니다. 가격은 새해 세일로 아직 $0.99 입니다. 저는 초기버전부터 유료로 구입하여 써오고 있는데요. 지하철을 타고 다니는 저로써는 매우 고마운 앱 입니다. 사용빈도도 매우 높습니다.

#5. 파랑새 - free

혹시 트위터를 사용하시나요? 국내 개발자가 만든 앱으로 완벽하게 한글이 지원됩니다. (당연? ㅋㅋ) 앱스토어에 트위터앱은 무지무지 많습니다만, 마음에 드는 앱은 별로 없습니다. 꼭 한가지씩 마음에 안든다고나 할까요. 저는 원래 트윗버드라는 앱을 쓰고 있었습니다만, 가격도 유료고 파랑새에서 꼭 필요한 기능인 전체댓글 이라는 기능을 지원 하면서 트윗버드와는 점점 멀어지고 있습니다.
기능들이 다 완성이 되지 않아서 아직 덜 완성된 듯한 느낌의 앱이지만, 트위팅을 하는데는 전혀 문제가 없네요. 게다가 가격도 무료! ㅋ 언젠가는 유료화를 하겠다는 개발자님의 말이 있었습니다만 언제가 될지는 개발자님도 모르신다는. ^^
지금도 업데이트를 기다리고 있는 앱중에 하나입니다. :)

이상으로 5가지 정도의 앱을 살펴 보았습니다. 다음에도 5가지 정도를 정리해서 함께 공유해 보도록 하겠습니다. ^^;

+
추천해 주실앱이 있으시면 댓글로 부탁드려요. ^^

블로그 이미지

하루하루

하루하루를 열심히 살아가는 그런 사람이 되고자 합니다. 오늘을 후회없이 말이지요.

,

아이폰앱 개발시 보통 시뮬레이터로 개발하게 되는데, 시뮬레이터에 올라간 앱의 실제 로컬상의 위치를 알아야 할 때가 있다. 앱에서 생성하는 DB 또는 파일이 정확히 원하는 위치에 생성되는지 확인하거나, 원하는 파일이름으로 원하는 데이터가 기록되었는지 직접 확인할 필요가 있기 때문이다. 

앱의 위치는 다음과 같다.

/Users/[사용자계정]/Library/Application Support/iPhone Simulator/User/Applications

끝.

블로그 이미지

하루하루

하루하루를 열심히 살아가는 그런 사람이 되고자 합니다. 오늘을 후회없이 말이지요.

,

아이폰 개발에 발을 들여 놓고, 첫번째 어플이 등록되기까지의 과정을 정리해 보려 합니다. 이미 많은 분들이 기록을 남겨두어서 그리 어렵지 않게 따라올 수 있었습니다만, 그 와중에도 궁금했던 것들과, 잘 모르겠는것들이 나오더군요. 어찌어찌 해서 해결을 하긴 했는데, 아직 앱스토어에 등록을 기다리는 입장이라, 애플쪽에서 또 무슨 메일이 날라올지 두근두근하네요 ^^>

일단은, 아이폰 개발자 프로그램에 가입하는 과정부터 정리해 보도록 하겠습니다.


1.http://developer.apple.com 에 아이디를 만듭니다.

이 아이디는 중요합니다. 앞으로 등록하는 과정에서 필요한 모든 아이디는 이 아이디를 적습니다.


2. 개발자 프로그램에 가입을 합니다. 개인 사용자 또는 기업 사용자로 등록 할 수 있습니다.

저는 개인사용자로 해서 기업 사용자로 했을경우 어떤 혜택이 있는지는 자세히 모르겠습니다. 아마도 나중에 서류작업 할때 개인사용자 보다는 조금더 불편하겠죠? 그리고, 지역은 한국을 선택합니다.


3. 신기하게도, 등록을 다 마치고 나면, 한국 애플 스토어의 상품 형태로 개발자 프로그램을 구매할 수 있도록 장바구니에 개발자 프로그램이 들어 있습니다. 제가 1월달에 구매를 할때까지 10만 4천원 이었습니다. 환율때문에 가격이 더 오를지도 모르겠습니다.


4. 구매하고, 하루정도가 지나면 액티베이션 메일이 옵니다. (1 번에서 만들었던 아이디로 메일이 옵니다.)

메일에는 액티베이션 코드가 있는데, 메일에 있는 링크를 타고 들어와 코드를 넣으면 비로서 계정이 액티베이션이 됩니다. 하지만, 대부분(?)의 분들이 여기서 일단 거부를 당하더군요. 대부분의 이유는 결제한 사람과, 프로그램가입한 사람의 정보가 불일치(?)해서 신원 확인을 못하겠다는게 많은거 같습니다.

저도 이부분에서 위와같은 이유로 거부 당했는데요, 저 이전의 선배들의 경우를 찾아보니 애플 코리아 직원의 도움을 받아서 해결했다는 분들도 있고, 직접 전화를 걸어서 해결했다는 분들도 있었고, 메일 한통으로 해결하셨다는 분들도 계셨다길래, 가장 쉬운 메일쓰기를 시도해 보았습니다.

메일 내용은 대충, 결재하고 코드 넣었는데, 인증이 안되더라, 어떻게 된거니? 내가 이제 뭘하면 액티베이션 시켜 줄꺼니? 이런식의 내용이었습니다.

메일을 보내고 여권 스캔해서 메일또는 팩스로 보내야 하는것까지 각오하고 기다리고 있었는데, 의외로 미안하다고 잠시 홀딩 되어있었다고 하는 내용과 함께 액티베이션 시켜놨으니 확인해 보라는 메일이 오더군요.


5. 이제 계정을 액티베이션 하고 로그인을 하니 오른쪽 상단에 Program Portal 이 보입니다.

6. Program Portal 에 들어가면 다음과 같은 화면이 나오고 왼쪽에 있는 메뉴가 가장 많이 쓰는 메뉴 입니다.

7. Team 메뉴를 보면 자기 자신이 Agent 로 등록이 되어 있는걸 확인 할 수 있습니다.

이제 기기에 만들 프로그램을 직접 올려서 테스트 하기 위해서 인증서 등록과, 디바이스 등록 등의 작업이 남았습니다.


8. Certificates 메뉴에 가보면 Development 탭과 Distribution 탭이 보입니다.

Development 탭은 테스트로 기기에 프로그램을 올리기위한 인증서정보가 있는 탭이고, Distribution 탭은 개발을 완료하고 AppStore 나 AdHoc 으로 다른 기기에 테스트 배포를 해볼때 쓰는 인증서 정보가 있는 탭입니다.

현재는 기기에 테스트를 올릴것이기 때문에 본인의 맥에서 인증서를 생성한후 Development 탭에서 등록해 줘야 합니다.


9. Applications > Utilities > Keychain Access.app 을 실행 시킵니다.

Preferences 메뉴에서 2번째 탭 에서 모든 항복을 체크 하시고,   3번째 탭 Certificates 에서 다음과 같이 설정합니다.

10. 다음의 메뉴를 실행합니다.

11. 실행하면 Certificate Assistant 가 뜨면서 몇가지 정보를 입력하라고 나옵니다.

email 에 애플 아이디 를 입력하고, Common Name 에는 아이디 만들때 입력했던 이름이랑 똑같이 입력합니다. 아마도 이름 + 성 이 되겠죠? Save to disk 를 선택하고, Let me specify key pair infomation 을 체크한뒤 다음으로 넘어갑니다.

12. 2048, RSA 를 선택하고 저장합니다.

13. Program Portal 의 Certificate 메뉴의 Development 탭에서 add certificate 버튼을 눌러 12에서 저장했던 인증서를 submit 합니다.

14. 이제 사용자가 등록된걸 볼 수 있습니다. 조금 기다렸다가 새로고침을 한번 해주면, Action 메뉴에 Approve ,reject 가 나타나고, Approve 를 클릭해 줍니다.

15. Development 탭에서 'WWDR Intermediate Certificate' 를 다운로드 하여 실행시켜 수락합니다.

이제 Kechain Access 를 실행시켜 보면 다음과 같이 iPhone Developer 인증서가 등록되어 있습니다.

16. 이제 내 아이팟 터치를 개발용으로 Xcode 등록 시킵니다.

먼저 Xcode 를 실행시킨후에,터치를 연결하면 알림창이 하나 뜨는데, 그 알림창에서 Use For Development 버튼을 선택하면 개발용으로 등록 됩니다.

17. Apple Program Portal 에서 좀전에 등록한 터치를 Devices 에 등록합니다.

기기를 등록하기 위해선 아이팟 터치가 가지고 있는 identifier 번호가 필요 합니다. Xcode 의 Windows > Organizer 를 실행하면 등록된 아이팟이 보입니다.

18. 이제 App IDs 를 만들 차례 입니다.

App ID 는 자신이 만든 어플리케이션 마다 하나씩 부여해야되는 ID 인거 같습니다. ( 사실 저도 아직 한개 밖에 만들지 않아 잘 모르겠습니다. ) App ID 가 틀리면 기기에 올리는데 실패 합니다. 나중에 App 을 하나 더 추가해도 만들어 두었던 ID 로 계속 쓸 수 있는지는 잘 모르겠습니다. 테스트 해 본 바로는 하나의 App ID 와 밑에서 만들 Provisioning 파일을 가지고 여러개의 App 을 기기에 올려 볼 수 있더군요.

AppStore 에 올릴때는 어떨런지 잘 모르겠습니다. 경험 있으신분들은 댓글좀 부탁해요. ^^

App ID 를 만들려면, Manage 탭에서 Add ID 를 클릭하여 만들 수 있습니다.

App ID Name 에 마음에 드는 이름으로 넣고, App ID 란에도 마음에 드는 문자를 넣습니다. 설명에 보내 와일드 캐릭터(*) 도 가능하다고 하네요. submit 을 하면 id 가 생성 됩니다.

19. 이제 Provisioning 을 만듭니다.

Provisioning 파일은 테스트 기기에 어플리케이션을 올릴때 꼭 필요 합니다. 이 파일을 Xcode 내의 Organizer 에서해당 기기에 등록을 해줘야 개발버전의 테스트 코드를 직접 기기에 올려 테스트 해 볼수 있습니다.

Provisioning 메뉴의 Development 탭에서 'Add Profile' 버튼을 클릭 합니다.

프로파일 이름을 마음에 드는걸로 입력 하시고, 좀전에 생성했던 AppID 를 선택 하고 submit 합니다.

자시 시간이 지난후에 Provisioning 메뉴의 Development 탭을 보면, 방금 등록한 profile 이 있고, Actions 에 download 할 수 있는 버튼이 생겨 있습니다. 그 버튼을 눌러 다운로드 합니다.

20. 이제 로컬 컴퓨터에 provisioning 파일이 생겼습니다.

Xcode 에서 등록한 기기에 provisioning 파일을 등록해 줍니다. Xcode 메뉴중에 Window > Organizer 에서 등록된 기기를 선택하고, Provisioning 란에 드래그 해서 넣어주거나 + 버튼을 눌러 선택해 주면 됩니다.

21. 이제 소스 코드를 빌드해서 기기에서 테스트 할 수 있도록 설정을 바꿔줍니다.

개발하고 있는 프로젝트를 열어서 프로젝트 info 창을 엽니다. Info 창의 build 탭에서 code signing 부분에서 등록한 provisioning profile 을 선택 하도록 합니다.

22. 이제 프로젝트 overview 에서 device 로 설정하고 빌드해 봅니다.

이상으로 기기에 연결하는것 까지 해 보았습니다.

** 이글은 http://www.iphoneos.co.kr/zbxe/3801 Korea iphone dev group http://www.iphoneos.co.kr/ 의 웅이님이 작성한글을 토대로 제가 실행해 본것을 정리한 것입니다.

블로그 이미지

하루하루

하루하루를 열심히 살아가는 그런 사람이 되고자 합니다. 오늘을 후회없이 말이지요.

,