做者:gregg mojica,原文连接,原文日期:2015/10/11
译者:JackAlan;校对:lfb_CD;定稿:numbbbbbios
更新: iOS 9 有个 bug 影响 APP 瘦身功能,这个 bug 在 iOS 9.0.2 被修复。从 AppStore 下载 App 时请留意。git
iOS 9 已经变成了一个大热门。发布几周后,这个新的操做系统在 iOS 设备上的安装量就超过了一半。它的普及率打破了 iOS 7 在 2013 年的记录。github
在写完上一篇文章以后 Search APIs and SFSafariViewController in iOS 9,咱们继续学习如何使用 App 瘦身这个 iOS 9 中使人兴奋的特性。在此教程中,咱们将探索为何要使用 App 瘦身以及如何在本身的 App 中使用这个使人兴奋的新特性。swift
在本次 WWDC 中公布的 App 瘦身是一个使人兴奋的新技术,这会改变整个下载的过程。因为蜂窝流量消费大、iOS 设备内存限制以及网络提速,App 瘦身是一个值得学习的相当重要的特性。进一步来讲,由于 App 瘦身被推迟(稍后详述),这也是一个绝好的时机去了解这个使人兴奋的技术。api
在这篇教程中,我假设你知道如何使用 Xcode 和 IDE。若是这对你来讲很陌生,或者你根本不知道 IDE 是什么,你应该先看一下excellent free course.网络
我还假设你已经知道如何在 AppStore 上或者 TestFlight (苹果 beta 版 App 测试服务)上发布 App。我不会具体到讲述如何用 TestFlight,因此若是你对 TestFlight 很陌生或者对 App 发布流程很陌生,我建议你先读阅读AppCoda article。这些就足够了,不须要其余预备知识,只要用心学习就好!架构
有了这样的想法,那就让咱们开始吧。app
当前市场上存在大量的 iOS 设备,所以有多种屏幕尺寸和分辨率,要想保证一个 App 在多种屏幕下的展现效果须要大量的资源(好比 png、jpeg 以及二进制的 PDF)。不幸的是,这致使用户须要下载一个巨大的程序包(以前的 iOS 版本强制用户下载所有 App 文件,包括他们在用 iPhone 时永远也不会用到的 iPad 适配图片)。16G 的 iPhone 仍然有很多人在用(而且可能短期内不会消失),因此你要缩小 App 体积从而能够快速下载而且保证用户有足够的空间。App 瘦身特性让这一切成为可能。iview
除了代码和图片,如今的 App 还包括可执行代码以及32位、64位版本(针对各类架构进行优化,好比 arm6四、arm7S 和 arm7)、3D 图形技术(例如 OpenGL、Metal 等)、声音和其余文件。总之,如今的 App 已经复杂到使人难以置信。这就是 App 瘦身须要解决的问题。iphone
App 瘦身会自动检测用户设备类型(好比型号名称),并为特定的设备下载相关内容。换句话来讲,若是你使用 iPad Mini 1(没有视网膜屏,只有 1X 的分辨率),那么只有 1X 的文件会被下载。更强大更清晰的资源(好比 iPad Mini 3 或 4)将不会下载。由于用户只须要下载他/她须要用到的内容,这加速了下载过程,并节省了设备上的空间。
虽然这起初可能听起来很复杂,咱们将深刻到具体的细节。幸运的是,Xcode 和 AppStore 会完成这项工做的绝大部分,开发者会轻松不少。所以,在本教程中不会有太多的代码,而是重点关注理解 App 瘦身的过程和它用到的技术。
App 瘦身有三个主要方面,应用程序切片(App Slicing
)、中间代码(Bitcode
)和按需加载资源(On Demand Resources
)。在本教程中,咱们将一一介绍。
App瘦身第一个咱们要讨论的就是切片(slicing)。根据苹果的文档,
切片是建立和提供不一样的目标设备的应用程序包的变体(
variant
)的过程。
一个变体(variant
)只包含可执行架构和目标设备所须要的资源。换句话来讲,应用程序切片只提供给与每一个设备相关的资源(取决于屏幕分辨率和架构等等)。实际上,应用程序切片完成了 App 瘦身的大部分工做。
假设你已准备好提交 App,和以前同样,你会上传 .IPA 或者 .App 文件到 iTunes Connect(可是必须使用 Xcode7,由于它包含支持 App 瘦身的 iOS 9 SDK)。而后 AppStore 会对 App 进行切片,建立特定的变体(variant
),这些变体将根据功能(capabilities
)分发给每一个设备,。
为了彻底理解 App 瘦身,你须要了解什么是按需加载资源(ODR
)。 按需加载的资源就是在 App 初次安装后须要下载的文件。例如,游戏的特定关卡(以及和这些关卡相关的内容)只有在玩家解锁时才能够下载。此外,超过设置时间以后,玩家不须要的早期关卡能够被移除,以节省设备的存储空间。
在 Xcode 的设置中(在 Build Setting 里),开启按需加载资源须要把"Enable On Demand Resources"改成"YES".
App 瘦身的最后一个内容是中间代码。中间代码有点抽象,但在本质上,它是在 App 被下载前,苹果优化它的新途径。中间代码使得 App 能够在任何设备上尽量快速和高效执行。中间代码能够为最近使用的编译器自动编译 App,而且对特定的架构作优化(例如 arm64 64 位处理器,如 iPhone6s 和 iPad Air 2)。
中间代码会和上文提到的其余瘦身技巧一块儿使用,去除针对其余架构的优化内容,只下载须要的优化内容,从而减小下载文件的大小。
在 iOS 中,中间代码是一种新特性,而且在新的工程中须要手动开启。这个过程能够在 Build Setting 下把 Enable bitcode 修改成 YES。
尽管 Xcode 和 App Store 处理了 App 瘦身的绝大多数流程,你仍然须要采起必定的预防措施以确保你的 App 真的使用了这种新的技术。首要的,你必须使用资源目录(asset catalogs
).在这一点上,大多数的 App 默认使用资源目录(asset catalogs
)。若是你尚未用采用资源目录(asset catalogs
),你现有的大部份内容能够被转移到一个目录下,只须要在 Xcode的项目设置中点击"Use Asset Catalog"按钮,以下所示。
Xcode 的新特性之一就是Sprite Atlases
。Sprite Atlases 基本上结合使用资源目录和 SpriteKit(Xcode 中开发 2D 游戏用到的技术)。一样的,若是你是用 SpriteKit,App 瘦身是必须的。
如你所见,Xcode 和苹果的 AppStore 已经处理了绝大多数 App 瘦身的过程,这样在你本身的 App 中使用这个技术会容易不少。可是如何测试你的 App 而且确保它已经应用了 App 瘦身?幸运的是苹果的 TestFlight 提供了完美的解决方案。除 AppStore 的应用瘦身技术外,TestFlight 的用户也能够体验这个特性。
在本篇教程的第二部分,咱们会介绍如何在 TestFlight 中使用 App 瘦身。
首先,下载这个基本空白的项目,解压,而且在 Xcode 中运行,你将会注意到这个项目基本没有什么除了在资源目录(asset catalogs
)中的一系列的图片(以及少许的代码)。这个资源目录(asset catalogs
) 也包含 1x、2x和3x 版本的 App 图标。
首先,在模拟器或者真机上运行这个 App。打开设置应用,点击存储和 iCloud 使用
这一项(若是不是 iOS 9 设备,点存储
) 并选择管理存储空间。向下滑动到咱们刚刚编译好的 App 并点击它。你会注意到它大概有 17.0 MB(当上传至 iTunes Connect 时这个大小可能略有不一样)。
当你使用 Xcode 构建并运行一个 App 时,Xcode 不会自动处理 App 变体(variant
)并对 App 瘦身,所以整个 App 文件都在你的设备上。
下一步,在 Xcode 中单击Product
标签,选择Archive
.
注意,你可能首先须要修改这个 App 的
Bundle Identifier
以匹配一个你本身建立的标识符。不然,这个 App 将不会被上传到 iTunes Connect.
确保你在点击"Submit"前,选择了"Include bitcode"。若是一切顺利的话,你将会看到一个绿色对号通知你此次构建已经被上传。
如今登陆到iTunes Connect,建立一个新的 App(包含合适的 bundle ID、App 名字等等)。若是你不肯定如何作这项工做,请参阅AppCoda TestFlight tutorial.
把你本身添加为内部测试人员。注意,一次构建保持“正在处理中”这个状态几小时是很寻常的。一旦这个 App 处理完成,选择它而且按下开始测试按钮。
一封电子邮件将会被发送到你的地址。确保你正在使用想要测试的 iOS 设备,打开这封电子邮件。你将会进入 TestFlight 应用。
安装这次构建,一旦完成安装,就回到设置应用中,找到存储,像此前同样找到这个 App。注意,这个 App 如今接近 5.4 MB。这就是 App 瘦身的意义。
哇哦!你刚刚从你的 App 中剔除掉了 12.4 MB - 而且这只是一个很是简单的 App。那些包含多种不一样的资源(asset
)的 App 效果更好。
在本篇教程,咱们看到了 App 瘦身的强大。咱们讨论了 App 瘦身的三个主要的方面:应用程序切片(App Slicing
)、中间代码(Bitcode
)和按需加载资源(On Demand Resources
).
不幸的是,2015 年 9 月 24 日,苹果在它的开发者门户宣布 App 瘦身已经被延迟,而且不会包含在 iOS 9(或者 9.0.1)公开发行版中:
应用程序切片目前不可用于 iOS 9 应用,由于 iCloud 建立 iOS 9 备份有问题,AppStore 中的一些 App 只能还原到相同型号的 iOS 设备。
当用户下载你的 iOS 9 应用时,他们会获取通用版本,而不是针对他们的设备类型的特定变体(
vatiant
)。TestFlight 将会给内部测试用户继续分发变体(vatiant
). 应用程序切片将会在将来的软件更新中可使用。如今你什么都不用作。
然而,就像我在文章的一开始中提到的,App 瘦身已经被修复而且已经为全部运行 iOS 9.0.2 的设备准备就绪。App 瘦身是一个简直难以想象的工具,它将会持续加速 App 下载。
本文由 SwiftGG 翻译组翻译,已经得到做者翻译受权,最新文章请访问 http://swift.gg。