iOS IPA體積優(yōu)化
-
需求背景
主要是整體的安裝包體積太大產(chǎn)生了一些差評(píng),另外在構(gòu)建時(shí)長(zhǎng)和上傳時(shí)長(zhǎng)越來(lái)越長(zhǎng)。
IPA包大小:
下圖是App安裝包在常見(jiàn)設(shè)備的安裝大?。?/div>
-
問(wèn)題原因:
-
代碼邏輯問(wèn)題
1、通過(guò)解壓將IPA改成zip格式,然后解壓處理的payload文件。通過(guò)右鍵選擇 show package contents,可以進(jìn)入到IPA文件下。
2、打開(kāi)終端,cd 上面文件夾下,通過(guò)終端 $ du -sh * | sort -rh 可以查看文件夾下所以文件大小排序。
可以先看到未優(yōu)化前的文件排序如下:
可以看到1.5G的IPA包,PlugIns文件夾獨(dú)占了800+M,到這里基本可以確定這個(gè)文件夾一定是有什么異常的,再進(jìn)入PlugIns文件夾下,這里是我們應(yīng)用的擴(kuò)展程序,如widget,sirishortcut,watch App
再右鍵去查看today.appex的package contents如下,發(fā)現(xiàn)里面竟然也有一個(gè)assets.car,而且獨(dú)占200+M的大小。到這里基本上可以定位問(wèn)題原因了。
編譯時(shí)間:
原因總結(jié)
-
我們的擴(kuò)展程序因?yàn)閭€(gè)別的圖片共用了Switchbot主工程的圖片資源,所以也將Images.xcimage文件拷貝到了自己的target下面。或者干脆直接存在了Images.xcimage里面。導(dǎo)致多個(gè)target都拷貝了Images.xcimage文件,所以這里白白多了幾百M(fèi)的大小。
-
另外關(guān)于國(guó)際化部分?jǐn)U展程序也引用了Switchbot的文件,目前這個(gè)文件也有1.6M,后續(xù)隨著語(yǔ)種的增加也是會(huì)增加不少的包體積。 --- 待優(yōu)化
優(yōu)化過(guò)程
testFlight 包
已優(yōu)化的的文件排序如下:
PlugIns文件夾優(yōu)化后
編譯時(shí)間優(yōu)化后
-
本地資源原因
PNG圖片轉(zhuǎn)webp方案對(duì)比
另外,webp還支持動(dòng)圖
項(xiàng)目圖片大小分布
轉(zhuǎn)換方案
iOS目前是的圖片有1x,2x,3x,GIF等。替換步驟
-
圖片轉(zhuǎn)換
-
對(duì)于PNG格式的圖片可使用到了谷歌的工具h(yuǎn)ttps://developers.google.com/speed/webp/docs/cwebp一鍵轉(zhuǎn)換。
-
-
刪除原有png源文件
-
導(dǎo)入第一步轉(zhuǎn)換的webp圖片
-
封裝統(tǒng)一加載圖片的方法
影響范圍
因涉及修改除App桌面圖標(biāo),啟動(dòng)頁(yè)圖片,watch,widget,GIF,Lottie(動(dòng)圖)外的所有圖片,所以整體影響范圍包含了App絕大部分的頁(yè)面。
風(fēng)險(xiǎn)點(diǎn)
-
顯示圖片大小比例不正常
原因:圖片原始比例是2x,3x,加載圖片大小是1x大小。但轉(zhuǎn)成webp后,考慮webp圖片清晰度的問(wèn)題,所有webp圖片優(yōu)先使用的3x的png轉(zhuǎn)換的。所以加載后的圖片大小變成了原來(lái)的3倍。-
需要對(duì)控件設(shè)置frame,或通過(guò)snapKit設(shè)置布局
-
-
UIButton圖片大小比例不正常
UIButton的frame設(shè)置40x40,但是實(shí)際圖片大小可能是超過(guò)40x40,這是即使設(shè)置了大小,圖片仍然是比例不正常的。
-
通過(guò)wo_setImage接口的設(shè)置圖片的,可以默認(rèn)給button添加一個(gè)屬性,在layoutSubviews,跟進(jìn)圖片大小自動(dòng)縮小一倍。
-
給UIButton 新增一個(gè)方法,來(lái)設(shè)置圖片大小問(wèn)題。
-
自定義一個(gè)UIButton類(lèi),統(tǒng)一處理。
-
wo_setImage 壓縮三倍再返回圖片。---- 無(wú)用,resize后清晰度完全不夠用
-
在Mac上統(tǒng)一處理一次,需要第一次轉(zhuǎn)換webp后,根據(jù)圖片名稱包含3x,2x的,轉(zhuǎn)成一倍的圖片再導(dǎo)入。---- 無(wú)用,resize后清晰度完全不夠用
-
代碼加載的圖片缺失
-
使用UIImage(named:xxx) 方法加載的圖片,可以改成使用UIImage.initWebpImage方法?;蚴褂脀o_setIamge方法加載圖片。
-
webp圖片缺失,需要導(dǎo)入下webp文件
-
-
Xib 加載的圖片缺失
-
需要手動(dòng)通過(guò)代碼設(shè)置一下圖片,并注意第1點(diǎn)和第2點(diǎn)問(wèn)題
-
-
新需求的圖片導(dǎo)入
-
可直接在藍(lán)湖導(dǎo)入webp格式圖片,然后復(fù)制到supportFiles/Image/ImageResources.bundle下面
-
6.18版本 替換curtain 添加圖文教程所有圖片后
IPA 大小 425.9M,解壓后大小655.4M。
-
總結(jié):
內(nèi)測(cè)包第一階段優(yōu)化
優(yōu)化代碼邏輯問(wèn)題
-
IPA文件從 1.24G減少至488.2M,優(yōu)化61.5%
-
解壓后SwitchBot.app文件從1.5G減少至835M,優(yōu)化45%
-
整體編譯時(shí)間從428s減少到312s,優(yōu)化27%,其中Asset文件編譯時(shí)間從643s,優(yōu)化之133s, 優(yōu)化79%
內(nèi)測(cè)包第二階段優(yōu)化
優(yōu)化本地圖片資源問(wèn)題:
-
IPA文件從 488.2M減少至270M,優(yōu)化44%
-
編輯速度未統(tǒng)計(jì)
整體優(yōu)化成果
-
內(nèi)測(cè)包大?。航刂沟侥壳白钚?.5版本,IPA的包提交從6.17版本1.24G減少至7.5版本270M,優(yōu)化78%
-
appstore包大?。夯谧钚耰Phone 14上的數(shù)據(jù),優(yōu)化前6.17版本下載體積489 MB ,安裝體積722 MB。優(yōu)化后版本7.5版本下載體積236 MB ,安裝體積498 MB。下載體積優(yōu)化253M約52%,安裝體積優(yōu)化224M約32%。
-
編譯速度:整體編譯時(shí)間從428s減少到312s,優(yōu)化27%,其中Asset文件編譯時(shí)間優(yōu)化79%。

浙公網(wǎng)安備 33010602011771號(hào)