关于bitcode的介绍,直接看下边两篇:
理解Bitcode:一种中间代码
Xcode 7 Bitcode的工作流程及安全性评估
大牛们已经把bitcode说的很清楚了,我结合自己的实践梳理出以下流程:
主工程引用静态库有两种形式(参考:在iOS中创建静态库)
①:代码依赖
②:引用.a
对应的,让静态库支持bitcode也有不同的地方。
先来看第一种:直接上图配置
注意代码依赖的工程配置
主工程的头文件搜索路径配置
打开子工程的bitcode
看到第三张图片,就能看出来,代码依赖可以在主工程中动态修改。
再来看第二种:
打开.a工程的bitcode
添加到主工程中
配置主工程头文件
这个时候,build一下没发现什么问题,但是如果archive就会报错:
ld: bitcode bundle could not be generated because '/Users/xxx/work/test-demo/bitcode/BitcodeTest/BitcodeTest/TestLibA/libTestLibA.a(TestLibA.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
clang: error: linker command failed with exit code 1 (use -v to see invocation)
解决这个错误就需要在生成的.a工程中添加一下配置:
other c flags 添加-fembed-bitcode,之后在run一下生成新的.a,然后替换主工程中的.a即可
然后在对主工程archive,即可:
现在系统的总结下:
一、代码依赖
方便控制,但是每次build花费的时间就长了。
如果碰到静态库有分类,报错unregistered selector ....,只需要在主工程other link flags 添加 -all_load即可。
二、.a引用
.a稍微复杂了点,不过一般引用的.a都是第三方的,也无需考虑太多。如果是自己制作,就参考上边。
对于.a引用衍生出另一个问题,如何判断.a支持bitcode?
①
实践:
②
通过这两种方法,能方便的查看.a是否支持bitcode.
最能直接检验的方法就是archive。在最后打包的时候能看到如下就说明完全没有问题了。