Xcode 5

Archive를 -l 로 합치기

이리저리 찾다보면, 이 옵션은 디버깅용으로 빌드시 다른 플랫폼들이 빌드되면, 시간이 걸리는 것을 줄이기 위해서 현재 테스트할 플랫폼에 맞는 것만 빌드하도록 하는 것이라고 한다. 뭐 괜찮은 생각인것 같은데, Archive 를 만드는데 문제가 발생했다. 이상하게 해당 Archive를 이용하면 duplicate symbol 발생으로 링킹에 실패하는 문제가 발생했다. 그것도 기본 설정으로는 아무 문제가 없었는데, -all_load 옵션으로 Archive에 내장된 모든 심볼을 로딩하게 하면, 문제가 발생했다. nm 유틸리티를 이용하여 symbol목록을 확인 한 결과 정말로 모든 symbol이 두 벌씩 들어가는 것을 확인 했다. 프로젝트 옵션의 주요 값으로는 base sdk iPhoneOS 4.0 SDK archi..

iPhone SDK 4.0 beta3에서 기존 라이브러리 링킹 실패(symbol not found)

iPhone SDK 4가 아직 완성 release버전은 아니지만, 이전의 호환성을 위해서 기존에 빌드된 라이브러리를 그대로 링킹 시도를 해보았는데. 분명히 링킹이 되었음에도, symbol not found 오류를 내뱉어낸다. ar로 모듈을 까보아도 분명히 심볼은 있음을 확인할 수 있다. 혹시나 해서 특정 object 파일을 까보기 시작했다. 자체 makefile로 빌드한 모듈 x86.o: 00000000 t +[XWHWInfo_local getDeviceID] x86.o: 000000b1 t +[XWHWInfo_local getPhoneNumber] x86.o: U .objc_class_name_NSObject x86.o: U .objc_class_name_NSUserDefaults x86.o: U .o..

dismissModalViewController 후 removeFromSuperview

UIKit의 구조는 참으로 적응이 쉽지 않았다. 이래저래 삽질하면서 겨우겨우 돌아가게 만들고 있었다. 어느정도 익숙해지고, 안정되었다고 생각할 때쯤, 초반에 사용하던 구조에 문제가 있음을 확인했다. 너무나도 C/C++ 같은 구조에 박혀 살다가 그런건지는 몰라도, 어떤 ViewController가 닫히기 전에 자체적으로 dismiss 한 후에, superview에서 빼줘야하는 일이 생겼다. 문제는 animated:YES 애니메이션이 다른 스레드로 돌아가고 있는 중에 superview에서 제거하면, UI가 꼬이는 현상이 발생한다. 물론 애니메이션을 끄거나, 또 다른 스레드가 감시하여 애니메이션이 끝난 후에 제거하면 괜찮다. 그러나 이 짓을하자고 스레드들 생성하는 것도 웃기고, 애니메이션을 끄자니 사용자들 시..

어이 상실한 alloc init

최근 쉬지 않고 iPhone 앱을 개발 중이다. 계속 추가 요구사항이 들어와 어쩔 수 없는 일이다. 그나마 잠잠해지나 했더니, 4.0 등장 소식과 OS 3.2 업데이트. 하하, 혹시나 모를 위험에 대비하려 설치를 해보았는데, 이게 왠일 대부분 잘 작동하는데, 엄한 곳에서 죽는 일이 발생했다. 위치는 백그라운드 스레드에서 AutoReleasePool을 생성했는데, 생성하다가 죽는단다. 잘 돌아가던 코드였는데 참으로 이상하다 이상하다 이상하다 이상하다 이상하다 다섯번을 외치고 나서야 겨우 깨달았다. 멍청하게도 init 후 alloc을 해버린 것을. 그런데 기존에는 어째서 돌아갔을까? =_= 이 글을 보는 사람은 이런 실수 안하시기를 ^^;

시뮬레이터에서 어플이 실행되지 않을 때

Xcode 오류 메시지를 보면 failed to launch simulated application: unknown error 라고 뜨며 시뮬레이터에서 어플이 실행이 실패한다. 보통 위의 메시지로 구글링을 해보면, Xcode 캐쉬 지우고, 시뮬레이터 캐쉬 지우고 시뮬레이터 닫고, Xcode닫고, 시몰레이터 디렉토리 지우고, OSX를 리부트 하라는 등의 답변이 많이 달려있다. 그러나 내 경우 위의 해결책으로는 해결되지 않음을 확인했다. 오히려 더 간단했다. 원인은 plist 파일에 등록된 실행파일 이름과 타겟 옵션에 설정되어진 제품 이름 필드인 Packaging/Product Name 항목이 서로 일치(not match)하지 않는 것이 였다. 아마도 제품 빌드를 A라는 이름으로 했는데, 시뮬레이터는 B라는..