iOS開發(fā)APP 瘦身之路

隨著項目一步一步的開發(fā)赃梧,團隊小伙伴的增多省核,業(yè)務量的增多掂僵,以及swift的引入航厚,混合編譯導致APP體積也在慢慢增大,期初項目在打完包锰蓬,并且經(jīng)過APP Strore上線后包的大小只有30mb左右幔睬,到現(xiàn)在起步67mb還沒經(jīng)過app Store上線蘋果外加的一些驗證的東西。因此APP瘦身刻不容緩芹扭,但是項目時間都比較緊張一直沒有騰出時間來做一次瘦身麻顶。終于在項目一次大改版后有兩天時間來瘦身一下了赦抖。

瘦身離不開這三個方面(暫時想到,同時也參考了其他公司的瘦身經(jīng)驗)澈蚌,首先想到的是圖片資源摹芙,其次是代碼優(yōu)化,最后是編譯build setting的瘦身宛瞄。

首先說下圖片資源吧浮禾,這個可能是最好想到的,因為項目中最常見的就是圖片過多導致的包越來越大份汗。

具體下面需要用到的工具已經(jīng)上傳到github盈电,需要的同學可以自行下載


一. 針對圖片瘦身

1. 對于在項目中沒有使用的圖片資源的剔除,(可能是老版本遺留下來杯活,但是現(xiàn)有版本已經(jīng)不用匆帚,甚至代碼都已經(jīng)改沒了,但是圖片還在的情況旁钧,)

這個時候可以使用LSUnusedResources查找沒有用到的圖片吸重。?LSUnusedResources是一個開源的項目,你可以在對應的github上下載下來直接運行就可以使用歪今,使用方式在github上已經(jīng)介紹的很詳細了嚎幸。

下載好LSUnusedResources 之后在Mac上運行項目。出現(xiàn)查找的圖片可以直接刪除寄猩。

注意:使用的時候注意不要誤刪<稻А!不要誤刪田篇,對于LSUnusedResources這個項目其實也有一些問題替废,比如在項目中通過for循環(huán)加入的圖片,沒有具體的引用圖片的名稱也是會被檢測出來的泊柬,這個時候就需要我們手動的去查看一下椎镣,項目中這些到底有沒有使用。如果沒有使用可以直接刪除兽赁,但是如果有引用衣陶,但是你刪除了這時候就會導致crash。

```

[UIImage imageNamed:[NSString stringWithFormat:@"01_0000%d.png",I] 這種情況容易出現(xiàn)找到對應的圖片闸氮,但是項目中還在使用,不要錯誤刪除教沾。

```


2. 重復圖片的剔除(就是同樣大小尺寸蒲跨,只是名稱不同的圖片)

重復資源(主要指圖片)不是指命名重復而是內(nèi)容相同。

fdupes 是Linux下的一個工具授翻,可以在指定的目錄及子目錄中查找重復的文件或悲。fdupes通過對比文件的MD5簽名孙咪,以及逐字節(jié)比較文件來識別重復內(nèi)容。項目中圖片分兩處存放巡语,Assets.xcassets和images文件夾翎蹈,所以在這兩個目錄查找就可以。如果沒有安裝fdupes直接在電腦終端運行

?brew install fdupes

只需等待fdupes更新完成后男公,就可以安裝在項目中可以直接使用查找重復的資源荤堪,

fdupes -r asse文件夾位置? image文件夾位置


fdupes

針對找出來的重復資源處理方式:


1. 同一張圖片文件名稱也相同的在asset.xcassets和images中,刪除image的圖片枢赔。

2. 不同文件名的圖片尺寸內(nèi)容完全相同的(可以使用刪除一個保留另一個澄阳,在代碼中更換圖片資源名稱,如果是跨組件間的圖片重復就需要放在公共業(yè)務中心或者組件中心了)踏拜。

3. 2x 和3x 圖片尺寸是一樣的碎赢,(現(xiàn)在只保留3x圖片)



3. 無損壓縮圖片

可以使用imageOptim工具直接壓縮相應的圖片,他是通過優(yōu)化壓縮參數(shù)速梗,移除無用的文件數(shù)據(jù)和不必要的顏色搭配來實現(xiàn)無損壓縮的肮塞。

如果UI同學在給你設計圖的時候沒有壓縮圖片,那么你的項目也是會變得異常的大姻锁,通過這個免費的軟件可以直接瘦身壓縮你需要的圖片枕赵。

當然也可以使用這個鏈接下的網(wǎng)頁工具,但是這個是有損壓縮屋摔。http://tinypng.com烁设。


4. 可執(zhí)行文件瘦身

