*iOS9 发布后,产生了一个使 App Thinning 无法正常运行的 bug。在iOS9.0.2 版本中,这个 bug 已经被修复,App Thinning 已经可以正常使用。当你从应用商店(App Store)下载应用时,请注意这点。 *

iOS9 推出之后,大受欢迎。仅仅数周,已经有超过半数的 iOS 设备安装了这一新系统。这是 iOS 历代版本中采纳速度最快的—甚至打破了 2013 年 iOS7 创下的记录。

关于 iOS9,笔者最近发表了一篇名为Search APIs and SFSafariViewController的文章,今天,笔者将继续探讨 iOS9 上另一个令人兴奋的功能——App Thinning(应用瘦身)。在这篇教程里,我们将探讨 App Thinning 之所以重要的原因,以及如何在你自己的 App 上使用这一令人兴奋的功能。

iOS9 App Thinning(应用瘦身)功能介绍 技术分享 第1张

根据 WWDC(苹果全球开发者大会)的发布,App Thinning 是一项可以改变整个下载进程的新技术。许多用户反应,流量费用过高、iOS 设备的存储空间有限,而下载速度却不断提升,为了适应这些问题,App Thinning 变得十分值得学习。此外,App Thinning 的发布已经推迟了,现在正是学习关于这一新技术的最好时机。

前提条件

在本教程中,笔者假设你有 Xcode 实践经验而且知道如何使用 IDE。如果你对此不甚了解或者不确定 IDE 是什么,也许你会想看看与此相关的优秀免费课程

此外,笔者也假设你知道如何在 App Store 上发布 app,也知道如何使用苹果的Beta 应用测试服务 testflight。笔者不会具体说明如何使用 testflight,所以如果你对 testflight 不熟悉或者不清楚上传发布 app 的大体流程,笔者推荐你先看一看这篇 AppCoda 上的文章除了这些和你学习的意愿之外,就没有任何前提条件了。

以此为前提,让我们开始吧。

App Thinning 的介绍

iOS9 App Thinning(应用瘦身)功能介绍 技术分享 第2张

现今,市面上的 iOS 设备多种多样,屏幕尺寸和分辨率更是五花八门,这导致一个app 想在多种屏幕上都能视觉效果良好,就需要大量的优化资源(即 PNG 格式,JPEG 格式以及矢量 PDF 文件等)以匹配不同尺寸的屏幕。更糟糕的是,这导致用户的下载量大幅增加。(之前的 iOS 版本强制要求用户下载整个 app 文件,即使用户使用的是 iPhone,也需要下载他们绝不会使用到的 ipad 图像文件)16g 的iPhone 还是切实存在的(短时间内也不会消失),因此,让你的 App 变得精简而且迅速下载可以确保用户留有足够的空间,并且优化用户体验。App Thinning 让这一切变得可能。

现今,App 不再是由简单的代码和图像组成了。现代应用不仅仅包括可执行的代码,还有不同的 32 位,64 位版本(针对如 arm64, arm7s, 和 arm7 等多种架构的优化),3D 图形技术(如 OpenGL, Metal 等等),还有音频以及其他不同的文件。总之,如今 App 功能极其复杂。这就是 App Thinning 发挥作用的地方。

App Thinning 会自动检测用户的设备类型(即型号名称)并且只下载当前设备所适用的内容。换句话说,如果你使用的是 iPad Mini 1(1x分辨率且非 retina 显示屏)那么只会下载 1x分辨率(下文会有更多介绍)所使用的文件。更强大和更高分辨率的 ipad(如iPad Mini 3或 4)所使用的资源将不会被下载。因为用户仅需下载他/她自己当前使用的特定设备所需的内容,这不仅加快了下载速度,还节约了设备的存储空间。

尽管一开始听起来可能有点复杂,但是笔者会深入了解细节。幸运的是,这项工作的大部分会由 Xcode 和 App Store 负责完成,这使得开发者的生活轻松了许多。因此,本教程的重点在于对 App Thinning 的深刻理解以及其实现技术,并不会有大量的代码。

App Thinning 主要有以下三个方面:App Slicing(应用程序的划分),Bitcode以及按需加载资源。在本教程中,笔者会一一详述每个方面。

iOS9 App Thinning(应用瘦身)功能介绍 技术分享 第3张

App Slicing

关于 App Thinning,本文探讨的第一个方面就是划分问题。根据苹果官方文献的描述「Slicing 是为应用捆绑包创建、分发不同变体以适应不同目标设备的过程。一个变体只包含针对某个目标设备的可执行架构与资源。」 换句话说,App Slicing仅向设备传送与之相关的资源(取决于屏幕分辨率,架构等等)。事实上,App Slicing 负责处理 App Thinning 的主要流程。

当你准备好提交 app 时,通常会(但必须使用 Xcode7,因为它包含支持 App Thinning 的 iOS9 SDK)向 iTtunes Connect 上传 .IPA 或 .App 文件。然后,应用商店分割该应用,创建特定的变体以适应性能不同设备。

iOS9 App Thinning(应用瘦身)功能介绍 技术分享 第4张

On Demand Resources

按需加载资源

想要充分理解 App Thinning,你必须理解按需加载资源(On Demand Resources , ODR)。按需加载资源是在 app 第一次安装后可下载的文件。举例说明,当玩家解锁游戏的特定关卡后可以下载新关卡(和这个关卡相关的特定内容)。此外,玩家已经通过的关卡可以被移除以便节约设备上的存储空间。

开启按需加载资源功能涉及改变 Xcode 中的设置(在编译设置(Build Settings)下),将「启用按需加载资源”选中为 是」 。

