歡迎光臨
每天分享高質量文章

iOS程式碼瘦身實踐

作者:奶爸碼農

連結:https://www.jianshu.com/p/4aecf517b5d9

一、分析當前ipa的組成

一般一個ipa會包含:

1、資源檔案

本地檔案:資料、配置、資料庫等等

字型檔案

圖片資源

2、原始碼

透過生成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的檔案詳細結構解釋可以參考:http://blog.cnbang.net/tech/2296/

LinkMap會包含每個可執行檔案的偏移量及大小,所以可以很方便的知道每個可執行檔案的大小。可以使用LinkMap分析工具:https://github.com/huanxsd/LinkMap

二、資源瘦身

無用的圖片檔案

查詢無用的圖片檔案,使用

LSUnusedResources(https://github.com/tinymind/LSUnusedResources

無失真壓縮圖片

使用ImageOptim(https://github.com/ImageOptim/ImageOptim)進行png檔案的無失真壓縮

WebP圖片壓縮

WebP是Google提供的一種圖片編碼格式,通常情況下WebP格式的圖片是原始JPG/PNG圖片的1/3,所以對於重度依賴圖片顯示的應用,轉換使用WebP可以節省大量的網路傳輸資料和時間。對於APP瘦身,使用WebP格式可能是一種方式,可以使用WebP格式的圖片替代現有的圖片資源,可以一定程度的節省空間。

使用WebP轉換工具

(https://developers.google.com/speed/webp/docs/precompiled)

嘗試轉換了幾張較大的圖片,效果如下:


iOS原生並不支援WebP格式載入,需要引入SDWebImage/WebP,詳細可以參考:http://blog.devzeng.com/blog/ios-webp-usage.html


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搜尋出來的無用的Class,會有誤報需要仔細檢查每一個報錯的程式碼。

使用Fui(https://github.com/dblock/fui)查詢發現下列無用檔案,同樣需要double check避免誤刪

清除無用的Import


Fui(https://github.com/dblock/fui)可以用於查詢無用的import,同時也提供xcfui 可以和Xcode整合。

清除無用的Method

1、基於AppCode的掃描定期做清理

2、這篇文章提供了一個很好的思路可以一鍵刪除無用方法:http://www.jianshu.com/p/a53480ad0364

查詢相似的程式碼


使用SameCodeFinder (https://github.com/startry/SameCodeFinder)可以查詢到相似的程式碼,最後一位數字代表兩個檔案的海明距離,數字越小說明兩個檔案越類似。

清理其他無用的程式碼


1、已經下線的陳舊程式碼,AB試驗已經下線的程式碼

2、透過轉H5、Hybrid或者RN實現的Native功能,可以定期清理

3、一些非核心Hybrid或者RN模組,可以考慮不要打包進入APP,透過動態下發的方式獲取

4、程式碼的重構,UI元件、業務邏輯的重用等等

四、一些參考文章

  • iOS可執行檔案瘦身:http://blog.cnbang.net/tech/2544/

  • iOS APP瘦身實踐:http://www.jianshu.com/p/c94dedef90b7,資源最佳化、編譯器配置最佳化、可執行檔案最佳化

  • 滴滴出行iOS端瘦身實踐:http://gmtc.geekbang.org/#schedule, 提供了查詢無用圖片的工具、WebP圖片壓縮、基於clang plugin實現查詢無用程式碼(https://github.com/kangwang1988/XcodeZombieCode)、查詢類似程式碼(https://github.com/startry/SameCodeFinder

  • 基於clang外掛的一種iOS包大小瘦身方案:https://mp.weixin.qq.com/s

  • 減小ipa體積之刪除frameWork中無用mach-O檔案:https://security.alibaba.com/announcement/announcement


編號304,輸入編號直達本文

●輸入m獲取文章目錄

推薦↓↓↓

Web開發

更多推薦18個技術類微信公眾號

涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

贊(0)

分享創造快樂