Xcode 7から、サードパーティのフレームワークが Bitcode をサポートする必要があるという共通の問題の1つになりました。ビルド設定でENABLE_BITCODEをNOに設定することで、BITCODEを無効にすることもできます。しかし、私はそれをオフにしたくない、代わりにすべてのフレームワークをBITCODE互換に変換したい。
Xcodeでフレームワークをコンパイルする以外に、フレームワークがBITCODE互換かどうかを確認する方法。 Xcodeは、BITCODEをサポートしていないにもかかわらず、1つのフレームワークのBITCODE互換性についてエラーを出し、他のフレームワークを残す場合があります。
ツール/コマンドラインチェックはありますか?
this Apple Developers Forum ディスカッションから、ユーザー dshirley および bwilson コマンドラインツールの使用を提案otool
およびgrep
は、ビットコードセクションが存在するかどうかを確認します。
$ otool -l libName.o | grep __LLVM
または
$ otool -l MyFramework.framework/Versions/A/MyFramework | grep __LLVM
上記のコマンドを実行すると、ライブラリにビットコードが含まれている場合、segname __LLVM
出力。
受け入れられた回答は、あなたがgrep __LLVM
を行うことを示唆していますが、私はむしろこれを行います
otool -l libName.o | grep __bitcode
異なる__LLVM
セグメントがあり、これらのすべてがビットコードの存在を示すわけではないためです。次に例を示します。
Section
sectname __bitcode
segname __LLVM
addr 0x00000000000007d0
size 0x0000000000000f10
offset 3360
align 2^4 (16)
reloff 0
nreloc 0
flags 0x00000000
reserved1 0
reserved2 0
Section
sectname __cmdline
segname __LLVM
addr 0x00000000000016e0
size 0x0000000000000069
offset 7216
align 2^4 (16)
reloff 0
nreloc 0
flags 0x00000000
reserved1 0
reserved2 0
__cmdline
セクションの存在は、ビットコードが存在することを示すものではありませんが、__LLVM
を検索しただけでも見つかります。
__bitcodeセクションが存在するのは静的ライブラリのみであり、動的ライブラリではないことを確認しました。したがって、解決策は以下のコマンドです。
otool -l libDeviceManager.a | grep __LLVM
また、脂肪バイナリが存在する場合でも、otoolは__LLVMセグメントを提供しないことがあります。これらの場合には、次のコマンドを使用できます
otool -Arch armv7 -l libDeviceManager.framework/libDeviceManager | grep __LLVM
これらのコマンドを試すことができます:
otool -Arch armv7 -l libDeviceManager.a | grep bit code
そして
otool -Arch arm64 -l libDeviceManager.a | grep bitcode