直接上建議:
- 資源優化
- 刪除無用圖片
- 使用 LSUnusedResources 查找無用圖片。注意
[UIImage imageNamed:[NSString stringWithFormat:"icon_%d.png",index]];
這種使用圖片的方式,可能會被誤刪。
- 使用 LSUnusedResources 查找無用圖片。注意
- 刪除重復資源
- 壓縮圖片資源
- 使用 ImageOptim 無損壓縮圖片。
- 使用 TinyPNG 有損壓縮圖片。使用的時候直接執行
tinypng *.png -k token
腳本即可。
- 其他技巧(選用)
- 用 LaunchScreen.storyboard 替換啟動圖片。
- 本地大圖片都使用 webp。
- 資源按需加載,非必要資源都等到使用時再從服務端拉取。
- 刪除無用圖片
- 編譯選項優化
- Optimization Level 在 release 狀態設置為 Fastest/Smallest。
- Strip Debug Symbols During Copy 在 release 狀態設置為 YES。
- Strip Linked Product 在 release 狀態設為 YES。
- Make String Read-Only 在 release 狀態設為 YES。
- Dead Code Stripping 在 release 狀態設為 YES。
- Deployment PostProcessing 在 release 狀態設為 YES。
- Symbols hidden by default 在 release 狀態設為 YES。
- 可執行文件優化
- 使用 LinkMap 分析庫的使用情況
- 三方庫優化
- 刪除不使用的三方庫。
- 功能用的少但是體積大的三方庫可以考慮自己重寫。
- 合并功能重復的三方庫。
- 代碼分析
- 用 AppCode 進行代碼掃描。
- 去掉無用的類及文件。
- 清理 import。
- 去掉空方法。
- 去掉無用的 log。
- 去掉無用的變量。
- 其他技巧(選用)
- 將業務打包成動態庫。如果動態庫的加載時機不控制好,會影響 App 的啟動速度,權衡使用。
- 動態化。將一部分 Native 界面用 RN/Weex 重寫。
- 去除 Swift 代碼,Swift 的標準庫是打包在安裝包里的,一般都有 10M+。然后蘋果官方說等到 Swift Runtime 穩定之后會合并到 iOS 系統里,那時候使用 Swift 就不會顯著增加包大小了。
- 在 target -> Build Settings -> Other Link Flags 里添加如下指令,會把 TEXT 字段的部分內容轉移到 RODATA 字段,避免蘋果對 TEXT 字段的審核限制。當然其實跟安裝包瘦身好像沒有什么關系,所以除非快不行了否則不建議操作。
-Wl,-rename_section,__TEXT,__cstring,__RODATA,__cstring -Wl,-rename_section,__TEXT,__gcc_except_tab,__RODATA,__gcc_except_tab -Wl,-rename_section,__TEXT,__const,__RODATA,__const -Wl,-rename_section,__TEXT,__objc_methname,__RODATA,__objc_methname -Wl,-rename_section,__TEXT,__objc_classname,__RODATA,__objc_classname -Wl,-rename_section,__TEXT,__objc_methtype,__RODATA,__objc_methtype
- 蘋果官方的策略
- App Thinning
- 使用 xcasset 管理圖片。
- 開啟 BitCode
- App Thinning
更多:iOS面試題合集