In CloudKit a notification based on a subscription is not sent to the one iPhone that posted the change in CloudKit that generates the notification. Therefore it will not be passed from that iPhone to the Apple Watch. If you use any other iPhone to cause the subscription to trigger a notification then it will be sent to that iPhone and passed to the Apple Watch.
I am also trying to get Cloudkit notifications to work, but so far I am not receiving any notifications at all on the watch.
Regarding PBK's reply: In watchOS 6, the Apple Watch is supposed to be a separate independent notification target. In the WWDC presentation they actually explicitly talked about how the Apple Watch will (/should) be notified for a Cloudkit change pushed from the iPhone to the cloud.
But unfortunately it does not seem to work as described for me.
I am using a CKRecordZoneSubscription.
I have some problem and not find solution how to resolve it.
Try to use many different ways. Make separate zone for Watch and Phone, make separate subscription, nothing help. Watch get notification ONLY if Phone is locked.
There is a known bug preventing an independent watch app from receiving CloudKit notifications, which should have been fixed on the latest watchOS beta. May you have a try and post the result?
In case you need to support current and/or earlier versions of watchOS, I received the following workaround through a TSI (tech support incident):
To make CloudKit subscriptions / notifications work on your standalone WatchKit app, the app ID of your WatchKit app target has to be associated with the iCloud container ID. The current Xcode, however, doesn’t allow adding CloudKit capability to a WatchKit app target, and so you don’t have any way to make the association with Xcode.
To work around this issue, you need to make the association manually, and the following steps should help you get to the point.
1. Log in to the developer portal with your developer account and navigate to the App ID list page:
Certificates, Identifiers & Profiles > Identifiers > App ID <developer.apple.com/account/resources/identifiers/list>
2. Tap the app ID of your WatchKit app to navigate to the “Edit your App ID Configuration” page.
The app ID should be something like <your_prefix>.watchkitapp. If you don’t see it, assuming you are using “Automatically manage signing”, which is highly recommended, follow these steps to let Xcode create it:
a. Open your project with Xcode and pick your WatchKit app target.
b. Tap Signing & Capabilities > + Capability and add App Group for the target.
c. Uncheck the “Automatically manage signing” box, then check it back. This forces Xcode to synchronize with the portal.
d. Refresh the App ID list page on the portal to find the app ID.
Note that adding the App Group capability is to let Xcode create the app ID for you; you can remove the capability after seeing the app ID on the portal.
Since you are with Xcode for now, please take this chance to make sure your WatchKit extension has the following capabilities:
a. iCloud > CloudKit, with the right iCloud container picked.
b. Push notifications. Xcode added this for you after you had added CloudKit capability.
c. Background Modes > Remote notification, if you want to support silent notifications.
3. On the “Edit your App ID Configuration” page, check the iCloud box, then click the “Configure” button to show the “iCloud Container Assignment” page, and check the iCloud container you would use on your app, then save the changes.
4. On your testing devices, log out your iCloud account, and then log back in. This is very important because it forces watchOS to re-register the device for remote notification; without this step, watchOS may wrongly use a cached device token, which doesn’t reflect your manual association done above.
You can do this with the following steps:
a. Logging out iCloud on your paired iPhone.
b. Make sure you see no iCloud account shown on your iPhone’s Watch app > General > App ID, and the Settings app on your watch.
c. Log in to iCloud on your paired phone again; make sure the Watch app on your iPhone and Settings app on your watch showing the right status.
d. Restart your iPhone and watch.
5. Test CloudKit subscriptions / notifications with your app.
a. On your Mac, go to “~/Library/MobileDevice/Provisioning Profiles” and remove all the profiles, which forces Xcode to download new ones from the portal.
b. Remember to allow remote notification for your app. You can see that “Allow Notifications” is checked at iPhone Watch app > Notifications > Your app.
c. Make sure WKExtensionDelegate’s didRegisterForRemoteNotifications(withDeviceToken:) is called with a device token every time your app is launched – If you don’t see the method being called, trying restarting Xcode and run again. I did see this method is not called sometimes, in which cases notifications won’t work.
Thanks for sharing this solution! Ran into same problem, these instructions worked for me. Didn't have to log out of iCloud account though
This worked. Thanks a lot.