Xcode7において、Xcode6で作成したStatic Link Libraryをリンクしようとすると、以下の二種類のエラーが発生します。

Enable Bitcodeに関するエラー


Xcode7では、-fembed-bitcodeがデフォルトで有効になりました。そのため、Xcode6でビルドしたStatic Link Libraryをリンクしようとすると、以下のようなリンクエラーが発生します。

ld: '*.a' 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 arm64


この問題を解決するには、Static Link Libraryに-fembed-bitcodeオプションを付けてビルドする必要があります。サードパーティのライブラリを使用していてリビルドできない場合は、Build OptionsのEnable BitcodeをNOにすることで回避することができます。Unity5.1から生成されるXcodeプロジェクトも同様のリンクエラーが発生しますが、Enable BitcodeをNOに設定することで回避することができます。

ただし、watchOS向けにビルドする場合は、Enable Bitcodeは必須です。Enable Bitcodeを有効にすると、バイナリサイズは概ね3倍に膨らみます。

Enable Bitcodeを有効にすると、生成バイナリにLLVMのビットコードが含まれるようになります。将来的に、新しいCPUアーキテクチャが追加された場合に、App StoreがLLVMのビットコードから自動的にリビルドしてくれるようになります。

参照:Xcode7GMでビルドすると「does not contain bitcode.」とか言われる

Universal Binaryに関するエラー


Xcode7でUniversal Binaryを使用して、シミュレータ向けにビルドしようとすると、以下のようなリンクエラーが発生します。

ld: in *.a, building for iOS simulator,  
but linking in object file built for OSX, for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)


Xcode6のStatic Link Libraryでは、iOS simulator向けのビルドにおいて、-mmacosx-version-min=XX が設定されていますが、Xcode7では-miphoneos-version-min=XX が設定されるようになりました。そのため、Xcode6でビルドした場合は、ターゲットプラットフォームのミスマッチが発生します。

この問題を解決するには、Static Link Libraryに-miphoneos-version-min=XXオプションを付けてビルドする必要があります。サードパーティのライブラリを使用していて、リビルドできない場合の回避方法はありません。

この変更は、armバイナリとx86バイナリがOSX向けかiOS向けかを明確に区別する必要が出てきたためだと考えられます。

参照:Xcode 7's New Linker Rules