APP包瘦身之路

隨著不斷迭代的APP杜恰,在產(chǎn)品需求以及功能模塊的持續(xù)擴大下获诈,縮減iOS安裝包大小成為了很多中大型APP都要做的事仍源,但具體如何實現(xiàn)呢?

其實應(yīng)用包瘦身舔涎,無非就是從兩個層面應(yīng)對笼踩,一個是資源級別的優(yōu)化,一個就是代碼級別的優(yōu)化亡嫌。

一嚎于、資源瘦身

資源瘦身主要是去掉無用資源和壓縮資源,資源包括圖片挟冠、音視頻文件于购、配置文件以及多語言wording。無用資源是指資源在工程文件里知染,但沒有被代碼引用肋僧。檢查方法是,用資源關(guān)鍵字(通常是文件名持舆,圖片資源需要去掉@2x @3x)色瘩,搜索代碼,搜不到就是沒有被引用逸寓。當然居兆,有些資源在使用過程中是拼接而成的(如image_xxx.png),需要手工過濾竹伸。

下面介紹一個檢查工程項目中無用圖片資源的工具LSUnusedResources泥栖,搜索結(jié)果中的資源文件都為被引用但沒有實際使用,但為確保安全無誤勋篓,刪除前還需要確保工程中沒有使用吧享。

LSUnusedResources

資源壓縮主要對png進行無損壓縮,用的是ImageOptim工具譬嚣。一般不建議對資源做有損壓縮钢颂,有損壓縮需要設(shè)計一個個檢查,通常壓縮后效果不盡人意拜银。


ImageOptim

二殊鞭、代碼瘦身

首先,使用LinkMap分析應(yīng)用包中各個類以及第三方庫在可執(zhí)行文件里占用的大小尼桶,分析結(jié)束后就可以快速定位到需要進行優(yōu)化的類或者靜態(tài)庫操灿。當我們知道工程項目中的第三方庫在可執(zhí)行文件里占用空間大小時,就可以具體分析權(quán)衡是否有其他方案替代這些第三方庫泵督。

其次趾盐,刪除無用代碼。在項目里新建一個類,給它添加幾個方法救鲤,但不要在任何地方import它久窟,build完項目后觀察LinkMap,你會發(fā)現(xiàn)這個類還是被編譯進可執(zhí)行文件了蜒简。

是因為object-c的動態(tài)特性瘸羡,它可以通過類和方法名反射獲得這個類和方法進行調(diào)用,所以就算在代碼里某個類沒被使用到搓茬,編譯器也沒法保證這個類不會在運行時通過反射去調(diào)用犹赖,所以只要是在項目里的文件,無論是否又被使用到都會被編譯進可執(zhí)行文件卷仑。

通過使用python腳本峻村,遍歷整個項目的文件,找出所有沒有被引用的類文件和沒有被調(diào)用的方法锡凝,在保證沒有其他地方動態(tài)調(diào)用的情況下把它們?nèi)サ粽匙颉O旅婢徒榻B幾個優(yōu)化的方法:

可能很多人對LinkMap文件不是很了解,《iOS調(diào)優(yōu) | 深入理解Link Map File》不懂得小伙伴可以看下這篇文件窜锯。

1.XCode開啟編譯選項Write Link Map File

XCode -> Project -> Build Settings -> 搜map -> 把Write Link Map File選項設(shè)為yes张肾,并指定好linkMap的存儲位置

2.編譯后,到編譯目錄里找到該txt文件锚扎,文件名和路徑就是上述的Path to Link Map File

文件位于~/Users/xxxxxxxxx/Library/Developer/Xcode/DerivedData/Jovi-dgmwdpjofxrufihidpjqqtomnphq/Build/Intermediates/Jovi.build/Debug-iphonesimulator/Jovi.build/Objects-normal/x86_64

接下來就是通過LinkMap工具來分析LinkMap文件了:

1吞瞪、打開LinkMap.xcodeproj,并運行驾孔,就可以看到工具界面

LinkMap

2芍秆、點擊“選擇文件”按鈕,選擇LinkMap文件

3翠勉、點擊“開始”按鈕妖啥,就可以看到每個類/靜態(tài)庫所占用的空間大小

分析結(jié)果

看完分析結(jié)果,可能很多人會以為对碌,分析結(jié)果中包含的類及第三方庫都是我們在項目真正使用到的荆虱,其實并不是,這是由于OC的動態(tài)性朽们,它可以通過類和方法名反射獲得這個類和方法進行調(diào)用克伊,所以就算在代碼里某個類沒有被使用到,編譯器也無法保證這個類不會再運行時通過反射去調(diào)用华坦,因此只要是在項目中引用的文件,無論是否被使用到都會被編譯進可執(zhí)行文件中不从。那么如何找出來隱藏在其中的廢棄代碼惜姐,看起來是很困難的事情。

下面就為大家介紹幾種瘦身工具:

1.python腳本,可以快速的找到項目中的無用方法歹袁。

執(zhí)行:python selectorsunref.py?根據(jù)提示逐步輸入坷衍,得到檢索結(jié)果。

2.fui命令行条舔,找出項目中廢棄的文件

安裝:gem install fui

安裝

檢索:cd到項目目錄下枫耳,執(zhí)行fui find(此過程可能需要幾分鐘,請耐心等待)


檢索結(jié)果

搜索結(jié)果為項目中未使用的文件孟抗,但為確保安全無誤迁杨,刪除前還需要確保工程沒有使用,避免誤刪凄硼。


作者簡介

就職于甜橙金融(翼支付)信息技術(shù)部铅协,負責 iOS 客戶端開發(fā)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末摊沉,一起剝皮案震驚了整個濱河市狐史,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌说墨,老刑警劉巖骏全,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異尼斧,居然都是意外死亡姜贡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門突颊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鲁豪,“玉大人,你說我怎么就攤上這事律秃∨老穑” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵棒动,是天一觀的道長糙申。 經(jīng)常有香客問我,道長船惨,這世上最難降的妖魔是什么柜裸? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮粱锐,結(jié)果婚禮上疙挺,老公的妹妹穿的比我還像新娘。我一直安慰自己怜浅,他們只是感情好铐然,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布蔬崩。 她就那樣靜靜地躺著,像睡著了一般搀暑。 火紅的嫁衣襯著肌膚如雪沥阳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天自点,我揣著相機與錄音桐罕,去河邊找鬼。 笑死桂敛,一個胖子當著我的面吹牛功炮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播埠啃,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼死宣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了碴开?” 一聲冷哼從身側(cè)響起毅该,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎潦牛,沒想到半個月后眶掌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡巴碗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年朴爬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片橡淆。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡召噩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出逸爵,到底是詐尸還是另有隱情具滴,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布师倔,位于F島的核電站构韵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏趋艘。R本人自食惡果不足惜疲恢,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瓷胧。 院中可真熱鬧显拳,春花似錦、人聲如沸搓萧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至耍休,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間货矮,已是汗流浹背羊精。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留囚玫,地道東北人喧锦。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像抓督,于是被迫代替她去往敵國和親燃少。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容