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

Can CloudKit subscriptions not be created in code?

我有 'dynamic' 需要在应用程序运行时创建的订阅,这些不能预先确定,因为它们基于我为每个连接的每个设备临时生成的一些唯一 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。

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

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

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

就我而言,我确实在生产环境中设置了订阅类型,并且还正确设置了其他所有内容。这只是使用上述操作的问题,而且似乎已经成功了。

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

Apple 关于此的文档令人困惑,但每个 CKQuerySubscriptionRecord Type 和其他未记录元素(如 NSPredicate)的独特组合都会产生新的 [=16] =]订阅类型 必须首先存在于开发环境中,然后从那里部署到生产 环境,然后才能使用相同的元素组合为用户创建新订阅。