iOS9 App Thinning(应用瘦身)功能介绍

Posted 路人Q

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS9 App Thinning(应用瘦身)功能介绍相关的知识,希望对你有一定的参考价值。

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

前提条件
在本教程中,笔者假设你有 Xcode 实践经验而且知道如何使用 IDE。如果你对此不甚了解或者不确定 IDE 是什么,也许你会想看看与此相关的优秀免费课程
此外,笔者也假设你知道如何在 App Store 上发布 app,也知道如何使用苹果的Beta 应用测试服务 testflight。笔者不会具体说明如何使用 testflight,所以如果你对 testflight 不熟悉或者不清楚上传发布 app 的大体流程,笔者推荐你先看一看这篇 AppCoda 上的文章除了这些和你学习的意愿之外,就没有任何前提条件了。
以此为前提,让我们开始吧。

App Thinning 的介绍
技术分享
现今,市面上的 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 
技术分享
当你使用 Xcode 编译和运行一个应用时,Xcode 不会自动处理应用程序变种和 App Thinning。这样,整个应用程序文件还是在你的设备上。
然后点击 Xcode 的产品选项(Product tab)并且选择存档(Archive)。 
技术分享

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

技术分享
确保你在选择「提交」之前选择了「包含 bitcode」。如果一切顺利,你会看到一个绿色的对号提示你项目已经成功更新了。
现在点击这里 登录 iTunes Connect ,创建一个新的应用程序(填入适当的捆绑包 ID,应用程序名称等)。如果你不确定怎么做,请参考AppCoda TestFlight 教程
技术分享
将自己添加为内部测试员。要注意,在建立项目时数个小时都处于「处理中状态并不寻常。一旦应用程序处理完毕,就选中它并按下 开始测试」。
你将会收到一封电子邮件。请确保使用你想测试的 iOS 设备,并接受邮件邀请。你会被带到 TestFlight 应用。 
技术分享
安装这个版本。完成之后,返回到应用程序设置,浏览存储,找到我们之前的应用程序。发现这个应用程序现在仅有 5.4MB 了。这就是 App Thinning 的杰作! 
技术分享
哇!你的一个非常精简的应用程序都节省了 12.4MB 的存储空间。那么,包含多个不同资源的应用程序将会得到更加显着的大小变化!

 

参考链接:

http://www.cocoachina.com/ios/20150612/12135.html

http://www.jianshu.com/p/330303ac0410

 

2. 官方网站链接: 

http://help.apple.com/xcode/mac/current/#/devbbdc5ce4f

官网文档

App thinning overview (iOS, tvOS, watchOS)

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.

Slicing (iOS, tvOS)

Slicing is the process of creating and delivering variants of the app bundle for different target devices. A variant contains only the executable architecture and resources that are needed for the target device. You continue to develop and upload full versions of your app to iTunes Connect. The App Store will create and deliver different variants based on the devices your app supports. Use asset catalogs so that the App Store can select images, GPU resources, and other data appropriate for each device variant. When the user installs an app, a variant for the user’s device is downloaded and installed.

Xcode simulates slicing during development so you can create and test variants locally. Xcode slices your app when you build and run your app on a device or in Simulator. When you create an archive, Xcode includes the full version of your app but allows you to export variants from the archive.

Note: Sliced apps are supported on devices running 9.0 and later; otherwise, the App Store delivers universal apps to customers.

技术分享

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.

For iOS apps, bitcode is the default, but optional. For watchOS and tvOS apps, bitcode is required. If you provide bitcode, all apps and frameworks in the app bundle (all targets in the project) need to include bitcode.

Xcode hides your app’s symbols by default, so they are not readable by Apple. When you upload your app to iTunes Connect, you have the option of including symbols. Including symbols allows Apple to provide crash reports for your app when you distribute your app using TestFlight or distribute your app through the App Store. If you’d like to collect and symbolication crash reports yourself, you don’t have to upload symbols. Instead, you can download the bitcode compilation dSYM files after you distribute your app.

On-Demand Resources (iOS, tvOS)

On-demand resources are resources—such as images and sounds—that you can tag with keywords and request in groups, by tag. The App Store hosts the resources on Apple servers and manages the downloads for you. The App Store also slices on-demand resources, further optimizing variants of the app.

On-demand resources provide a better user experience:

  • App sizes are smaller so apps download faster, improving the first-time launch experience.

  • On-demand resources download in the background, as needed, while the user explores your app.

  • The operating system purges on-demand resources when they are no longer needed and disk space is low.

For example, a master-detail app may divide resources into levels and request the next level of resources only when the app anticipates that the user will move to that level. Similarly, the app can request In-App Purchase resources only when the user makes the corresponding in-app purchase.

技术分享

Note: If you distribute your app to registered devices (outside of the App Store), you must host the on-demand resources yourself.

To set up on-demand resources in your app, read On-Demand Resources Guide and NSBundleResourceRequest.































































以上是关于iOS9 App Thinning(应用瘦身)功能介绍的主要内容,如果未能解决你的问题,请参考以下文章

iOS App Thinning - 如何根据屏幕尺寸实现它?

iOS9-by-Tutorials-学习笔记四:APP-瘦身

App Thinning

App Thinning Size Report 报告的大小与 App Store 大小完全不同

iOS上传IPA时提示导入此构建版本时出错-errors occurred in the app thinning process

app瘦身