linkmap是Xcode產(chǎn)生可執(zhí)行文件的同時產(chǎn)生的連接信息,用來描述可執(zhí)行文件的構造成分钓试,具體的是在項目中打開wirte link file 設置為yes装黑。build之后在項目中可以找到對應的位置(我是用過模擬器運行的,所以對對應的位置是模擬器的弓熏,真機可以直接在真機的相應的位置進行查找恋谭。)

相應的位置是在執(zhí)行下面的js ? ,由于使用的環(huán)境是node挽鞠,因此需要安裝node環(huán)境 可以執(zhí)行 brew install ndoe

環(huán)境安裝完成后執(zhí)行 node linkmap.js ?filepath(這個就是剛剛找到的linkmap的文件)-hl


brew install node




下載好linkmap.js文件并且執(zhí)行node linkmap.js ?filepath(這個就是上圖的linkmap的文件位置)就可以看到相應變異后文件的大小疚颊,這樣就可以使用根據(jù)具體的代碼進行分析優(yōu)化了。




5. 編譯的靜態(tài)庫瘦身

在項目中使用lipo 工具可以查看自持的指令集信认,由于armv7 完全兼容armv7s 可以刪除armv7s材义。

lipo -info? 庫名稱

對應的可以查看對應的庫名稱,進而修改庫的支持嫁赏,建議去掉armv7s其掂,畢竟armv7已經(jīng)兼容了armv7s,多一個內(nèi)核架構的支持就會意味著多一份指令集的加入潦蝇,體積就會相應的增大一些款熬,實際在項目中減少了大約8mb(包括自己項目維護的SDK也去掉了相應的armv7s)深寥。

具體的刪除armv7s的方式如下:

注意:在xcode10之后多了一種指令集的支持,arm64e 贤牛,這個是查看蘋果的官方文檔這個是A12芯片開始支持惋鹅,但是在testflight和打包上線的時候刪除,這個暫時沒有研究過殉簸,但是看了官方的文檔后猜測這個架構的指令集引入是為了方便開發(fā)人員調(diào)試時使用的闰集,因為現(xiàn)在項目中也并沒有使用到這個架構,因此我們準備刪除這個架構的指令集的支持喂链,(可能后期會加回來)


6. 編譯項目中的build setting來優(yōu)化


build settings

到此想到的優(yōu)化都已經(jīng)實施了返十,APP在多方考慮下進行了瘦身,由原來的68mb椭微,縮減到了只有55mb左右洞坑,這個是直接在蒲公英上面打出來的包,就像上面的build setting只是做了部分的優(yōu)化蝇率,這個在上testflight或者上線的時候設置后還可以縮小一些體積迟杂,由于現(xiàn)在階段還處于開發(fā)階段暫時沒有做處理,等項目上線前設置下就可以本慕。



參考文章:

http://www.reibang.com/p/c94dedef90b7??

http://www.reibang.com/p/b38052ee56af

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末排拷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子锅尘,更是在濱河造成了極大的恐慌监氢,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藤违,死亡現(xiàn)場離奇詭異浪腐,居然都是意外死亡,警方通過查閱死者的電腦和手機顿乒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門议街,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人璧榄,你說我怎么就攤上這事特漩。” “怎么了骨杂?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵涂身,是天一觀的道長。 經(jīng)常有香客問我搓蚪,道長蛤售,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮悍抑,結果婚禮上,老公的妹妹穿的比我還像新娘杜耙。我一直安慰自己搜骡,他們只是感情好,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布佑女。 她就那樣靜靜地躺著记靡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪团驱。 梳的紋絲不亂的頭發(fā)上摸吠,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音嚎花,去河邊找鬼寸痢。 笑死,一個胖子當著我的面吹牛紊选,可吹牛的內(nèi)容都是我干的啼止。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼兵罢,長吁一口氣:“原來是場噩夢啊……” “哼献烦!你這毒婦竟也來了?” 一聲冷哼從身側響起卖词,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤巩那,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后此蜈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體即横,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年舶替,在試婚紗的時候發(fā)現(xiàn)自己被綠了令境。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡顾瞪,死狀恐怖舔庶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情陈醒,我是刑警寧澤惕橙,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站钉跷,受9級特大地震影響弥鹦,放射性物質(zhì)發(fā)生泄漏则披。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一课竣、第九天 我趴在偏房一處隱蔽的房頂上張望童太。 院中可真熱鬧,春花似錦栓始、人聲如沸务冕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽禀忆。三九已至落恼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間佳谦,已是汗流浹背戴涝。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工吠昭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人矢棚。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓郑什,卻偏偏與公主長得像蒲肋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子兜粘,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354