0%

iOS统计SDK体积大小

如何精确统计SDK体积?

客户端拿到的SDK可能是多个架构的,比如armv7、armv7s、i386、x86_64、arm64,而最终打到ipa里面却不可能包含这么多架构,中间经过裁剪优化,可能最终体积会大大减少。

我就碰到了一个类似的问题,升级sdk,单纯从.a和.framework的体积来计算升级前后的体积,结论是升级后,sdk体积会降低12.35M的大小。但是,打出ipa进行比对,发现升级后ipa反而增长2.1M。看到这样的结果,我也不知道如何解释。

查看Mach-O文件__TEXT段大小

1
$ xcrun size -lm <binary-path>

使用上面的指令,可以查看Mach-O文件Data部分结构和各Segment/Section的大小信息。

通过比较两个ipa文件中Mach-O文件__TEXT段的大小,发现升级后的Mach-O文件的确增大了3M左右。

开启LinkMap选项,使用LinkMap分析SDK大小

  • 普通项目,开启LinkMap,需要在XCode -> Project -> Build Settings -> 把Write Link Map File选项设为yes,并指定好linkMap的存储位置
  • Bazel项目,开启LinkMap,需要在.bazelrc配置文件中添加下面几行配置:
    1
    2
    3
    aquery --objc_generate_linkmap=1
    build --objc_generate_linkmap=1
    cquery --objc_generate_linkmap=1
    然后,找到Edit Scheme选项,切换到release模式,编译项目,获取到编辑后的Mach-O文件和LinkMap文件。如果不清楚LinkMap文件位置,可以在Xcode的编辑日志中搜索LinkMap关键字,编辑的时候会打印相关日志。

使用LinkMap文件分析SDK的大小

使用LinkMap分析工具来分析,选择LinkMap文件,勾选”分组解析”,点击开始,最终会列出全部的库文件所占用的体积。

最终通过比较两个LinkMap分析的数据,发现升级之后 SDK体积确实增长了3.26M。

参考链接

今日头条优化实践: iOS 包大小二进制优化,一行代码减少 60 MB 下载大小
深入探索 iOS 包体积优化
iOS性能优化-包大小+linkMap分析和查找未使用类和方法
iOS使用LinkMap分析包大小
LinkMap分析工具