iOS app 瘦身

本文译自:Guides and Sample Code 的App Thinning (iOS, tvOS, watchOS)

App 瘦身

App Store和操作系统通过将app定制到用户的特定设备中来优化安装, 这种瘦身优化,方便了我们更快地下载app,为我们的设备节省空间,提升了用户体验。

下面我们讲讲app 瘦身的三个部分:切片(Slicing)、bitcode、on-demand resources(按需资源)。

1. 切片 (iOS/tvOS)

为不同的设备产生相对应的app bundle变体(variant)的过程称为切片。变体(variant)只包含目标设备所需要的可执行结构和资源。我们开发并上传app到 iTunes Connect,App Store会基于你所选的应用支持设备来产生相应的变体(variant)。图片资源会根据设备分辨率和设备系列(iPad/ iPhone/iPod)进行切片,GPU资源也会根据设备功能进行分片。例如,对于tvOS应用,iOS和tvOS共享目录下的assets被切片,大的app icons被移除了。当用户安装app时,对应于用户设备的变体(variant)会被下载并安装到设备中。
Xcode在开发模式时可模拟切片,我们可以在本地创建并测试变体(variant)。当你在设备上运行app时,Xcode会自动将app切片。当我们打包时,Xcode会包含app的完整版,但允许我们从打的包中导出变体(variant)。

注意:切片app只支持ios 9.0及更高版本的设备,低版本的设备只能从App Store获取通用app(universal app)

iOS app 瘦身_第1张图片

在我们正常开发和发布app的过程中,切片的流程是这样进行的:

1、在Xcode中指定目标设备,在asset目录中提供多种分辨率的图片。
   要对资源切片,必须使用asset 目录。

2、在模拟器或真机中编译并运行app。
   Xcode会针对当前运行设备编译app的变体(variant),
   减少了测试编译时间,并允许本地测试变体(variant)。

3、打包app并为目标设备本地导出变体(variant)。
   在目标设备上测试所有变体(variant)以提早发现配置问题。

4、上传app到iTunes Connect。
   App Store从上传的app中创建独立的变体(variant),
   至于有多少变体,取决于Xcode project中的结构和资源的配置。

5、在iTunes Connect中发布app的预发布版用以测试。
   测试者使用TestFlight来安装预发布版的app,
   TestFlight会下载相应的变体(variant)到测试者的设备中。

6、在iTunes Connect中发布app。
   用户在app支持的设备上安装app,
   App Store会将相应的变体(variant)下载到用户设备。

2. Bitcode

Bitcode是编译程序的中间表示形式。我们上传到iTunes Connect的包含bitcode的app将在App Store中进行编译和链接。包含Bitcode将允许Apple在将来重新优化您的app二进制文件,而无需将新版本的app提交到App Store。

默认情况下,Xcode会隐藏在构建时生成的符号(symbols),因此Apple不能读取这些符号。 只有当您将应用程序上传到iTunes Connect时选择包含符号,才能将这些符号发送给Apple。 我们必须包含这些符号,用于收集Apple崩溃报告。

注意:对于iOS app,bitcode是默认的,但也是可选项。对于watchOS和tvOS ,bitcode是必选项。如果你提供bitcode,那么app bundle (project里所有target)  中所有的framework也要包含bitcode。在iTunes Connect发布app后,我们可以下载构建的dSYMs文件。

3. On-Demand Resources (iOS, tvOS)

On-Demand Resources(按需资源)是诸如图像和声音的资源,您可以通过关键字对其进行标记,并按组请求。 App Store将资源托管在Apple服务器上,并为我们管理着资源的下载。 按需资源可以实现更快的下载和更小的应用程序大小,从而提高首次启动体验。 例如,游戏应用程序可以将资源划分为游戏级别,仅在应用程序预期用户将移动到该级别时才请求该级别的资源。 同样,只有当用户购买了相应的内购资源时,才能请求这些资源。

操作系统在不再需要或磁盘空间不足时会清除按需资源。 如果我们导出测试版的app,则必须自己托管按需资源。 请注意,不支持可执行的按需资源。 App Store还会对按需资源进行切片,如上面提到的Slicing(iOS,tvOS)中所述,进一步改善了用户体验。

on-demand resources在用户探索应用程序的功能时会根据需要为其提供资源,这种后台工作机制是透明化的。

iOS app 瘦身_第2张图片

如何在app设置按需资源,请参考 On-Demand Resources Guide 和 NSBundleResourceRequest Class Reference 这两篇官方文档,我会在之后的博客中翻译它们。

你可能感兴趣的:(ios)