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

Xcode13/iOS15下CloudKit公共数据库报Custom zones are not allowed in public DB错误

问题原因

这是iOS 15/Xcode 13版本中CoreData与CloudKit集成的默认行为变更导致的问题,不属于操作错误或者配置错误。
iOS 14版本中,CoreData的CloudKit镜像代理针对公共数据库会默认使用CloudKit公共库的默认zone(_defaultZone),而iOS 15开始,镜像代理默认会尝试创建CoreData专属的自定义zone用于数据同步,但CloudKit公共数据库不允许创建自定义zone,因此在应用重启、镜像代理重新初始化时会抛出Custom zones are not allowed in public DB错误。

解决方案

按照如下步骤调整配置即可修复:

  1. 修改持久化存储配置
    在你现有设置databaseScope = .public的代码后,追加配置明确指定使用公共数据库的默认zone,禁止创建自定义zone:
// 你已有的配置
guard let description = container.persistentStoreDescriptions.first else
{
    fatalError("Something bad happened")
}
description.cloudKitContainerOptions?.databaseScope = .public

// 新增配置开始
// 指定使用CloudKit公共库的默认zone
description.cloudKitContainerOptions?.zoneID = CKRecordZone.default().zoneID
// 开启持久化历史跟踪和远程变更通知(公共库同步必填)
description.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
description.setOption(true as NSNumber, forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey)
// 新增配置结束
  1. 清理残留的错误状态
    卸载测试设备上的现有应用,清空Xcode的DerivedData缓存,避免本地残留之前的自定义zone创建请求影响同步。
  2. 验证同步效果
    重新运行应用添加测试数据,确认CloudKit Dashboard公共数据库的_defaultZone下可以看到新增的记录,重启应用后新增数据也能正常同步无报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:09:04