Search code examples
iosswiftcloudkit

CKQuerySubscription: Failing to Make Subscription


I have an iOS app that I'm working on with CloudKit. And I'm trying to make a subscription.

import CloudKit

class HomeViewController: UIViewController {
    override func viewDidLoad() {
        registerSubscription()
    }

    func registerSubscription() {
        let cloudContainer = CKContainer(identifier: "iCloud.com.xxx.XXXXX")
        let privateDB = cloudContainer.privateCloudDatabase
        let predicate = NSPredicate(format: "TRUEPREDICATE") // TRUEPREDICATE: all records of the specified type match the predicate
        let subscription = CKQuerySubscription(recordType: "PrivateRecords", predicate: predicate, options: .firesOnRecordCreation)
        privateDB.save(subscription, completionHandler: ({returnRecord, error in
            if let err = error {
                print("Subscription has failed: \(err.localizedDescription)")
            } else {
                print("Subscription set up successfully")
                print("Subscription ID: \(subscription.subscriptionID)")
            }
        }))
    }
}

And it will consistently go to the error. The error says the following.

Subscription with a nil notificationInfo: CKQuerySubscription: 0x7fd7bfca7ec0; ; Query Subscription: recordType=PrivateRecords, predicate=TRUEPREDICATE, subscriptionOptions=1, subscriptionID=728863F8-3852-4A12-B5C6-F65EC945207A, zoneID=(null)

I can delete the subscription based on the subscription ID. But it'll give me a different ID every time I run this app. I have actually done the same thing with a macOS application. And it has a subscription. Additionally, I deleted a subscription type about a week ago to see what happens. I don't really know what the subscription ID is for.

So what am I doing wrong in making a subscription? Thanks.

enter image description here


Solution

  • CKQuerySubscription extends CKSubscription. One of the properties you need to set before saving the subscription is notificationInfo. The message is pointing out that this property is nil and should be set to something useful.