1. 需求的引入
一个项目开发得越久,添加的功能模块也就越多,相应地,也会慢慢引入大量图片等资源。但是,在移除一些不再使用的模块的时候,开发者往往会把该模块所对应的图片资源一起删除,因为源码和资源是分离的。长久以来,项目中就会存在大量没被使用的资源文件。
在某个时机,也就是需求完成得差不多,Bug 增加得不够多,Crash 上涨得不够快的时候,码农们终于有了一点闲暇时间,打算清理一下资源文件,减少 App 安装包的大小。这是一件体力活,方法无非是,一个一个地复制资源文件名,然后在 XCode 中全局查找该字符串,如果结果为 0,那么这个资源很可能就没有被使用。为什么说很可能?因为在代码中,有可能通过字符串拼接的方式使用了这个资源,而这种情况是没办法通过字符串匹配查找出来的。
道理我们都懂,但是,操作起来也实在是太繁琐了,码农们不可能会乐意这样干的。于是,我们需要这么一款工具:能够迅速找出工程中所有没被使用的资源文件。
2. 已有的方案
果不其然,在我打算写这么一个工具的时候,在网上已经有了两种方案。
2.1 方案1:万能的脚本
1 2 3 4 5 6 7 8 9 10 |
|
缺点:不够智能,不够通用,速度太慢,结果不正确。
2.2 方案2:脚本界面化
Unused 对脚本的调用做了封装,通过界面可以配置一定的信息,然后比较清晰的输入结果。
缺点:实际上,Unused 的内部还是调用了方案 1 的脚本,所以方案 1 的缺点也就是方案 2 的缺点。
3. LSUnusedResources 做的改进
3.1 提高匹配速度
LSUnusedResources 很大程度上受 Unused 的影响,比如界面、交互,以及部分代码。但是,本工具在核心代码上做了优化,使其在搜索的速度、结果的正确上都有了很大的提高。
核心步骤,简述如下:
- 查找:选定的目录下的所有资源文件。这一步与上述方案1区别不大,都是调用
find
命令查找指定后缀名的文件。 - 匹配:与上述方案不同,我不是对每个资源文件名都做一次全文搜索匹配,因为加入项目的资源太多,这里会导致性能快速下降。而我只是针对源码、Xib、Storyboard 和 plist 等文件,先全文搜索其中可能是引用了资源的字符串,然后用资源名和字符串做匹配。
3.2 优化匹配结果
Unused 会把大量实际上有使用的资源,当做未使用的资源输出。LSUnusedResources 则不会出现这样的问题,并且使得结果更加优化。
举例说明:
你在工程中添加了下面资源:
1 2 3 4 |
|
然后用字符串拼接的方式在代码中引用:
1 2 |
|
icon_tag_x.png
是不应该被当做未使用的资源的,只是以一种比较隐晦的方式间接引用了,所以不应该出现在结果列表中。
4. 使用方法
- 点击
Browse..
选择一个文件夹; - 点击
Search
开始搜索; - 等待片刻即可看到结果;
- 选中某些行,然后点击
Delete
可以直接删除资源。
5. 下载安装
- 下载: LSUnusedResources.app.zip
- 或者使用 XCode 编译运行项目代码。
原文作者: lslin
原文链接: http://blog.lessfun.com/blog/2015/09/02/find-unused-resources-in-xcode-project/
版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0