web-dev-qa-db-ja.com

BitCodeへのiOSライブラリ

私は最近Xcode 7ベータ版をダウンロードしましたが、Xcodeは私のCライブラリの一部がBitCodeにコンパイルされていないことを訴えています。 iOSと互換性のあるBitCodeを生成するようClangに指示するにはどうすればよいですか? stackoverflowでも同様の回答を見ましたが、iOS向けのBitCodeライブラリの作成にそれらが当てはまるかどうかはわかりません。

編集:

正しい設定-fembed-bitcodeを使用していますが、アーカイブしようとすると次のエラーが表示されます:ld:warning:ignoring file XXXX/XXXX -fembed-bitcode-markerを使用するとアーカイブできますが、エラーが発生します。XX/ XXはビットコードマーカーのみで構築されているため、完全なビットコードバンドルを生成できませんでした。ライブラリは、ビットコードを有効にしてXcodeアーカイブビルドから生成する必要があります。

何が間違っているのかについてのアイデアはありますか?ライブラリは正常にコンパイルされていますが、アーカイブできません。単純な追加関数を作成し、ライブラリに追加しましたが、同じ症状が出るので、コンパイルしているライブラリではありません。

編集2:ビットコードを使用してarm64とarmv7の両方のバージョンをビルドし、それらを一緒にリポする必要があります。ビットコードを使用しても、アーカイブ時に太いライブラリが必要になることはありません。ソース: https://forums.developer.Apple.com/message/25132#25132

47
stack_tom

静的ライブラリを構築する場合、ビットコード生成のために次を追加する必要があります。

-fembed-bitcode 

動的ライブラリの場合、さらにリンクする必要があります

-fembed-bitcode

注:このコマンドはXcode7 +でのみ使用可能です

-fembed-bitcode-markerの使用に関する受け入れられた回答に関して

-fembed-bitcode-markerオプションを使用した通常のビルドでは、実際のコンテンツなしで最小サイズの埋め込みビットコードセクションが生成されることに注意してください。これは、ビルドプロセスを遅くすることなく、ビルドのビットコード関連の側面をテストする方法として行われます。実際のビットコードコンテンツは、アーカイブビルドを行うときに含まれます。

bwilson Apple Staff。 https://forums.developer.Apple.com/thread/3971#12225


もう少し詳しく言うと:

  • -fembed-bitcode-markerは、アーカイブのビルド後にビットコードがバイナリのどこにあるかを単にマークします。
  • -fembed-bitcodeは実際に完全なビットコードの生成と埋め込みを行うため、これは静的ライブラリの構築に使用する必要があるものです。
  • Xcode自体は、通常のビルド(シミュレーターへのデプロイなど)のために-fembed-bitcode-markerでビルドします
  • Xcodeは、アーカイブビルド/プロダクションビルド用に-fembed-bitcodeでのみビルドします(これはAppleにのみ必要です)。
62
Danoli3

Build Settingsに移動します。 「カスタムコンパイラフラグ」を検索します。
追加 -fembed-bitcodeからその他のCフラグ。これにより、コンパイル時にlibがビットコード互換でビルドされます。これをiOS 64ビットと32ビット用に作成し、それらを1つにリポしました。魅力のように機能します。

皆さんがクエリを行ったので、ここに設定のスクリーンショットがあります。設定はプロジェクトターゲットとSDKターゲットで同じです。

enter image description here


ビットコードライブラリはXcode 6では機能しません。

50
Gautam Jain

-fembed-bitcodeをその他のCフラグに追加しても問題が解決しない場合は、[ビルドオプション]で[ビットコードを有効にする]を検索し、[いいえ]に設定します。これにより、適切にアーカイブできます。

26
Ian Han

必要なのは-fembed-bitcodeです。 ENABLE_BITCODEを有効にすると、Xcodeは、通常のビルドの場合は-fembed-bitcode-markerで、アーカイブビルドの場合は-fembed-bitcodeでビルドされます。 1つのオプションは、アーカイブのビルド後にビットコードがバイナリ内にあることを単に「マーク」し、新しいビットコードルールを適用します。 。

池田翔のBITCODE処理のガイドも役立つかもしれません:

完全なスライドデッキはこちらで確認できます。

15
Xeieshan

静的ライブラリを構築していて、ビットコードを有効にしたい場合は、(1)ENABLE_BITCODE = YESだけでは不十分な場合があります。

(2)設定-fembed-bitcode以下のエラーは、Teamcityでビルドされたときに複数のファイルに対してまだスローされていました

bitcode bundle could not be generated because ‘/path/fileInYourStaticLib.a(fileInYourStaticLib.o)’ was built without full bitcode. All object files and libraries for bitcode must be generated from Xcode Archive or Install build for architecture arm64

上記のステップ(1)および(2)に加えて、最終的に問題を解決するのに役立ついくつかのヒント/考慮事項

  1. 「PROJECT」およびすべての「TARGETS」で変数「Other C Flags」を「-fembed-bitcode」に設定してください。

  2. 静的ライブラリを作成しようとしているプロジェクトが複数ある場合は、すべてのプロジェクトに"-fembed-bitcode"有効。

  3. On Build Settings, click on the + sign at the top to add a user-defined build setting with the nameBITCODE_GENERATION_MODE, and set Debug toマーカー, Release tobitcode

  4. 上記の手順が機能しない場合は、このオプションを試すこともできます。 On Build Settings -> Other C flags, set Debug to- fembed-bitcode-marker, and Release to- fembed-bitcode

このブログは大きな助けになりました https://medium.com/@heitorburger/static-libraries-frameworks-and-bitcode-6d8f784478a9

また、上記の変更を行うたびに、DerivedDataを削除し、XCodeプロジェクトをクリーンアップし、場合によってはXCodeを終了して再起動してください。

10
Naishta