一、常規瘦身方案
1、壓縮資源
壓縮項目中資源包括圖片、字符串、音視頻等資源。
使用Assets
管理圖片資料,其內部實現了splicing切片技術,并且會壓縮圖片
圖片壓縮工具:tinypng或者ImageOptim
- 幀動畫圖片可替換為lotties、APNG
- 小圖或表情圖可替換為iconFont
- 大圖可替換為svg、webp
2、刪除無用/重復資源
- 圖片用2x和3x圖就可以,不要用1x圖
- 可以用LSUnusedResources搜索出未使用的圖片
注意:該軟件搜索出來的圖片有可能項目中還在用,刪除之前需要在工程中先搜索下圖片是否有使用再確認是否可以刪除。
3、刪除無用代碼
- 刪除無用類:可以用WBBladesForMac來分析,注意 通過字符串(路由)調用的類也會檢測為無用類。
- 刪除無用庫
- 刪除已下架業務
二、非常規瘦身方案
1、Strip :去除不必要的符號信息
- Strip Linked Product 和 Strip Swift Symbols 設置為 YES,Deployment Postprocessing 設置為 NO,發布代碼的時候也需要勾選 Strip Swift Symbols。
- Strip Debug Symbols During Copy 和 Symbols Hidden by Default 在release下設為YES
- Dead Code Stripping 設置為 YES
- 對于動態庫,可用
strip -x [動態庫路徑]
去除不必要的符號信息- 動態庫strip之后需要再次對ipa重簽名
2、Make Strings Read-Only設為YES
3、Link-Time Optimization(LTO)release下設為 Incremental。
WWDC2016介紹編譯時會移除沒有被調用的方法和代碼,優化程序運行效率
===============下面幾個一般不用===============
4、開啟BitCode:需要所有使用的第三方庫支持
5、去除異常支持:不能使用@try @catch
Enable C++ Exceptions和Enable Objective-C Exceptions設為NO,Other C Flags添加-fno-exceptions
6、不生成debug symbols:不能生成dSYM,但是效果非常顯著
Generate debug symbols選項 release 設置為NO
7、移除不必要的指令集:如armv6 armv7,但該設置已不需要
Xcode現在將AppStore的ipa的鏈接 推遲到上傳包之后,也就是說:ipa提交給蘋果服務器之后,蘋果服務器會鏈接生成所有指令集的最終ipa,再根據splicing技術給不同機型分配不同指令集的ipa。
- 所以開發者直接設置支持所有指令集即可
三、腦圖借鑒
四、參考文檔:
iOS 安裝包瘦身 (上篇)
iOS 安裝包瘦身(下篇)
https://github.com/wuba/WBBlades
京東商城iOS瘦身
微信iOS瘦身