“应用程序的Info.plist必须包含NSPhotoLibraryAddUsageDescription”的崩溃是什么意思?

40
我遇到了以下错误(iOS 11):
引用: “这个应用程序已经崩溃,因为它尝试访问私密数据而没有提供使用说明。此应用程序的 Info.plist 必须包含一个 NSPhotoLibraryAddUsageDescription 键和一个字符串值,向用户解释应用程序如何使用这些数据。”
请注意,尽管应用程序的 info.plist 包含 NSPhotoLibraryUsageDescription,但仍会崩溃,为什么?

如果你已经知道答案,为什么还要问问题呢? - Varun Naharia
@VarunNaharia因为我认为对于任何遇到这个崩溃的人都可能有用。https://meta.stackoverflow.com/questions/314165/how-to-ask-and-self-answer-a-correct-high-quality-qa-pair-without-attracting-d 这是合法的 :) - Ahmad F
那里已经有同样的问题,您可以在那里回答:https://stackoverflow.com/questions/46566972/request-nsphotolibraryaddusagedescription-permission https://dev59.com/eFYO5IYBdhLWcg3wHd9o - Varun Naharia
@VarunNaharia 如果我没记错的话,这些选项(如https://dev59.com/rFYO5IYBdhLWcg3wHd9o问题中提到的)目前不可用...或者至少我找不到它们 :) - Ahmad F
2个回答

90
请注意,尽管应用程序info.plist包含NSPhotoLibraryUsageDescription,但仍会崩溃,为什么?
我认为在比较NSPhotoLibraryUsageDescription和NSPhotoLibraryAddUsageDescription时存在误解,正如信息属性列表关键引用中所述:
NSPhotoLibraryUsageDescription:
该键允许您描述您的应用程序访问用户照片库的原因。当系统提示用户允许访问时,此字符串将作为警报的一部分显示。
它与允许应用程序能够访问(获取)设备照片库有关。
NSPhotoLibraryAddUsageDescription:
该键允许您描述您的应用程序寻求对用户照片库的仅写访问的原因。当系统提示用户允许访问时,此字符串将作为警报的一部分显示。
它与允许应用程序能够写入(添加)照片到设备照片库有关。


显然,要解决这个崩溃问题,您需要将NSPhotoLibraryAddUsageDescription添加到应用程序的plist文件中:
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Our application needs permission to write photos...</string>

作为属性列表视图:

enter image description here


6
苹果的NSPhotoLibraryUsageDescription文档明确说明它既可以用于读取也可以用于写入权限:“虽然此键控制用户照片库的读取和写入权限,但如果您的应用仅需要向库中添加资源而不需要读取任何资源,则最好使用NSPhotoLibraryAddUsageDescription。”我不知道这是文档中的错误还是苹果故意更改了NSPhotoLibraryUsageDescription的行为以仅限于只读。 - Cutterpillow
@Cutterpillow 我认为你的第二个假设是正确的。 - Ahmad F
如果您打开iOS设置并导航到您的应用程序,您将看到读取和写入NSPhotoLibraryUsageDescription。这就是为什么它看起来像一个错误。 - iWheelBuy
如果您想将照片添加到库中,您需要使用“隐私-照片库添加使用说明”键。我同时使用了该键和“隐私-照片库使用说明”键,一切正常运作。 - David Jarrin
嗨,几年过去了问题还是一样。我的问题是,我如何请求“NSPhotoLibraryAddUsageDescription”的权限?或者我只需要在我的plist文件中添加Key、String吗?@AhmadF - A. Amini
@A.Amini,你需要将它添加到plist文件中。 - Ahmad F

2
上面的答案中有一个错别字。正确的 plist 条目应该是如下所示:
<key>NSPhotoLibraryUsageDescription</key>
<string>$(PRODUCT_NAME) needs permission to access photos on your device</string>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接