iOS包体积优化的系列文章,其中包括:
- iOS 包体积优化1 - 总览
- iOS 包体积优化2 - 如何分析ipa包?
- iOS 包体积优化3 - 代码管理
- iOS 包体积优化4 - 资源管理
- iOS 包体积优化5 - 编译优化
- iOS 包体积优化6 - 长期维护
1. 项目说明
本案例项目是一个多年持续迭代的项目,技术点包括: OC,Swift,Flutter,H5。
2. ipa包
将 ipa包,更改后缀为zip,可以解压出来,可以看到包的内容。
注意: 该大小包含所有支持设备的信息,并不是appstore上的包大小。【参考: AppStore 对包大小提供的优化支持 章节说明】
3. ipa包拆解分析
4. 结构
.app结构 | 作用 | 大小 |
---|---|---|
Frameworks | App 自身引入的动态库(三方库,Swift,Flutter) | xx MB |
Assets.car | Asset 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 |
其他内置资源 | 业务需要内置的资源,有一定的优化空间,但是需要改动业务。 |
其他主要内置资源
资源类别 | 资源项 | 作用 | 大小 |
---|---|---|---|
zip | xx | xx | 11.7MB |
Bundle | xx | xx | 599KB |
xx | 2KB | ||
json文件(47项) | xx | 556KB | |
xx | 343KB | ||
低于20KB的不列举了 | |||
XIB文件(60个) | |||
plist文件(24个) | 单个都在3KB以内 | ||
字体包 | DIN Alternate Bold | ||
xx | |||
PNG图片 | Icon | ||
LaunchScreen |
5. Framework分析
整个Frameworks文件夹 共计 xx MB,其中
分类 | 大小 | 占比 |
---|---|---|
Flutter相关 | xx MB | 31.04% |
三方库 | xx MB | 29% |
Swift系统支持文件 | xx MB | 22.3% |
Swift组件库(代码) | xx MB | 15.7% |
其他 | xx MB | 1.96% |
共计 | xx MB |
6. ipa包分析总结
经过本轮分析,我们已经对自己的ipa包了如指掌:
- 整个ipa包有多少文件
- 每个文件的用途是什么
- 每个文件的大小是多少
- 每个文件占比是多少
经过分析发现,我的ipa包中, Frameworks,Assets,可执行文件偏大。
Frameworks
- 混编Swift: 因为混编Swift导致导入的系统Swift支持库比较多,但是因为最低适配版本问题,该部分大小需要等到最低支持版本升到iOS12.2才可以释放。【iOS12.2之后,不再需要内置Swift的支持库】
- 混编Flutter:混编Flutter导致包体积增大是必须的。没有办法减少。【可以优化Flutter的打包配置,可以优化一点点】
- 三方库: 使用的三方库分析下来还是比较多的。可以针对三方库的重复性,三方库功能冗余进行优化。
Assets
- 废弃图片删除
- 大图片治理
- 重复图片合并
- 合适图片云端管理。
可执行文件
- 废弃文件治理
- 废弃代码治理
- 编译优化
7. 开始治理
经过本轮ipa的详细分析,我们知道了优化方向。我们就从最基础的优化点开始吧
[iOS 包体积优化3 - 代码管理]