作者:Mitchell
輪子鏈接:MitImgChecker
需求
- 之前項(xiàng)目中有想減少包體積的需求巷波,核心訴求還是減少無(wú)用資源文件外臂,再核心的則是減少冗余圖片致盟,圍繞著這個(gè)主要的需求點(diǎn)臂痕,用 python 和 shell 匆匆寫了一個(gè)腳本,代碼就不貼了囊骤,大概流程是每次發(fā)版前 build 檢查一下晃择,功能雖然實(shí)現(xiàn)了,但是還是有許多問(wèn)題遺留了下來(lái)也物,每次 build 前運(yùn)行與工程綁定比較緊密藕各,與工程耦合較重,并且如果想自定義的功能不太好實(shí)現(xiàn)焦除,比如:
- 自定義搜索的圖片類型,每次都要改腳本作彤!
- 自定義被搜索的文件類型膘魄,改腳本乌逐!
- 添加搜索的圖片黑名單,改腳本创葡!
- 添加被搜索文件的黑名單浙踢,改腳本!
- 無(wú)法針對(duì)動(dòng)畫序列圖片進(jìn)行掃描分析灿渴,比如以下情況洛波,a_01 與 a_02 明明使用了,但是沒(méi)有被正確篩選出來(lái)骚露。
//圖片名稱 a_01.png, a_02.png, a_03.png
//代碼中實(shí)現(xiàn)如下:
int num;
[NSString stringwithFormat:@"a_%ld",num];
- 無(wú)法檢測(cè)圖片雖然不重名但是內(nèi)容相同的圖片
a1.png 與 b1.png 名字不同蹬挤,但是內(nèi)容相同,保留一個(gè)即可
- 無(wú)法檢測(cè)棘幸,被加入 imageset 的圖片焰扳,但是有的開(kāi)發(fā)者愿意把 imageset 的名稱改了,導(dǎo)致 imageset 的文件夾名稱與實(shí)際圖片名稱不一樣误续,導(dǎo)致檢測(cè)出錯(cuò)的問(wèn)題吨悍。(o(╥﹏╥)o)
- 基于以上痛點(diǎn),本著不重復(fù)造一樣的精神蹋嵌,看了一下現(xiàn)成的輪子 2500多 star 的 LSUnusedResources育瓜,不能完美支持我如上的需求,所以下決心重新造個(gè)輪子栽烂,MitImgChecker 的誕生躏仇。
造輪子中
- 噼里啪啦造輪子中...
輪子 MitImgChecker
- 基于解決以上問(wèn)題用 Swift 重新造了個(gè)輪子:MitImgChecker,提供的能力如下:
- a) 自定以掃描圖片類型:
可以自定義增加或者刪除 ```png, jpg, json...``` 格式的圖片格式
- b) 自定義被掃描文件類型:
比如要在 ```.m / .mm``` 文件中進(jìn)行圖片文件的掃描
- c) 自定義圖片子路徑黑名單:
比如增加了 ```/123/```, 那么圖片文件中帶有路徑 ```/123/``` 的就都會(huì)被過(guò)濾愕鼓,為防止誤過(guò)濾钙态,盡量添加精確的路徑。
- d) 自定義被掃描文件子路徑黑名單:
比如增加了 ```/file/```菇晃,那么會(huì)過(guò)濾掉被掃描文件路徑中帶有 ```/file/``` 中的文件册倒,為防止誤過(guò)濾,盡量添加精確的路徑
- e) 代碼片段中掃描指定圖片前綴
//圖片名稱可能是 a_01.png, 1_02.png ...
//代碼中使用可能如下磺送,此時(shí)無(wú)法準(zhǔn)確匹配 a_01驻子,那么此時(shí)添加圖片代碼前綴 a_ 就可以將其過(guò)濾掉
int num = 0;
[UIImage imageNamed:[NSString stringwithFormat:"a_%ld",num]]
- f) 使用 .imageset 中文件與實(shí)際圖片命名不一致時(shí)的兼容掃描
//這種關(guān)于個(gè)人代碼風(fēng)格問(wèn)題,拖拽到 .xcaseets 中的圖片之后估灿,手動(dòng)改一下 imageset 的文件名稱崇呵。(恩,很頭痛~)
代碼是 1.png 但是拖進(jìn)去之后 將生成的 1.imageset 改成了 2.imageset.
- g) 內(nèi)容重復(fù)圖片檢測(cè)能力
可以檢測(cè)出不同名稱相同內(nèi)容的圖片馅袁。
總結(jié)
- 不用史上最強(qiáng)域慷、驚為天人... 等類似的標(biāo)準(zhǔn)話術(shù)來(lái)結(jié)尾了。這個(gè)小輪子滿足了我和我的伙伴開(kāi)發(fā)中的一些實(shí)際的痛點(diǎn),希望大家拿去用的時(shí)候隨手給個(gè) star犹褒,Thanks?(?ω?)?抵窒。