• 146
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

App Thinning

 WWDC15 で発表された、アプリを自動で最適化して配信してくれる新しい仕組み App Thinning についてのメモ。以下3種類に分けられる。

  • App Slicing
  • On-Demand Resources (ODR)
  • Bitcode

 iOS 9の特徴のひとつとしてその容量がiOS 8と比べてかなり少ないということがあるが、サードパーティアプリもそれに追随する必要がありそう。そのための仕組みが App Thinning かと。ストレージの消費は必要最小限に。

App Slicing

 デバイスや解像度の増加でアプリのリソースやバイナリも増加する傾向にある。でも実際に使用するものは限られるので結果的には無駄が多くなる。それを必要最低限に削ぎ落とす仕組み。iPhone 6なら64-bitバイナリ、@2xリソースのみ、といった具合、おそらく。
 iTunes Connect には完全版をアップロードする。ユーザーがアプリを App Store からダウンロードする際に必要なデータが自動で選別される模様。

On-Demand Resources (ODR)

 リソースが必要になったときに追加ダウンロードするようにできる仕組み。よくゲームアプリで行われているようなああいったことが Apple 公式で提供される。)

リソースの種類

 基本的にはあらゆるデータファイルに対応するが、Swift や Objective-C などで書かれた実行可能なファイルは禁止されている。
 リソースの例として:

  • データファイル
  • 画像
  • OpenGLシェーダー
  • SpriteKitパーティクル、シーン、テクスチャアトラス
  • WatchKitコンプリケーション

…とされている。

ODR を有効にする (Xcode)

 ターゲットの Build Settings ペインから Assets カテゴリを表示。Enable On-Demand Resources 項目を Yes にする。無効にする場合は No にする。
odr1.png

タグを定義する (Xcode)

 タグは ODR のセットを識別するために使用される。これの定義は Xcode で行う。ターゲットの Resource Tags ペインがその管理画面にあたる。
odr2.png

タグを追加する (Xcode)

 ファイル、フォルダの場合:
ファイルインスペクタに On Demand Resource Tags 欄があるので、タグを記入する。
odr3.png

 アセットカタログの場合:
アセットの属性インスペクタに On Demand Resource Tags 欄があるので、タグを記入する。

タグの種類

 管理画面でタグの種類を設定できる。

  • Initial install タグ
    • アプリと同時にダウンロードされるリソース
  • Prefetch タグおよび順番
    • アプリのインストール後に追加でダウンロードするリソース。ダウンロード順も管理画面で設定できる
  • Dowloaded only on demand タグ
    • 要求されたら追加ダウンロードされるオンデマンドリソース

容量の上限

 それぞれのタグにおいて、そのタグ内リソースの合計は2GBが上限。すべての ODR の合計は20GBが上限。ただし、無制限に20GB使えるというわけではなく、状況やタグの種類によってその上限が細かく規定されている。
 また、パフォーマンス的な理由から、Apple はひとつのタグの容量は64MB以下が理想的としている。

項目 上限 App Slicing
アプリバンドル 2GB
Initial install タグ 2GB
Initial install / Prefetch タグ 4GB
一度の ODR で使用できるタグ 2GB
App Storeで管理されるタグ 20GB

不明:Initial install タグはアプリバンドルの上限とは別?

ODR を取得する

https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/On_Demand_Resources_Guide/Managing.html

ODR をホストする

https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/On_Demand_Resources_Guide/IntrotoHostingODR.html

任意のサーバーを自前で用意して ODR をホストすることができる。もちろん ATS を考慮する必要がある。

アセットパックの出力方法

Xcode では Asset Pack Manifest URL Prefix のビルド設定項目にアセットパックの URL を記入しておく。

Bitcode

 Apple がアプリのコンパイルを代行して自動最適化してくれる仕組み。アプリを中間表現である Bitcode を含めた形式で iTunes Connect に提出しておけば、将来的に CPU アーキテクチャが変わった際に Apple がよろしくやってくれるというもの、らしい。Bitcode を採用する場合には、そのアプリに含めるすべてのバイナリ(フレームワーク、ライブラリ)も同様に Bitcode を含める必要がある。
 なお watchOS, tvOS では Bitcode が必須の模様。

 Bitcode に関してはこちらの記事が詳しいです。