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
相关产品推荐
相关产品推荐

