我制作了一个带有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)
}
}
可能是什么问题?
答案 0 :(得分:1)
我找到了错误的根本原因:)
我在icloudkit仪表板网页上看到了此页面,“当您的应用创建查询订阅时,订阅类型会自动创建。” 这项工作可以很好地解决开发人员页面,但不能满足生产页面:(
创建下标后,必须使用“部署到生产”功能
答案 1 :(得分:0)
您可以显示有关如何定义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)
答案 2 :(得分:0)
我有一个类似的问题。开发人员工作正常,但生产失败。原因是我的生产数据库尚未使用对dev数据库进行的架构更改进行更新。 CloudKit会自动更改开发人员数据库的架构,但是您必须将这些更改推送到生产环境中。 (这是设计使然,这是一个很好的设计选择。)因此,如果仍然遇到问题,请转到CloudKit仪表板,并将更改从数据库的开发人员版本发布到生产中。