【问题标题】:How do I access iCloud Container data from an app with a different Bundle Identifier?如何从具有不同捆绑标识符的应用程序访问 iCloud 容器数据?
【发布时间】:2019-10-18 15:04:04
【问题描述】:

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

iCloud.com.myDomain.My-App

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

当我尝试运行 My App Feedback 来阅读反馈时,Xcode 会报错:

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

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

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

【问题讨论】:

    标签: xcode icloud cloudkit entitlements


    【解决方案1】:

    如果您在权利中选择了正确的容器,则只需确保在 我的应用反馈 中的代码中设置 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
    

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

    【讨论】:

    • 完美运行。有趣的是,当您在我当地的 Slack 小组时,我不得不一直使用 StackOverflow!
    【解决方案2】:

    尝试使用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")。工作得很好。

    【讨论】:

      猜你喜欢
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多