当您正常构建库时,使用ENABLE_BITCODE=YES
,Xcode会向任何clang调用添加构建标志-fembed-bitcode-marker
,将一个“空”位代码放入最终的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-bitcode-marker [...]
这适用于构建操作(与目标无关)。
当您执行Build & Archive
时,-fembed
标志将被-fembed-bitcode
替换,这确实构建了一个启用位代码的二进制文件:
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" -fembed-bitcode /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- [...]
如果在其他C标志中添加-fembed-bitcode
标志,则编译时将向编译器发送两个标志。这可能会消除在另一个项目上链接的库中接收到的某些警告,但需要检查是否获得了预期的行为。 :)
(当我在其他C标志上测试使用-fembed-bitcode
时,Xcode会发出警告clang:warning:argument unused during compilation:'-fembed-bitcode-marker'
)
另一方面,
如果您在User-defined Setting
中设置BITCODE_GENERATION_MODE=bitcode
,即使在构建阶段,文件也将使用标志-fembed-bitcode
进行编译。
而且,如果您设置BITCODE_GENERATION_MODE=marker
,则文件将使用标志-fembed-bitcode-marker
进行编译,与操作阶段无关。
因此,如果要在每个操作(构建和存档)中启用位码,则最好使用BITCODE_GENERATION_MODE
设置。