CloudKit|CKContainer.default() 返回容器 ID 错误

了解 CKContainer.default() 返回的 CKContainer ID 不一致导致的问题。

CloudKit|CKContainer.default() 返回容器 ID 错误

调用 CloudKit 框架的 CKContainer 类中的方法时,遇到以下报错:

Couldn't get container configuration from the server for container "iCloud.xx.xx"

检查容器 ID

请检查 CloudKit 容器 ID 是否正确。

例如,Xcode 控制台中显示的容器 ID 为 iCloud.weisenjoytech.Filmo

在 Xcode 或者 Cloudkit Console(网页端)查询容器 ID :iCloud.weisenjoytech.filmo

大小写问题,导致了容器 ID 不一致。

为什么会导致容器 ID 不一致?

CKContainer.default() 不是通过动态查询来返回容器的实际名称,而是根据特定规则自动生成的。

CKContainer.default() 基于应用的 Bundle ID 自动生成容器标识符,规则是:"iCloud." + 应用Bundle ID

如果你的Bundle IDweisenjoytech.Filmo(注意大写F),那么自动生成的就是iCloud.weisenjoytech.Filmo

创建项目时,尽量首字母小写来避免这个问题。

解决方案|手动设置容器 identifier

不再使用 CKContainer.default() 来指定容器,而是通过 CKContainer(identifier: cloudKitContainerId) 手动指定容器 ID。

在 ViewModel 中,手动设置容器 ID,并通过该 ID 初始化容器:

在后续代码中,通过 cloudContainer.accountStatus() 这种方式调用接口,而不是 CKContainer.default().accountStatus()