I have a time tracking app that has sync between devices. I am using background push notifications and PKPushRegistry to react to updates from other devices - to perform a sync with the server from the watch app and afterwards to reload the complications.
My question is: after I move to using WidgetKit for my complications, can I still reload my complications from the background, within the pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith:..) method? Or is it subject to strict limits for updating from the background such as on iOS?
If the above is not possible, what is the recommended way of keeping WidgetKit-based complications on the user's watch face up to date? Considering that I also need to do a sync with the server from the watch app before it has the latest data to be able to display the correct state of the complication.
I would suggest that you look at registering for APNS pushes directly from your widget extension. This will behave as if your app had called reloadTimelines(). The API for this is described here: https://developer.apple.com/documentation/WidgetKit/Updating-widgets-with-widgetkit-push-notifications
after I move to using WidgetKit for my complications, can I still reload my complications from the background
Yes this can be done. Updates will be subject to the same budgetary conditions as pushes registered directly by the extension. However, relying on pushes to the app alone may be problematic if the user never launches the app so it can get a push token
A combination approach could work best here if you want both your complication and your app to be able to update from pushes.
If you're concerned about sending two pushes for every update, your server could use the widget push token, and then if it receives an app push token for the same device, just choose to use the app one instead