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

wwdc16

はじめに

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

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

本記事は Apple からベータ版として公開されているドキュメントを情報源としています。 そのため、正式版と異なる情報になる可能性があります。ご留意の上、お読みください。

検証環境

  • Xcode Version 8.0 beta (8S128d)
  • iPhone 6s, iOS 10.0 (14A5261v)

対象となる操作

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

対応しないとどうなるか

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

// フォトライブラリへのアクセスをリクエスト
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 の変更点を調査していきます!

参考資料