iOS包大小優(yōu)化

一获列、iOS(安裝)包

ipa全稱為iPhone Application Archive讯屈,這里指的包在iOS其實(shí)就是安裝包绑蔫,直觀展示就是xxx.ipa文件

二运沦、iOS包內(nèi)容

要對(duì)其優(yōu)化,就要知道包里面都有什么配深,知道了有什么携添,針對(duì)不同類型的文件,做不同的處理篓叶,從而達(dá)到一定的優(yōu)化烈掠。

安裝包內(nèi)容如下:

  • _CodeSignature文件夾:ipa包簽名文件的存放文件夾

  • Assets.carAssets.xcassts在編譯過(guò)程中生成的最終展示文件羞秤,默認(rèn)里面存放各種分辨率圖片(測(cè)試項(xiàng)目未使用)

  • embedded.mobileprovision:證書配置文件

  • Info.plist:項(xiàng)目配置表

  • PluginsApp創(chuàng)建的擴(kuò)展,比如Widget左敌、PushShare

  • .IprojApp所支持的語(yǔ)言文件

  • exec文件:可執(zhí)行文件瘾蛋,例如widgetExtension

  • 圖片資源:.png,.jpg矫限,.webp哺哼,.gif

  • 其它資源文件

    • .xml,.json

    • .plist:項(xiàng)目中使用資源的.plist文件

    • .bundleMac OS下的資源包集合

    • .conf:相關(guān)的配置文件

    • .cer叼风,.der取董,.p12:鑰匙串文件

    • .wav:音頻文件

    • .js.html

    • .nibXcode自帶的數(shù)據(jù)文件无宿,包含一個(gè)窗口程序和應(yīng)用程序委托對(duì)象

    • .sqlite:數(shù)據(jù)庫(kù)文件

    • .txt:文本文件

    • .momXcode創(chuàng)建的數(shù)據(jù)模型文件

三茵汰、優(yōu)化策略

Xcode編譯優(yōu)

armv6: iPhone, iPhone 3G, iPod 1G/2G
armv7: iPhone 3GS, iPhone 4, iPhone 4S, iPod 3G/4G/5G, iPad, iPad 2, iPad 3, iPad Mini
armv7s: iPhone 5, iPhone 5c, iPad 4
arm64: iPhone X,iPhone 8(Plus)孽鸡,iPhone 7(Plus)蹂午,iPhone 6(Plus),iPhone 6s(Plus), iPhone 5s, iPad Air(2), Retina iPad Mini(2,3)
arm64e: XS/XS Max/XR/ iPhone 11, iPhone 11 pro,iPhone 11 Pro Max,iPhone SE (2nd generation),iPhone 12 mini,iPhone 12,iPhone 12 Pro,iPhone 12 Pro Max,Phone 13 mini,Phone 13,iPhone 13 Pro,iPhone 13 Pro Max
x86_64: 模擬器64位處理器
i386: 模擬器32位處理器

Excluded Architectures中設(shè)置Release模式下 Any iOS SDK -> armv7
設(shè)置了之后梭灿,Release下把a(bǔ)rmv7的指令集排除在外。選中target會(huì)發(fā)現(xiàn)默認(rèn)設(shè)置了 Any iOS Simulator SDK -> arm64冰悠,意思是模擬器的時(shí)候排除arm64指令集堡妒。(Xcode14以后,官方不兼容arm7s和armv7溉卓,應(yīng)該不需要再設(shè)置了)

資源文件優(yōu)化

