We have an existing iOS app (developed for a client) that uses Core Location to report location updates to their servers (so they can keep track of their executives). When location updates indicate that the phone has remained in the same location for several minutes, we stop the location updates to conserve battery life and then use region monitoring to detect when the phone has left that location (at which point, location updates are started again).
This client recently started issuing Apple Watches (with cellular data) to their executives and they’ve asked if we could implement similar functionality as an independent watchOS app. Based on my initial research into watchOS, it seems that a lot of the mechanisms available in iOS that would allow us to do this are not supported in watchOS. Region monitoring isn't. Neither are significant-change location updates or visit monitoring. The location manager instance property pausesLocationUpdatesAutomatically
doesn’t exist on watchOS, either. I thought we might be able to use the Core Motion activity manager to detect when the device is no longer stationary but it looks like updates from Core Motion aren’t delivered to the app while its suspended.
The only other possibility that I can think of would be to use HealthKit to start a workout to track if the user is moving. But I’m not sure that would really be useful either if, for example, the user gets into a vehicle. We'd really like to avoid having to have location updates turned on all the time because of the impact on battery life. Is there another mechanism in watchOS that could be leveraged to detect when the watch has transitioned from being stationary to moving again that would work while 1) the app is suspended and 2) doesn’t rely on having location updates turned on all the time?
I crossposted this question on the Apple developer forums and after two weeks with no responses there, I opened a technical support incident with Apple to pose this question directly to them. Developer technical support has now confirmed that there's no way currently to achieve this as of watchOS 9.x. I've submitted feedback to the watchOS team requesting that they consider this use case for possible future implementation.