iOS代碼瘦身實(shí)踐

原文
iOS代碼瘦身實(shí)踐

1 分析當(dāng)前ipa的組成

一般一個(gè)ipa會包含:

1) 資源文件

  • 本地文件:數(shù)據(jù)、配置、數(shù)據(jù)庫等等
  • 字體文件
  • 圖片資源:1.刪除不用的圖片,2.檢查重復(fù)的圖片,3.壓縮大圖片
  1. 源代碼

通過生成linkmap文件,分析源代碼生成的編譯文件的大小。在Build Settings中Write Link Map File設(shè)置為Yes (記住release時(shí)候不要設(shè)置為Yes)。

編譯之后會在build目錄中生成兩個(gè)LinkMap文件: XXX-LinkMap-normal-i386和XXX-LinkMap-normal-x86_64,分別代表在模擬器中32位和64位指令集生成的LinkMap文件。關(guān)于LinkMap的文件詳細(xì)結(jié)構(gòu)解釋可以參考:http://blog.cnbang.net/tech/2296/

LinkMap會包含每個(gè)可執(zhí)行文件的偏移量及大小,所以可以很方便的知道每個(gè)可執(zhí)行文件的大小??梢允褂肔inkMap分析工具:https://github.com/huanxsd/LinkMap

2 資源瘦身

無用的圖片文件

