惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
D
DataBreaches.Net
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
D
Docker
N
Netflix TechBlog - Medium
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
C
Check Point Blog
腾讯CDC
Stack Overflow Blog
Stack Overflow Blog
V
Visual Studio Blog
IT之家
IT之家
月光博客
月光博客
U
Unit 42
K
Kaspersky official blog
T
Threatpost
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
GbyAI
GbyAI
P
Proofpoint News Feed
Last Week in AI
Last Week in AI
云风的 BLOG
云风的 BLOG
酷 壳 – CoolShell
酷 壳 – CoolShell
I
InfoQ
Engineering at Meta
Engineering at Meta
Recorded Future
Recorded Future
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
Security @ Cisco Blogs
MyScale Blog
MyScale Blog
大猫的无限游戏
大猫的无限游戏
Security Archives - TechRepublic
Security Archives - TechRepublic
Webroot Blog
Webroot Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hacker News - Newest:
Hacker News - Newest: "LLM"
S
Schneier on Security
S
Secure Thoughts
The Register - Security
The Register - Security
B
Blog RSS Feed
The Last Watchdog
The Last Watchdog
P
Palo Alto Networks Blog
爱范儿
爱范儿
B
Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
N
News and Events Feed by Topic
阮一峰的网络日志
阮一峰的网络日志
L
LINUX DO - 热门话题
C
Cisco Blogs
Spread Privacy
Spread Privacy
F
Full Disclosure
博客园 - 聂微东
T
The Blog of Author Tim Ferriss

博客园 - 朝阳向日葵

AI辅助工作实践报告 Claude Code介绍 AI使用相关 蓝牙 报错处理 iOS开发 重要通知(critical-alerts) 关于GPT工具的操作说明 React Native之React基础 React Native之JSX语法 使用TestFlight安装ios SwichBot的测试版本 React Navite环境搭建 iOS 防止charles抓包 iOS Charles抓包 转正答辩 iOS设备和模块解耦-方案对比 iOS开发 性能优化 iOS开发 调试技巧 设计模式 项目架构 iOS 常用第三方库及原理
iOS IPA体积优化
朝阳向日葵 · 2024-12-05 · via 博客园 - 朝阳向日葵
  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%。