iOS面試題:如何優(yōu)化 App 的的包大?。?/h2>

直接上建議:

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

更多:iOS面試題合集

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容