Cloudkit subscription error: BAD_REQUEST (just production mode)

Cloudkit subscription error: BAD_REQUEST (just production mode)

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

我找到了这个日志:

可能是什么问题?

你能展示一下你如何定义 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)

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

我看到了这个 icloudkit 仪表板网页 "Subscription types are automatically created when your app creates a Query Subscription." 这在开发者页面上工作得很好,但在生产页面上却不是这样:(

必须使用"deploy to production"函数,创建订阅后

我遇到了类似的问题。在开发上工作正常但在生产上失败。原因是我的生产数据库没有使用对开发数据库所做的架构更改进行更新。 CloudKit 会自动更改开发人员数据库的架构,但您必须将这些更改推送到生产环境中。 (这是设计使然,而且是一个非常好的设计选择。)因此,如果您仍然遇到问题,请转到 CloudKit 仪表板并将您的更改从开发人员版本的数据库发布到生产环境中。