京东惊喜团队比较好的实践:
https://juejin.cn/post/7273740834201600063?searchId=2024080510102384EC6DB706CB2F8D3924
iOS 减少包体积是一个涉及多个方面的过程,主要包括资源瘦身、代码优化以及编译策略调整等。以下是一些详细的步骤和建议:
一、资源瘦身
- 删除无用资源
- 使用工具如LSUnusedResources来查找并删除项目中未被引用的图片、音频、视频等资源文件。
- 手动检查项目中是否存在已经不再使用但未被删除的资源,如旧版本的启动图、图标等。
- 对于图片资源,可以使用find命令结合正则匹配来查找未使用的图片文件,并确认后删除。
- 资源压缩
- 使用无损或有损压缩工具(如ImageOptim、tinypng、pngquant等)对图片资源进行压缩,尤其是PNG和JPEG格式的图片。
- 考虑将图片转换为WebP格式,WebP格式具有较高的压缩率且肉眼难以察觉质量损失。
- 对于大型资源文件(如视频、音频文件),可以考虑在运行时从服务器下载,而不是直接包含在APP安装包中。
- 优化图片管理方式
- 使用Assets.xcassets来管理图片资源,因为Xcode会对Assets.xcassets中的图片进行自动压缩,生成更小的Assets.car文件。
- 避免在项目中直接添加大量图片文件,而是通过代码动态加载或从服务器下载。
二、代码优化
- 删除无用代码
- 使用工具如AppCode或Xcode自带的代码检查功能来查找并删除未使用的类、方法、变量等。
- 审查业务逻辑,删除不再使用或已被废弃的代码模块。
- 代码重构
- 对重复的代码进行重构,使用函数、类等方法来减少代码冗余。
- 优化数据结构,减少内存占用和CPU消耗。
- 编译优化
- 修改编译策略,如启用LTO(链接时优化)来优化跨模块调用代码。
- 剥离符号表(Strip Linked Product),删除未引用的C/C++/Swift代码。
- 精简编译产物,只保留必要的符号和导出信息。
三、编译策略调整
- 多架构支持
- 使用lipo工具来查看和修改第三方静态库支持的指令集。例如,如果不需要支持模拟器(i386和x86_64),可以从静态库中移除这些指令集以减小体积。
- 对于发布到App Store的应用,通常只需要保留armv7和arm64两个指令集即可。
- 利用App Thinning
- App Thinning是Apple提供的一种功能,可以根据用户的设备自动下载适合该设备的资源包。这有助于减少初装包的大小。
- 利用App Slicing来创建不同的设备变体,以及使用On-Demand Resources来按需下载资源。
四、其他建议
- 定期审查第三方库
- 定期检查项目中使用的第三方库是否有更新版本,新版本可能包含性能改进和体积优化。
- 使用LinkMap文件
- 通过分析LinkMap文件来了解代码段的分布情况,找出占用空间较大的部分并进行优化。
- 考虑使用云存储
- 对于一些非核心资源文件(如用户数据、配置文件等),可以考虑使用云存储服务来存储和访问,而不是直接包含在APP安装包中。
通过以上步骤,可以有效地减少iOS应用的包体积,提高应用的下载速度和用户体验。