iOS开发~App瘦身

本文详述了iOS应用的瘦身方法,包括App Thinning的Slicing、Bitcode和On-Demand Resources,资源的优化如删除无用文件、压缩图片、管理图片资源,以及编译选项优化和代码瘦身策略。通过这些方法,可以显著减小应用的包体积,提高下载速度,节省用户空间,并确保App符合App Store的规定。

概要

App 的包大小做优化的目的就是为了节省用户流量,提高用户的下载速度,也是为了用户手机节省更多的空间。另外 App Store 官方规定 App 安装包如果超过 150MB,那么不可以使 OTA(over-the-air)环境下载,也就是只可以在 WiFi 环境下载,企业或者独立开发者万万不想看到这一点。免得失去大量的用户。

同时如果你的 App 需要适配 iOS7、iOS8 那么官方规定主二进制 text 段的大小不能超过 60MB。如果不能满足这个标准,则无法上架 App Store。

另一种情况是 App 包体积过大,对用户更新升级率也会有很大影响。

所以应用包的瘦身迫在眉睫。

 

1.App Thinning

App Thinning 是指 iOS9 以后引入的一项优化,官方描述如下

The App Store and operating system optimize the installation of iOS, tvOS, and watchOS apps by tailoring app delivery to the capabilities of the user’s particular device, with minimal footprint. This optimization, called app thinning, lets you create apps that use the most device features, occupy minimum disk space, and accommodate future updates that can be applied by Apple. Faster downloads and more space for other apps and content provides a better user experience.

Apple 会尽可能,自动降低分发到具体用户时,所需要下载的 App 大小。其中包含三项主要功能:Slicing、Bitcode、On-Demand Resources。

App Thinning 是苹果公司推出的一项改善 App 下载进程的新技术,主要为了解决用户下载 App 耗费过高流量的问题,同时还可以节省用户设备存储空间。

1.1 Slicing

当向 App Store Connect 上传 .ipa 后,App Store Connect 构建过程中,会自动分割该 App,创建特定的变体(variant)以适配不同设备。然后用户从 App Store 中下载到的安装包,即这个特定的变体,这一过程叫做 Slicing。

Slicing 是创建、分发不同变体以适应不同目标设备的过程

而变体之间的差异,又具体体现在架构和资源上。换句话说,App Slicing 仅向设备传送与之相关的资源(取决于屏幕分辨率、系统架构等等)

其中,2x 和 3x 的细分,要求图片在 Assets 中管理。Bundle 内的则会同时包含。

1.2 Bitcode

Bitcode is an intermediate representation of a compiled program. Apps you upload to iTunes Connect that contain bitcode will be compiled and linked on the App Store. Including bitcode will allow Apple to re-optimize your app binary in the future without the need to submit a new version of your app to the App Store.

Bitcode 是一种程序中间码。包含 Bitcode 配置的程序将会在 App Store Connect 上被重新编译和链接,进而对可执行文件做优化。这部分都是在服务端自动完成的。所以假如以后 Apple 新推出了新的 CPU 架构或者以后 LLVM 推出了一系列优化,我们不需要重新为其发布新的安装包了。Apple Store 会为我们自动完成这步。然后提供对应的 variant 给具体设备

对于 iOS 而言,Bitcode 是可选的(Xcode7 以后创建的新项目默认开启),watchOS、tvOS 则是必须的。

开启位置:Build Settings -> Enable Bitcode -> 设置为 YES

开启 Bitcode,有这么2点需要注意:

  • 全部都要支持。我们所依赖的静态库、动态库、Cocoapods 管理的第三方库,都需要开启 Bitcode。否则会编译失败

  • 奔溃定位。开启 Bitcode 后最终生成的可执行文件是 Apple 自动生成的,同时会产生新的符号表文件,所以我们无法使用自己包生成的 dYSM 符号化文件来进行符号化。

For Bitcode enabled builds that have been released to the iTunes store or submitted to TestFlight, Apple generates new dSYMs. You’ll need to download the regenerated dSYMs from Xcode and then upload them to Crashlytics so that we can symbolicate crashes.For Bitcode enabled apps, ensure that you have checked “Include app symbols for your application…” so that we can provide the most accurate crash reports.

上面是 fabric 中关于 Downloading Bitcode dYSMs 的描述:

在上传到 App Store 时需勾选“Includ app symbols for your application...”。勾选之后 Apple 会自动生成对应的 dYSM,然后可以在 Xcode -> Window -> Organizer 中,或者在 Apple Store Connect 中下载对应的 dYSM 来进行符号化

 

那么 Bitcode 会对 App Thining 有什么作用?

在 New Features in Xcode7 中有这么一段描述:

Bitcode. When you archive for submission to the App Store, Xcode will compile your app into an intermediate representation. The App Store will then compile the bitcode down into the 64 or 32 bit executables as necessary.

即,App Store 会再按需将这个 bitcode 编译进 32/64 位的可执行文件。 所以网上铺天盖地地说 Bitcode 完成了具体架构的拆分,从而实现瘦包

1.3 on-Demand Resources

on-Demand Resource 即一部分图片可以被放置在苹果的服务器上,不随着 App 的下载而下载,直到用户真正进入到某个页面时才下载这些资源文件。

应用场景:相机应用的贴纸或者滤镜、关卡游戏等

如需支持 iOS9 以下系统,那么无法使用这个功能,否则上传会失败

 

2.包体积

2个概念

  • .ipa (iOS Application Package):iOS 应用程序归档文件,即提交到 App Store Connect 的文件

  • .app (Application):应用的具体描述,即安装到 iOS 设备上的文件

当我们拿到 Archive 后的 .ipa,使用解压软件打开后,Payload 目录下存放的就是 .app 文件,二者大小相当

包体积,评判标准是以 App Store 上看到的为准。但是上传到 App Store Connect 处理完后,会自动帮我们生成具体设备上看到的大小。如下:

这其中:又可以分为2类: Universal 和具体设备 Universal 指通用设备,即未应用 App slicing 优化,同时包含了所有架构、资源。所以包体积会比较大

观察 .ipa 的大小和 Universal 对应的包大小相当,稍微小一点,因为 App Store 对 .ipa 做了加密处理

有时候下载 App 会提示“此项目大于 150MB,除非此项目支持增量下载,否则您必须连接至 WiFi 才能下载”。150MB 针对的是下载大小。

  • 下载大小:通过 WiFi 下载的压缩 App 大小
  • 安装大小:此 App 将在用户设备上占用磁盘空间的大小

所以我们要瘦包,关键在于减小 .app 文件的大小。

2.1 Architectures

如果不支持32位以及 iOS8 ,去掉 armv7 ,可执行文件以及库会减小,即本地 .ipa 也会减小

2.2 Reso

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zfpp25_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值