【问题标题】:Can't access any data from my `CKContainer` from a app extension - CloudKit, Swift无法从应用程序扩展访问我的“CKContainer”中的任何数据 - CloudKit,Swift
【发布时间】:2020-11-01 08:27:42
【问题描述】:

我想通过应用扩展(更具体地说是手表应用)从 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

感谢您的帮助!

【问题讨论】:

    标签: swift icloud cloudkit ios-app-extension bundle-identifier


    【解决方案1】:

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

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

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

    iCloud.com.company.abc
    

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

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

    【讨论】:

    • 谢谢,这样的事情似乎仍然是必要的。看来,如果您添加一个与应用程序包标识符具有相同 id 的 CloudKit 容器,那么 Xcode 会为您设置好东西(包括启用的 iCloud 容器)。其他地方的各种信息表明您应该能够手动执行此操作,但这对我不起作用。
    【解决方案2】:

    Apple 似乎已经将其解决了!

    谢谢你的帮助:)

    【讨论】:

      猜你喜欢
      • 2022-08-23
      • 2017-04-26
      • 1970-01-01
      • 2017-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-10
      相关资源
      最近更新 更多