이번에 출시된 iOS9은 사용자의 보안을 위해 많은 기능이 추가되었고 편의성이 증대되었습니다. 하지만 iOS 개발자들에게는 조금 악몽이 될 수 있을것 같은 업데이트가 아닐까 생각합니다. 그중에 한가지 Bitcode설정에 대해서 적어보고자 합니다. 기존에 잘 관리하고 있던 프로젝트를 Xcode 7에서 빌드하려고 하면 다음과 같은 오류를 만나게 되는 경우가 있습니다.
ld: ‘XYPlatform.framework/XYPlatform(TTMacros.o)’ does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
이 문제의 해결책은 간단합니다. Bitcode가 포함되지 않은 빌드를 Xcode 7에서 Bitcode를 포함하여 빌드를 하여 사용하던지, 현재 프로젝트의 Bitcode설정을 끄면 됩니다. 끄는 방법을 좀 검색해 봤더니 Build Settings – Build Options – Enable Bitcode 값을 No로 바꾸면 된다고 나오네요.
심지어 위와 같이 친절하게 설정을 어디서 할 수 있는지 스크린샷까지 볼 수 있습니다. 하지만 저의 프로젝트에서는 아무리 찾아봐도 위의 설정을 찾을 수 없더군요. 그러던 중에 프로젝트 설정에 ENABLE_BITCODE를 강제로 추가하는 방법을 발견하였습니다.
먼저 프로젝트의 설정 파일(project.pbxproj)을 편하긴 텍스트 에디터로 열어봅니다. 일단 저는 vi로 열어보겠습니다.
$ vi MyProject.xcodeproj/project.pbxproj
그다음에 ASSETCATALOG_COMPILER_APPICON_NAME 로 검색을 해봅니다. 현재 프로젝트의 Build Configuration 숫자만큼 검색이 될것입니다. 기본적으로 Debug, Release 두개가 있으니 이 경우 두개가 검색이 되게 됩니다. 그부분의 항목에 ENABLE_BITCODE = NO; 를 각각 추가해 주면 됩니다.
95C220F71ABAF2BF00BC91DB /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; ENABLE_BITCODE = NO; ... } } 95C220F81ABAF2BF00BC91DB /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; ENABLE_BITCODE = NO; ... } }
이제 Xcode로 돌아와 보면 짠! 하고 설정이 추가되어있습니다. 이후에는 마우스 클릭으로 편하게 설정을 바꿀 수 있습니다.