아이폰 개발은 하루하루가 삽질의 연속이네요… 오늘의 삽질은 클래스 파일을 찾을수 없다고 하면서 앱이 종료(크래시)되는 현상을 고치면서 발생했습니다.

인터페이스 빌더의 ViewController에 새로 만든 VC를 지정 했고 개발 빌드까지 아무 이상이 없었습니다. 그런데 테스트 플라이트를 통해 받은 Production 빌드에서만 앱이 크래시 나길래 Xcode에 아이폰을 연결해 실행하니 앱이 종료될때 다음과 같은 메시지가 있었습니다.

daangn[19282:4846848] Unknown class _TtC6daangn15MyArticlesTabVC in Interface Builder file.
Could not cast value of type 'UIViewController' (0x1b453af60) to 'daangn.MyArticlesTabVC' (0x1072c0028).
daangn[19282:4846848] Could not cast value of type 'UIViewController' (0x1b453af60) to 'daangn.MyArticlesTabVC' (0x1072c0028).

MyArticlesTabVC는 분명히 존재하는 파일이고 UIViewController 하위 클래스가 맞습니다. 그리고 개발 빌드에서는 아무 문제가 없었죠 ~

제가 문제를 겪은 VC는 XLPagerTabStrip 라이브러리의 특정 VC를 상속받은 거였고 이와 비슷한 문제가 이슈에 등록되어 있었습니다.

Can’t connect ‘containerView’ and ‘buttonBarView’ outlets #141

상속받는 클래스가 Generic 클래스 인데 Xcode 문제로 인터페이스 빌더의 커스텀 클래스에는 Generic 클래스를 지정 할 경우 이와 같은 오류가 발생한다고 하네요. 해결은 간단하게도 AppDelegae의 didFinishLaunch 함수 제일 위쪽에 다음과 같은 코드를 추가해서 했습니다.

let _ = MyArticlesTabVC(nibName: nil, bundle: nil)

이문제는 이전에도 한번 경험해봐서 알고는 있었는데 그때는 개발 빌드에서도 앱이 종료 되었었는데 이번에는 개발빌드는 정상동작하고 Production 빌드에서만 문제가 발생해서 찾기 어려웠습니다.

참고문서

게시글의 아마존, iTunes 링크들을 통해 구매를 하시면 제휴(Affiliate) 프로그램에 의해 저에게 일정 금액이 적립될 수 있습니다. ^_____^