iOS底层原理 - 性能优化 之 安装包瘦身

面试题引发的思考:

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 ProductMake Strings Read-OnlySymbols Hidden by Default设置为YES。(现在的项目已经默认为YES了,一些老项目可能还会为NO)
  • 去掉异常支持
    Enable C++ ExceptionsEnable Objective-C Exceptions设置为NOOther C Flags添加-fno-exceptions
  • 去掉未使用的代码
    利用AppCode检测未使用的代码
    菜单栏 -> Code -> Inspect Code
  • LinkMap文件解析
    生成LinkMap文件,可以查看可执行文件的具体组成,如下图:
LinkMap设置
LinkMap设置

设置之后会生成《DemoApp-LinkMap-normal-arm64.txt》文件,可以进行解析。

如果项目比较大,分析LinkMap文件就会比较麻烦,可以借助第三方工具LinkMap解析工具:检查每个类占用大小。

LinkMap提示

它其实是个Mac项目,我们下载下来,运行项目 -> 选择文件 -> 点击开始,就能显示每个文件占用多大,我们就能根据文件有目的性的进行优化。如下图:

LinkMap分析结果

(3) 官方优化

App thining是苹果官方推出的 安装包优化方案,根据设备的不同来下载安装包中不同的资源。

App Thinning分为三个方面:

  • App Slicing(应用裁剪)
    开发者把App安装包上传到AppStore后,AppStore会自动将安装包切割为不同的应用变体。
  • Bitcode
    bitcode是被编译程序的一种中间形式的代码。包含bitcode配置的程序将会在App store上被编译和链接。bitcode允许苹果在后期重新优化程序的二进制文件,而不需要重新提交一个新的版本到App store上。
  • On-Demand Resources(按需加载)
    App不包含整个资源库,根据需要时动态下载或删除其中的一部分资源。

你可能感兴趣的:(iOS底层原理 - 性能优化 之 安装包瘦身)