如何正確理解 Bitcode

如何正確理解 Bitcode(轉(zhuǎn)載至糖炒小蝦)

昨天去美團(tuán)吹水,聊到 BitCode 話題,朋友說他們發(fā)現(xiàn)美團(tuán)沒有開啟 Bitcode,下載下來的包還是二進(jìn)制文件只有一個(gè)架構(gòu)的狀態(tài)。我感到非常不可思議,晚上就去越獄了我的 iPad mini,剛好上周 9.1 越獄出了。結(jié)果發(fā)現(xiàn)果真如此。今天早晨和 SunnyXX 提及此事,都倍感神奇,研究了一番,SunnyXX 又去查了蘋果文檔,發(fā)現(xiàn)大家都把 Bitcode 理解錯(cuò)了

BitCode 是什么

我們最近聚會(huì)總說,xxx SDK 不求上進(jìn),一年了還不支持 Bitcode。一旦支持了,ipa 大小能少了不小。然而今天看完文檔發(fā)現(xiàn)并不是這么回事。

Bitcode,干的事情是指令集優(yōu)化。根據(jù)你設(shè)備的狀態(tài)去做編譯優(yōu)化,進(jìn)而提升性能,但這對包的大小優(yōu)化起不到什么本質(zhì)上的作用

那么美團(tuán)那個(gè)事件是怎么回事呢?

App Thinning in Xcode

在查文檔之前,我干了這么樣一件事。對比了一下 iOS 8、iOS 9 上的美團(tuán)占手機(jī)大小。結(jié)果發(fā)現(xiàn)了一個(gè)問題,如圖。

我確定美團(tuán)是 Universial 版本,也確定這兩個(gè)美團(tuán)是同一版本號(hào)。然而體積差了 40+ MB。直接把 iOS 8 上的二進(jìn)制包拿出來(需越獄),在命令行下

file imeituan

我們發(fā)現(xiàn),他是同時(shí)存在 armv7 和 arm64 兩個(gè)指令集的。

我又在 iOS 7 上干了同樣的事情,與 iOS 8 結(jié)果一致。于是我們能得出一個(gè)推論:這個(gè) ipa 變小的事情是 iOS 9 的 feature

知道是 iOS 9 的問題了,就回過頭來去看 WWDC 2015 Session 404,App Thinning in Xcode,我當(dāng)初看這篇睡著了。官方有這么一張 PPT。

說明,APP Thining 這件事并不只是 Bitcode,而是由:App Slicing、On Demand Resources,Bitcode組成

其中,App Slicing干的事情是如下圖這樣,根據(jù)你設(shè)備型號(hào),生成對應(yīng)資源的 ipa,以節(jié)省空間。

并且我們在文檔里看到了這么一句話:

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

也就是說,對于 ipa 減肥,主要是由拆分架構(gòu)、資源文件來起到絕對性作用。而這個(gè)功能 iOS 9.0.2 之前的用戶都享受不到。

再來說一下On Demand Resource的作用,蘋果的示意圖很清晰。

作為游戲,只需要下載公共資源文件、初始關(guān)卡。每過一關(guān),再下載對應(yīng)資源文件可以大幅減少包的大小。這對安裝包只有 200M 限制的 Apple TV 格外重要。

那么,我們知道。開了 Bitcode 后,會(huì)根據(jù)不同設(shè)備來分包。會(huì)不會(huì)能起到 iOS 8 縮減體積的作用呢?事實(shí)上并不是如此,大家可以去下載一下手機(jī)百度。會(huì)發(fā)現(xiàn) iOS 8,比 iOS 9 大得多。

所以我們能得出來 2 個(gè)不大不小的結(jié)論:

1. 如果想給 ipa 減肥,Bitcode 乃至 App Thinning 都對 iOS 9.0.2 以下用戶無效。

2. 其實(shí)Bitcode 對 ipa 減肥起不到什么作用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容