Xcode9での更新中にiOS11でテストすると、今日アプリがクラッシュします。 NSPhotoLibraryAddUsageDescription
を追加すると、NSPhotoLibraryUsageDescription
がすでにあったとしても機能します。
IOS6以降でサポートされているもの、iOS11でサポートされているものについては読みましたが、Appleはそれらの違いについて言及していませんでした。 https://developer.Apple.com/library/content/ documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#// Apple_ref/doc/uid/TP40009251-SW7
新しいもの(NSPhotoLibraryAddUsageDescription
)を保持する場合、iOS 8でも機能しますか、それとも両方を保持する必要がありますか?
最後の質問に自分で答えるには:
IOS 9、10.3、11の両方でWORKSを使用するには、NSPhotoLibraryUsageDescription
とNSPhotoLibraryAddUsageDescription
の両方を宣言する必要があります。
技術的には異なります。以前はNSPhotoLibraryUsageDescription
を宣言していませんでしたが、iOS 9および11では正常に動作しましたが、iOS 10.3では失敗してクラッシュしました。
これはAppleから制御するのは本当に悪いバージョンですが、上位バージョンは古いバージョンの許可に準拠せず、サポートしていません。
Simple get from Apple Official Document
上の画像をクリックしてズームしてください。
詳細については:
NSPhotoLibraryAddUsageDescription :写真/画像をフォトライブラリに保存したい場合。ために iOS11 and +
NSPhotoLibraryUsageDescription :フォトライブラリにアクセスしたい場合。ために iOS10 and +
このドキュメントでわかるように、2つの違いは次のとおりです。
NSPhotoLibraryAddUsageDescription:書き込みのみの権限があり、読み取りはできません。
NSPhotoLibraryUsageDescription:Photosの読み取りと書き込みの両方が可能です。
From Apple NSPhotoLibraryUsageDescriptionのドキュメント:
「このキーは、ユーザーの写真ライブラリへの読み取りおよび書き込みアクセスを管理しますが、アプリがライブラリにアセットを追加するだけで、アセットを読み取る必要がない場合は、NSPhotoLibraryAddUsageDescriptionを使用するのが最善です。 "
両方が必要です。
一度UIActivityViewController
を使用してライブラリに画像を保存しようとしたため、私のiPhoneバージョンは11.3なので、NSPhotoLibraryUsageDescription
のみを使用し、NSPhotoLibraryAddUsageDescription
が必要なためクラッシュします。
ただし、iOS 9.3はクラッシュしません。
許可を求めるAPIとiOSバージョンに基づいた書き込みアクセスには違いがあるため、両方が必要です。
PHPhotoLibraryを使用して画像を保存するために、私のアプリには既にNSPhotoLibraryUsageDescriptionがありました。
IOS 11ではそれでも動作しますが、アプリがまだ許可を得ていない場合、UIDocumentInteractionControllerの「画像の保存」を介して画像を共有すると、NSPhotoLibraryAddUsageDescriptionに関する警告が表示されてクラッシュします。 PHPhotoLibraryを介して許可が既に付与されている場合、「画像の保存」にNSPhotoLibraryAddUsageDescriptionは必要ないようです。