Cloudkit订阅错误:BAD_REQUEST(仅生产模式)

时间:2018-09-27 18:02:49

标签: xcode icloud cloudkit

我制作了一个带有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)
        } 
    }

我找到了此日志: enter image description here

可能是什么问题?

3 个答案:

答案 0 :(得分:1)

我找到了错误的根本原因:)

我在icloudkit仪表板网页上看到了此页面,“当您的应用创建查询订阅时,订阅类型会自动创建。” 这项工作可以很好地解决开发人员页面,但不能满足生产页面:(

创建下标后,必须使用“部署到生产”功能

答案 1 :(得分:0)

您可以显示有关如何定义publicDBsubscriptionID的代码吗?

您可以尝试使用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仪表板,并将更改从数据库的开发人员版本发布到生产中。