面试题引发的思考:
Q: 安装包瘦身方案介绍?
-
资源(图片、音频、视频等):
采取无损压缩
去除没有用到的资源(LSUnusedResources) -
可执行文件:
编译器优化
去掉异常支持
去掉未使用的代码(AppCode)
LinkMap文件解析(LinkMap) -
App Thinning:
App Slicing(应用裁剪)
Bitcode(中间代码)
On-Demand Resources(按需加载)
1. 安装包
由上篇文章可知,项目中所有的代码、资源都在XX.app包里面,将来Xcode会将这个XX.app包压缩成一个ipa文件,然后上传到AppStore提供给用户下载,如果项目越来越大,那么这个ipa文件就会越来越大。
为了给安装包(IPA)瘦身,就要知道安装包有哪些文件组成:
安装包(IPA)主要由 可执行文件、资源 组成。
2. 安装包瘦身
(1) 资源优化(图片、音频、视频等)
- 采取无损压缩
- 去除没有用到的资源:使用LSUnusedResources库进行筛选并删除。
(2) 可执行文件优化:
-
编译器优化
Strip Linked Product
、Make Strings Read-Only
、Symbols Hidden by Default
设置为YES
。(现在的项目已经默认为YES
了,一些老项目可能还会为NO
) -
去掉异常支持
Enable C++ Exceptions
、Enable Objective-C Exceptions
设置为NO
,Other C Flags
添加-fno-exceptions
-
去掉未使用的代码
利用AppCode检测未使用的代码
菜单栏 -> Code -> Inspect Code -
LinkMap文件解析
生成LinkMap文件,可以查看可执行文件的具体组成,如下图:
设置之后会生成《DemoApp-LinkMap-normal-arm64.txt》文件,可以进行解析。
如果项目比较大,分析LinkMap文件就会比较麻烦,可以借助第三方工具LinkMap解析工具:检查每个类占用大小。
它其实是个Mac项目,我们下载下来,运行项目 -> 选择文件 -> 点击开始,就能显示每个文件占用多大,我们就能根据文件有目的性的进行优化。如下图:
(3) 官方优化
App thining是苹果官方推出的 安装包优化方案,根据设备的不同来下载安装包中不同的资源。
App Thinning分为三个方面:
- App Slicing(应用裁剪)
开发者把App安装包上传到AppStore后,AppStore会自动将安装包切割为不同的应用变体。- Bitcode
bitcode是被编译程序的一种中间形式的代码。包含bitcode配置的程序将会在App store上被编译和链接。bitcode允许苹果在后期重新优化程序的二进制文件,而不需要重新提交一个新的版本到App store上。- On-Demand Resources(按需加载)
App不包含整个资源库,根据需要时动态下载或删除其中的一部分资源。