作者:Mitchell
轮子链接:MitImgChecker
需求
- 之前项目中有想减少包体积的需求,核心诉求还是减少无用资源文件,再核心的则是减少冗余图片,围绕着这个主要的需求点,用 python 和 shell 匆匆写了一个脚本,代码就不贴了,大概流程是每次发版前 build 检查一下,功能虽然实现了,但是还是有许多问题遗留了下来,每次 build 前运行与工程绑定比较紧密,与工程耦合较重,并且如果想自定义的功能不太好实现,比如:
- 自定义搜索的图片类型,每次都要改脚本!
- 自定义被搜索的文件类型,改脚本!
- 添加搜索的图片黑名单,改脚本!
- 添加被搜索文件的黑名单,改脚本!
- 无法针对动画序列图片进行扫描分析,比如以下情况,a_01 与 a_02 明明使用了,但是没有被正确筛选出来。
//图片名称 a_01.png, a_02.png, a_03.png
//代码中实现如下:
int num;
[NSString stringwithFormat:@"a_%ld",num];
- 无法检测图片虽然不重名但是内容相同的图片
a1.png 与 b1.png 名字不同,但是内容相同,保留一个即可
- 无法检测,被加入 imageset 的图片,但是有的开发者愿意把 imageset 的名称改了,导致 imageset 的文件夹名称与实际图片名称不一样,导致检测出错的问题。(o(╥﹏╥)o)
- 基于以上痛点,本着不重复造一样的精神,看了一下现成的轮子 2500多 star 的 LSUnusedResources,不能完美支持我如上的需求,所以下决心重新造个轮子,MitImgChecker 的诞生。
造轮子中
- 噼里啪啦造轮子中...
轮子 MitImgChecker
- 基于解决以上问题用 Swift 重新造了个轮子:MitImgChecker,提供的能力如下:
- a) 自定以扫描图片类型:
可以自定义增加或者删除 ```png, jpg, json...``` 格式的图片格式
- b) 自定义被扫描文件类型:
比如要在 ```.m / .mm``` 文件中进行图片文件的扫描
- c) 自定义图片子路径黑名单:
比如增加了 ```/123/```, 那么图片文件中带有路径 ```/123/``` 的就都会被过滤,为防止误过滤,尽量添加精确的路径。
- d) 自定义被扫描文件子路径黑名单:
比如增加了 ```/file/```,那么会过滤掉被扫描文件路径中带有 ```/file/``` 中的文件,为防止误过滤,尽量添加精确的路径
- e) 代码片段中扫描指定图片前缀
//图片名称可能是 a_01.png, 1_02.png ...
//代码中使用可能如下,此时无法准确匹配 a_01,那么此时添加图片代码前缀 a_ 就可以将其过滤掉
int num = 0;
[UIImage imageNamed:[NSString stringwithFormat:"a_%ld",num]]
- f) 使用 .imageset 中文件与实际图片命名不一致时的兼容扫描
//这种关于个人代码风格问题,拖拽到 .xcaseets 中的图片之后,手动改一下 imageset 的文件名称。(恩,很头痛~)
代码是 1.png 但是拖进去之后 将生成的 1.imageset 改成了 2.imageset.
- g) 内容重复图片检测能力
可以检测出不同名称相同内容的图片。
总结
- 不用史上最强、惊为天人... 等类似的标准话术来结尾了。这个小轮子满足了我和我的伙伴开发中的一些实际的痛点,希望大家拿去用的时候随手给个 star,Thanks♪(・ω・)ノ。