CloudKit 错误 "Bad Container" (5/1014); "Couldn't get container configuration from the server for container "iCloud.com.abc.def"">

CloudKit errors "Bad Container" (5/1014); "Couldn't get container configuration from the server for container "iCloud.com.abc.def"">

我是 cloud Kit 的新手,有人可以帮助我解决错误吗,因为我正在尝试在我的 Public 数据库中添加一条记录并出现此错误。

"Bad Container" (5/1014); "Couldn't get container configuration from the server for container "iCloud.com.abc.def""

谢谢。

这是您应用程序的包 ID 吗? Xcode 使用当前应用程序的包 ID 在服务器上创建一个容器。仔细检查您的应用程序的包 ID,然后按照 CloudKit Quick Start 中的说明设置该容器。

请确保您已正确初始化容器。如果您的容器在容器列表中,您可以 double-check 和 iCloud Dashboard

容器使用 CKContainer.defaultContainer() 调用或更具体的 CKContainer(identifier: String) 初始化程序进行初始化。请记住,CloudKit 容器 ID 通常采用 iCloud.<bundleID> 的形式,其中 <bundleID> 是您应用的捆绑包 ID。所以问题的根源可能是你试图在不同的应用程序之间共享一个容器但是忘记添加 iCloud. 前缀。

我解决了将我的新应用程序包重命名为与 CloudKit 中容器名称相同的名称的问题。

它不应该那样工作,因为根据设计,许多应用程序可以访问同一个容器,但显然在 CloudKit 仪表板或开发者帐户中无法访问 "add new bundle ID to container"。

当您将 CKOperation 添加到自定义 OperationQueue 而未定义操作的 database 属性 时,也会发生此错误。

尝试通过在使用数据库操作之一(例如:catch、fetch)时捕获错误来调试此问题。

示例:

let publicDatabase = CKContainer.default().publicCloudDatabase
                    publicDatabase.save(record) { (rec, err) in
                       
                        if let error = err {
                            
                            print("Error while saving record: \(error)")
                            
                        }

或者改用调试器。

Apple CloudKit 容器的标识符和 CKContainer.default() 容器标识符之间可能不匹配。您可以通过选择容器标识符来更正此问题

let myPublicDatabase = CKContainer.init(identifier: "iCloud.com.abc.def").publicCloudDatabase