I'm developing a watchOS nap app that detects when the user falls asleep by monitoring heart rate changes.
== Technical Implementation ==
- HKWorkoutSession (.mindAndBody) for background execution
- HKAnchoredObjectQuery for real-time heart rate data
- CoreMotion for movement detection
== Battery Considerations ==
- Heart rate monitoring ONLY active when user explicitly starts a session
- Monitoring continues until user is awakened OR 60-minute limit is reached
- If no sleep detected within 60 minutes, session auto-ends (user may have abandoned or forgotten to stop)
- App displays clear UI indicating monitoring is active
- Typical session: 15-30 minutes, keeping battery usage minimal
== The Problem ==
HKWorkoutSession affects Activity Rings during the session. Users receive "Exercise goal reached" notifications while resting — confusing.
== What I've Tried ==
-
Not using HKLiveWorkoutBuilder → Activity Rings still affected
-
Using builder but not calling finishWorkout() (per https://developer.apple.com/forums/thread/780220) → Activity Rings still affected
-
WKExtendedRuntimeSession (self-care type) (per https://developer.apple.com/forums/thread/721077) → Only ~10 min runtime, need up to 60 min
-
HKObserverQuery + enableBackgroundDelivery (per https://developer.apple.com/forums/thread/779101) → ~4 updates/hour, too slow for real-time detection
-
Audio background session for continuous processing (suggested in https://developer.apple.com/forums/thread/130287) → Concerned about App Store rejection for non-audio app; if official approves this technical route, I can implement in this direction
-
Some online resources mention "Health Monitoring Entitlement" from WWDC 2019 Session 251, but I could not find any official documentation for this entitlement. Apple Developer Support also confirmed they cannot locate it?
== My Question ==
Is there any supported way to:
- Monitor heart rate in background for up to 60 minutes
- WITHOUT affecting Activity Rings or creating workout records?
If this requires a special entitlement or API access, please advise on the application process. Or allow me to submit a code-level support request.
Any guidance would be greatly appreciated. Thank you!
Just see this thread thanks to @simonfromhelix for reviving it. The orginal post was published on Dec ’25. I guess folks were probably on vacation at that time, and hence didn't pick it up.
@Michaellee524: Regarding continuous background monitoring, please start with this post, which covers what I have to say on the topic.
Given that you only need to keep your app running for one hour, you might test if running your app in the frontmost mode allows your app to sample heart rate in the way fitting your case, and if yes, consider asking your users to change the default setting to one hour, as described in Taking advantage of frontmost app state. I'm super curious if that works for you.
I don't see any way that can run an active workout session (HKWorkoutSession) without moving the rings. If the activity notifications are the problem, user-level features, like muting the notifications of the Activity app, or pausing the rings may be something to consider.
Best,
——
Ziqiao Chen
Worldwide Developer Relations.