web-dev-qa-db-ja.com

NSPhotoLibraryAddUsageDescriptionとNSPhotoLibraryUsageDescriptionの違いは何ですか?

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でも機能しますか、それとも両方を保持する必要がありますか?

31
TomSawyer

最後の質問に自分で答えるには:

IOS 9、10.3、11の両方でWORKSを使用するには、NSPhotoLibraryUsageDescriptionNSPhotoLibraryAddUsageDescriptionの両方を宣言する必要があります。

技術的には異なります。以前はNSPhotoLibraryUsageDescriptionを宣言していませんでしたが、iOS 9および11では正常に動作しましたが、iOS 10.3では失敗してクラッシュしました。

これはAppleから制御するのは本当に悪いバージョンですが、上位バージョンは古いバージョンの許可に準拠せず、サポートしていません。

5
TomSawyer

Simple get from Apple Official Document

上の画像をクリックしてズームしてください。

詳細については:

28
Govaadiyo

このドキュメントでわかるように、2つの違いは次のとおりです。

  • NSPhotoLibraryAddUsageDescription:書き込みのみの権限があり、読み取りはできません。

  • NSPhotoLibraryUsageDescription:Photosの読み取りと書き込みの両方が可能です。

From Apple NSPhotoLibraryUsageDescriptionのドキュメント:

「このキーは、ユーザーの写真ライブラリへの読み取りおよび書き込みアクセスを管理しますが、アプリがライブラリにアセットを追加するだけで、アセットを読み取る必要がない場合は、NSPhotoLibraryAddUsageDescriptionを使用するのが最善です。 "

9
Tien

両方が必要です。
一度UIActivityViewControllerを使用してライブラリに画像を保存しようとしたため、私のiPhoneバージョンは11.3なので、NSPhotoLibraryUsageDescriptionのみを使用し、NSPhotoLibraryAddUsageDescriptionが必要なためクラッシュします。
ただし、iOS 9.3はクラッシュしません。

2
Linh Quang Pham

許可を求めるAPIとiOSバージョンに基づいた書き込みアクセスには違いがあるため、両方が必要です。

PHPhotoLibraryを使用して画像を保存するために、私のアプリには既にNSPhotoLibraryUsageDescriptionがありました。

IOS 11ではそれでも動作しますが、アプリがまだ許可を得ていない場合、UIDocumentInteractionControllerの「画像の保存」を介して画像を共有すると、NSPhotoLibraryAddUsageDescriptionに関する警告が表示されてクラッシュします。 PHPhotoLibraryを介して許可が既に付与されている場合、「画像の保存」にNSPhotoLibraryAddUsageDescriptionは必要ないようです。

1
a4o