共有iPad向けにAppを最適化する

共有iPadは、複数のユーザーが共有しているiPad上で、各ユーザーにパーソナライズされた体験の提供を可能にします。以下のベストプラクティスに対応することで、ユーザー固有のデータをクラウドベースで効率的に管理できるようになります。

ローカルデータは、ユーザーを切り替えたりデバイスを再設定したりすると失われることがあるため、Appアーキテクチャおよびユーザー固有のデータの種類と量に応じて、ストレージを永続化することが重要です。

共有iPadに対応しているかどうかをテストする

あなたのAppが、クラウドベースのAppまたはローカルにデータを保存しないAppである場合、そのAppは共有iPad*にすでに対応している可能性があります。Appが共有iPadで問題なく動作するかどうかをテストするには、2台のシングルユーザーiPadデバイスに同じApple IDでサインインし、以下の手順を実行します。

  1. お使いのApple IDでサインインしたiPadでAppを起動します。
  2. 通常のユーザーのようにコンテンツの作成、変更、追加を行います。
  3. そのiPadでApple IDからサインアウトします。
  4. 同じApple IDを使って2台目のiPadにサインインします。
  5. Appをダウンロードして起動します。

中断したときの状態から再開できる場合、そのAppは共有iPadに対応しています。上の手順は、共有iPadが特定のユーザーやAppのデータを消去しなければならないという状況下での検証も含まれますが、そうした状況が発生する可能性はさほど高くはありません。

消去可能なローカルストレージを明示する

消去可能なローカルストレージに対応しているとは、実行結果が永続的なコンテンツとして保存されない(計算機Appなど)、または永続的に保存されるべきコンテンツはAppによってすべてクラウドに保存されることを意味しています。データ管理と同期に関するベストプラクティスに対応し、プロジェクトのinfo.plistでNSSupportsPurgeableLocalStorage(英語)キーを「yes」に設定し、共有iPadに対応していることを明示します。これにより、Appでユーザーがサインアウトし、ローカルデータが消去される場合に対応していることが明らかになり、Apple School Managerを使っているお客様に、そのAppが共有iPadで問題なく動作することを示すことができます。

データ管理のベストプラクティス

すべてのユーザーデータをクラウドに保存します。共有iPadでは、Appの使用時/未使用時にかかわらず、永続性が求められるデータを保存しておくクラウドベースの同期モデルが必要です。それには、NSURLSessionを使用して独自のバックエンドにデータを送信するか、iCloudを使用する、もしくはNSUbiquitousKeyValueStoreを使用します。または資格情報はキーチェーンに保存します。

リモートデータをオンデマンドで取得します。特定のAppに関連するすべてのデータが常に必要であるわけではないため、必要なデータのみを必要なとき(またはその直前)にダウンロードする、というダウンロード戦略を立てるようにしてください。Appで必要となるかもしれない既知の全ユーザーコンテンツをダウンロードさせるのではなく、現在のコンテキストで必要なコンテンツのみをダウンロードできるような仕組みを検討してください。

データの変化に合わせてデータを同期します。ユーザーが入力または作成したデータを取得する場合と同じように同期させます。同期処理は少なくともapplicationWillResignActive中に実行するようにしてください。ただし、待ち時間が長過ぎたり、非常に大きなバッチを同期処理しようとしたりすると、ユーザー体験が低下し、まれにデータの損失につながることもあることにも注意してください。

初回起動または進捗のフラグをクラウドに保存します。Appが初回起動時の動作の実行を、ローカルファイルシステムまたはNSUserDefaultsに保存されているフラグに基づいて判定している場合、ユーザーごとにそれらのフラグをNSUbiquitousKeyValueStoreに移動し、初回起動時の動作を実行する際にそのクラスを確認するようにしてください。

NSUbiquitousKeyValueStoreについて詳しくは、「NSUbiquitousKeyValueStoreクラスリファレンス(英語)」およびPrefsInCloud(英語)のサンプルプロジェクトをご確認ください。

バックグラウンドタスクアサーションの要件を制限します。データの一貫性と同期を確実にするため、バックグラウンドタスクアサーションで実行する処理量を必要最低限(一般的には、NSURLSessionまたはiCloud APIを呼び出してユーザーのデータをアップロードする処理)に制限します。これらのAPIを使用すると、ユーザー間の移行を妨げることなく、ネットワーク操作を続行できます。

消去可能なローカルストレージに対応していることをプロジェクトのplistで明示します。プロジェクトのinfo.plistでNSSupportsPurgeableLocalStorage(英語)キーを「yes」に設定することで、共有iPadに対応していることを明示します。これにより、Appでユーザーがログアウトするとローカルデータが消去されるようになっていることが明示されます。

同期テクノロジー

NSURLSessionを使った同期。ユーザー固有の設定やデータをプッシュするために、AppでNSURLSessionと適切なバックグラウンド設定を使えば、ユーザーがAppを切り替えた後だけではなく、現在のユーザーが共有iPadからサインアウトした後でも、アップロードを確実に続行することができます。

NSURLSessionについて詳しくは、WWDCのビデオ「Networking with NSURLSessionでのネットワーク(英語)」をご視聴ください。「NSURLSessionクラスリファレンス(英語)」もご確認ください。

キーチェーンを使った資格情報の同期。共有iPadのキーチェーンでは、同じApple IDを使っている複数のデバイス間で自動的に同期を行うことができます。キーチェーンサービスAPIを使って、資格情報やその他の軽量な情報をキーチェーンに保存することで、これらの情報の安全性を確保し、ユーザーはサインインすればいつでも利用することができます。

キーチェーンの実装について詳しくは、「キーチェーンサービスプログラミングガイド(英語)」をご確認ください。

iCloudによるデータの同期。iCloud書類およびKey-ValueストレージAPIをサポートすることにより、明示的に同期プロセスを管理しなくても、ユーザーのコンテンツを同期された状態に維持できます。CloudKitはトランザクション的でありデベロッパが明示的にコントロールする必要がありますが、CloudKitの動作は、Appが終了している場合やユーザーがサインアウトしている場合でも、コミットされたデータがiCloudストレージに確実に届くよう設計されています。

開発するAppに最適なストレージAPIについては、「iCloud設計ガイド(英語)」をご確認ください。