目的の文字列を指定して、保護されたリソースへのアクセスが必要な理由をユーザーに説明します。
最新の英語ドキュメント
フレームワーク
- バンドルリソース
概要
現代のデバイスはユーザーに関する大量の機密情報を収集して保存します。多くのアプリが、この種のデータを必要とし、そのデータを生成するデバイスのハードウェアを利用して、有益な機能を提供しています。たとえば、ナビゲーションアプリは、地図上のユーザーの位置を特定するためにユーザーの現在のGPS座標情報を必要とします。しかし、すべてのアプリがすべてのデータへのアクセスを必要としているわけではありません。ナビゲーションアプリはユーザーの健康履歴データやカメラインターフェイス、Bluetoothデバイスにアクセスする必要はありません。
開発するアプリは、その機能を実行するのに必要なデータのみにアクセスする必要があります。この原則を踏まえて、Appleのオペレーティングシステムは、保護されたデータやリソースへのアクセスをデフォルトで制限しています。アプリは、アクセスが必要な理由を提示および説明し、ケースバイケースでアクセスを要求できます。要求を承認するか、拒否するかはユーザーが決定します。
ヒント
ユーザーにリソースへのアクセスを許可するよう求めるほか、アプリにエンタイトルメントを追加して、その意図を別途公表することが必要な場合もあります(「エンタイトルメント(英語)」を参照)。
目的の文字列の指定
保護されたリソースにアプリがアクセスしようとすると、最初に、許可を求めるメッセージがユーザーに表示されます。下の例では、MyRouteという名前のiOSアプリが、経路案内をするときにユーザーの位置情報へのアクセスを求めるメッセージを表示しています。
ユーザーが許可すると、ユーザーが行ったこの選択が記憶され、メッセージは今後表示されなくなります。ユーザーが許可しない場合、状況はリソースによって異なりますが、メッセージの表示を伴うこのアクセスに加え、これ以降のすべてのアクセスが失敗します。ただし、位置データへのアクセスを求める特殊な例では、「一度だけ許可する」をタップして、1回のセッションに限ってアクセスを許可することができます。
メッセージのタイトルは、開発するアプリの名前が挿入されて自動的に生成されます。目的の文字列、つまり使い方の説明を指定します。この例では、「Your location is used to provide turn-by-turn directions to your destination.」(あなたの位置情報は、目的地までのターンバイターンの経路案内をするために使われます)と指定して、アプリがアクセスを必要とする理由を示しています。アプリが機密データへのアクセスを必要とする理由を正確かつ簡潔に(一般的に一文で)示せば、ユーザーは情報に基づいた判断が可能になり、アクセスを許可する可能性が高まります。
メモ
使っている外部のライブラリやSDKが、目的の文字列を必要とするAPIを参照していることがあります。開発するアプリではこれらのAPIを使わない場合でも、目的の文字列はApp Reviewで必須の情報です。その場合は、ライブラリまたはSDKの開発者に連絡して、開発者が利用する保護されたリソースとその利用目的に関する情報を要求できます。あるいは、これらのAPIを含まないコードのバージョンをリリースしてもらうよう開発者に依頼することもできます。外部のSDKやライブラリへのアクセスを含め、保護されたリソースへのすべてのアクセスに対して責任があることにご注意ください。
使い方の説明を指定するには、リソース固有のキーに文字列値を設定し、そのキーをアプリの情報プロパティリスト(英語)ファイルに追加します。たとえば、上のメッセージは、NSLocation
(英語)キーに関連付けられた文字列です。下に示すように、Xcodeに組み込まれたプロパティリストエディタを使ってInfo
ファイルを変更します。
重要
保護されたリソースをアプリで使う場合は必ず、使い方文字列を指定してください。指定しなければ、リソースへのアクセスは失敗し、場合によっては、アプリがクラッシュすることがあります。
App Reviewで、保護されたリソースの使い方がチェックされ、目的の文字列なしでそれらのリソースにアクセスするコードを含むアプリが却下されます。たとえば、連絡先にアクセスするアプリが、NSContacts
(英語)キーが存在しなければならない要件について以下のような情報をApp Reviewから受信することがあります。
この問題を解決するには、目的の文字列を指定して、アプリでこの機密情報へのアクセスが必要な理由を説明するか、そのリソースにアクセスしているコードを削除します。
認証の確認
保護されたリソースへのアクセスを提供するシステムフレームワークの多くには、それらのリソース利用の認証を確認および要求するための専用のAPIがあります。このため、アプリの現在のアクセス状況に応じてアプリの動作を調整することができます。たとえば、アプリが何らかの機能を実行する許可をユーザーが拒否したら、関連する要素をユーザーインターフェイスから削除できます。
ユーザーは、認証するかどうかを「設定」でいつでも変更できるため、必ず、機能の認証ステータスの確認を行ってからその機能にアクセスするようにしてください。専用のAPIがない場合は、アクセスの失敗を正常に処理できるようにシステムを準備してください。
アクセス認証のリセット
保護されたリソースへの2回目以降のアクセスでは、許可に関するユーザーの選択が記憶されているため、メッセージは再び表示されません。メッセージをもう一度ユーザーに表示する場合は、これらのリソースへのアクセス許可をデバイスまたはシステムでリセットする必要があります。
保護されたリソースへのアクセス許可をiOSアプリでリセットするには、デバイスで「設定」>「一般」>「リセット」>「位置情報とプライバシーをリセット」の順にタップします。
重要
「位置情報とプライバシーをリセット」を使うと、デバイス上のすべてのサービスの位置情報とプライバシーがリセットされます。
macOSアプリで特定のサービスに対する許可をリセットする場合は、ターミナルでtccutil reset <サービス名>
コマンドを実行します。例として、AppleEventsのすべての許可をリセットするには、以下のように入力します。
このコマンドは、保護されたリソースを利用するすべてのアプリのアクセス認証をリセットします。同様に、連絡先、カレンダー、リマインダーなどのサービスを指定して、個別にそれらのサービスの許可をリセットできます。