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.