如何从具有不同捆绑包标识符的应用访问 iCloud 容器数据?

How do I access iCloud Container data from an app with a different Bundle Identifier?

我正在完成一个允许用户向 iCloud 容器提交反馈的应用程序。为了简化检索反馈的过程并保护隐私,我创建了另一个应用程序来阅读这些提交的内容。此应用程序将是私有的,不会上传到 App Store。这要求两个应用程序都能够访问同一个 iCloud 容器。因此,这两个应用程序的 iCloud 容器标识符设置为相同值的权利:

iCloud.com.myDomain.My-App

为清楚起见,我将第一个应用称为 我的应用,将第二个应用称为 我的应用反馈

当我尝试 运行 我的应用反馈来阅读反馈时,Xcode 给出了一个错误:

无法从服务器获取容器配置"iCloud.com.myDomain.My-App-Feedback"

似乎即使我已将两个应用程序的应用程序权利 iCloud 容器标识符设置为 我的应用程序,Xcode 仍在使用应用程序包标识符。

有没有办法覆盖该行为,以便两个应用程序都可以访问 iCloud 数据?

如果您在权利中选择了正确的容器,那么只需确保在 我的应用反馈 中的代码中设置 CloudKit 容器时,您是指定正确的:

let container = CKContainer(identifier: "iCloud.com.myDomain.My-App")

并且不是其中之一:

let container = CKContainer(identifier: "iCloud.com.myDomain.My-App-Feedback")
let container = CKContainer.default() //This should work, but might be using the wrong one

您可以通过在实例化时将其打印到控制台来确认正在选择哪个容器。希望对您有所帮助。

尝试使用 CKContainer(identifier: "iCloud.name_of_your_container") 而不是 CKContainer.default()

我将我的 Cloudkit 容器命名为 testapp,我的应用程序的包 ID 是 com.my_team_name.testapp。当 运行 Cloudkit 查询时,我一直收到此错误:

Couldn't get container configuration from the server for container "iCloud.com.my_team_name.testapp"

查看 Cloudkit 仪表板后,我意识到我的容器名称实际上只是“testapp”。

将我的代码更改为 CKContainer(identifier: "iCloud.testapp")。工作得很好。