缩减iOS安装包大小是很多中大型APP都要考虑的问题,一般首先会对资源文件进行处理,压缩图片和音频资源,去除不必要的资源。这些资源优化做完后,我们还可以尝试对可执行文件进行瘦身,项目越大,可执行文件占用的体积越大,又因为App Store会对可执行文件加密,导致可执行文件的压缩率低,压缩后可执行文件占整个APP安装包的体积比例大约有80%~90%,还是挺值得优化的。

1 安装包组成

谈到 App 瘦身,最直接的的方法就是先查看一个安装包内部结构,了解其每一部分的性质和来源如下图。解压一个 ipa 包,拿到其 payload 中 app 文件的数据,整理归类后其大致如下:

  1. Exectutabe: 可执行文件
  2. 图片资源:Assets.car/bunde/png/jpg 等
  3. 静态网页资源:htm/css/js 等
  4. 视图资源:xib/storyboard 等
  5. 其他:文本/字体/证书 等
  6. Framework:项目中使用的动态库

2 可瘦身资源

2.1 Framework瘦身

项目中多少都会引入一些第三方静态库,比如项目中引入了第三方分享库,通过lipo工具可以查看支持的指令集,比如查看微信SDK

ios 安装包获取 ios应用安装包_ios 安装包获取

 

其中i386,x86_64,是模拟器的指令集么,去掉后无法模拟器调试, 但是不影响真机调试,可以考虑去掉 armv7可以兼容armv7s,armv7s也可以删了,只保留armv7和arm64

ios 安装包获取 ios应用安装包_iOS_02

 

2.2 编译器优化

Xcode 支持编译器层面的一些优化优化选项,可以让我们介于 更快的编译速度 、 更小的二进制大小 和 更快的执行速度 之间自由选择想要进行的优化粒度;

在Xcode中,使用 Clang 来编译Objective-C,可以在 Build Setting -> Apple Clang - Code Generation ->Optimization Level 设置,Release下为 Fastest Smallest[-Os] 。编译器会开启除了会明显增加包大小以外的所有优化选项;

在Xcode中,使用 SwiftLang 来编译Swift语言,同样也是基于 LLVM 后端的。Xcode 9.3 版本之后可以在Build Setting -> Optimization Level 设置,Release下为 Optimize for Speed[-O] ,这可能会增加安装包大小

2.3 图片资源瘦身

2.3.1 compress PNG Files

Compress PNG Files:打包的时候自动对图片进行无损压缩,使用的工具为 pngcrush,压缩比还是相当高的,比较流行的压缩软件 ImageOptim 也是使用 pngcrush 进行压缩 PNG 的。

Remove Text Medadata From PNG Files:能帮助我们移除 PNG 资源的文本字符,比如图像名称、作者、版权、创作时间、注释等信息。

项目引进的 PNG 资源都是自动被 Xcode 进行压缩了,所以完全不需要自己再去用工具压缩一遍。当除非你是使用 bundle 管理的资源,因为 bundle 是直接拷贝进项目,并不会被 Xcode 进行压缩;JPG 或者其他类型的图片资源可以使用 ImageOptim 进行无损压缩然后导入到 Xcode 中,为了提高效率建议还是提供 PNG 格式的图片。

 

 

2.3.2 去除冗余图片资源

未使用的资源可以使用脚本来进行删除。可使用 FengNiao 来自动删除图片,FengNiao 是命令行工具,我们可以给 Xcode 添加 Run Script,在每次构建的时候自动检测/清理未使用的资源。