資源瘦身
這個措施非常有用,并且效果顯著。因為編譯過程中,xib,png,mp3,mp4等等資源文件最終都會打包在ipa里面。
因此刪除無用的資源或者減小資源文件大小,對于減小包體積效果會非常好。
刪除無用資源,利用人工非常麻煩,可以寫個腳本,通過字符串的簡單匹配就可以實現(xiàn)。
這里我自己寫了一個掃描無用圖片的腳本:https://github.com/mushao1990/sortUnusedImage去掉1x圖
現(xiàn)在至少都是2倍高清屏了,不需要1x的圖盡量使用Assets來管理資源
蘋果在編譯階段會進行優(yōu)化,并且分發(fā)給用戶的圖只會包含其中一套。對于一些純色小圖標,可以使用iconFont
可再生的圖片或者大圖,可以考慮使用網(wǎng)絡圖
-
本地圖片,利用工具進行無損壓縮
我對項目中的png圖片使用ImageOptim工具進行壓縮,效果很顯著
image.png
但是需要注意的是,Xcode默認是會對png圖片進行進行優(yōu)化,如果使用ImageOptim進行圖片壓縮后,蘋果會將壓縮給逆向。
因此,如果使用ImageOptim進行壓縮,就需要關閉Xcode中的設置。ImageOptim認為蘋果的這項優(yōu)化其實作用沒有那么大,以下是摘抄:
image.png
這里是地址:https://imageoptim.com/xcode.html 可以考慮使用webP圖片格式。這種格式的圖片會非常節(jié)省空間
去除重復的第三方庫
大公司項目,多人開發(fā)的情況下,會經(jīng)常出現(xiàn)一些功能相似的重復第三方。比如模型轉(zhuǎn)換,圖片框架等等。這個時候可以進行代碼評估,去掉重復的第三方。-
去除代碼中無用的類和方法
因為我們的代碼最終被編譯在了可執(zhí)行文件內(nèi),因此類越多,方法越多,可執(zhí)行文件會越大。
-
查找無用的selector
github上有已經(jīng)寫好的腳本,地址: https://github.com/nst/objc_cover
但是這個會連set和get方法以及一些對我們無用的方法也會輸出來,可以自己對腳本進行簡單更改。
比如下面,對類名和方法名進行簡單過濾
image.png
它的原理是分析可執(zhí)行文件里的信息。因為類的內(nèi)存結(jié)構(gòu)和方法在編譯階段已經(jīng)處理好了。可以從可執(zhí)行文件里拿到:所有的方法(通過正則獲?。┮约?通過(_DATA.__objc_serefs)拿到所有引用到的方法。 兩個集合進行交叉就可以拿到所有未被引用的方法 查找無用的類
兩種方式:
1.這個和找無用圖片一樣利用腳本掃描。
2.利用__DATA.objc_classlis 和 __DATA.__objc_classrefs 獲取所有oc類和被引用的oc類,兩個集合交叉拿到所有未使用的oc類。
-
但是這里其實有個難點。打個比方:我們有個TestViewController,這個VC在外部已經(jīng)沒有地方使用了。但是vc又持有了三個類成員A,B,C,這三個類的實現(xiàn)文件里可能又引入了TestViewController的頭文件。那么通過上面的兩種方式檢查不到這四個類其實在項目里都沒有使用到,只是因為他們自己相互使用了就避開了掃描。這種情況該怎么辦?
-
開啟bitCode
這個措施其實不會影響包的大小。但是如果開啟了這個功能,將ipa上傳到appstore后,蘋果會拿著bitcode去重新編譯為可執(zhí)行程序。供用戶下載。這個時候用戶下載的ipa包里只有自己手機對應的指令集,因此會減小體積。


