无法通过应用扩展访问我的“CKContainer”中的任何数据 - CloudKit、Swift

Can't access any data from my `CKContainer` from a app extension - CloudKit, Swift

我想通过应用扩展(更具体地说是手表应用)从 CloudKit 访问一些数据。

在我的主应用程序中,我只是像这样创建我的容器:CKContainer(identifier: "myContainerID") 然后调用私有数据库上的任何方法

在我的应用程序扩展中,我使用完全相同的代码创建了一个容器,但是当我尝试调用私有数据库上的方法时,出现了这个错误:

<CKError 0x600003953c90: "Permission Failure" (10/2007); server message = "Invalid bundle ID for container"; uuid = 76F8A8B0-0B53-4D23-A7EB-D9982C7CE0BB; container ID = "myContainerID">

我还仔细检查了我是否拥有所有正确的 iCloud 权利。

我也看到了这个问题,但我已经在使用解决方案:how to make watchkit extension app and my iphone app share the same icloud databases

感谢您的帮助!

我今天花了一整天的时间试图修复,终于成功了。这是我发现的:云容器 ID 中的姓必须匹配产品目标 ID 和应用程序名称(plist 文件中 CFBundleName 的值)。这是 info.plist 默认情况下的设置方式:

<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string> 

其中 $(PRODUCT_NAME) 是我上面提到的目标。请参阅底部的图片。同样重要的是要注意,通过更改现有目标来修复不匹配是行不通的。您需要做的是创建一个新容器,其 ID 的姓氏与您的产品名称相匹配,例如如果您的产品名称是 abc,则新容器 ID 应如下所示:

iCloud.com.company.abc

更改完成后,您需要将新容器添加到您的 APP ID 和 re-create 配置文件中,因为它们将失效。创建新配置文件后,只需下载并导入 Xcode/Signing 和 Capabilities.

请注意,Apple 官方文档确实表示建议使用应用程序名称,但他们从未说过这是强制性的,也是使其正常工作的唯一方法。

Apple 似乎已经解决了这个问题!

感谢您的帮助:)