How to monitor heart rate in background without affecting Activity Rings?

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 ==

  1. Not using HKLiveWorkoutBuilder → Activity Rings still affected

  2. Using builder but not calling finishWorkout() (per https://developer.apple.com/forums/thread/780220) → Activity Rings still affected

  3. WKExtendedRuntimeSession (self-care type) (per https://developer.apple.com/forums/thread/721077) → Only ~10 min runtime, need up to 60 min

  4. HKObserverQuery + enableBackgroundDelivery (per https://developer.apple.com/forums/thread/779101) → ~4 updates/hour, too slow for real-time detection

  5. 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

  6. 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!

Answered by DTS Engineer in 877731022

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.

Just seen this post. I feel given the detailed write up it's a shame no one's otherwise picked it up with at least some response.

Ultimately I think there's no solution here with the current APIs.

There are background observer HealthKit APIs for HR data but they don't work to your requirements and potentially with WatchOS 26 they don't work well at all! (see here)

I wasn't aware of the entitlement you mention for Health Monitoring, it caused me to write this post.

One other "solution" I'm aware of if your app includes a complication on the watch face -> If you use the legacy ClockKit APIs rather than the newer WidgetKit ones to create this complication, you'll get app waking calls to update this. If you've migrated to WidgetKit this only wakes up the Widget extension which is not so useful. This will still likely not give you the frequency you require.

Beyond that I think it's still a waiting game for better APIs.

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.

How to monitor heart rate in background without affecting Activity Rings?
 
 
Q