1皮迟、刪除無(wú)用圖片資源
使用開(kāi)源項(xiàng)目LSUnusedResources(https://github.com/tinymind/LSUnusedResources),可以根據(jù)項(xiàng)目實(shí)際情況定義查找文件的正則表達(dá)式桑寨。
使用建議:
勾選 Ignore similar name 伏尼,避免掃描出圖片組。
在刪除前在項(xiàng)目中進(jìn)行二次全局搜索確認(rèn)尉尾,是否確實(shí)沒(méi)有使用爆阶。

2、圖片資源壓縮
將png圖片格式轉(zhuǎn)化為WebP沙咏,使用工具iSpart
使用工具ImageOptim或者TinyPng壓縮圖片

使用建議:
由于WebP 在 CPU 消耗和解碼時(shí)間上會(huì)比 PNG 高兩倍辨图。所以,我們有時(shí)候還需要在性能和體積上做取舍肢藐。建議是故河,如果圖片大小超過(guò)了 100KB,你可以考慮使用 WebP吆豹;而小于 100KB 時(shí)鱼的,你可以使用工具進(jìn)行圖片壓縮理盆。這兩個(gè)工具的壓縮率沒(méi)有 WebP 那么高,不會(huì)改變圖片壓縮方式凑阶,所以解析時(shí)對(duì)性能損耗也不會(huì)增加猿规。

3、代碼瘦身
工程量不是很大的話晌砾,直接使用 AppCode 來(lái)做分析坎拐,那些代碼量達(dá)到百萬(wàn)行的團(tuán)隊(duì),則會(huì)自己通過(guò) Clang 靜態(tài)分析來(lái)開(kāi)發(fā)工具养匈,去檢查無(wú)用的方法和類哼勇。

使用AppCode進(jìn)行無(wú)用代碼刪除有一些注意點(diǎn):
-JSONModel 里定義了未使用的協(xié)議會(huì)被判定為無(wú)用協(xié)議;
-如果子類使用了父類的方法呕乎,父類的這個(gè)方法不會(huì)被認(rèn)為使用了积担;
-通過(guò)點(diǎn)的方式使用屬性,該屬性會(huì)被認(rèn)為沒(méi)有使用猬仁;
-使用 performSelector 方式調(diào)用的方法也檢查不出來(lái)帝璧,比如 self performSelector:@selector(arrivalRefreshTime);
-運(yùn)行時(shí)聲明類的情況檢查不出來(lái)湿刽。比如通過(guò) NSClassFromString 方式調(diào)用的類會(huì)被查出為沒(méi)有使用的類的烁,比如 layerClass = NSClassFromString(@“SMFloatLayer”)。還有以[[self class] accessToken] 這樣不指定類名的方式使用的類诈闺,會(huì)被認(rèn)為該類沒(méi)有被使用渴庆。像 UITableView 的自定義的 Cell 使用 registerClass,這樣的情況也會(huì)認(rèn)為這個(gè) Cell 沒(méi)有被使用雅镊。

基于以上種種原因襟雷,使用 AppCode 檢查出來(lái)的無(wú)用代碼,還需要人工二次確認(rèn)才能夠安全刪除掉仁烹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末耸弄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子卓缰,更是在濱河造成了極大的恐慌计呈,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件征唬,死亡現(xiàn)場(chǎng)離奇詭異震叮,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)鳍鸵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門苇瓣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人偿乖,你說(shuō)我怎么就攤上這事击罪≌艹埃” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵媳禁,是天一觀的道長(zhǎng)眠副。 經(jīng)常有香客問(wèn)我,道長(zhǎng)竣稽,這世上最難降的妖魔是什么囱怕? 我笑而不...
    開(kāi)封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮毫别,結(jié)果婚禮上娃弓,老公的妹妹穿的比我還像新娘。我一直安慰自己岛宦,他們只是感情好台丛,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著砾肺,像睡著了一般挽霉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上变汪,一...
    開(kāi)封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天侠坎,我揣著相機(jī)與錄音,去河邊找鬼裙盾。 笑死实胸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的闷煤。 我是一名探鬼主播童芹,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼涮瞻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鲤拿!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起署咽,我...
    開(kāi)封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤近顷,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后宁否,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體窒升,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年慕匠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了饱须。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡台谊,死狀恐怖蓉媳,靈堂內(nèi)的尸體忽然破棺而出譬挚,到底是詐尸還是另有隱情,我是刑警寧澤酪呻,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布减宣,位于F島的核電站,受9級(jí)特大地震影響玩荠,放射性物質(zhì)發(fā)生泄漏漆腌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一阶冈、第九天 我趴在偏房一處隱蔽的房頂上張望闷尿。 院中可真熱鬧,春花似錦眼溶、人聲如沸悠砚。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)灌旧。三九已至,卻和暖如春绰筛,著一層夾襖步出監(jiān)牢的瞬間枢泰,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工铝噩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留衡蚂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓骏庸,卻偏偏與公主長(zhǎng)得像毛甲,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子具被,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

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