ビットコードをサポートするために静的ライブラリを更新しましたが、私の研究からそれを達成するための2つの方法を見つけました。
fembed-bitcode
フラグを追加する( link )BITCODE_GENERATION_MODE
をbitcode
に設定したユーザー定義設定の追加( link )これら2つのオプションに違いはありますか?
唯一の違いは、fembed-bitcode
を使用すると、iphonesimulatorの静的ライブラリが完全なビットコードを有効にして構築されることです(私の場合、バイナリサイズは5MBから13MBに変更され、otool
)、使用法に違いはないようです。
ENABLE_BITCODE=YES
でライブラリを通常にビルドすると、Xcodeはビルドフラグ-fembed-bitcode-marker
をclangの呼び出しに追加し、最終的なoファイルに「空の」ビットコードを配置します。
したがって、ビルドフェーズでコンパイルアクションを見ると、次のようになります。
CompileC {build_path} /StaticBitcode/StaticLogger.o StaticBitcode/StaticLogger.m normal armv7 Objective-c com.Apple.compilers.llvm.clang.1_0.compiler cd {path}/StaticBitcode export LANG = en_US.US-ASCII export PATH = "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/local/bin:/usr/bin :/ bin:/ usr/sbin:/ sbin "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x Objective-c -Arch armv7 -fmessage-length = 0 -fdiagnostics -show-note-include-stack -fmacro-backtrace-limit = 0 -std = gnu99 -fobjc-arc -fmodules -gmodules -fmodules-cache- [...]-fembed-ビットコードマーカー[...]
これは、ビルドアクションに当てはまります(ターゲットに依存しません)。
Build & Archive
を実行すると、-fembed
フラグが-fembed-bitcode
に置き換えられます。これは、実際にビットコード対応バイナリを構築します。
CompileC {build_path} /StaticBitcode/StaticLogger.o StaticBitcode/StaticLogger.m normal armv7 Objective-c com.Apple.compilers.llvm.clang.1_0.compiler cd {path}/StaticBitcode export LANG = en_US.US-ASCII export PATH = "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/local/bin:/usr/bin :/ bin:/ usr/sbin:/ sbin "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x Objective-c -Arch armv7 -fmessage-length = 0 -fdiagnostics -show-note-include-stack -fmacro-backtrace-limit = 0 -std = gnu99 -fobjc-arc -fmodules -gmodules -fmodules-cache- [...]-fembed-ビットコード[...]
したがって、-fembed-bitcode
フラグをその他のCフラグに追加すると、コンパイル時に2つのフラグがコンパイラーに送信されます。別のプロジェクトにリンクされているライブラリを使用しているときに受け取る警告をいくつか沈黙させます。ただし、期待される動作が得られるかどうかを確認する必要があります。 :)
(他のCフラグで-fembed-bitcode
を使用してテストしたとき、Xcodeはclang: warning: argument unused during compilation: '-fembed-bitcode-marker'
という警告を出しました)
一方、
BITCODE_GENERATION_MODE=bitcode
にUser-defined Setting
を設定すると、ビルドフェーズ中でも、ファイルは-fembed-bitcode
フラグを使用してコンパイルされます。
また、BITCODE_GENERATION_MODE=marker
を設定すると、アクションフェーズに関係なく、フラグは-fembed-bitcode-marker
を使用してコンパイルされます。
そのため、すべてのアクション(ビルドとアーカイブ)でビットコードを有効にしたい場合、BITCODE_GENERATION_MODE
設定を使用するのがより良い方法です。