Xcode8 – Swift3への変換MEMO (3):写真選択ボタンを押すとクラッシュするようになった

広告:超オススメUnity Asset
  広告:超オススメUnity Asset

次は、ボタンを押した後の動作が正しく動くかです。不具合があった箇所のひとつとして、フォトライブラリから写真を選択して画像をアプリ内に読み込むような機能を設定しているボタンを押すとクラッシュするようになりました。クラッシュすると次のようなメッセージが出力されます。

00

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.

この落ち方は、書いてあるとおり、 NSPhotoLibraryUsageDescription を Info.plist に追加しておかねばなりません。このアプリケーションがなんのためにフォトライブラリにアクセスするのかを明記するもので今後は必ずこれを設定しなければならなくなりました。(タイトルはSwift3への変換MEMOとなっていますが、これはSwift3に限った話ではありませんね)

 

 Info.plist を開いてルートに追加してあげます。プロパティリスト表示であれば、ここの「+」ボタンを押して新しいアイテムを追加できるようにします。

01

そこに「NSPhotoLibraryUsageDescription」と書き込んでもいいし、

02 1

あるいは、「Priva・・・」と入力しかけて、「Privacy - Photo Library Usage Description」を選択してもいいでしょう。

02 2

03

String型のまま、値として「OneTwoPunchでは2枚の写真をフォトライブラリから読み込んで使用します。」のようにアプリがフォトライブラリにアクセスする理由や状況などの説明書きを書き込んでおきましょう。

04

ちなみに、このInfo.plistは、「Open As>Source Code」で開くことでソースの形で編集することも可能です。

04 2

実行してみると、写真選択を実行するボタンを押したタイミングで、シミュレータにおいてもダイアログが出るようになり、クラッシュもしなくなりました。

05

アプリを削除すれば、再度ダイアログが出るかどうかのテストができます

シミュレータ上でアプリアイコンを長押しすると、実機と同様にアプリを削除することができ、再度ダイアログが正しく出るかどうかのテストができます。シミュレータの「Reset Content and Settings …」までする必要はなく、アプリ削除だけでOKです。

06

「許可しない」される可能性が高まりましたね

これは、今までよりプライバシー関係が厳しくなっただけではなく、ユーザによって「許可しない」を選択されてしまう可能性がだいぶ高くなったと思います。ダイアログの選択肢が許可するかしないかの二択になったことで、許可されない確率も以前に比べるとだいぶ高いと思います。場合によってはユーザの意に反して「許可しない」が選択されてしまうこともあるかもしれません。

07

試しに「許可しない」を選択すると、「Cancel」しかないこんな画面になり、

08

ユーザがフォトライブラリにアクセスするボタンを押すと、

09

プライバシー設定で変更できます、的な英文が表示されるのみとなります。。。(リンクされてないだけでなく、しかも英語表記かいな!)

アプリで写真を選択できるようにしてもらうには、ユーザに自身の手で設定を開いてもらい、プライバシー>写真>(アプリ)のスチッチをオンにしなければなりません。

10

11

こうなっちゃうとだいぶ厄介ですね。。。(これはまだよく検証していないので、もう少しよいなんらかの対策が取れるかもしれません)