为什么要优化安装包的体积
- 下载时耗费多余的流量,占用更大的手机内存空间
- 超过一定限制会被禁止安装
- 4G网络不支持下载超过200MB的APP !(最初Apple要求的是150M)
静态扫描的原理
在iOS编译的产物 Mach-o文件
中 __DATA __objc_classrefs
段记录了引用类的地址,__DATA __objc_classlist
段记录了所有类的地址,取差集可以得到未使用的类的地址,然后进行符号化,就可以得到未被引用的类信息。<label style='color:red'> (PS:静态类获取的类会有误差,需要人工确认才可删除!)</label>
方法介绍
- 第一步 通过
otool -v -s __DATA __objc_classrefs
获取到引用类(明确用到的)的地址。 - 第二步 通过
otool -v -s __DATA __objc_classlist
获取所有类的地址。 - 第三步 用所有类信息减去引用类的信息,此时我们可以拿到未使用类的地址信息。
- 第四步 通过
nm -nm
命令可以得到地址和对应的类名字。