Hi Developer555,
I have 2 watches, a personal one (Series 5) and a development one (Series 4).
On my wrist, the personal watch gets data approximately every 15 minutes. Sometimes it skips for an hour. When the watch is charging I get
no updates at all and my app is killed. Perhaps my app uses too much memory and that's why it's killed when the watch is charging? Not sure.
I can configure my app to download data for complication refresh every 30 minutes, 45 minutes, an hour or 2 hours.
It works well, provided that my app is suspended in the background. If the app is killed for whatever reason, even though WatchOS restarts my app and it schedules a refresh, I don't get URLSession download result until I make the app go into the foreground. Haven't gotten an answer as to whether that is intended functionality or if I need to do something.
I should point out that the amount of data I get is always less than 500 bytes.
On the development watch, I don't get the updates in as frequent a manner, but it may be because I use it only for development. I've started to wear it as well to see if that improves the refresh frequency.
So to summarize:
Check the size of the download data
Check whether your app is suspended in the background when a refresh is triggered
Watch out for any files which can only be written to if the watch is not locked. WatchOS schedules your task based on how much work it does and how often your app is used
If your app has more than one complication type I'd add it to as many watch faces as possible, to see if that helps you detect the issue.
Question for you, does it work fine on the simulator? I'd try that first with Xcode attached to your app. On the simulator when connected to Xcode, refreshes will be done in a very timely fashion and there's no budget to worry about.
All the best,