包大小
Apple 下载大小限制
有时候下载 App 的时候,会提示:“此项目大于~~150MB ~~200MB(2019/05/31,这个大小被提高到200M ),除非此项目支持增量下载,否则您必须连接至WiFi才能下载。”。 这里的 ~~150M ~~,200M限制,是针对下载大小。
低于iOS13 的设备下载大小超过 200MB 限制的时候完全无法通过流量下载, iOS13 及以上设备需要通过弹窗确认后,可以下载超过200MB 大小的App。
而这个限制会对拉新起到负向的影响。(据统计是影响新增约10%)
Apple __TEXT 段大小限制
除了上边的限制之外Apple对可执行文件的__TEXT段有如下限制,如果说Apple对ITC上下载的大小的限制只是影响转化,而__TEXT段的限制则更为严苛,如果超出这个限制你的APP将无法通过 AppStore审核:
背景知识
包大小包含什么?
单纯的去掉某个架构是没有效果的,因为App Store已经做了这部分的优化。
如何模拟?可以通过导出支持的设备模拟。
通过linkmap分析包大小
准入控制
mr分析:linkmap分析二进制大小变化、以及每个文件的大小变化
技术优化
资源优化
- 压缩字符串,例如html、css去空格等;
- 大图webp
- 少使用宏定义,减少重复代码
使用合适的资源压缩配置,只会影响Assets.car
图片放入Assets前进行无损压缩,没有效果,为什么?
因为png无损压缩不会影响bitmap的大小,所以不会影响最终生成的.car文件的大小
如何实现无感知的有损压缩?
利用肉眼无法感知所有颜色,比如一张图片有500种颜色,但是只有30种是肉眼可见的,所以将颜色数量控制在30种,进而减少颜色数量。
二进制优化
计算代码的大小
查找无用类的原理
ICF
-Oz优化
通过外链函数减少代码,但是外链会对CPU造成影响,对性能影响应该不是很大。
属性动态化
业务优化
删除无用的vc和代码:
启动优化
main函数之前:
main函数之后:
PageIn:
非常规优化:
能耗
能耗优化:
Crash
汇编指令:
安全气垫
卡死
OOM
什么是OOM?
由于APP占用内存过高,导致被系统杀掉的一种现象,用户感知就是崩溃,但是找不到崩溃日志。
什么是jetsam?
为什么要监控OOM?
监控原理
facebook排除法:
facebook排除法遗漏场景:
遇到问题
问题发现
问题产生: