iOS9 ENABLE_BITCODE 설정을 찾을 수 없을 때 강제 추가하기

이번에 출시된 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_option

심지어 위와 같이 친절하게 설정을 어디서 할 수 있는지 스크린샷까지 볼 수 있습니다. 하지만 저의 프로젝트에서는 아무리 찾아봐도 위의 설정을 찾을 수 없더군요. 그러던 중에 프로젝트 설정에 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로 돌아와 보면 짠! 하고 설정이 추가되어있습니다. 이후에는 마우스 클릭으로 편하게 설정을 바꿀 수 있습니다.

참고 : http://stackoverflow.com/questions/31809140/i-would-like-to-know-how-to-get-option-enable-bitcode-in-xcode-7-beta-4