話說這幾天被產(chǎn)品經(jīng)理吐槽iOS的安裝包太大了,其實(shí)我給他測試的包是adhoc包鼻百,發(fā)布到App Store的包更大呢团搞,哈哈严望。正好沒啥大的開發(fā)需求,那就優(yōu)化一下吧逻恐。
先看一下現(xiàn)在打的2個(gè)通道的包的大邢裎恰:
上圖的是App Store通道導(dǎo)出的包,下圖是adhoc通道導(dǎo)出的包复隆,我的天拨匆,一個(gè)簡簡單單的商城APP,竟然有207M(但是App Store下載頁面的包只有95M挽拂,應(yīng)該是蘋果做了優(yōu)化)惭每。這就不得不說到項(xiàng)目的歷史了,這個(gè)項(xiàng)目從2019年年底立項(xiàng)到現(xiàn)在經(jīng)歷了2年多的時(shí)間轻局,經(jīng)歷了七八個(gè)iOS開發(fā)的手洪鸭,經(jīng)歷了多次的功能改版(不是簡單的功能疊加,據(jù)我所知完全推到重來就有3次仑扑,基本來一個(gè)技術(shù)部老大就會大改一次)。有很多功能開發(fā)完成之后都會經(jīng)歷幾次拿掉置鼻,再拿上來的反復(fù)镇饮,所以開發(fā)者也不敢輕易地刪除功能。這就導(dǎo)致現(xiàn)在的項(xiàng)目里代碼冗余功能很多箕母。有些方面確實(shí)不是一個(gè)小小的開發(fā)能決定的储藐。
好了,歷史原因就不說了嘶是,那就目前的項(xiàng)目來說钙勃,看看哪些方面可以優(yōu)化吧。于是在網(wǎng)上巴拉巴拉搜了一大堆內(nèi)容聂喇,說的很多的就是圖片和無用代碼的清除辖源。先看一下IPA包的構(gòu)成吧蔚携,把導(dǎo)出的IPA包重命名為.zip,再解壓縮就能查看IPA包的包內(nèi)容了克饶,顯示包內(nèi)容可以看到主要的是exec可執(zhí)行文件有35M酝蜒,F(xiàn)rameworks有72M,F(xiàn)rameworks中占用最大的是Swift的可執(zhí)行文件(由于我們OC項(xiàng)目中引入了一個(gè)Swift庫矾湃,導(dǎo)致有Swift支持文件)亡脑,Assets.car圖片資源98M,其他的都是一些占用很小的文件邀跃。目前分析主要還是pod庫和圖片的占用霉咨。
說干就干。不拍屑,還不能開始躯护,先開一個(gè)新的分支備份代碼,計(jì)劃:1.刪掉無用代碼 2.刪除無用圖片? 3.壓縮大圖片資源? 4.Frameworks優(yōu)化丽涩。
1.刪除項(xiàng)目中的側(cè)邊欄三方MMDrawerController棺滞,刪除老的IM模塊(大概500多個(gè)文件,包含圖片矢渊,大概10M)继准,刪除三方環(huán)信SDK,一頓頭暈的操作之后矮男,趕緊打個(gè)包看看移必,導(dǎo)出的App Store包,190M毡鉴,效果還行崔泵。又刪除了一個(gè)之前的關(guān)于我們和功能引導(dǎo)的模塊,大概20個(gè)類猪瞬,再導(dǎo)出包試試憎瘸,減少了0.1M,效果不太理想陈瘦,應(yīng)該大頭還在圖片吧幌甘。
2.用(https://github.com/tinymind/LSUnusedResources)檢測無用圖片
這里可以先選擇忽略連續(xù)圖片,檢測完成之后最好不要在這里直接刪除痊项,一些宏定義的圖片可能會被誤刪锅风。哎,刪圖是我快樂呀鞍泉,為了不誤刪皱埠,我一個(gè)一個(gè)的找到檢索到的圖全局搜索,確定無用了再刪除咖驮。這里提一下边器,最好把無用的代碼刪除训枢,特別是包含本地圖片的代碼,不然檢測工具檢測不到(可見良好的代碼習(xí)慣多么重要呀)饰抒。一開始項(xiàng)目中Assets.xcassets文件34M肮砾,刪了無用圖片之后25M。一頓操作之后袋坑,導(dǎo)出App Store包看看仗处,168M,adhoc包95M枣宫,還行婆誓。
3.用https://tinypng.com壓縮圖片,本地的很多工具圖1也颤、2kb,可以不用壓縮洋幻,主要針對大于50kb的圖,有些圖片好幾M翅娶,真的忍不了文留,壓縮之后一般都能節(jié)省70%的空間。這里壓縮工具雖然號稱無損壓縮竭沫,經(jīng)過對比我發(fā)現(xiàn)還是有一點(diǎn)點(diǎn)差別的燥翅,不過大多數(shù)圖片肉眼看不出區(qū)別,對于需要特別高清的圖慎用蜕提。壓縮后Assets.xcassets文件11M森书。壓縮圖片之后的包App Store包130M,adhoc包57M谎势。預(yù)估App Store下載頁面的包能減少20--30M凛膏。
這個(gè)時(shí)候再顯示下App Store包內(nèi)容看看,exec可執(zhí)行文件有32.6M脏榆,F(xiàn)rameworks46M猖毫,Assets.car圖片資源35M。
4.由于導(dǎo)入了Swift庫姐霍,導(dǎo)致pod庫都成了動態(tài)庫鄙麦,嘗試了一些方法指定Swift庫為動態(tài)庫,其他為靜態(tài)庫镊折,未成功。還有一個(gè)解決方案就是去除或者替換目前的Swift庫介衔,預(yù)計(jì)包大小可以減少20M恨胚,目前我們這個(gè)功能也是基本不用。等產(chǎn)品啥時(shí)候說不要這個(gè)功能了就去掉吧炎咖。
5.發(fā)了一個(gè)新的包赃泡,優(yōu)化后的App Store下載頁面的包從95M降到了46M寒波,再也不擔(dān)心產(chǎn)品找我吐槽了,哈哈升熊。
安裝包優(yōu)化使我快樂俄烁,目前的包還有優(yōu)化空間。如果有同學(xué)有好的優(yōu)化方法级野,歡迎交流學(xué)習(xí)页屠。
資源