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

Edg*_*gar 4 ios swift3 ios10

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

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

回购可以在这里找到

这是请求授权的代码(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")
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

Edg*_*gar 8

我发现这个问题与一些使用说明密钥在iOS 10中已成为强制性的事实有关.

尽管NSPhotoLibraryUsageDescription自iOS 6以来一直存在,但它只是iOS 10中的一项要求,而且崩溃消息并不是很有帮助.

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

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

所以添加NSPhotoLibraryUsageDescription到我的Info.plist文件已修复该问题.

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

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

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