查找無用的圖片文件,使用LSUnusedResources(https://github.com/tinymind/LSUnusedResources

注意:如果是.bundle文件可以解壓出來放到工程中,再用軟件掃描
LSUnusedResourcesExample.gif

重復(fù)的圖片文件

(同事在用,自己用了下沒找到重復(fù)的文件,只找到相似的文件,所以不知道好不好,希望用過的同學(xué)說一下怎么樣)

查找重復(fù)圖像文件,使用Duplicate Photo Finder(App Store有免費(fèi)下載)

無損壓縮圖片

使用ImageOptim(https://github.com/ImageOptim/ImageOptim)進(jìn)行png文件的無損壓縮

image

WebP圖片壓縮

WebP是Google提供的一種圖片編碼格式,通常情況下WebP格式的圖片是原始JPG/PNG圖片的1/3,所以對于重度依賴圖片顯示的應(yīng)用,轉(zhuǎn)換使用WebP可以節(jié)省大量的網(wǎng)絡(luò)傳輸數(shù)據(jù)和時(shí)間。對于APP瘦身,使用WebP格式可能是一種方式,可以使用WebP格式的圖片替代現(xiàn)有的圖片資源,可以一定程度的節(jié)省空間。

使用WebP轉(zhuǎn)換工具
https://developers.google.com/speed/webp/docs/precompiled)嘗試轉(zhuǎn)換了幾張較大的圖片,效果如下:

image

iOS原生并不支持WebP格式加載,需要引入SDWebImage/WebP,詳細(xì)可以參考:http://blog.devzeng.com/blog/ios-webp-usage.html

NSString *path = [[NSBundle mainBundle] pathForResource:``@"logo"` `ofType:``@"webp"``];

NSData *data = [[NSData alloc] initWithContentsOfFile:path];

UIImage *img = [UIImage sd_imageWithWebPData:data];

self.imageView.image = img;

或者使用YYImage,加載WebP格式

CGFloat scale = [UIScreen mainScreen].scale;

NSData  *data = [[NSData alloc] initWithContentsOfFile:webPPath];

UIImage *img = [YYImage imageWithData:data scale:scale];
//UIImage *img = [YYImage imageNamed:webPPath];

使用WebP格式的圖片,似乎就拋棄了iOS @2x @3x按照設(shè)備加載對應(yīng)圖片的機(jī)制,所以應(yīng)該還可以刪除所有@2x圖片,不過加載速度比原生較慢。


2019.07.01補(bǔ)充

WebP轉(zhuǎn)換軟件:

XnConvert (Windows/Mac OS X/Linux) :AppsStore有下載
轉(zhuǎn)的有問題,透明底色的圖片出現(xiàn)白色底色

Webp 轉(zhuǎn)換工具

線上工具:騰訊智圖 、ppms-photo(http://ppms1.jd.com/photo)
本地工具:WebP Converter

WebP Converter 的安裝請參見:https://developers.google.com/speed/webp/

mac 可用 homebrew 安裝:

sudo brew install webp

使用以下指令轉(zhuǎn)換 webp

cwebp -q 80 image.png -o image.webp

具體參見:https://developers.google.com/speed/webp/docs/cwebp

還有一個(gè)騰訊開發(fā)的iSparta,可以把圖片轉(zhuǎn)成WebP。

注釋:

XnConvert 試了,轉(zhuǎn)的有問題,透明底色的圖片出現(xiàn)白色底色 :結(jié)果失敗
WebP Converter試了,我安裝失敗了:結(jié)果失敗
ppms-photo要翻墻,所以沒試:結(jié)果沒試
iSparta,后面才發(fā)現(xiàn) :結(jié)果沒試
最后我用都是騰訊智圖 :結(jié)果成功



2019.07.01補(bǔ)充

網(wǎng)絡(luò)加載

一些圖片使用SDWebImage加載
例如:一些背景圖

圖片使用率提高

提高圖片使用率
例如:一些UI背景圖一樣,只是文字不同,可以公用一張背景圖,替換上面的內(nèi)容

圖片熱更新

把圖片,CSS樣式等資源文件從項(xiàng)目中剝離出來,放到一個(gè)特定的目錄里;然后,我們每次都這個(gè)特定地目錄讀取數(shù)據(jù);最重要的是,我們可以動(dòng)態(tài)更新這個(gè)目錄,實(shí)現(xiàn)圖片等資源文件的動(dòng)態(tài)更新,即熱更新.


3 代碼瘦身

AppCode代碼靜態(tài)檢查

AppCode提供了非常強(qiáng)大的代碼靜態(tài)檢查工具,使用Inspect Code,可以找到很多代碼優(yōu)化的地方??梢詤⒖歼@篇介紹:AppCode inspections for your code perfection

清除無用代碼

AppCode搜索出來的無用的Class,會有誤報(bào)需要仔細(xì)檢查每一個(gè)報(bào)錯(cuò)的代碼。

使用Fui(https://github.com/dblock/fui)查找發(fā)現(xiàn)下列無用文件,同樣需要double check避免誤刪

清除無用的Import

Fui(https://github.com/dblock/fui)可以用于查找無用的import,同時(shí)也提供xcfui 可以和Xcode集成。

清除無用的Method

1. 基于AppCode的掃描定期做清理

你可以用 AppCode這個(gè)IDE。工具條Code-->Inspect Code...。是的,不要以為只有Xcode才能寫OC, 這個(gè)工具可以把一些沒有使用到了類、屬性啥的都可以檢測出來,還是那句話,不要一味地相信他人,要二次確認(rèn)是否可刪。

2. 這篇文章提供了一個(gè)很好的思路可以一鍵刪除無用方法:http://www.itdecent.cn/p/a53480ad0364

查找相似的代碼

使用SameCodeFinder (https://github.com/startry/SameCodeFinder)可以查找到相似的代碼,最后一位數(shù)字代表兩個(gè)文件的海明距離,數(shù)字越小說明兩個(gè)文件越類似。

清理其他無用的代碼

1. 已經(jīng)下線的陳舊代碼,AB試驗(yàn)已經(jīng)下線的代碼

2. 通過轉(zhuǎn)H5、Hybrid或者RN實(shí)現(xiàn)的Native功能,可以定期清理

3. 一些非核心Hybrid或者RN模塊,可以考慮不要打包進(jìn)入APP,通過動(dòng)態(tài)下發(fā)的方式獲取

4. 代碼的重構(gòu),UI組件、業(yè)務(wù)邏輯的重用等等

4 一些參考文章

參考文章:
iOS代碼瘦身實(shí)踐
ipa文件“減肥”初探
iOS - ipa安裝包大小優(yōu)化
newiOS App優(yōu)化1---減少包體積

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容