如何優化 App 的的包大小?
原文:iOS面試題大全
直接上建議:
- 資源優化
- 刪除無用圖片
- 使用 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
相關文章
- 支付寶 App 構建優化解析:Android 包大小極致壓縮APP優化Android
- 如何實現 iOS App 的冷啟動優化iOSAPP優化
- iOS App優化1---減少包體積iOSAPP優化
- 閉包的使用-高頻事件優化事件優化
- 優化基於文字的資產的編碼和傳送大小優化
- 如何使用 Logos 優雅的注入 Mac appGoMacAPP
- Swift 優雅的適配大小Swift
- APP優化總結APP優化
- App繪製優化APP優化
- App電量優化APP優化
- Android App 如何防止抓包AndroidAPP
- Flutter Notes|Flutter-Apk 大小優化探索FlutterAPK優化
- 【譯】21 項優化 React App 效能的技術優化ReactAPP
- iOS效能優化 - APP啟動時間優化iOS優化APP
- 斜率優化(凸包優化)DP問題acm優化ACM
- 語音社交app開發,如何實現介面優化?APP優化
- App啟動速度優化APP優化
- 實踐App記憶體優化:如何有序地做記憶體分析與優化APP記憶體優化
- [譯]Web 效能優化: 圖片優化讓網站大小減少 62%Web優化網站
- 01揹包優先佇列優化佇列優化
- Flutter包大小治理上的探索與實踐Flutter
- Android 是如何管理 App 記憶體的 — Android 記憶體優化第二彈AndroidAPP記憶體優化
- 面試Tip:Android優化之APP啟動優化面試Android優化APP
- 優化使用kotlin開發Android app的編譯速度優化KotlinAndroidAPP編譯
- 滴滴 App 的質量優化框架 Booster,開源了!APP優化框架
- 多重揹包問題的單調佇列優化佇列優化
- 如何減小微信小程式程式碼包大小微信小程式
- App瘦身、效能優化總結APP優化
- App啟動頁面優化APP優化
- APP啟動時間優化APP優化
- APP查詢圖片優化APP優化
- 遊戲產品如何做優化(二):用“三玩法”捕獲大小R遊戲優化
- 支付寶 App 構建優化解析:通過安裝包重排布優化 Android 端啟動效能APP優化Android
- 關於Flutter iOS安裝包大小的解讀FlutteriOS
- 『前端開發』- 字型檔案大小優化實踐前端優化
- 婚戀app原始碼開發,如何實現介面效能優化?APP原始碼優化
- 百度App網路深度優化系列《一》DNS優化APP優化DNS
- 如何獲取 PostgreSQL 資料庫中的表大小、資料庫大小、索引大小、模式大小、表空間大小、列大小SQL資料庫索引模式