iOS9 App Thinning(应用瘦身)功能介绍 技术分享 第5张

Bitcode

App Thinning 的最后一个方面是 bitcode。Bitcode 有些抽象,但在本质上它也是苹果在用户下载前优化app的新方式。Bitcode 使得 app 无论在何设备上都能快速高效地运行。Bitcode 使用最新的编译器自动编译app并且针对特定架构进行优化。(例如,针对 iPhone 6s和 iPad Air 2等 64 位处理器的 arm64)

Bitcode 不会下载应用针对不同架构的优化,而仅下载与特定设备相关的优化,使得下载量更小,同时与前文所述的 App Thinning 技术紧密合作。

Bitcode 是 iOS 上较新的功能,对于新的项目需要手动开启。这可以通过选择Build Settings(编译设置)下的项目设置,将 bitcode 设为 YES 来完成。

iOS9 App Thinning(应用瘦身)功能介绍 技术分享 第6张

在自己的项目中应用 App Thinning

虽然 Xcode 和 App Thinning 负责处理 App Thinning 的主要流程,但是你还是要采取一定的预防措施以确保你的 app 支持这项新技术。首先,你必须使用资产目录。资产目录在大部分 app 上是默认启用的。如果你尚未启用资产目录,现存的许多文件都可以通过下图的方式点击 Xcode 项目设置中“启用资产目录”转移到目录下。

iOS9 App Thinning(应用瘦身)功能介绍 技术分享 第7张

Sprite Atlases 是 Xcode7 中的新特性。Sprite Atlases 本质上就是资产目录的组合,也是 SpriteKit(Xcode用来创建2D游戏的技术)的核心。所以说,如果你使用 SpriteKit,那么 app thinning 就是必须的。

App Thinning 的测试

正如上文所述,Xcode 和 App Store 负责处理大部分的 App Thinning 进程,让这项技术变得真正易于在你的 app 上应用。但是,假如你想测试自己的 app 以确定它已经为 app thinning 做好准备,应该怎么办呢?幸运的是,苹果的 TestFlight 为我们提供了完美的解决方案。

在本教程的后半段,笔者会探讨如何在 TestFlight 上使用 App Thinning。

首先,下载这个几乎空白的项目,将它解压缩,并在 Xcode 中运行。你会发现该项目中除了几张资产目录下的图像(而没有大量的代码),并无太多内容。该资产目录也包含了该应用图标的 1x、2x、3x 版本。

iOS9 App Thinning(应用瘦身)功能介绍 技术分享 第8张

首先,在模拟器或设备上运行该应用。打开设置应用程序,单击「存储空间与 iCloud 用量」 (在非 iOS 的 9 设备上只是「存储」 ),然后选择「管理存储空间」 。向下滚动找到刚刚编译的应用程序,然后点击它。你会发现它大约只有 17.0 MB 大小(当上传到 iTunes Connect 时大小可能略有不同)。
aa
iOS9 App Thinning(应用瘦身)功能介绍 技术分享 第9张

当你使用 Xcode 编译和运行一个应用时,Xcode 不会自动处理应用程序变种和 App Thinning。这样,整个应用程序文件还是在你的设备上。

然后点击 Xcode 的产品选项(Product tab)并且选择存档(Archive)。
iOS9 App Thinning(应用瘦身)功能介绍 技术分享 第10张

注:你有可能需要先修改应用程序的 Bundle Identifier 去匹配你自己创建的程序。否则,该应用程序将无法上传到 iTunes Connect 上。

iOS9 App Thinning(应用瘦身)功能介绍 技术分享 第11张

确保你在选择「提交」之前选择了「包含 bitcode」。如果一切顺利,你会看到一个绿色的对号提示你项目已经成功更新了。

现在点击这里 登录 iTunes Connect ,创建一个新的应用程序(填入适当的捆绑包 ID,应用程序名称等)。如果你不确定怎么做,请参考AppCoda TestFlight 教程

iOS9 App Thinning(应用瘦身)功能介绍 技术分享 第12张

将自己添加为内部测试员。要注意,在建立项目时数个小时都处于「处理中状态并不寻常。一旦应用程序处理完毕,就选中它并按下 开始测试」。

你将会收到一封电子邮件。请确保使用你想测试的 iOS 设备,并接受邮件邀请。你会被带到 TestFlight 应用。 iOS9 App Thinning(应用瘦身)功能介绍 技术分享 第13张

安装这个版本。完成之后,返回到应用程序设置,浏览存储,找到我们之前的应用程序。发现这个应用程序现在仅有 5.4MB 了。这就是 App Thinning 的杰作!
iOS9 App Thinning(应用瘦身)功能介绍 技术分享 第14张

哇!你的一个非常精简的应用程序都节省了 12.4MB 的存储空间。那么,包含多个不同资源的应用程序将会得到更加显着的大小变化!

概要

在本文中,我们了解了 App Thininng 的功能,讨论了 App Thinning 的三个主要方面:app slicing,按需分配资源以及 bitcode。

不幸的是,2015年9月24日,苹果在其开发者门户网站宣布,App Thinning 已被推迟,并没有包含在 iOS9(或9.0.1)的公开发布中:

然而,正如笔者在本文一开始提到过的,App Thinning 已经得到修复,所有运行 iOS 9.0.2 的设备都可以使用该功能。App thinning 是一种绝佳的工具,它将大大加快应用程序的下载速度!

原文地址:http://www.appcoda.com/app-thinning/

OneAPM Mobile Insight ,监控网络请求及网络错误,提升用户留存。访问 OneAPM 官方网站感受更多应用性能优化体验,想阅读更多技术文章,请访问 OneAPM 官方技术博客