分析當前ipa的組成
源代碼
通過生成linkmap文件,分析源代碼生成的編譯文件的大小。在Build Settings中Write Link Map File設置為Yes (記住release時候不要設置為Yes)。
編譯之后會在build目錄中生成兩個LinkMap文件: XXX-LinkMap-normal-i386和XXX-LinkMap-normal-x86_64,分別代表在模擬器中32位和64位指令集生成的LinkMap文件。LinkMap的文件
LinkMap會包含每個可執行文件的偏移量及大小,所以可以很方便的知道每個可執行文件的大小。工具源碼地址
資源瘦身
- 無用的圖片文件
LSUnusedResources - 無損壓縮圖片
ImageOptim - WebP圖片壓縮
WebP是Google提供的一種圖片編碼格式,通常情況下WebP格式的圖片是原始JPG/PNG圖片的1/3,所以對于重度依賴圖片顯示的應用,轉換使用WebP可以節省大量的網絡傳輸數據和時間。對于APP瘦身,使用WebP格式可能是一種方式,可以使用WebP格式的圖片替代現有的圖片資源,可以一定程度的節省空間。
WebP轉換工具
iOS原生并不支持WebP格式加載,需要引入SDWebImage/WebP,參考
NSString *path = [[NSBundle mainBundle] pathForResource:@"logo" ofType:@"webp"];
NSData *data = [[NSData alloc] initWithContentsOfFile:path];
UIImage *img = [UIImage sd_imageWithWebPData:data];
self.imageView.image = img;
使用WebP格式的圖片,似乎就拋棄了iOS @2x @3x按照設備加載對應圖片的機制,所以應該還可以刪除所有@2x圖片,不過加載速度比原生較慢。
代碼瘦身
- AppCode代碼靜態檢查
AppCode提供了非常強大的代碼靜態檢查工具,使用Inspect Code,可以找到很多代碼優化的地方。可以參考這篇介紹:AppCode inspections for your code perfection
優化項目的時候,可以使用Appcode分析功能,即Inspection功能。可以檢查未使用的文件,拼寫問題,類型檢查等多種潛在疑難雜癥。打開菜單-code-選擇InspectCode
優化項目的時候,可以使用Appcode分析功能,即Inspection功能。可以檢查未使用的文件,拼寫問題,類型檢查等多種潛在疑難雜癥。
打開菜單-code-選擇Inspect Code
- 清除無用代碼
AppCode搜索出來的無用的Class,會有誤報需要仔細檢查每一個報錯的代碼。
使用Fui查找發現下列無用文件,同樣需要double check避免誤刪
- 基于AppCode的掃描定期做清理
- 這篇文章提供了一個很好的思路可以一鍵刪除無用方法:參考文章
- 查找相似的代碼使用SameCodeFinder可以查找到相似的代碼,最后一位數字代表兩個文件的海明距離,數字越小說明兩個文件越類似。
清理其他無用的代碼
- 已經下線的陳舊代碼,AB試驗已經下線的代碼
- 通過轉H5、Hybrid或者RN實現的Native功能,可以定期清理
- 一些非核心Hybrid或者RN模塊,可以考慮不要打包進入APP,通過動態下發的方式獲取
- 代碼的重構,UI組件、業務邏輯的重用等等
一些參考文章
[iOS可執行文件瘦身](http://blog.cnbang.net/tech/2544/
iOS)
APP瘦身實踐資源優化、編譯器配置優化、可執行文件優化
滴滴出行iOS端瘦身實踐, 提供了查找無用圖片的工具、WebP圖片壓縮、
基于clang plugin實現查找無用代碼、
查找類似代碼