崩溃请求授权iOS 10中的照片库

时间:2016-07-28 17:35:58

标签: ios swift3 ios10

我有一个示例iOS 10应用程序请求授权照片库并在真实设备上崩溃并出现以下崩溃错误:

PhotosAuthorizationCrashTest[2014:42551] [access] <private>

可以找到回购here

这是请求授权的代码(Swift 3.0):

private func requestAuthorizationIfNeeded() {
    DispatchQueue.main.async {
        let status = PHPhotoLibrary.authorizationStatus()
        if status == .authorized {
            return
        }

        PHPhotoLibrary.requestAuthorization({ (status) in
            if status == .authorized {
                return
            }

            NSLog("Could not get authorization to access photos")
        })
    }
}

1 个答案:

答案 0 :(得分:8)

我发现该问题与iOS 10中的某些使用说明密钥已成为强制性事实有关。

尽管自iOS 6以来NSPhotoLibraryUsageDescription已经存在,但它只是iOS 10中的一项要求,而且崩溃消息并不是非常有用。

在最新的Xcode(Xcode 8 beta 3)的模拟器中,崩溃消息更加详细一些(即使在设备上它仍然是相同的):

  

[access]此应用已崩溃,因为它试图在没有使用说明的情况下访问隐私敏感数据。该应用程序的Info.plist必须包含一个NSPhotoLibraryUsageDescription键,其中包含一个字符串值,向用户解释应用程序如何使用此数据。

因此,将NSPhotoLibraryUsageDescription添加到我的Info.plist文件已修复此问题。

有关更多文档,请参阅Cocoa Keys

更具体地说,名为NSPhotoLibraryUsageDescription的部分:

  

重要提示:为了保护用户隐私,iOS 10.0上或之后链接的iOS应用程序必须静态声明这样做的意图才能访问用户的照片库。在应用的Info.plist文件中包含NSPhotoLibraryUsageDescription键,并为此密钥提供目的字符串。如果您的应用尝试访问用户的照片库而没有相应的用途字符串,则您的应用会退出。