iOS 代码瘦身(一):静态扫描无用的类

为什么要优化安装包的体积

  • 下载时耗费多余的流量,占用更大的手机内存空间
  • 超过一定限制会被禁止安装
  • 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命令可以得到地址和对应的类名字。

参考文档以及Git repo

Python 脚本 Git地址

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Mach-O Mach-O是Mach object的缩写,是Mac\iOS上用于存储程序、库的标准格式属于Mach...
    Rathen阅读 5,804评论 3 7
  • iOS 安装包瘦身 一. 安装包组成 谈到 App 瘦身,最直接的想法莫过于分析一个安装包内部结构,了解其每一部分...
    iYeso阅读 1,367评论 5 9
  • 安装包组成: 谈到 App 瘦身,最直接的想法莫过于分析一个安装包内部结构,了解其每一部分的来源。解压一个 ipa...
    孔雨露阅读 3,411评论 1 7
  • iOS 底层探索系列iOS 底层探索- alloc & initiOS 底层探索 - calloc 和 isaiO...
    leejunhui阅读 891评论 0 5
  • 记录一次安装包大小优化的实践。维持安装包体积是一个持续的过程,建立预警机制,监控每个版本的体积大小。 资源文件优化...
    bluedaquiri阅读 2,361评论 0 4