[iOS 10] 各種ユーザーデータへアクセスする目的を記述することが必須になるようです

169件のシェア(すこし話題の記事)

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。モバイルアプリサービス部の平屋です。

「フォトライブラリ」や「カレンダー」などのユーザーデータへアクセスする方法が、iOS 10 で変更になるようです。本記事では、対象となる操作や対応方法について説明していきます。

検証環境

  • Xcode Version 8.2.1
  • iPhone 6s, iOS 10.2.1

変更履歴

  • 2017/2/17: 表 1 に NSRemindersUsageDescription, NSSiriUsageDescription, NSSpeechRecognitionUsageDescription を追加

対象となる操作

Apple の公式ドキュメント「Information Property List Key Reference」の「Cocoa Keys」セクションの説明によると、以下の表の中のいずれかの操作を行う場合、特定のキーと使用目的を Info.plist ファイルに記述する必要があるようです。

表1 操作とキーの一覧
対象となる操作 対応するキー
1 メディアライブラリへのアクセス NSAppleMusicUsageDescription
2 Bluetooth インターフェースへのアクセス NSBluetoothPeripheralUsageDescription
3 カレンダーへのアクセス NSCalendarsUsageDescription
4 カメラへのアクセス NSCameraUsageDescription
5 連絡先へのアクセス NSContactsUsageDescription
6 ヘルスデータへのアクセス NSHealthShareUsageDescription
7 ヘルスデータの変更 NSHealthUpdateUsageDescription
8 HomeKit の設定データへのアクセス NSHomeKitUsageDescription
9 位置情報へのアクセス (常に許可) NSLocationAlwaysUsageDescription
10 位置情報へのアクセス (使用中のみ許可) NSLocationWhenInUseUsageDescription
11 マイクへのアクセス NSMicrophoneUsageDescription
12 加速度計へのアクセス NSMotionUsageDescription
13 フォトライブラリへのアクセス NSPhotoLibraryUsageDescription
14 リマインダーへのアクセス NSRemindersUsageDescription
15 Siri へユーザーデータ送信 NSSiriUsageDescription
16 Speech Recognition Server へのユーザーデータ送信 NSSpeechRecognitionUsageDescription

対応しないとどうなるか

何も対応せずに、フォトライブラリへのアクセスをリクエストしてみました。

// フォトライブラリへのアクセスをリクエスト
PHPhotoLibrary.requestAuthorization { PHAuthorizationStatus in

}

実行してみると、アプリが強制終了しました。以下のログが Xcode のコンソールに表示されました。

This app has crashed because it attempted to access privacy-sensitive data without a usage description.  The app's Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data.

対応方法

「キー」と「使用目的」を Info.plist ファイルに追加します。例えば、「フォトライブラリへのアクセス」を使用したい場合は、以下のように NSPhotoLibraryUsageDescription キーを使用します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>NSPhotoLibraryUsageDescription</key>
    <string>ここに目的を書きます。</string>

    ...

</dict>
</plist>

Info.plist ファイルに値を追加した後に、再度「フォトライブラリへのアクセス」をリクエストしてみたところ、アクセスを求めるアラートが表示されました!

Info.plist ファイルに記述した「使用目的」はこのアラート内に表示されます。

さいごに

本記事では、ユーザーデータへアクセスする方法に関する iOS 10 での変更点と対応方法を紹介しました。

今後も引き続き、iOS 10 の変更点を調査していきます!

参考資料

  • arumani

    こんにちは。
    XCode 8.0上で、ツリーからInfo.plistを選択→Keyの”+”ボタンクリック→Application Categoryで”Privacy – XXX”を選ぶ、で追加する事もできます。

    XXXは、このエントリの表「対応するキー」の文言と対応するものなのですぐに分かると思います。
    例)NSCameraUsageDescription →Privacy – Camera Usage Description