シミュレータで落ちる!
iOS10、Xcode8になってから、プライバシーに関する機能を使う際に、Info.plistにあらかじめ宣言(みたいなこと)しとかないと、シミュレータで落ちてしまうようになった。
たとえばフォトライブラリにアクセスするようなAPIを使ったら、こんなん出て落ちた。
[access] 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キーを含まなければなりません。
だそうです。
落ちないようにしましょう
アプリ名-Info.plistにPrivacy - から始まる項目を追加する(探すとメニューで出てくる)。
そこに、フォトライブラリにアクセスする際に表示させるAlertのメッセージを書き込んでおしまい。
そうすると最初のアクセス時に以下のように出て、無事クラッシュせずにアクセスできるようになった。
かあんたん(≧∇≦)
でも、もともとフォトライブラリにアクセスするような場合って、iOS側が確認のアラートを表示してくれてたよね。
メッセージ部分を入力しなければ、デフォルトでいつものメッセージを表示してくれるんだけど、メッセージがないと審査の段階で自動的にアップロードしたビルドが拒否されちゃう。
一応英語で書いたけど、他言語対応はどうやるのかね?
しかしめんどくさくなったねぇ。
Info.plistに設定が必要になったらしい機能の一覧は
こちらのサイト。
Info.plistの候補からまとめてみた(iOS10、Xcode8時点)
- Privacy - Bluetooth Peripheral Usage Description
- Privacy - Calendars Usage Description
- Privacy - Camera Usage Description
- Privacy - Contacts Usage Description
- Privacy - Health Share Usage Description
- Privacy - Health Update Usage Description
- Privacy - HomeKit Usage Description
- Privacy - Location Always Usage Description
- Privacy - Location Usage Description
- Privacy - Location When In Use Usage Description
- Privacy - Media Library Usage Description
- Privacy - Microphone Usage Description
- Privacy - Motion Usage Description
- Privacy - Music Usage Description
- Privacy - Photo Library Usage Description
- Privacy - Reminders Usage Description
- Privacy - Siri Usage Description
- Privacy - Speech Recognition Usage Description
- Privacy - TV Provider Usage Description
- Privacy - Video Subscriber Account Usage Description