一、了解bitcode
首先看下bitcode官方定义:
Bitcode is an intermediate representation of a compiled program. Apps you upload to iTunes Connect that contain bitcode will be compiled and linked on the App Store. Including bitcode will allow Apple to re-optimize your app binary in the future without the need to submit a new version of your app to the store.
bitcode是被编译程序的一种中间形式的代码。包含bitcode配置的程序将会在App store上被编译和链接。bitcode允许苹果在后期重新优化我们程序的二进制文件,而不需要我们重新提交一个新的版本到App store上。
Bitcode. When you archive for submission to the App Store, Xcode will compile your app into an intermediate representation. The App Store will then compile the bitcode down into the 64 or 32 bit executables as necessary.
当我们提交程序到App store上时,Xcode会将程序编译为一个中间表现形式(bitcode)。然后App store会再将这个botcode编译为可执行的64位或32位程序。
bitcode工作原理二、优缺点
优点:
1.降低包大小
bitcode包上传到苹果中心服务器后, 中心服务器可以为目标安装App的设备进行优化二进制, 减小安装包的下载大小, 当然iOS开发者也可以上传多个版本而不是打包到单个包里, 但是这样会占用更多的存储空间. 最重要的是允许苹果可以在后台服务器对应用程序进行签名, 而不用导出任何密钥到终端开发者那里.
2.提高运行效率
目前通过xcode编译的ipa包都是针对主要CPU指令集进行编译如armv7、armv7s、arm64,程序大多在高版本的cpu指令集下兼容运行,从而不能发挥最佳运行效率。而支持bitcode后,苹果将对对我们提交的程序针对不同机型重新编译,大大提高性能。
另外,如果苹果使用了新指令集的CPU,也可以继续从这份bitcode程序开始编译出新CPU上执行的可执行文件, 以供用户下载安装。
缺点:
没用bitcode之前,当应用程序奔溃后,开发者可以根据获取的的奔溃日志再配上对应二进制文件的调试符号表信息可以还原程序运行过程到奔溃时后调用栈信息,对问题进行定位排查.但是用了bitcode之后,用户安装的二进制不是开发者这边生成的,而是苹果服务器经过优化后生成的,其对应的调试符号信息丢失了,也就无法进行前面说的还原奔溃现场找原因了
(解决:在Xcode的Organizer工具中下载对应安装包的新的符号文件)
三、如何配置
在xcode中选择buildsetting-bitcode为YES
不能编译过的原因:链接了第三方二进制库或者框架(.a、.framework),而这些框架或者库恰好没有设置bitcode.
这也是为什么市场上还有很多APP不支持bitcode的一大原因,在编译过程中我们要么让所有引入的第三方库都支持bitcode,要么关闭target的bitcode选项,否则不能编译通过。
网友评论