CloudKit 订阅不能在代码中创建吗?

Posted

技术标签:

【中文标题】CloudKit 订阅不能在代码中创建吗?【英文标题】:Can CloudKit subscriptions not be created in code? 【发布时间】:2015-07-26 01:15:29 【问题描述】:

我需要在应用运行时创建“动态”订阅,这些订阅无法预先确定,因为它们是基于我为每个连接的设备临时生成的一些唯一 ID。在开发模式下运行时,CloudKit 可以完美运行,但在分发模式下我不断收到此错误:

<CKError 0x1358436e0: "Invalid Arguments" (12/2006); server message = "attempting to create a subscription in a production container"; uuid = 41F4CA23-9849-40B1-8DB5-0030BBD91251; container ID = "iCloud.com.company.CloudKit">

有没有办法动态创建订阅?我认为只需要使用仪表板创建 RecordTypes。

【问题讨论】:

【参考方案1】:

您绝对可以在 CloudKit 容器的生产环境中动态创建订阅。如果您对特定记录类型使用查询订阅,则需要确保该记录类型存在于生产环境中(换句话说,您已将架构迁移到生产环境)。

请记住,生产环境也用于 Beta 测试。

【讨论】:

那么苹果在这个页面上说Subscriptions must be created in the Development environment first and then promoted to Production. Attempting to create a subscription directly in the Production environment will result in an error.是什么意思:developer.apple.com/documentation/cloudkit/cksubscription?我希望我仍然可以在生产环境中使用CKModifySubscriptionsOperation,因为用户可以更改我的订阅。 有订阅和“订阅类型”。苹果在developer.apple.com/documentation/cloudkit/…​中的意思是:“订阅类型必须先在开发环境中创建,然后再升级到生产环境。尝试直接在生产环境中创建订阅类型会导致错误。”【参考方案2】:

解决方案原来是别的东西。我之前使用的是私有数据库的saveSubscription 方法。这显然一直给我上面提到的错误。我最终使用了CKFetchSubscriptionsOperationCKModifySubscriptionsOperation,现在可以完美运行了。

在我的情况下,我确实在生产中设置了订阅类型,并且其他所有设置都正确。这只是使用上述操作的问题,这似乎已经成功了。

【讨论】:

【参考方案3】:

看起来不可能在生产容器中使用 TRUEPREDICATE 进行订阅,这两种方法(saveSubscription 和 CKModifySubscriptionsOperation)都是如此。 只需更改谓词即可成功订阅。

【讨论】:

【参考方案4】:

Apple 在这方面的文档令人困惑,但每个 CKQuerySubscriptionRecord Type 和其他未记录元素(如 NSPredicate)的唯一组合都会产生新的订阅类型 必须首先存在于 Development 环境中,然后再部署在 Production 环境中,然后才能使用相同的组合为用户进行新订阅元素。

【讨论】:

以上是关于CloudKit 订阅不能在代码中创建吗?的主要内容,如果未能解决你的问题,请参考以下文章

CloudKit 订阅未在 iOS10 上保存

CloudKit 订阅不起作用

当用户未登录 iCloud 时,我可以使用 CloudKit 在我的应用程序中使用订阅吗?

如何更新 CloudKit 订阅

CloudKit 推送通知订阅不起作用

如何在 CloudKit 中创建用户? [关闭]