项目瘦身
一.日常的项目经过长时间的迭代,优化,重构之后,可能会积累一些用不到了的类,长久下去,会影响我们的包大小。
- 主要删除项目中未使用的类。
- 删除项目中未使用的资源文件
- 压缩项目中大型资源文件
二. 首先针对未使用的类
使用脚本可以检测出项目中未使用的类。 (可评论咨询)
a. 检测原理: 未使用的类 = 项目中所有的类 - 项目中被引用的类 - 实现load方法的类 - 实现load方法的分类 - 项目中使用字符串表示的类 - 子类被引用它的父类 - (只被当作属性没用被使用的类)。
b.实现方式:使用 otool 分析 Mach-o
otool 介绍:Otool 可以提取并显示IOS下目标文件的相关信息,包括头部,加载命令,各个段,共享库,动态库等等。有强大的命令选项,一个强大的分析工具。
主要的命令有:如下
- 获取项目中所有类的符号集合 (otool -v -s __DATA __objc_classlist mach-o Path)
- 获取项目中所有被引用累符号集合 (otool -v -s __DATA __objc_classrefs mach-o Path)
- 获取项目所有调用load类符号集合(otool -v -s __DATA __objc_nlclslist mach-o Path)
- 通过类的符号,找到类名 (nm -nm mach-o Path)
- 查找当前所有类的父类和子类,如果父类在未使用列表,子类不在未使用列表,认为父类有被调用过 (otool -oV mach-o Path)
- 检测项目中的静态字符串,如果某个静态字符串在未使用类列表,删除当前类(otool -v -s __TEXT __cstring mach-o Path)
- 检测当前未使用的类是否使用了load方法,分类是否用了load方法 (otool -oV mach-o Path)
c.分析后的结果取差集
第一步:
分别找到所有类和引用类的集合,然后取差集,初步得到未使用类集合
第二步:
然后依次检查导出的未使用的类,避免误伤。