一些老项目战线比较长的,往往经历很多人的手,如果没有统一规范会存在各种风格的代码,并且ipa包日益增大,本文就来简单说说ipa包的优化,这里我从三个方面来优化 资源优化、可执行文件优化、编译优化
资源优化
- 删除无用图片
工具:LSUnusedResources
注意点:
要选中 ignore similar name 防止误删
[UIImage imageNamed:[NSString stringWithFormat:@"01_0000%d.png",i] 这种情况下01_00004.png没有排除掉,如果没有勾选 就会被干掉 - 无损压缩图片
工具 :ImageOptim
3.音视频资源文件、db、plist等文件的删除
可执行文件优化
- 删除无用类 通过FindClassUnRefs.py脚本
-删除无用的代码
-删除无用/重复的三方库
编译优化
- 根据需求去掉不需要使用的指令集
1、各指令集机型说明(指令集向下兼容)
(1)armv7:iPhone4,iPhone4s
(2)armv7s:iPhone5,iPhone5C
(3)arm64:iPhone5S(以上)
(4)arm64e:xs/xs max/xr(添加一些新特性)
2、去掉规则
(1)如果不需要支持5s以下设备,仅用arm64可以达到最小体积
(2)如果需要支持5s以下设备,可去掉armv7s,影响只是可能在iPhone5、iPhone5C不能发挥最优性能
(3)arm64e、arm64和只包含arm64编译出来的大小是一样的。
- Optimization Level
Release模式为:Fastest,Smallest[-Os] 。这是Xcode上默认的,但我们要知道,意思是开启不增加代码大小的全部优化,并让可执行文件尽可能小。 - Dead Code Stripping
删除静态链接的可执行文件中未引用的代码。Debug 设置为NO Release 设置为YES 可减少可执行文件大小。 - Generate Debug Symbols
调试符号是在编译时生成的。当Generate Debug Symbols选项设置为YES时,打包会生成symbols 文件。设置为NO则ipa中不会生成symbol文件,可以减少ipa 大小。xcode 默认选择为YES,不建议关闭该选项,可能会影响到app调试 - Strip Symbol Information
1、Deployment Postprocessing
2、Strip Linked Product
3、Strip Debug Symbols During Copy
4、Symbols hidden by default
设置为YES可以去掉不必要的符号信息,可以减少可执行文件大小。Release 设置为YES Debug 设置为NO。
App thining是苹果官方给出的优化安装包大小的方案。其原理是根据设备的不同来下载安装包中不同的资源,比如iPhone6的手机只需要下载@2x的图片文件,这样可以是下载流量减少。
App Thinning 有三种方式,包括:App Slicing、Bitcode、On-Demand Resources。
1.App Slicing,会在你向 iTunes Connect 上传 App 后,对 App 做切割,创建不同的变体,这样就可以适用到不同的设备。
2.On-Demand Resources,主要是为游戏多关卡场景服务的。它会根据用户的关卡进度下载随后几个关卡的资源,并且已经过关的资源也会被删掉,这样就可以减少初装 App 的包大小。
3.Bitcode ,是针对特定设备进行包大小优化,优化不明显。