安裝包主要由兩部分組成善已,資源文件以及可執(zhí)行文件瓢娜,瘦身主要從這兩部分入手:
一炒瘟、資源文件瘦身
1识窿、刪除無(wú)用資源
現(xiàn)在應(yīng)該沒(méi)有APP需要支持iPhone4以下的機(jī)型了斩郎,所以1X的圖片可以全部刪掉。3X的圖片是保留還是刪掉看具體情況喻频。
2缩宜、未使用的圖片通過(guò)LSUnusedResources掃描刪除
要注意的是可能會(huì)有誤傷,該工具是全匹配甥温,一些拼接名字來(lái)使用的圖片要注意手動(dòng)剔除锻煌。
3、其他資源手動(dòng)刪除
一些音頻姻蚓、視頻和多余的plist文件以及readme文件什么的目測(cè)只能肉眼掃描了宋梧。
4、刪除功能重復(fù)的三方庫(kù)
5狰挡、資源壓縮
1>>圖片壓縮,使用ImageOptim實(shí)現(xiàn)無(wú)損壓縮捂龄,COMPRESS_PNG_FILES和STRIP_PNG_TEXT設(shè)置為NO;
ImageOptim這是一款非常好的圖片壓縮工具加叁,可以進(jìn)行無(wú)損壓縮倦沧,能夠?qū)?png 和 jpeg 圖片文件進(jìn)行優(yōu)化,它能找到最佳的壓縮參數(shù)(在設(shè)置中可以設(shè)置壓縮比例它匕,80% 及以上是無(wú)損壓縮展融,推薦使用),并通過(guò)消除不必要的信息(如文件的 EXIF 標(biāo)簽和顏色配置文件等)豫柬,優(yōu)化后達(dá)到減小文件大小的效果
2>>使用TinyPNG有損壓縮圖片,TinyPNG非常好用強(qiáng)烈推薦.
使用的時(shí)候直接執(zhí)行tinypng *.png -k token腳本即可
[注意]對(duì)于較大尺寸的圖片愈污,可以和設(shè)計(jì)溝通,在不失真和影響效果的前提下轮傍,使用TinyPNG進(jìn)行壓縮暂雹;較小尺寸的圖片,建議使用ImageOptiom创夜。
6杭跪、用LaunchScreen.storyboard替換啟動(dòng)圖片
7、資源按需加載驰吓,非必要資源都等到使用時(shí)再?gòu)姆?wù)端拉取
8涧尿、變更圖片文件的導(dǎo)入方式
圖片資源的導(dǎo)入方式有如下幾種:
1. Assets.xcassets。
只支持png格式的圖片檬贰;
圖片只支持[UIImage imageNamed]的方式實(shí)例化姑廉,但是不能從Bundle中加載;
在編譯時(shí)翁涤,Images.xcassets中的所有文件會(huì)被打包為Assets.car的文件桥言。
2. CreateGroup
黃色文件夾圖標(biāo)萌踱;Xcode中分文件夾,Bundle中都在同一個(gè)文件夾下号阿,因此并鸵,不能出現(xiàn)文件重名的情況;
可以直接使用[NSBundle mainBundle]作為資源路徑扔涧,效率高园担;
可以使用[UIImage imageNamed:]加載圖像。
3. CreateFolderRefences
藍(lán)色文件夾枯夜;Xcode中分文件夾弯汰,Bundle中同樣分文件夾,因此湖雹,可以出現(xiàn)文件重名的情況咏闪;
需要在[NSBundle mainBundle]的基礎(chǔ)上拼接實(shí)際的路徑,效率較差劝枣;
不能使用[UIImage imageNamed:]加載圖像汤踏。
【說(shuō)明】:藍(lán)色文件夾只是將文件單純的創(chuàng)建了引用,這些文件不會(huì)被編譯舔腾,所以在使用的時(shí)候需要加入其路徑溪胶。
[建議]使用Assets.xcassets來(lái)管理圖片
二、可執(zhí)行文件瘦身
1稳诚、打開bitcode設(shè)置
在”Build Settings”->”Enable Bitcode”選項(xiàng)中看到這個(gè)設(shè)置
bitcode是被編譯程序的一種中間形式的代碼哗脖,上傳到apple store后,apple可以為目標(biāo)安裝APP的設(shè)備進(jìn)行優(yōu)化二進(jìn)制扳还,減小安裝包的大小才避。
缺點(diǎn):1.用戶安裝的二進(jìn)制文件不再是開發(fā)這邊生成的,是蘋果通過(guò)bitcode編譯優(yōu)化出來(lái)的氨距,其對(duì)應(yīng)的調(diào)試符號(hào)信息丟失了桑逝,無(wú)法再根據(jù)崩潰日志定位崩潰現(xiàn)場(chǎng); 2.有些三方庫(kù)不支持bitcode俏让,需要打開bitcode重新編譯楞遏。
2、編譯器優(yōu)化級(jí)別
1>>BuildSettings->Optimization Level首昔,Xcode默認(rèn)設(shè)置為“Fastest ,Smallest”寡喝,保持默認(rèn)即可。
2>>Build Settings-> Linking->Dead Code Stripping 設(shè)置成 YES
3>>Deployment Postprocessing 設(shè)置成YES
4>>Strip Linked Product 設(shè)置成YES
5>>工程的Enable C++ Exceptions和Enable Objective-C Exceptions選項(xiàng)都設(shè)置為NO勒奇。手動(dòng)管理異常预鬓。
6>>symbols hidden by default選項(xiàng)設(shè)置為YES。
7>>所有沒(méi)有使用C++動(dòng)態(tài)特性的lib庫(kù)(搜索工程沒(méi)有使用dynamic_cast關(guān)鍵字) Enable C++ Runtime Types 選項(xiàng)設(shè)置為NO赊颠。
3格二、去除符號(hào)信息
Strip Debug Symbols During Copy 和 Symbols Hidden by Default 在release版本應(yīng)該設(shè)為yes劈彪,可以去除不必要的調(diào)試符號(hào)。Symbols Hidden by Default會(huì)把所有符號(hào)都定義成”private extern”蟋定。
4粉臊、第三方庫(kù)
項(xiàng)目里會(huì)引入很多第三方靜態(tài)庫(kù)草添,如果能知道這些第三方庫(kù)在可執(zhí)行文件里占用的大小驶兜,就可以評(píng)估是否值得去找替代方案去掉這個(gè)第三方庫(kù)。通常使用linkmap來(lái)進(jìn)行統(tǒng)計(jì)远寸,然后對(duì)引用的庫(kù)大小進(jìn)行評(píng)估抄淑,對(duì)于過(guò)大的庫(kù)是否有相對(duì)輕量的庫(kù)的替代方案;例如只使用到百度地圖的基本功能驰后,這時(shí)就可以用百度地圖輕量包代替全量包肆资,安裝包可減少5M左右
[建議]第三方庫(kù)最好用cocopods管理
5、APPcode
參看
參考鏈接和拓展閱讀
1灶芝、《iOS安裝包瘦身指南》
2郑原、iOS安裝包瘦身的那些事兒