web-dev-qa-db-ja.com

フレームワークがXcode7でサポートされているBITCODEかどうかを確認する方法

Xcode 7から、サードパーティのフレームワークが Bitcode をサポートする必要があるという共通の問題の1つになりました。ビルド設定でENABLE_BITCODEをNOに設定することで、BITCODEを無効にすることもできます。しかし、私はそれをオフにしたくない、代わりにすべてのフレームワークをBITCODE互換に変換したい。

Xcodeでフレームワークをコンパイルする以外に、フレームワークがBITCODE互換かどうかを確認する方法。 Xcodeは、BITCODEをサポートしていないにもかかわらず、1つのフレームワークのBITCODE互換性についてエラーを出し、他のフレームワークを残す場合があります。

ツール/コマンドラインチェックはありますか?

30
iPrabu

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出力。

39

受け入れられた回答は、あなたが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を検索しただけでも見つかります。

13
Mecki

__bitcodeセクションが存在するのは静的ライブラリのみであり、動的ライブラリではないことを確認しました。したがって、解決策は以下のコマンドです。

otool -l libDeviceManager.a | grep __LLVM 

また、脂肪バイナリが存在する場合でも、otoolは__LLVMセグメントを提供しないことがあります。これらの場合には、次のコマンドを使用できます

otool -Arch armv7 -l libDeviceManager.framework/libDeviceManager | grep __LLVM
5
SnehaK

これらのコマンドを試すことができます:

otool -Arch armv7 -l libDeviceManager.a | grep bit code

そして

otool -Arch arm64 -l libDeviceManager.a | grep bitcode
1
naresh d