App Store 規(guī)定了安裝包大小超過 150MB 的 App 不能使用 OTA(over-the-air)環(huán)境下載玫荣,也就是只能在 WiFi 環(huán)境下下載。所以暑塑,150MB 就成了 App 的生死線处坪,一旦超越了這條線就很有可能會失去大量用戶。但是目前我們App企業(yè)端132.9MB,司機(jī)端124.3MB费坊。因此減少包瘦身就顯得比較重要倒槐。
目前正在開發(fā)的任務(wù)也進(jìn)入提測階段,手頭有了空閑時間附井,所以就開始研究App的瘦身方案讨越。
官方 App Thinning
App Thinning 是由蘋果公司推出的一項可以改善 App 下載進(jìn)程的新技術(shù),主要是為了解決用戶下載 App 耗費過高流量的問題永毅,同時還可以節(jié)省用戶 iOS 設(shè)備的存儲空間把跨。
現(xiàn)在的 iOS 設(shè)備屏幕尺寸、分辨率越來越多樣化沼死,這樣也就需要更多資源來匹配不同的尺寸和分辨率着逐。 同時,App 也會有 32 位意蛀、64 位不同芯片架構(gòu)的優(yōu)化版本耸别。如果這些都在一個包里,那么用戶下載包的大小勢必就會變大县钥。
App Thinning 會專門針對不同的設(shè)備來選擇只適用于當(dāng)前設(shè)備的內(nèi)容以供下載秀姐。比如,iPhone 6 只會下載 2x 分辨率的圖片資源若贮,iPhone 6plus 則只會下載 3x 分辨率的圖片資源省有。
App Thinning 有三種方式,包括:App Slicing谴麦、Bitcode蠢沿、On-Demand Resources。
App Slicing匾效,會在你向 iTunes Connect 上傳 App 后搏予,對 App 做切割,創(chuàng)建不同的變體弧轧,這樣就可以適用到不同的設(shè)備雪侥。
On-Demand Resources碗殷,主要是為游戲多關(guān)卡場景服務(wù)的。它會根據(jù)用戶的關(guān)卡進(jìn)度下載隨后幾個關(guān)卡的資源速缨,并且已經(jīng)過關(guān)的資源也會被刪掉锌妻,這樣就可以減少初裝 App 的包大小。
Bitcode 旬牲,是針對特定設(shè)備進(jìn)行包大小優(yōu)化仿粹,優(yōu)化不明顯。
這里的大部分工作都是由 Xcode 和 App Store 來幫你完成的原茅,你只需要通過 Xcode 添加 xcassets 目錄吭历,然后將圖片添加進(jìn)來即可。我們所做的任務(wù)較少擂橘。
圖片資源
圖片資源的優(yōu)化空間晌区,主要體現(xiàn)在刪除無用圖片和圖片資源壓縮這兩方面。而刪除無用圖片通贞,又是其中最容易朗若、最應(yīng)該先做的。
隨著項目的不斷迭代昌罩,可能有的功能已經(jīng)廢棄哭懈,或者UI改版導(dǎo)致項目中無用的圖片資源不斷增加。刪除圖片資源可以通過LSUnusedResources
使用方式簡單:
1遣总、從gitHub下載該項目,使用Xcode運(yùn)行此項目
2轨功、點擊?Browse.. 選擇你的項目工程目錄
3彤避、如果項目中有動態(tài)獲取的資源名,比如說icon_1 icon_2,可以勾選Ignore similar name,自行添加
4夯辖、點擊click?Search搜索
5、刪除不需要使用的資源董饰,注意留意fullPath蒿褂,因為有的圖片資源是第三方庫中的,可以自行看情況是否需要刪除
圖片資源壓縮
對于 App 來說卒暂,圖片資源總會在安裝包里占個大頭兒啄栓。對它們最好的處理,就是在不損失圖片質(zhì)量的前提下盡可能地做壓縮也祠。
1昙楚、可以使用將圖片轉(zhuǎn)成 WebP。WebP 是 Google 公司的一個開源項目诈嘿。
WebP 壓縮率高堪旧,而且肉眼看不出差異削葱,同時支持有損和無損兩種壓縮模式。比如淳梦,將 Gif 圖轉(zhuǎn)為 Animated WebP 析砸,有損壓縮模式下可減少 64% 大小,無損壓縮模式下可減少 19% 大小爆袍。WebP 支持 Alpha 透明和 24-bit 顏色數(shù)首繁,不會像 PNG8 那樣因為色彩不夠而出現(xiàn)毛邊。接下來陨囊,我們再看看怎么把圖片轉(zhuǎn)成 WebP弦疮?
Google 公司在開源 WebP 的同時,還提供了一個圖片壓縮工具 cwebp來將其他圖片轉(zhuǎn)成 WebP蜘醋。
不過胁塞,WebP 在 CPU 消耗和解碼時間上會比 PNG 高兩倍。而且webp作為非官方的圖片格式堂湖,實用上不夠方便闲先,而且不兼容App thinning。所以无蜂,我們有時候還需要在性能和體積上做取舍伺糠。
2、因為我們公司使用的是藍(lán)湖斥季,也可以下載icon時训桶,開啟切圖壓縮,畫質(zhì)基本是不變的酣倾。兼容App thinning
3舵揭、平時開發(fā)中盡量保持風(fēng)格統(tǒng)一,可以跟UI設(shè)計師溝通一下躁锡,同一類型的圖標(biāo)不要每開發(fā)一個功能午绳,就換圖標(biāo)。盡量做到同類型的圖標(biāo)能復(fù)用映之。如果只是顏色的不同拦焚,可以自己設(shè)置圖片的tintColor來改變顏色。多說一句杠输,如果沒有特殊要求赎败,我推薦直接使用蘋果公司提供的。具體來說蠢甲,在 iOS 系統(tǒng)內(nèi)置的 SF Symbols 為我們提供了 3150 個一致的僵刮、可定制的圖標(biāo)。
SF Symbols 有很多優(yōu)點:
它數(shù)量巨大,幾乎覆蓋所有應(yīng)用場景搞糕;
整合了 San Francisco 字體系統(tǒng)勇吊,當(dāng)用戶改變字體大小的時候,這些圖標(biāo)都會自動對齊寞宫;
所有圖標(biāo)都支持顏色萧福,我們可以根據(jù)需求搭配不同的顏色;
使用這些圖標(biāo)時也無須安裝辈赋,可以減少 App 的體積鲫忍。
代碼瘦身
刪除無用類,可以使用腳本钥屈。將無用類導(dǎo)出悟民,但是在刪除類的時候,盡量自己查下工程代碼排除一下篷就,因為有的類是通過Runtime的方式使用的射亏,這個腳本不能很好的檢測出來。