iOS安裝包“減肥”實戰(zhàn)記錄

Appstore安裝包是由資源和可執(zhí)行文件兩部分組成搓逾,安裝包瘦身也是從這兩部分進(jìn)行霞篡。
第一彈:引用資源“減肥”

資源瘦身主要是去掉無用資源和壓縮資源污淋,資源包括圖片寸爆、音視頻文件赁豆、配置文件以及多語言wording。無用資源是指資源在工程文件里节预,但沒有被代碼引用安拟。檢查方法是糠赦,用資源關(guān)鍵字(通常是文件名唆铐,圖片資源需要去掉@2x @3x)顺少,搜索代碼梅猿,搜不到就是沒有被引用。當(dāng)然喇潘,有些資源在使用過程中是拼接而成的(如loading_xxx.png)弧烤,需要手工過濾暇昂。

資源壓縮主要對png進(jìn)行無損壓縮从铲,用的是ImageOptim工具和compress命令(需要安裝XQuartz-2.7.5.dm插件)。不建議對資源做有損壓縮赏寇,有損壓縮需要設(shè)計一個個檢查,通常壓縮后效果不盡人意自娩。
1找出無用的selector

以往C++在鏈接時脐彩,沒有被用到的類和方法是不會編進(jìn)可執(zhí)行文件里惠奸。但Objctive-C不同,由于它的動態(tài)性嵌言,它可以通過類名和方法名獲取這個類和方法進(jìn)行調(diào)用绵载,所以編譯器會把項目里所有OC源文件編進(jìn)可執(zhí)行文件里苛白,哪怕該類和方法沒有被使用到培愁。

結(jié)合LinkMap文件的__TEXT.__text定续,通過正則表達(dá)式([+|-][.+\s(.+)])私股,我們可以提取當(dāng)前可執(zhí)行文件里所有objc類方法和實例方法(SelectorsAll)。再使用otool命令otool -v -s __DATA __objc_selrefs逆向__DATA.__objc_selrefs段峭状,提取可執(zhí)行文件里引用到的方法名(UsedSelectorsAll)优床,我們可以大致分析出SelectorsAll里哪些方法是沒有被引用的(SelectorsAll-UsedSelectorsAll)胆敞。注意仍翰,系統(tǒng)API的Protocol可能被列入無用方法名單里予借,如UITableViewDelegate的方法蕾羊,我們只需要對這些Protocol里的方法加入白名單過濾即可书闸。

另外第三方庫的無用selector也可以這樣掃出來的嫌术。

2找出無用Objective-C類

查找無用oc類有兩種方式,一種是類似于查找無用資源磷籍,通過搜索"[ClassName alloc/new"够吩、"ClassName *"饮怯、"[ClassName class]"等關(guān)鍵字在代碼里是否出現(xiàn)。另一種是通過otool命令逆向__DATA.__objc_classlist段和__DATA.__objc_classrefs段來獲取當(dāng)前所有oc類和被引用的oc類于樟,兩個集合相減就是無用oc類。
選擇合理的編譯設(shè)置

Strip Link Product設(shè)成YES,WeChatWatch可執(zhí)行文件減少0.3M
Make Strings Read-Only設(shè)為YES,也許是因為微信工程從低版本Xcode升級過來,這個編譯選項之前一直為NO,設(shè)為YES后可執(zhí)行文件減少了3M
去掉異常支持系忙,Enable C++ Exceptions和Enable Objective-C Exceptions設(shè)為NO,并且Other C Flags添加-fno-exceptions,可執(zhí)行文件減少了27M苍苞,其中__gcc_except_tab段減少了17.3M冈欢,__text減少了9.7M太示,效果特別明顯邻吭。可以對某些文件單獨支持異常,編譯選項加上-fexceptions即可剧董。但有個問題真慢,假如ABC三個文件皂林,AC文件支持了異常,B不支持忆家,如果C拋了異常卸例,在模擬器下A還是能捕獲異常不至于Crash筷转,但真機下捕獲不了(有知道原因可以在下面留言:)阴绢。去掉異常后,Appstore后續(xù)幾個版本Crash率沒有明顯上升篓足。個人認(rèn)為關(guān)鍵路徑支持異常處理就好涩哟,像啟動時NSCoder讀取setting配置文件得要支持捕獲異常,等等

5其他可能的優(yōu)化

iOS8 Embed-Framework:提取WeChatWatch融涣、ShareExtention和微信主工程的公共代碼杂拨,可執(zhí)行文件可以減少5M+弹沽,不過這特性需要最低版本iOS8才能用,iOS7設(shè)備啟動會crash
iOS9 App Thinning:嚴(yán)格來說App Thinning不會讓安裝包變小娜亿,但用戶安裝應(yīng)用時蚌堵,蘋果會根據(jù)用戶的機型自動選擇合適的資源和對應(yīng)CPU架構(gòu)的二進(jìn)制執(zhí)行文件(也就是說用戶本地可執(zhí)行文件不會同時存在armv7和arm64)吼畏,安裝后空間占用更小

6建立版本增量日志

通過對LinkMap文件的分析躲舌,可以得知每個模塊可執(zhí)行文件占用大小性雄。再對比兩個版本秒旋,就知道業(yè)務(wù)模塊的增量大小酒甸。參考如下:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子膝昆,更是在濱河造成了極大的恐慌滔驾,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酣胀,死亡現(xiàn)場離奇詭異顿涣,居然都是意外死亡,警方通過查閱死者的電腦和手機毙籽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門然爆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來趾牧,“玉大人,你說我怎么就攤上這事剧腻∫迕” “怎么了男杈?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我爹梁,道長,這世上最難降的妖魔是什么梦重? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任讶踪,我火速辦了婚禮,結(jié)果婚禮上僧界,老公的妹妹穿的比我還像新娘。我一直安慰自己鹏控,他們只是感情好抖僵,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布沐祷。 她就那樣靜靜地躺著兼雄,像睡著了一般澎羞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上括饶,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天图焰,我揣著相機與錄音技羔,去河邊找鬼藤滥。 笑死拙绊,一個胖子當(dāng)著我的面吹牛浦马,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谨娜,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼漠畜,長吁一口氣:“原來是場噩夢啊……” “哼憔狞!你這毒婦竟也來了瘾敢?” 一聲冷哼從身側(cè)響起尿这,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤簇抵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后射众,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碟摆,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年叨橱,在試婚紗的時候發(fā)現(xiàn)自己被綠了典蜕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片愉舔。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡典奉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出假瞬,到底是詐尸還是另有隱情垄开,我是刑警寧澤榜田,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布蛔六,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜坏匪,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嗅绸。 院中可真熱鬧羹铅,春花似錦麻蹋、人聲如沸倒谷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春碍侦,著一層夾襖步出監(jiān)牢的瞬間枚驻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工沈撞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留显晶,地道東北人偿警。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親绍赛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359

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