我用Cloudkit订阅了一个应用程序。(见此代码)。我测试了开发人员模式,并且运行良好。我发布我的应用程序,但这不起作用:(我得到以下错误消息(Cloudkit仪表板日志)错误):BAD_REQUEST操作:订阅修改数据库:私有区域:_zoneWide
let predicate = NSPredicate(value: true)
let subscription = CKQuerySubscription(recordType: "recordDT",
predicate: predicate,
subscriptionID: subscriptionID,
options: [.firesOnRecordCreation, .firesOnRecordDeletion, .firesOnRecordUpdate])
let notification = CKNotificationInfo()
notification.alertBody = "change cloudkit"
notification.shouldSendContentAvailable = true
subscription.notificationInfo = notification
publicDB.save(subscription) { result, error in
if let error = error {
print(error.localizedDescription)
}
}我找到了这个日志:

有什么问题吗?
发布于 2018-10-01 17:51:30
我找到了错误的根本原因:)
我看到了icloudkit仪表板网页“订阅类型是在应用程序创建查询订阅时自动创建的。”这可以很好地处理开发人员页面,但不适用于生产页面:(
必须在创建订阅后使用"deploy“函数。
发布于 2019-05-02 14:16:12
我也有过类似的问题。在开发上工作得很好,但在生产上却失败了。原因是我的生产数据库没有使用对dev数据库进行的模式更改进行更新。CloudKit自动更改开发人员数据库的架构,但您必须将这些更改推入生产中。(这是设计上的一个很好的设计选择。)因此,如果仍然存在问题,请转到CloudKit仪表板,将您的更改从数据库的开发人员版本发布到生产中。
发布于 2018-09-28 00:18:04
您能展示如何定义publicDB和subscriptionID的代码吗?
您可以尝试使用CKModifySubscriptionsOperation而不是save来保存订阅,看看它是否有区别。
let operation = CKModifySubscriptionsOperation(subscriptionsToSave: [subscription], subscriptionIDsToDelete: nil)
operation.modifySubscriptionsCompletionBlock = { saved, deleted, error in
if let error = error{
print(error)
}else{
print("Subscriptions saved: \(saved)\nSubscriptions deleted: \(deleted)")
}
}
publicDB.add(operation)https://stackoverflow.com/questions/52542730
复制相似问题