iOS 包体积优化2 - 如何分析ipa包?

1,667 阅读3分钟

iOS包体积优化的系列文章,其中包括:

1. 项目说明

本案例项目是一个多年持续迭代的项目,技术点包括: OC,Swift,Flutter,H5。

2. ipa包

将 ipa包,更改后缀为zip,可以解压出来,可以看到包的内容。

注意: 该大小包含所有支持设备的信息,并不是appstore上的包大小。【参考: AppStore 对包大小提供的优化支持 章节说明】

ipa包内容.png

3. ipa包拆解分析

ipa(xx MB).png

4. 结构

.app结构作用大小
FrameworksApp 自身引入的动态库(三方库,Swift,Flutter)xx MB
Assets.carAsset Catalog编译产物(图片文件)xx MB
可执行文件主二进制(MachO 文件),代码文件xx MB
PlugIns【无优化方法】App的扩展(本质是动态的可执行文件),比如:Widget、Push,分享599KB
_CodeSignature【无优化方法】ipa包签名文件308KB
embedded.mobileprovision【无优化方法】证书配置文件19KB
Base.lproj【无优化方法】本地化36KB
en.lproj【无优化方法】语言文件2KB
zh-Hans.lproj【无优化方法】语言文件2KB
pluto.momd【无优化方法】托管对象模型文件22KB
其他内置资源业务需要内置的资源,有一定的优化空间,但是需要改动业务。

其他主要内置资源

资源类别资源项作用大小
zipxxxx11.7MB
Bundlexxxx599KB
xx2KB
json文件(47项)xx556KB
xx343KB
低于20KB的不列举了
XIB文件(60个)
plist文件(24个)单个都在3KB以内
字体包DIN Alternate Bold
xx
PNG图片Icon
LaunchScreen

5. Framework分析

整个Frameworks文件夹 共计 xx MB,其中

分类大小占比
Flutter相关xx MB31.04%
三方库xx MB29%
Swift系统支持文件xx MB22.3%
Swift组件库(代码)xx MB15.7%
其他xx MB1.96%
共计xx MB

Frameworks(xx MB).png

6. ipa包分析总结

经过本轮分析,我们已经对自己的ipa包了如指掌:

  • 整个ipa包有多少文件
  • 每个文件的用途是什么
  • 每个文件的大小是多少
  • 每个文件占比是多少

经过分析发现,我的ipa包中, Frameworks,Assets,可执行文件偏大。

Frameworks

  • 混编Swift: 因为混编Swift导致导入的系统Swift支持库比较多,但是因为最低适配版本问题,该部分大小需要等到最低支持版本升到iOS12.2才可以释放。【iOS12.2之后,不再需要内置Swift的支持库】
  • 混编Flutter:混编Flutter导致包体积增大是必须的。没有办法减少。【可以优化Flutter的打包配置,可以优化一点点】
  • 三方库: 使用的三方库分析下来还是比较多的。可以针对三方库的重复性,三方库功能冗余进行优化。

Assets

  • 废弃图片删除
  • 大图片治理
  • 重复图片合并
  • 合适图片云端管理。

可执行文件

  • 废弃文件治理
  • 废弃代码治理
  • 编译优化

7. 开始治理

经过本轮ipa的详细分析,我们知道了优化方向。我们就从最基础的优化点开始吧

[iOS 包体积优化3 - 代码管理]