iOS APP優化之--IPA體積優化
專案中在對IPA體積的優化
首先需要了解下ipa包的組成:
ipa是一個壓縮包, 安裝包裡的主要構成是(圖片+文件+二進位制檔案)
接下來會對各個部分分別嘗試優化處理已減小安裝包體積:
1.圖片: 使用這個指令碼工具可以大範圍檢測程式中沒有用到的圖片
可以看到有好多資源都沒有應用到。
注意:這裡在刪除未應用的圖片時注意第三方庫裡的不能刪除,保險起見相同資料夾下的最好在工程裡手動再搜尋一次,確定沒有使用到,就可以刪除了。這裡對圖片整理刪除前後打包的IPA大小做一對比:
可以看到IPA減小了1M· 最關鍵的在於,我將未使用到的圖片整理後發現;大小基本和IPA減小的一致
這就比較好玩了,也說明了每減少一張圖片,就實實在在的減少了ipa的大小。
2.文件資源的優化
文件資源主要是排查:
是否有不必要的文件資源,如果過期的舊版本所需要的文件資源 清理即可。
優化文件資源大小,主要是優化精簡文件內容。
3.二進位制包優化
二進位制包是由各種程式碼檔案,靜態庫 動態庫 經過編譯後生成的可執行檔案。
通過對上面的檔案進行分析,就知道每個類在最終的可執行檔案中佔據的大小。 然後有針對性的進行優化就可以了。
4.Xcode編譯選項優化:
在Build Setting 中對以下幾點進行設定
Strip Linked Product 設定為YES 需要注意的是Strip Linked Product也受到Deployment Postprocessing設定選項的影響。在Build Settings中,我們可以看到, Strip Linked Product是在Deployment這欄中的,而Deployment Postprocessing相當於是Deployment的總開關。記得把Deployment Postprocessing也設定為YES, 該選項對安裝包大小的影響非常大, 以剛剛的專案為例,如果不開啟此設定,ipa大小是35.8M,比設定為yes大了4.8M PS:Deployment Postprocessing這個配置項如果使用xcode打包,xcode會預設把這個變數置為YES, 如果使用指令碼打包,記得設定。
Symbols Hidden by Default設定為YES
Make Strings Read-Only 設定為YES
最後的一些建議:
iOS的專案,在安裝包沒有大到一定程度之前,研發和產品一般都關注較少,我們在平時的開發中也會有一些不好的習慣,在這裡列舉一下:
1.不要為了一片樹葉 引入一片森林。 有時候你只想接入一個base64編碼的函式,結果接入了一個有幾十個類檔案的util庫,除了你用到的這個函式,其餘的可能再也不會有人用到, 另一個研發為了另一個RSA加密需求,結果又引入了另一個一個extensions庫 。那些類檔案都是成本,類檔案,函式,甚至不同長度的函式名字都對最終的安裝包大小產生影響。 積少成多, 安裝包會越來越大。 而且程式碼量越大,app啟動時候DYLD連結的工作量越大,啟動耗時也會變長。
2.對於要接入到app的資原始檔,要check一下大小,一個100*100大小的圖片如果幾十MB 肯定設計師在切圖的時候有些問題,打包後也要check一遍。對於集體打包到Assert.car裡的檔案,可以找工具解開看一下。 我們遇到過打了一次包後 發現安裝包大了幾十MB,經過分析,發現是有一張圖片意外的大,找人優化後 變成幾百k。
3.注意平時的開發習慣,廢棄模組及早清理。
4.同質的開源庫(譬如AFnetworking vs ASIHttpRequest),只接入一種。
5.建立預警機制, 一般上線後,都是指令碼打包,除了正常的生成ipa包之外,也要生成分析檔案, 列出相對上一次上線包大了多少,類檔案增加了多少。這樣的機制也有助於防止安裝包悄無聲息的變成巨物。