iOS IPA体积优化

 
  1. 需求背景

主要是整体的安装包体积太大产生了一些差评,另外在构建时长和上传时长越来越长。
IPA包大小:
下图是App安装包在常见设备的安装大小:
  1. 问题原因:

  1. 代码逻辑问题

1、通过解压将IPA改成zip格式,然后解压处理的payload文件。通过右键选择 show package contents,可以进入到IPA文件下。
2、打开终端,cd 上面文件夹下,通过终端 $ du -sh * | sort -rh 可以查看文件夹下所以文件大小排序。
可以先看到未优化前的文件排序如下:
可以看到1.5G的IPA包,PlugIns文件夹独占了800+M,到这里基本可以确定这个文件夹一定是有什么异常的,再进入PlugIns文件夹下,这里是我们应用的扩展程序,如widget,sirishortcut,watch App
再右键去查看today.appex的package contents如下,发现里面竟然也有一个assets.car,而且独占200+M的大小。到这里基本上可以定位问题原因了。
编译时间:

原因总结

  1. 我们的扩展程序因为个别的图片共用了Switchbot主工程的图片资源,所以也将Images.xcimage文件拷贝到了自己的target下面。或者干脆直接存在了Images.xcimage里面。导致多个target都拷贝了Images.xcimage文件,所以这里白白多了几百M的大小。
  2. 另外关于国际化部分扩展程序也引用了Switchbot的文件,目前这个文件也有1.6M,后续随着语种的增加也是会增加不少的包体积。 --- 待优化
 

优化过程

testFlight 包
已优化的的文件排序如下:
 
PlugIns文件夹优化后
编译时间优化后
  1. 本地资源原因

PNG图片转webp方案对比

另外,webp还支持动图

项目图片大小分布

 

转换方案

iOS目前是的图片有1x,2x,3x,GIF等。替换步骤
  1. 图片转换
    1. 对于PNG格式的图片可使用到了谷歌的工具https://developers.google.com/speed/webp/docs/cwebp一键转换。
  2. 删除原有png源文件
  3. 导入第一步转换的webp图片
  4. 封装统一加载图片的方法

影响范围

因涉及修改除App桌面图标,启动页图片,watch,widget,GIF,Lottie(动图)外的所有图片,所以整体影响范围包含了App绝大部分的页面。

风险点

  1. 显示图片大小比例不正常

      原因:图片原始比例是2x,3x,加载图片大小是1x大小。但转成webp后,考虑webp图片清晰度的问题,所有webp图片优先使用的3x的png转换的。所以加载后的图片大小变成了原来的3倍。
    1. 需要对控件设置frame,或通过snapKit设置布局
  1. UIButton图片大小比例不正常

UIButton的frame设置40x40,但是实际图片大小可能是超过40x40,这是即使设置了大小,图片仍然是比例不正常的。
  • 通过wo_setImage接口的设置图片的,可以默认给button添加一个属性,在layoutSubviews,跟进图片大小自动缩小一倍。
  • 给UIButton 新增一个方法,来设置图片大小问题。
  • 自定义一个UIButton类,统一处理。
  • wo_setImage 压缩三倍再返回图片。---- 无用,resize后清晰度完全不够用
  • 在Mac上统一处理一次,需要第一次转换webp后,根据图片名称包含3x,2x的,转成一倍的图片再导入。---- 无用,resize后清晰度完全不够用
  1. 代码加载的图片缺失

    • 使用UIImage(named:xxx) 方法加载的图片,可以改成使用UIImage.initWebpImage方法。或使用wo_setIamge方法加载图片。
    • webp图片缺失,需要导入下webp文件
  1. Xib 加载的图片缺失

    1. 需要手动通过代码设置一下图片,并注意第1点和第2点问题
  1. 新需求的图片导入

    1. 可直接在蓝湖导入webp格式图片,然后复制到supportFiles/Image/ImageResources.bundle下面
 

6.18版本 替换curtain 添加图文教程所有图片后

IPA 大小 425.9M,解压后大小655.4M。
 
 
  1. 总结:

内测包第一阶段优化

优化代码逻辑问题
  1. IPA文件从 1.24G减少至488.2M,优化61.5%
  2. 解压后SwitchBot.app文件从1.5G减少至835M,优化45%
  3. 整体编译时间从428s减少到312s,优化27%,其中Asset文件编译时间从643s,优化之133s, 优化79%

内测包第二阶段优化

优化本地图片资源问题:
  1. IPA文件从 488.2M减少至270M,优化44%
  2. 编辑速度未统计

整体优化成果

  • 内测包大小:截止到目前最新7.5版本,IPA的包提交从6.17版本1.24G减少至7.5版本270M,优化78%
  • appstore包大小:基于最新iPhone 14上的数据,优化前6.17版本下载体积489 MB ,安装体积722 MB。优化后版本7.5版本下载体积236 MB ,安装体积498 MB。下载体积优化253M约52%,安装体积优化224M约32%。
  • 编译速度:整体编译时间从428s减少到312s,优化27%,其中Asset文件编译时间优化79%。
posted @ 2024-12-05 16:30  朝阳向日葵  阅读(288)  评论(0)    收藏  举报