启用/关闭Bitcode
Xcode设置路径为Build Settings -> Build Options -> Enable Bitcode
设置后,改变的是构建过程中环境变量ENABLE_BITCODE
的值。
需要注意的是,这个设置在不同的构建中表现不一样
- 平时用于调试、部署的构建,启用Bitcode后,仅进行Bitcode依赖检测,不会生成Bitcode符号到产物中。(项目中即使有非Bitcode库,也不影响调试、部署)
- 当进行Archive打包时,启用Bitcode后,则要求项目的所有依赖库均启用Bitcode(所有库均要有Bitcode符号)
另外,Xcode构建时也会读取环境变量HIDE_BITCODE_SYMBOLS
,这个变量默认YES。当HIDE_BITCODE_SYMBOL=NO
且 ENABLE_BITCODE=YES
时,则要求项目的所有依赖库均要有Bitcode符号
强制所有构建启用Bitcode
添加-fembed-bitcode
编译标识。设置路径为Build Settings -> Apple Clang - Custom Compiler Flags -> Other C Flags
添加后,无论哪种构建,均会强制启用Bitcode。
而通过 Build Settings -> Build Options -> Enable Bitcode 路径启用Bitcode,本质是添加了编译标识 -fembed-bitcode-marker,区别如下
-fembed-bitcode
,任何类型的Build都会带上Bitcode符号-fembed-bitcode-marker
, 只是在产物中做标记,表示可以支持Bitcode;而在Archive打包时,才会生成Bitcode符号
XcodeBuild构建如何启用BitCode
Shell环境中构建SDK(静态库、动态库)的场景,此时没有Archive构建,那么可以设置BITCODE_GENERATION_MODE=bitcode
解决。
BITCODE_GENERATION_MODE可以是marker
,也可以是bitcode
,默认取marker
例如:
xcodebuild BITCODE_GENERATION_MODE=bitcode .....
如何查看SDK中是否含有Bitcode符号
可以通过Mach-O View
工具查看,是否含有Section (__LLVM ,__bitcode )
.
也可以使用otool
命令查看
命令为otool -s __LLVM __bitcode mach-o文件
.