iOS9 发布后,产生了一个使 App Thinning 无法正常运行的 bug。在iOS9.0.2 版本中,这个 bug 已经被修复,App Thinning 已经可以正常使用。当你从应用商店(App Store)下载应用时,请注意这点。
iOS9 推出之后,。仅仅数周,已经有超过半数的 iOS 设备安装了这一新系统。这是 iOS 历代版本中采纳速度最快的—甚至打破了 2013 年 iOS7 创下的记录。
关于 iOS9,笔者最近发表了一篇名为的文章,今天,笔者将继续探讨 iOS9 上另一个令人兴奋的功能——App Thinning(应用瘦身)。在这篇教程里,我们将探讨 App Thinning 之所以重要的原因,以及如何在你自己的 App 上使用这一令人兴奋的功能。
根据 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(应用瘦身)功能介绍](http://www.appcoda.com/wp-content/uploads/2015/09/apple_app_slicing_illustration-516x300.jpg)
现今,市面上的 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以及按需加载资源。在本教程中,笔者会一一详述每个方面。
##App Slicing
关于 App Thinning,本文探讨的第一个方面就是划分问题。根据苹果官方文献的描述「Slicing 是为应用捆绑包创建、分发不同变体以适应不同目标设备的过程。一个变体只包含针对某个目标设备的可执行架构与资源。」 换句话说,App Slicing仅向设备传送与之相关的资源(取决于屏幕分辨率,架构等等)。事实上,App Slicing 负责处理 App Thinning 的主要流程。
当你准备好提交 app 时,通常会(但必须使用 Xcode7,因为它包含支持 App Thinning 的 iOS9 SDK)向 iTtunes Connect 上传 .IPA 或 .App 文件。然后,应用商店分割该应用,创建特定的变体以适应性能不同设备。
##On Demand Resources
想要充分理解 App Thinning,你必须理解按需加载资源(On Demand Resources , ODR)。按需加载资源是在 app 第一次安装后可下载的文件。举例说明,当玩家解锁游戏的特定关卡后可以下载新关卡(和这个关卡相关的特定内容)。此外,玩家已经通过的关卡可以被移除以便节约设备上的存储空间。
开启按需加载资源功能涉及改变 Xcode 中的设置(在编译设置(Build Settings)下),将「启用按需加载资源”选中为 是」 。
##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 来完成。
##在自己的项目中应用 App Thinning
虽然 Xcode 和 App Thinning 负责处理 App Thinning 的主要流程,但是你还是要采取一定的预防措施以确保你的 app 支持这项新技术。首先,你必须使用资产目录。资产目录在大部分 app 上是默认启用的。如果你尚未启用资产目录,现存的许多文件都可以通过下图的方式点击 Xcode 项目设置中“启用资产目录”转移到目录下。
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 版本。
首先,在模拟器或设备上运行该应用。打开设置应用程序,单击「存储空间与 iCloud 用量」 (在非 iOS 的 9 设备上只是「存储」 ),然后选择「管理存储空间」 。向下滚动找到刚刚编译的应用程序,然后点击它。你会发现它大约只有 17.0 MB 大小(当上传到 iTunes Connect 时大小可能略有不同)。
aa![iOS9 App Thinning(应用瘦身)功能介绍](http://www.appcoda.com/wp-content/uploads/2015/09/IMG_0106-2-1024x355.png)
当你使用 Xcode 编译和运行一个应用时,Xcode 不会自动处理应用程序变种和 App Thinning。这样,整个应用程序文件还是在你的设备上。
然后点击 Xcode 的产品选项(Product tab)并且选择存档(Archive)。
![iOS9 App Thinning(应用瘦身)功能介绍](http://www.appcoda.com/wp-content/uploads/2015/09/Screen-Shot-2015-09-28-at-8.36.26-PM-1024x345.png)
注:你有可能需要先修改应用程序的 Bundle Identifier 去匹配你自己创建的程序。否则,该应用程序将无法上传到 iTunes Connect 上。
确保你在选择「提交」之前选择了「包含 bitcode」。如果一切顺利,你会看到一个绿色的对号提示你项目已经成功更新了。
现在 登录 iTunes Connect ,创建一个新的应用程序(填入适当的捆绑包 ID,应用程序名称等)。如果你不确定怎么做,请参考。
将自己添加为内部测试员。要注意,在建立项目时数个小时都处于「处理中状态并不寻常。一旦应用程序处理完毕,就选中它并按下 开始测试」。
你将会收到一封电子邮件。请确保使用你想测试的 iOS 设备,并接受邮件邀请。你会被带到 TestFlight 应用。
安装这个版本。完成之后,返回到应用程序设置,浏览存储,找到我们之前的应用程序。发现这个应用程序现在仅有 5.4MB 了。这就是 App Thinning 的杰作!
![iOS9 App Thinning(应用瘦身)功能介绍](http://www.appcoda.com/wp-content/uploads/2015/09/IMG_0108-1024x305.png)
哇!你的一个非常精简的应用程序都节省了 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 是一种绝佳的工具,它将大大加快应用程序的下载速度!
原文地址:
,监控网络请求及网络错误,提升用户留存。访问 感受更多应用性能优化体验,想阅读更多技术文章,请访问 。
本文转自