如何正确理解BitCode

前言

昨天去美团吹水,聊到 BitCode 话题,朋友说他们发现美团没有开启 Bitcode,下载下来的包还是二进制文件只有一个架构的状态。我感到非常不可思议,晚上就去越狱了我的 iPad mini,刚好上周 9.1 越狱出了。结果发现果真如此。今天早晨和 SunnyXX 提及此事,都倍感神奇,研究了一番,SunnyXX 又去查了苹果文档,发现大家都把 Bitcode 理解错了

BitCode 是什么

我们最近聚会总说,xxx SDK 不求上进,一年了还不支持 Bitcode。一旦支持了,ipa 大小能少了不小。然而今天看完文档发现并不是这么回事

Bitcode,干的事情是指令集优化。根据你设备的状态去做编译优化,进而提升性能,但这对包的大小优化起不到什么本质上的作用

那么美团那个事件是怎么回事呢?

App Thinning in Xcode

在查文档之前,我干了这么样一件事。对比了一下 iOS 8、iOS 9 上的美团占手机大小。结果发现了一个问题,如图。

如何正确理解BitCode_第1张图片

如何正确理解BitCode_第2张图片
我确定美团是 Universial 版本,也确定这两个美团是同一版本号。然而体积差了 40+ MB。直接把 iOS 8 上的二进制包拿出来(需越狱),在命令行下

file imeituan

我们发现,他是同时存在 armv7 和 arm64 两个指令集的。


我又在 iOS 7 上干了同样的事情,与 iOS 8 结果一致。于是我们能得出一个推论:这个 ipa 变小的事情是 iOS 9 的 feature

知道是 iOS 9 的问题了,就回过头来去看 WWDC 2015 Session 404,App Thinning in Xcode,我当初看这篇睡着了。官方有这么一张 PPT。

如何正确理解BitCode_第3张图片

说明,APP Thining 这件事并不只是 Bitcode,而是由: App SlicingOn Demand Resources, Bitcode 组成

其中,App Slicing 干的事情是如下图这样,根据你设备型号,生成对应资源的 ipa,以节省空间。

如何正确理解BitCode_第4张图片

并且我们在文档里看到了这么一句话:

In fact, app slicing handles the majority of the app thinning process. ‘App Slicing’ feature finally switched on in iOS 9.0.2

也就是说,对于 ipa 减肥,主要是由拆分架构、资源文件来起到绝对性作用。而这个功能 iOS 9.0.2 之前的用户都享受不到。

再来说一下 On Demand Resource 的作用,苹果的示意图很清晰。

如何正确理解BitCode_第5张图片
作为游戏,只需要下载公共资源文件、初始关卡。每过一关,再下载对应资源文件可以大幅减少包的大小。这对安装包只有 200M 限制的 Apple TV 格外重要。

那么,我们知道。开了 Bitcode 后,会根据不同设备来分包。会不会能起到 iOS 8 缩减体积的作用呢?事实上并不是如此,大家可以去下载一下手机百度。会发现 iOS 8,比 iOS 9 大得多。

所以我们能得出来 2 个不大不小的结论:

1. 如果想给 ipa 减肥,Bitcode 乃至 App Thinning 都对 iOS 9.0.2 以下用户无效。
2. 其实Bitcode 对 ipa 减肥起不到什么作用。


你可能感兴趣的:(ios开发)