今天看完文档发现并不是这么回事。
Bitcode,干的事情是指令集优化。根据你设备的状态去做编译优化,进而提升性能,但这对包的大小优化起不到什么本质上的作用
那么美团那个事件是怎么回事呢?
App Thinning in Xcode
在查文档之前,我干了这么样一件事。对比了一下 iOS 8、iOS 9 上的美团占手机大小。结果发现了一个问题,如图。
我确定美团是 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。
说明,APP Thining 这件事并不只是 Bitcode,而是由: App Slicing
、On Demand Resources
, Bitcode
组成
其中,App Slicing
干的事情是如下图这样,根据你设备型号,生成对应资源的 ipa,以节省空间。
并且我们在文档里看到了这么一句话:
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
的作用,苹果的示意图很清晰。
作为游戏,只需要下载公共资源文件、初始关卡。每过一关,再下载对应资源文件可以大幅减少包的大小。这对安装包只有 200M 限制的 Apple TV 格外重要。
那么,我们知道。开了 Bitcode 后,会根据不同设备来分包。会不会能起到 iOS 8 缩减体积的作用呢?事实上并不是如此,大家可以去下载一下手机百度。会发现 iOS 8,比 iOS 9 大得多。
所以我们能得出来 2 个不大不小的结论:
1. 如果想给 ipa 减肥,Bitcode 乃至 App Thinning 都对 iOS 9.0.2 以下用户无效。
2. 其实Bitcode 对 ipa 减肥起不到什么作用。