iOS bitcode实战

关于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所在的目录,
使用以下命令:
otool -arch armv7 -l  xxxx.a | grep bitcode
otool -arch arm64 -l  xxxx.a | grep bitcode 

能看到bitcode字样,至少有支持bitcode的可能,为什么说可能呢,最后要看archive

实践:


lipo -info xxxx.a
lipo -thin arm64 xxxx.a -output xxxx-arm64.a
ar -x  xxxx-arm64.a //这一步完成会得到一个.o文件,共下部使用
otool -l xxxx.o | grep bitcode


通过这两种方法,能方便的查看.a是否支持bitcode.



最能直接检验的方法就是archive。在最后打包的时候能看到如下就说明完全没有问题了。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值