iOS9 - 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 App Store.

bitcode是被编译程序的一种中间代码。包含bitcode配置的程序将会在AppStore上被编译和链接。bitcode允许苹果在后期重新优化我们程序的二进制文件,而不需要我们重新提交一个新版本到AppStore。

当我们使用Xcode7以上版本新建一个项目之后,程序默认是使用bitcode,即bitcode选项默认为Yes,我们可以在Build Setting -> Enable bitcode选项中查看这个设置。


对于iOS而言,bitcode是可选的,对于watchOS和tvOS,bitcode是必须的。如果我们支持了bitcode,那么app中所有的framework都必须支持bitcode,如果有第三方库不支持bitcode,那么打包出错,所以只能关闭app中的bitcode,等待对应的第三方库支持bitcode才能够使用bitcode功能。并且打包提交的时候会出现对应的bitcode选项,如下图,参考这里



实际问题

项目经常会引入第三方库,如果第三方库不支持bitcode,那么打包肯定会出错,提示对应的第三方库没有bitcode。


为了解决这个问题,有2种方案:

1)是关闭工程中的bitcode功能,将Yes设置为No,可以参考这里

2)找第三方库那边重新生成带bitcode功能的库,即支持bitcode功能

注意:如果没有开启Bitcode,那么在iTunes上是下载不了dsym文件的.具体内容看这里,截图如下:


也有可能是因为改动了Debug information Formation为DWARF with dSYM file,默认是直接设置为DWARF with dSYM file的。


另外可以从本地直接获取dSYM文件




BitCode优缺点

优点:

1)bitcode上传到Apple服务器后,Apple为安装app的目标设备进行二进制优化,减少安装包的下载大小

2)Apple以后如果设计了采用新指令集的新CPU,可以继续使用同一份bitcode编译出新CPU上执行的可执行文件,供新设备用户下载安装

缺点:

1)使用了bitcode之后,用户安装的二进制不是开发者这边生成的,而是Apple服务器经过优化生成的二进制,对于开发者而言,没有了对应的调试符号信息。


参考

What is app thinning?(iOS,tvOS,watchOS)


猜你喜欢

转载自blog.csdn.net/longshihua/article/details/80402087
今日推荐