美文网首页
iOS 11权限更新

iOS 11权限更新

作者: TomatosX | 来源:发表于2018-03-23 12:31 被阅读55次

最近项目中遇到了一个崩溃,当点击图片选择保存的时候,并没有出现请求相册权限的对话框,而是直接就崩溃,并且没有任何错误信息。开始以为是权限没有添加,但是 NSPhotoLibraryUsageDescription 是添加了的,搞不懂了。去翻了翻官方的文档,果然找到了解决方式。

从 iOS 11 开始,相册的权限参数发生了变化,适配 iOS 11 还需要添加一个 NSPhotoLibraryAddUsageDescription 的参数。官方的描述如下:

NSPhotoLibraryAddUsageDescription

NSPhotoLibraryAddUsageDescription ( String - iOS) This key lets you describe the reason your app seeks write-only access to the user’s photo library. When the system prompts the user to allow access, this string is displayed as part of the alert.

Important: To protect user privacy, an iOS app linked on or after iOS 10.0, and that accesses the user’s photo library, must statically declare the intent to do so. Include the NSPhotoLibraryAddUsageDescription key (in apps that link on or after iOS 11) or NSPhotoLibraryUsageDescription key in your app’s Info.plist file and provide a purpose string for the key. If your app attempts to access the user’s photo library without a corresponding purpose string, your app exits.

This key is supported in iOS 11.0 and later.

从 important 的最后一句话可以看出,当应用试图访问用户相册但是 Info.plist 中并没有对应权限的参数的话,应用就会退出。

原因找到,添加上新的参数。搞定!!!

关于 Info.plist 中的 key ,可以参考官方的文档:Cocoa Keys

相关权限申请:

struct PermissionsManager {
    
    /// 相册权限
    ///
    /// - Parameters:
    ///   - authorizedClosure: 已授权回调
    ///   - deniedClosure: 未授权回调
    static func albumPermissions(authorizedClosure: (() -> ())? = nil, deniedClosure: (() -> ())? = nil) {
        
        let status = PHPhotoLibrary.authorizationStatus()
        
        switch status {
        case .notDetermined:
            PHPhotoLibrary.requestAuthorization { _ in
                self.albumPermissions(authorizedClosure: authorizedClosure, deniedClosure: deniedClosure)
            }
        case .authorized:
            if let authorized = authorizedClosure {
                authorized()
            }
        default:
            if let denied = deniedClosure {
                denied()
            }
        }
    }
    
    
    /// 相机权限
    ///
    /// - Parameters:
    ///   - authorizedClosure: 已授权回调
    ///   - deniedClosure: 未授权回调
    static func cameraPermissions(authorizedClosure: (() -> ())? = nil, deniedClosure: (() -> ())? = nil) {
        
        let status = AVCaptureDevice.authorizationStatus(for: .video)
        
        switch status {
        case .notDetermined:
            AVCaptureDevice.requestAccess(for: .video) { _ in
                self.cameraPermissions(authorizedClosure: authorizedClosure, deniedClosure: deniedClosure)
            }
        case .authorized:
            if let authorized = authorizedClosure {
                authorized()
            }
        default:
            if let denied = deniedClosure {
                denied()
            }
        }
    }
}

相关文章

  • iOS 11权限更新

    最近项目中遇到了一个崩溃,当点击图片选择保存的时候,并没有出现请求相册权限的对话框,而是直接就崩溃,并且没有任何错...

  • iOS相册权限的变化

    相册权限 iOS11以前 iOS11以后

  • iOS11访问相册权限变更问题

    在更新iOS11之后,访问相册出现crash现象,大家都知道访问相册需要申请用户权限。 相册权限需要在info.p...

  • iOS11访问相册权限变更问题

    在更新iOS11之后,访问相册出现crash现象,大家都知道访问相册需要申请用户权限。 相册权限需要在info.p...

  • iOS11访问相册权限变更问题

    在更新iOS11之后,访问相册出现crash现象,大家都知道访问相册需要申请用户权限。 相册权限需要在info.p...

  • ITMS-90683:NSLocationAlwaysUsage

    由于苹果从iOS 11开始更新了定位权限设置,因此需要根据你适配的系统版本来配置info.plist文件 iOS ...

  • 20170313 iOS 权限相关 : 判断与 跳转 设置

    iOS 常见错误(持续更新) iOS权限获取 摄像头与麦克风 iOS各种权限判断(相机,相册,定位,录音) ios...

  • iOS11对相册的权限

    iOS11对相册的权限 iOS11对相册的权限key做了调整,将原来的NSPhotoLibraryUsageDes...

  • iOS11最新隐私信息访问列表

    在iOS11中,隐私权限配置又发生了改变,将原来的相册访问权限分开了,现在有读写两种权限。 iOS11访问权限列表...

  • iOS11,保存图片权限设置

    前段时间更新iOS11之后,相册部分,访问相册默认是放开权限的,但是在保存相册的时候,判断权限不再能够满足项目需求...

网友评论

      本文标题:iOS 11权限更新

      本文链接:https://www.haomeiwen.com/subject/yhztcftx.html