Xcode ビルドオプション「ビットコードを有効にする」の影響 はい/いいえ 質問する

Xcode ビルドオプション「ビットコードを有効にする」の影響 はい/いいえ 質問する

昨日、parse.com ライブラリに関する大量の警告に気づきました。

緊急: '[path]/Parse.framework/Parse(PFAnalytics.o)' はビットコードなしでビルドされたため、すべてのビットコードが削除されます。ビットコードを有効にして (Xcode 設定 ENABLE_BITCODE) 再構築するか、ベンダーから更新されたライブラリを取得するか、このターゲットのビットコードを無効にする必要があります。注: これは将来エラーになります。

私はこれらの警告を削除できることを知っていますこの答えしかし、AppStore への提出やアプリの実際のパフォーマンスに悪影響があるかどうか疑問に思っています。

Xcodeはビットコードに関する情報を提供します

この設定を有効にすると、ターゲットまたはプロジェクトは、それをサポートするプラットフォームおよびアーキテクチャのコンパイル時にビットコードを生成する必要があります。アーカイブ ビルドの場合、ビットコードはリンクされたバイナリで生成され、アプリ ストアに送信されます。その他のビルドの場合、コンパイラとリンカーは、コードがビットコード生成の要件に準拠しているかどうかを確認しますが、実際のビットコードは生成しません。[ENABLE_BITCODE]

しかし、このテキストからは本当に役立つ情報は得られません。

  • リンクされた回答を使用して、悪影響を与えることなく、また将来の AppStore への提出に支障をきたすことなく、問題を回避できますか?
  • は実際には何ENABLE_BITCODEをするのでしょうか。将来的には必須要件になるのでしょうか?
  • 有効/無効にするとパフォーマンスに影響はありますか?

ベストアンサー1

  • ENABLE_BITCODE は実際には何を行うのでしょうか。将来的には必須要件になるのでしょうか?

どのレベルの答えを求めているのか分かりませんので、少し考えてみましょう。すでにご存知のものもあります。

プロジェクトをビルドすると、XcodeはclangObjective-Cターゲットの場合は を、 Swiftターゲットの場合はswift/ を呼び出しますswiftc。これらのコンパイラは両方ともアプリをコンパイルします。中間表現(IR)のうちの1つはビットコードです。このIRから、LLVMと呼ばれるプログラムが引き継ぎ、x86 32ビットおよび64ビットモード(シミュレータ用)とarm6/arm7/arm7s/arm64(デバイス用)に必要なバイナリを作成します。通常、これらのさまざまなバイナリはすべて、ファットバイナリ

ENABLE_BITCODE オプションは、この最後のステップを省略します。IR ビットコード バイナリを含むアプリのバージョンを作成します。これには多くの優れた機能がありますが、1 つの大きな欠点があります。それは、どこでも実行できないことです。ビットコード バイナリを含むアプリを実行するには、ビットコードを x86 または ARM バイナリに再コンパイル (アセンブルまたはトランスコードなど... 正しい動詞はわかりません) する必要があります。

ビットコード アプリが App Store に提出されると、Apple はこの最終ステップを実行し、完成したバイナリを作成します。

現在、ビットコード アプリはオプションですが、これまでの経緯から、Apple はオプションのものを必須項目に変えてきました (64 ビット サポートなど)。これには通常数年かかるため、サードパーティの開発者 (Parse など) には更新する時間があります。

  • 上記の方法は、悪影響や将来の App Store への提出に影響することなく使用できますか?

はい、ENABLE_BITCODE をオフにすれば、すべてが以前と同じように動作します。Apple がビットコード アプリを App Store の要件にするまでは、問題ありません。

  • 有効/無効にするとパフォーマンスに影響はありますか?

これを有効にしてもパフォーマンスに悪影響が出ることはありませんが、テスト用のアプリの内部配布が複雑になる可能性があります。

プラスの影響については…まあ、それは複雑です。

App Store での配布では、Apple はファット バイナリを持つ 1 つのアプリではなく、マシン アーキテクチャ (arm6/arm7/arm7s/arm64) ごとにアプリの個別のバージョンを作成します。つまり、iOS デバイスにインストールされるアプリのサイズが小さくなります。

さらに、ビットコードが再コンパイルされると (アセンブルまたはトランスコードされるかもしれません... これも正しい動詞がわかりません)、最適化されます。LLVM は常に新しい、より優れた最適化の作成に取り組んでいます。理論的には、App Store は LLVM の新しいリリースごとに App Store でアプリの個別のバージョンを再作成できるため、アプリは最新の LLVM テクノロジで再最適化される可能性があります。

おすすめ記事