iOS APP瘦身之可執(zhí)行文件瘦身

縮減iOS安裝包大小是很多中大型APP都要做的事,一般首先會對資源文件下手,壓縮圖片/音頻,去除不必要的資源。這些資源優(yōu)化做完后,我們還可以嘗試對可執(zhí)行文件進行瘦身,項目越大,可執(zhí)行文件占用的體積越大,又因為AppStore會對可執(zhí)行文件加密,導致可執(zhí)行文件的壓縮率低,壓縮后可執(zhí)行文件占整個APP安裝包的體積比例大約有80%~90%,還是挺值得優(yōu)化的。下面介紹一下在研究可執(zhí)行文件過程中發(fā)現(xiàn)的可以優(yōu)化的點。研究的過程使用了linkmap,linkmap的介紹跟生成可以參考另一篇文章—iOS可執(zhí)行文件的組成

編譯器優(yōu)化級別設置

Build Settings->Optimization Level有幾個編譯優(yōu)化選項,release版應該選擇Fastest, Smalllest,這個選項會開啟那些不增加代碼大小的全部優(yōu)化,并讓可執(zhí)行文件盡可能小。

去除不必要的調(diào)試符號信息

Strip Linked Product , Deployment Postprocessing, Symbols Hidden by Default 在release版本應該設為yes,可以去除不必要的調(diào)試符號。Symbols Hidden by Default會把所有符號都定義成”private extern”,詳細信息見官方文檔
這些選項目前都是XCode里release的默認選項,但舊版XCode生成的項目可能不是,可以檢查一下。

無用的代碼

無用的代碼可能包括包括:類,分類,協(xié)議,方法,實例變量,局部變量等。我們可以利用工具進行查找。

  • 開啟編譯器警告來查找無用的方法,實例變量,局部變量


    fAbGw.png

    如上圖,開啟Unused Functions, Unused Ivars, Unused Variables。

  • 查找沒有使用的類
    Github上有個工具可以使用:fui

冗余的代碼

如果某些代碼,在工程里反復出現(xiàn)多次,那么應該進行提取和封裝。

冗余的字符串

代碼上定義的所有靜態(tài)字符串都會記錄在在可執(zhí)行文件的__cstring段,如果項目里Log非常多,這個空間占用也是可觀的,也有幾百K的大小,可以考慮清理所有冗余的字符串。另外如果有特別長的字符串,建議抽離保存成靜態(tài)文件,因為AppStore對可執(zhí)行文件加密導致壓縮率低,特別長的字符串抽離成靜態(tài)資源文件后壓縮率會比在可執(zhí)行文件里高很多。

將鏈接后的可執(zhí)行文件中的成份,按大小排序,看是否有可以優(yōu)化的項目

項目里會引入很多第三方靜態(tài)庫,如果能知道這些第三方庫在可執(zhí)行文件里占用的大小,就可以評估是否值得去找替代方案去掉這個第三方庫。我們可以從linkmap中統(tǒng)計出這個信息。
首先我們要想辦法得到LinkMap文件,可以通過打開Write Link Map File這個編譯選項來生成該文件:

屏幕快照 2017-09-17 上午9.51.49.png

生成的位置是在~/Library/Developer/Xcode/DerivedData/XXX-eumsvrzbvgfofvbfsoqokmjprvuh/Build/Intermediates/XXX.build/Debug-iphoneos/XXX.build/,是一個txt文件,例如:Talking Tyler-LinkMap-normal-arm64.txt

接下來通過工具,對此文件進行解析,生成按大小排序的列表。推薦如下兩個工具:
XCode Linkmap Parser:需要安裝node.js環(huán)境才能使用。
LinkMap解析工具:是一個圖形界面的MAC應用程序。

使用第二個工具,對上面的LinkMap文件進行解析,得到的結(jié)果如下:


WX20170917-095926.png

有了這樣的清單,我們在優(yōu)化時,就能夠做到有的放矢。

參考

iOS可執(zhí)行文件瘦身方法

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

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

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