正确理解 Bitcode

今天看完文档发现并不是这么回事

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

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

App Thinning in Xcode

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

640?wx_fmt=png&wxfrom=5&wx_lazy=1

640?wx_fmt=png&wxfrom=5&wx_lazy=1
我确定美团是 Universial 版本,也确定这两个美团是同一版本号。然而体积差了 40+ MB。直接把 iOS 8 上的二进制包拿出来(需越狱),在命令行下

file imeituan

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

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1
我又在 iOS 7 上干了同样的事情,与 iOS 8 结果一致。于是我们能得出一个推论:这个 ipa 变小的事情是 iOS 9 的 feature

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

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

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

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

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

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

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 的作用,苹果的示意图很清晰。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1
作为游戏,只需要下载公共资源文件、初始关卡。每过一关,再下载对应资源文件可以大幅减少包的大小。这对安装包只有 200M 限制的 Apple TV 格外重要。

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

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

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

转载于:https://my.oschina.net/shengguoqiang/blog/757470

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值