如何減小ipa包大小方法總結

縮減ios可執行文件包的大小是每一個ios開發人員都要經歷的問題,一般首先會對資源文件做處理,壓縮圖片/音頻,去除不必要的資源如@2x和@3x的圖片合并。這些資源優化做完后,我們還可以嘗試對可執行文件進行瘦身,項目越大,可執行文件占用的體積越大,又因為AppStore會對可執行文件加密,導致可執行文件的壓縮率低,壓縮后可執行文件占整個APP安裝包的體積比例大約有80%~90%,還是挺值得優化的,下面說一些壓縮的地方:

1.編譯器的優化---即setting里面一些配置項

Build Settings->Optimization Level有幾個編譯優化選項,release版應該選擇Fastest, Smalllest,這個選項會開啟那些不增加代碼大小的全部優化,并讓可執行文件盡可能小,當然這些編譯項早期是在工程生成時候xcode默認給工程配置好了,如果一旦xcode做了改變我們要知道這些東西。

2.去除符號信息

Strip Linked Product / Deployment Postprocessing / Symbols Hidden by Default在release版本應該設為yes,可以去除不必要的調試符號。Symbols Hidden by Default會把所有符號都定義成”private extern”。這些選項目前都是XCode里release的默認選項,但舊版XCode生成的項目可能不是,可以檢查一下

3.無用代碼

在項目里新建一個類,給它添加幾個方法,但不要在任何地方import它,build完項目后觀察linkmap,你會發現這個類還是被編譯進可執行文件了。

按C++的經驗,沒有被使用到的類和方法編譯器都會優化掉,不會編進最終的可執行文件,但object-c不一樣,因為object-c的動態特性,它可以通過類和方法名反射獲得這個類和方法進行調用,所以就算在代碼里某個類沒被使用到,編譯器也沒法保證這個類不會在運行時通過反射去調用,所以只要是在項目里的文件,無論是否又被使用到都會被編譯進可執行文件。

對此我們可以通過腳本,遍歷整個項目的文件,找出所有沒有被引用的類文件和沒有被調用的方法,在保證沒有其他地方動態調用的情況下把它們去掉。如果整個項目歷時很長,歷時代碼遺留較多,這個清理對可執行文件省出的空間還是挺可觀的。

4.類/方法名長度

觀察linkmap可以發現每個類和方法名都在__cstring段里都存了相應的字符串值,所以類和方法名的長短也是對可執行文件大小是有影響的,原因還是object-c的動態特性,因為需要通過類/方法名反射找到這個類/方法進行調用,object-c對象模型會把類/方法名字符串都保存下來。

對此我們可以考慮在編譯前把所有類和方法名進行混淆,跟壓縮js一樣,把長名字替換成短名字,這樣做的好處除了縮小體積外,還對安全性有很大提升,別人拿到可執行文件對它class-dump出來的結果都是混淆后的類和方法名,就無法從類和方法名中猜出某個方法是做什么的,就難以掛鉤子進行hack。不過這樣做有個缺點,就是crash堆棧反解出來的堆棧方法名會是混淆后的,需要再加一層混淆->原名的轉換,實現和使用成本有點高。實際上這部分占用的長度比較小,中型項目也就幾百K,對安全性要求高的情況可以試試。

5.冗余字符串

代碼上定義的所有靜態字符串都會記錄在在可執行文件的__cstring段,如果項目里Log非常多,這個空間占用也是可觀的,也有幾百K的大小,可以考慮清理所有冗余的字符串。另外如果有特別長的字符串,建議抽離保存成靜態文件,因為AppStore對可執行文件加密導致壓縮率低,特別長的字符串抽離成靜態資源文件后壓縮率會比在可執行文件里高很多.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容