如何正确理解 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 Slicing、On Demand Resources,Bitcode组成

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

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

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

In fact, app slicing handles themajorityof 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 减肥起不到什么作用。

作者:hope7th

链接:https://www.jianshu.com/p/6429f1ed398d

來源:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(如何正确理解 Bitcode)