You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 17中如何请求CloudKit容器权限(旧API已弃用)

CloudKit 弃用API替代实现方案

针对你提供的获取用户可发现性权限的函数,iOS更新后CKContainer.requestApplicationPermission()和CKContainer.ApplicationPermissionStatus已被弃用,替代方案如下:

替代函数实现

func getPermission() async throws -> CKDiscoverabilityPermissionStatus {
    let status = try await CKContainer.default().requestDiscoverabilityPermission()
    
    switch status {
    case .granted:
        return .granted
    case .denied:
        throw CKError(.permissionFailure)
    case .notDetermined:
        // 初始状态,用户未选择权限,可根据业务需求调整返回值或引导授权
        return .denied
    @unknown default:
        fatalError("未知权限状态错误")
    }
}

关键变化说明

  • 弃用的requestApplicationPermission([.userDiscoverability])替换为**requestDiscoverabilityPermission()**:这是专门针对用户可发现性权限的异步请求方法,无需传入权限数组,语义更明确。
  • 弃用的CKContainer.ApplicationPermissionStatus替换为**CKDiscoverabilityPermissionStatus**:新枚举精准对应可发现性权限状态,包含.granted(已授权)、.denied(已拒绝)、.notDetermined(未决定,即原.initialState)三种明确状态,@unknown default用于兼容未来可能新增的状态。
  • 错误处理优化:原.couldNotComplete对应的内部错误,现在会通过try await直接抛出CKError,无需手动捕获该分支。

额外实用方法

如果只需检查当前权限状态而非发起授权请求,可使用以下方法:

func checkCurrentPermission() async throws -> CKDiscoverabilityPermissionStatus {
    return try await CKContainer.default().discoverabilityPermissionStatus()
}

内容的提问来源于stack exchange,提问作者Daniel Ishida

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 14:02:39