我有动态的'我需要在应用运行时创建的订阅,这些订阅无法预先确定,因为它们基于我为每个设备连接暂时生成的某个唯一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。
答案 0 :(得分:4)
您绝对可以在CloudKit容器的生产环境中动态创建订阅。如果您正在使用特定记录类型的查询订阅,则需要确保生产中存在记录类型(换句话说,您已将模式迁移到生产中)。
请记住,生产环境也用于beta测试。
答案 1 :(得分:0)
解决方案原来是另一回事。我以前使用私有数据库的saveSubscription
方法。这显然一直给我上面提到的错误。我最终使用了CKFetchSubscriptionsOperation
和CKModifySubscriptionsOperation
,现在效果非常好。
在我的情况下,我确实在Production中设置了订阅类型,并且还正确设置了其他所有内容。这只是使用上述操作的问题,而这似乎已经成功了。
答案 2 :(得分:0)
在生产容器中看起来无法使用TRUEPREDICATE进行订阅,对于这两种方法(saveSubscription和CKModifySubscriptionsOperation)都是如此。 只需更改谓词即可获得成功订阅。
答案 3 :(得分:0)
Apple关于此的文档令人困惑,但是每个CKQuerySubscription
与Record Type
和其他未记录的元素(如NSPredicate
的唯一组合)都会产生一个新的 订阅类型 ,该类型必须首先存在于开发环境中,然后从那里部署在生产环境中,然后才能为用户使用相同的元素组合。