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

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


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


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

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


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


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


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


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

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


저작자 표시 동일 조건 변경 허락
Posted by 하루하루

프로젝트 내의 이미지를 불러오기 위한 방법으로 UIImage 클래스의 imageNamed 메소드를 많이 쓴다.
(책에 그렇게 많이들 나와 있다. )

하지만, imageNamed 라는 메소드는 시스템에서 캐싱을 하는 바람에, 사용후에 메모리에서 해제되지 않는다.
자주쓰는 이미지라면 상관 없지만, 용량이 크고, 한번쓰고 마는 이미지라면 메모리 관리에 악영향을 끼치게 된다. 대표적인 앱이 이미지뷰어 앱을 들 수 있다.


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


반면에, imageWithContentsOfFile 라는 메소드는 캐싱을 하지 않는다. 캐싱을 하지 않아서 속도면에서는 불이익이 있지만, 사용후 해제가 되므로 메모리 관리 부분에서는 장점이 있다.


NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"temp.png" ofType:nil];
UIImage *temp_img =[UIImage imageWithContentsOfFile:imagePath];



저작자 표시 동일 조건 변경 허락
Posted by 하루하루

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


Posted by 하루하루

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

앱의 위치는 다음과 같다.

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

끝.

저작자 표시 동일 조건 변경 허락
Posted by 하루하루

아이폰 개발에 발을 들여 놓고, 첫번째 어플이 등록되기까지의 과정을 정리해 보려 합니다.

이미 많은 분들이 기록을 남겨두어서 그리 어렵지 않게 따라올 수 있었습니다만, 그 와중에도

궁금했던 것들과, 잘 모르겠는것들이 나오더군요. 어찌어찌 해서 해결을 하긴 했는데,

아직 앱스토어에 등록을 기다리는 입장이라, 애플쪽에서 또 무슨 메일이 날라올지 두근두근하네요 ^^

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

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 를 실행하면 등록된 아이팟이 보입니다.


identifier 번호를 복사한뒤 Program Portal 의 Devices 메뉴에서 Add Divice 버튼을 통해 기기능 등록할때
사용합니다. 그럼 아래와 같이 기기가 등록됩니다. 저는 3개를 등록 했습니다.

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 로 설정하고 빌드해 봅니다.


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

다음에는 실제로 AppStore 에 등록하는 과정을 정리해서 포스팅 해보도록 하겠습니다.
아직 제 프로그램도 등록해 보지 못한 상황에서 경험담을 쓰기엔 무리라서, 제프로그램이 AppStore 에
등록되고 나면 정리해 보도록 하겠습니다. ^^

 

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

Posted by 하루하루