아이폰과 아이팟 터치 구분하기 [UIDevice currentDevice].model

iPod touch 와 iPhone을 구분하는 방법은

UIDevice 를 얻어와서 model 명을 보면 쉽게 알 수 있다.

iPad는 과연 모델명이 뭐로 나올지 궁금하긴 하네.

Advertisements

아이폰 개발 – NSURLConnection , NSRunLoop, NSOperation

기본적으로 NSURLConnection 은 Async 모드를 제공해 준다. 그런데 이걸 Thread 에서 동작하도록 수정을 해볼려고 하니, 삽질의 연속이다.

결국 쉽게 가기 위해서 선택한 것이(사실 NSThread 는 사용하지도 않았다는) NSOperation 이다.

그런데 이상한 현상은 NSOperation 안에서 NSURLConnection 을 사용하게 되면 NSRunLoop 를 이용해서 Message Pumping을 하게 되는데, 아직 이 부분을 완벽하게 이해하지 못한 죄로!!!

GET은 잘 되는데 POST는 이상하게 동작한다.( 이유는 아직 잘 모르겠다 –_- )

처음에는 아예 NSURLConnection 이 동작하지 않는다고 생각했는데, async의 경우에 해당 Runloop로 메시지를 보내는 것이라, 타 스레드에서 제대로 받지 못해서 발생하는 문제인듯 하다. –_- 그런데 이게 해결책으로 제시된 걸 써봐도 제대로 동작하지가 않아서 좀 더 고민을 해야 할 듯 하다.

iPhone library, framework 위치

  음… 중간에 삽질했던 것 중에 하나가, iPhone 개발시 추가하는 Library, framework의 위치를 잘

몰랐다는 것이다.

 

 잊지말자.

 

Developer/Platforms/iPhoneOS.platform/Developer/usr/lib

Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/System/Library/Frameworks

 

아이폰 개발자 인증 과정에서 주의할 점!!!

오래간만에 다시 아이폰에 프로그램을 올리기 위해서, 인증서를 등록하는데, 맥장비를 엎는 바람에 새로 인증서를 발급해야 했는데, 자꾸 인증서가 등록이 되지 않는 것이다. 이유를 오늘 드디어 찾았는데!!!

원인 1 : 키체인 접근 –> 인증 지원 –> 인증 기관에서 인증서 요청 시에 여기서 생성하는 키 정보가 “로그인” 으로 들어가야 한다. 이것은 로그인 키체인 위에서 “로그인”을 기본 키체인으로 만들기를 선택해야 한다. 기본적으로는 로그인이 기본 키체인 이므로 걱정하지 않아도 되지만, 이 점이 매우 중요하다.

원인 2 : 인증서 관련 정보가 바뀌면 반드시 XCode 에서 Clean All Targets 를 선택해서 관련 정보를 삭제해 줘야 한다. 단순히 XCode 를 종료하고 다시 시작하는 것만으로는 해당 정보가 남아있어서 반영되지 않는다.

원인 3 : Provisioning 관련 파일을 아이폰과 XCode 두 군데에 등록해야 한다. 등록 방법은 XCode의 Windows->Organizer 를 선택해서 등록할 수 있다.

보통 인터넷으로 기본적으로 인증서를 등록하는 방법을 따르면 잘 되지만, 혹시나, 이런 문제가 발생할 수 있기 때문에, 이에 대해서 잘 숙지하고 있는것이 꼭 필요하다.

아이폰 프로그래밍 시작하기-2 Nib 와 loadView의 관계

필자, 역시, 아이폰 프로그래밍은 이제 막 시작하는 거라, 완전 밑바닥 부터 공부를 하는 중이다.

(과연 공부를 하고 있냐고 물으신다면, 아니라고 쿨럭…)

사실, 몇달전에 간단한 아이폰 어플을 만든 적은 있지만, 그 때는, 내부 구조를 전부 C++로 만들고, UI만 아이폰 컨트롤을 조금 써서 만들었었다. 그 때의 목표는 Windows Mobile 어플과 아이폰 어플의 로직을 같은 코드로 공유하는 것이었다.

그런데, 그 때도 잘 이해하지 못하고 넘어갔던 것들이 nib 와 각 컨트롤러의 동작들이었는데, 이번에 그 부분을 공부할려고 하니 완전히, 삽질의 바다에서 헤메이는 것이었다. 이래서 물어봐야 하는데, 안 물어본 쿨럭…(혼자서 할 수 있을꺼라고 생각하다니 T.T 주변에 아이폰 프로그래밍 잘하는 사람들이 수두룩 한데 쿨럭…)

그러나, 책을 보고, 예제를 고쳐보고 곰곰히 생각해보니 다음과 같은 관계가 간단하게 성립한다.

image

이 부분을 잘 몰라서, NIB를 안 쓸려고 하니, 화면이 나오지 않는다든지, 또는 원하는 동작이 일어나지 않는다든지 한 것이다. 그렇다면 NIB를 안쓰고 할려면 위의 Nib 가 해주는 역할을 개발자가 대신 해줘야 하는 것이다.

1) NIB를 사용할 경우

– (void)applicationDidFinishLaunching:(UIApplication *)application {   
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];
}

2) NIB를 사용하지 않을 경우 – MainWindow.xib 는 쓸 경우

– (void)applicationDidFinishLaunching:(UIApplication *)application {  
    HelloController *viewController= [[HelloController alloc] init];
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];
}

2) NIB를 사용하지 않을 경우 – 전체 사용 안함

– (void)applicationDidFinishLaunching:(UIApplication *)application {  
    UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    HelloController *viewController= [[HelloController alloc] init];
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];
}

다른 부분들도 바뀌어야 하는 부분들이 있지만, nib를 안쓰면 다음과 같이 코드 부분들이 늘어나는 것을 알수 있다.

아이폰 프로그래밍 시작하기-1 프로그램 실행 아이콘과 로고화면

아이폰 프로그래밍을 하면서 보통 Objective-C 나 ViewController, NavigationController 를 사용하는 방법에 대해서 알려주시만…

그것보다 더더욱 중요한(?) 프로그램 실행 아이콘과 로고화면을 바꾸는 방법에 대해서는 내용이 별로 없다 –_-

그러나 엄청 쉬운 방법 –_-;

그럼 어떻게 하느냐?

  파일명 사이즈
프로그램 실행 아이콘 icon.png 60×60
프로그램 로고 화면 Default.png 320×480

여기서 중요한 것은 프로그램 로고 화면의 이름이 첫글자가 대문자 D라는 것이다.

(사실, 이건 대소문자 구별할 경우에 문자가 되는 부분이다.)

그리고 Project 에 추가하면, 바로바로 코드를 지정하지 않아도 지정되는 모습을 볼 수 있다.

아이폰 Device 빌드 시 주의사항

  나를 한참을 괴롭히던 문제,

 

 개발자 등록을 하고, 이를 통해서 빌드를 할려고 하는데, 자꾸 Provisioning 이름이 기본 설정과 매치 되지 않는다고 빌드가 되지 않았다.

 

 알고보니, 인증서의 이름과, Info.plist 의 Bundle Identifier 가 동일해야만 패스된다. T.T