記事

保護されたリソースへのアクセスを要求する

目的の文字列を指定して、保護されたリソースへのアクセスが必要な理由をユーザーに説明します。

概要

現代のデバイスはユーザーに関する大量の機密情報を収集して保存します。多くのAppが、この種のデータを必要とし、そのデータを生成するデバイスのハードウェアを利用して、有益な機能を提供しています。たとえば、ナビゲーションAppは、地図上のユーザーの位置を特定するためにユーザーの現在のGPS座標情報を必要とします。しかし、すべてのAppがすべてのデータへのアクセスを必要としているわけではありません。ナビゲーションAppはユーザーの健康履歴データやカメラインターフェイス、Bluetoothデバイスにアクセスする必要はありません。

開発するAppは、その機能を実行するのに必要なデータのみにアクセスする必要があります。この原則を踏まえて、Appleのオペレーティングシステムは、保護されたデータやリソースへのアクセスをデフォルトで制限しています。Appは、アクセスが必要な理由を提示および説明し、ケースバイケースでアクセスを要求できます。要求を承認するか、拒否するかはユーザーが決定します。

目的の文字列の指定

保護されたリソースにAppがアクセスしようとすると、最初に、許可を求めるメッセージがユーザーに表示されます。下の例では、MyRouteという名前のiOS Appが、経路案内をするときにユーザーの位置情報へのアクセスを求めるメッセージを表示しています。

システムで生成されるiOSアラートビューのスクリーンショット。「MyRoute」Appによる位置データへのアクセスを許可するかどうか尋ねています。App開発者からの使い方説明メッセージも表示されています。

ユーザーが許可すると、ユーザーが行ったこの選択が記憶され、メッセージは今後表示されなくなります。ユーザーが許可しない場合、状況はリソースによって異なりますが、メッセージの表示を伴うこのアクセスに加え、これ以降のすべてのアクセスが失敗します。ただし、位置データへのアクセスを求める特殊な例では、「一度だけ許可する」をタップして、1回のセッションに限ってアクセスを許可することができます。

メッセージのタイトルは、開発するAppの名前が挿入されて自動的に生成されます。目的の文字列、つまり使い方の説明を指定します。この例では、「Your location is used to provide turn-by-turn directions to your destination.」(あなたの位置情報は、目的地までのターンバイターンの経路案内をするために使われます)と指定して、Appがアクセスを必要とする理由を示しています。Appが機密データへのアクセスを必要とする理由を正確かつ簡潔に(一般的に一文で)示せば、ユーザーは情報に基づいた判断が可能になり、アクセスを許可する可能性が高まります。

使い方の説明を指定するには、リソース固有のキーに文字列値を設定し、そのキーをAppの情報プロパティリスト(英語)ファイルに追加します。たとえば、上のメッセージは、NSLocationWhenInUseUsageDescription(英語)キーに関連付けられた文字列です。下に示すように、Xcodeに組み込まれたプロパティリストエディタを使ってInfo.plistファイルを変更します。

Appの情報プロパティリストのスクリーンショット。追加されたNSLocationWhenInUseUsageDescriptionキーとそれに関連付けられた文字列値が強調表示されています。この文字列値は上の図に表示されているメッセージと一致します。

App Reviewで、保護されたリソースの使い方がチェックされ、目的の文字列なしでそれらのリソースにアクセスするコードを含むAppが却下されます。たとえば、連絡先にアクセスするAppが、NSContactsUsageDescription(英語)キーが存在しなければならない要件について以下のような情報をApp Reviewから受信することがあります。

ITMS-90683: Missing Purpose String in Info.plist - Your app’s code references
one or more APIs that access sensitive user data. The app’s Info.plist file
should contain a NSContactsUsageDescription key with a user-facing purpose
string explaining clearly and completely why your app needs the data.

この問題を解決するには、目的の文字列を指定して、Appでこの機密情報へのアクセスが必要な理由を説明するか、そのリソースにアクセスしているコードを削除します。

認証の確認

保護されたリソースへのアクセスを提供するシステムフレームワークの多くには、それらのリソース利用の認証を確認および要求するための専用のAPIがあります。このため、Appの現在のアクセス状況に応じてAppの動作を調整することができます。たとえば、Appが何らかの機能を実行する許可をユーザーが拒否したら、関連する要素をユーザーインターフェイスから削除できます。

ユーザーは、認証するかどうかを「設定」でいつでも変更できるため、必ず、機能の認証ステータスの確認を行ってからその機能にアクセスするようにしてください。専用のAPIがない場合は、アクセスの失敗を正常に処理できるようにシステムを準備してください。

アクセス認証のリセット

保護されたリソースへの2回目以降のアクセスでは、許可に関するユーザーの選択が記憶されているため、メッセージは再び表示されません。メッセージをもう一度ユーザーに表示する場合は、これらのリソースへのアクセス許可をデバイスまたはシステムでリセットする必要があります。

保護されたリソースへのアクセス許可をiOS Appでリセットするには、デバイスで「設定」>「一般」>「リセット」>「位置情報とプライバシーをリセット」の順にタップします。

macOS Appで特定のサービスに対する許可をリセットする場合は、ターミナルでtccutil reset <サービス名>コマンドを実行します。例として、AppleEventsのすべての許可をリセットするには、以下のように入力します。

$ tccutil reset AppleEvents

このコマンドは、保護されたリソースを利用するすべてのAppのアクセス認証をリセットします。同様に、連絡先、カレンダー、リマインダーなどのサービスを指定して、個別にそれらのサービスの許可をリセットできます。