[iOS 10] 各種ユーザーデータへアクセスする目的を記述することが必須になるようです
はじめに
こんにちは。モバイルアプリサービス部の平屋です。
「フォトライブラリ」や「カレンダー」などのユーザーデータへアクセスする方法が、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 | メディアライブラリへのアクセス | 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 の変更点を調査していきます!