抖音品质建设 - iOS 安装包大小优化实践篇

抖音iOS安装包大小优化探索
本文介绍抖音在优化iOS安装包大小方面的探索。阐述了AppStore对安装包的限制及包大小增长的影响,分析了安装包的构成和分析方法,介绍了可执行文件、资源文件优化及无用代码清理等常见优化手段,还给出了影响包大小的编码习惯和建议。

客户端开发的同学都知道「安装包大小」是 App 重要的基础体验指标之一。今天将为大家介绍抖音在优化安装包大小方向做的一些探索和尝试。

阅读这篇文章将会花费 8 分钟时间,阅读完成之后你将对安装包优化有一个整体的认知,文章内容包括:

  • AppStore 对安装包的限制沿革以及 App 花费精力优化 iOS 安装包将获得什么收益;

  • 如何去分析一个安装包;

  • 如何在线下准确把控安装包大小对 AppStore 上影响;

  • 常见的一些包大小优化方式;

  • 一些影响包大小的编码习惯。

Part 1. 包大小劣化到底带来什么影响

要说 iOS 平台上安装包大小对 App 的影响,首先需要了解到的是 Apple 对安装包大小的限制。一般 App 都通过 AppStore 渠道进行发布,少部分的 App 比如内部工具等通过企业证书进行签发。通过 App Store 渠道发布的 App 可以享受 AppStore 提供的安装包优化支持。

AppStore 对包大小提供的优化支持

对于在 AppStore 发布的包,苹果也为 App 提供了很多优化方式,而这些是通过企业证书签发的包无法做到的。

当 App 构建完安装包之后上传到 AppStore Connect 后, AppStore Connect 会根据设备、系统来创建其变体(variant)以适配不同的设备,用户从 App Store 中下载到的安装包时候,只下载自己设备用到变体。

变体之间的差异取决于设备的处理器架构(arm64, armv7)、屏幕分辨率(2x, 3x)、iOS 系统版本。

当然这也导致很难用线下构建的安装包来量化最终对下载大小的影响。

AppStore & AppStore Connect 对安装包大小的限制

App Store OTA 下载大小限制

苹果公司为了避免用户超出运营商套餐流量,限制了用户通过流量从 AppStore 下载 App 的最大大小, 简称 OTA 下载大小限制。其历史沿革:

  • 2017 年 9 月,限制从 100MB 提升到了 150MB;

  • 2019 年 5 月下旬,苹果把 OTA 下载限制放宽到 200MB;

  • iOS 13 发布之后 iOS13 及以上用户可以使用流量下载超出 200MB 的 App, 但需要用户「设置」选择策略,默认为「超过 200MB 请求许可」,而 iOS13 以下用户仍然无法下载。

Apple __TEXT 段大小限制

除了上边的限制之外 Apple 对可执行文件__TEXT 段的限制则更为严苛,如果超出这个限制 APP 将无法通过 AppStore 审核。这个限制简而言之,如果要支持 iOS8 的设备, App 单架构主二进制 __TEXT 段上限为 60MB(以 1000KB 为 1M,而不是 1024),放弃对 iOS8 的支持二进制大小限制则变为安装包内最大二进制所有架构的总和不超过 500MB。

安装包大小增长的影响

AppStore 下载大小如果在 OTA 下载限制内增长,对用户新增、留存等指标影响不大。而一旦超过 OTA 下载限制,则对整体指标产生明显影响。之前统计的劣化数据指标:当限制在 150MB 并且无法下载的时候,对用户的新增有 10%的影响。由于 iOS13 限制的宽松化,所以在 iOS13 之后设备上这个数据将低于 10%。此数据仅供参考并不能一概而论,对于不同类型的 App 首次安装的场景会呈现差异,比如生活服务、出行类 App 对应蜂窝下载场景会多于影音类、游戏类 App。

其次对仍然需要支持 iOS8 以下的 App, 超出 __TEXT 段大小的限制将会很大程度上影响审核以及发版进度。当然可以通过一些手段进行救急,比如拆分动态库的方式绕过。但是这些手段可能导致安装包整体变得更大。

除了 Apple 的限制外,包大小的劣化一定程度上意味着更加慢的启动速度;更多的的代码逻辑;更低研发效率;过于复杂的代码还会带来对代码修改的风险将对稳定性产生负面影响;让性能等基础体验变差,所以包大小不是一个孤立的指标,它从侧面的反映出 App 的健康状态。

Part 2. 安装包的构成以及如何分析安装包

安装包的构成

当通过 Archieve 打包的安装包并 unzip 解压之后,通常可以看到如下的安装包结构:

  • Payload

    • TheApp.app

    • OnDemandResources

  • Symbols

而主要影响下载和安装大小的内容都集中在 .app 中。而解压后的占用 .app 大部分的大小的文件如下:

  • 主二进制(和.app 同名的 MachO 文件);

  • Frameworks(App 自身引入的动态库);

  • Plugins (App Extension 本质依然是动态的可执行文件);

  • xxx.lproj(原生的翻译资源);

  • 各种资源 Bundle;

安装包分析

通过分析安装包,了解安装包中可执行文件占用大小、资源占用大小,了解安装包的现

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值