如何優化 App 的的包大小?

weixin_34320159發表於2019-01-30

原文:iOS面試題大全

直接上建議:

  • 資源優化
    • 刪除無用圖片
      • 使用 LSUnusedResources 查詢無用圖片。注意 [UIImage imageNamed:[NSString stringWithFormat:"icon_%d.png",index]]; 這種使用圖片的方式,可能會被誤刪。
    • 刪除重複資源
    • 壓縮圖片資源
      • 使用 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

相關文章