Looking for help with our Apple HealthKit integration. We've successfully pulled steps, distance, active energy, glucose and heart rate. However, the data pulled for sleep duration is incorrect. Not sure what we're doing wrong.
Health & Fitness
RSS for tagExplore the technical aspects of health and fitness features, including sensor data acquisition, health data processing, and integration with the HealthKit framework.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
HealthKit background delivery only triggers when charging. I have set step monitoring to hourly frequency. Despite step changes, callbacks fail to arrive after 3-4 hours on battery, but trigger immediately upon connecting power. Observed for 2 days: background updates are only received when charging. The device is not in Low Power Mode, and Background App Refresh is enabled for the app in Settings.
After upgrading to a new iPhone and restoring from an iCloud backup using the same Apple ID, I noticed an issue with Health app permissions.
■ What is happening
On my previous iPhone, an app had permission to read step count data.
After restoring to the new iPhone, the app still appears in the Health app under Sources.
However, when I tap the app, the usual data type permission toggles (such as Steps) are not displayed at all.
As a result, the app is unable to read step count data.
■ Additional details
The app itself seems to be recognized as a Health data source.
However, the data type permission screen is empty.
No ON/OFF switches are shown.
The backup was created on iOS 18, and the restore was performed on iOS 26.
I have not yet confirmed whether this also happens with other iOS version combinations.
■ Questions
Is it expected behavior that Health app permissions (per data type) are not restored via iCloud backup?
Has anyone experienced a similar situation where the app appears under Sources but the permission options are missing? If so, how did you resolve it?
Any information from users who have experienced the same issue would be greatly appreciated.
I'm trying to hook into the new workoutEffort score supported in iOS 18, I am collecting this information from users when they submit their workout and trying to add a sample to the HKWorkout in the same manner as I've been adding other samples like bodyweight, calories burned, etc.
I'm receiving the error:
HKWorkout: Sample of type HKQuantityTypeIdentifierWorkoutEffortScore must be related to a workout
I tried adding the samples using HKWorkoutBuilder.add([samples]) as which has been working perfectly for calories burned & bodyweight, but I am receiving the above error for workoutEffortScore
As a second approach, I tried adding the sample after I called finishWorkout on the HKWorkoutBuilder and received back the HKWorkout object using HKHealthStore.add([samples], to: HKWorkout) and am still receiving the same error!
I don't know otherwise how to relate a sample to a workout, I thought those were the APIs to do so? I'm using Xcode 16.0 RC (16A242) and testing on an iOS 16 Pro simulator
I have an App in objective-c that is using Health data (walk/run, cycling) to give advice to users . I do not want/need to write any data in the Healtkit.
If i do (with the 3 values in the plist / .info :
self.healthStore requestAuthorizationToShareTypes:nil readTypes:readDataTypes
My request crashes.
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Must request authorization for at least one data type'
*** First throw call stack:
(
0 CoreFoundation 0x00000001804b910c __exceptionPreprocess + 172
1 libobjc.A.dylib 0x0000000180092da8 objc_exception_throw + 72
2 CoreFoundation 0x00000001804b901c -[NSException initWithCoder:] + 0
3 HealthKit 0x000000019da034d4 -[HKHealthStore _validateAuthorizationRequestWithShareTypes:readTypes:] + 92
4 HealthKit 0x000000019da03670 -[HKHealthStore requestAuthorizationToShareTypes:readTypes:shouldPrompt:completion:] + 292
BUT in swift :
healthStore.requestAuthorization(toShare: nil, read: readTypes)
is working, présents only my 2 datas to read... in the same IOS , same phone without crashing. What is the difference ?
Nil object in objective-c and Nil object in swift are not the same ? how do i make readonly requests in objective C ?
Hi everyone!
I'm trying to get the total sleep time for a given day, but users report that there's a difference between what my app reports and what the Apple Health app reports. In particular, we're off by 2 minutes less on average.
What we're doing is:
Get all the samples that are either core, deep, rem or unspecified
Cut-off time at 3 PM previous day
Merge overlapping intervals
Add all the remaining intervals
For debugging purposes I'm storing and sending all the raw samples to a server, and I have run tests and I don't find anything wrong. It looks like the number we come up with is correct according to our own rules. I wonder, how is Apple adding up all the samples to arrive at a number that's slightly off to our number.
Any insight would be appreciated. Thanks.
When I set the distanceFilter = 5 (5 meters) in the GPS CLLocationManager
I can't display the workout routes in the Apple Fitness app after writing the recorded GPS data to HealthKit via HKWorkoutRouteBuilder.
The smaller distanceFilter, Fitness will displays the route.
Should I consider setting up a small distanceFilter when developing a workout app on watchOS?
In the WWDC 2019 session "Extended Runtime for WatchOS apps" the video talks about an entitlement being required to use the HR sensor judiciously in the background.
It provides a link to request the entitlement which no longer works: http://developer.apple.com/contect/request/health-monitoring
The session video is also quite hard to find these days.
Does anyone know why this is the case?
Is the API and entitlement still available?
Is there a supported way to run, even periodically, in the background on the Watch app (ignoring the background observer route which is known to be unreliable) and access existing HR sensor data
Topic:
App & System Services
SubTopic:
Health & Fitness
Tags:
WatchKit
Health and Fitness
watchOS
Apple Watch
Hi, i'm trying to get the number of step counts a person has taken. I decided to pull the data from health kit and the number of steps are incorrect. Come to find out apple health recommends an app called pedometer++ for the number of steps counted and after testing I realized that they are getting the correct number of steps a person is taking. How can I pull the correct number of steps a person has taken? I want to be able to merge the data from watch and phone to make sure we are getting the correct number of steps but not double counting the steps either.
any guidance on this would be appreciated!
Here's the code snippet that i'm using right now:
permissions: {
read: [AppleHealthKit.Constants.Permissions.StepCount],
write: [],
},
};
AppleHealthKit.initHealthKit(permissions, error => {
if (error) {
console.log('Error initializing HealthKit: ', error);
return;
} else {
dispatch(setAllowHealthKit(true));
getHealthKitData();
console.log('HealthKit initialized successfully');
}
});
const getHealthKitData = async () => {
try {
const today = new Date();
const options = {
startDate: new Date(today.setHours(0, 0, 0, 0)).toISOString(),
endDate: new Date().toISOString(),
};
const steps = await new Promise((resolve, reject) => {
AppleHealthKit.getStepCount(options, (error, results) => {
if (error) reject(error);
resolve(results?.value);
});
});
setStepsCount(steps);
} catch (error) {
console.error('Error fetching HealthKit data:', error);
}
};
Are there any HealthKit related changes to be aware of in the new update that enables SPO2 / Blood Oxygen Saturation measurements on certain Apple Watch models within the US?
I’m aware of processing happening on the phone…. But beyond that:
Does this mean values are then saved to Apple Health?
Do these models still take background SPO2 measurements in the same way as other models do?
Are these values then visible in third party iOS apps as normal through HealthKit?
Do these values sync back to the paired Apple Watch HealthKit store for third party apps to access on the Watch?
For reference I have an iOS and WatchOS app that, amongst other features, provides the ability to see your SPO2 values in the Watch app, complications and in the iOS app.
Topic:
App & System Services
SubTopic:
Health & Fitness
Tags:
WatchKit
Health and Fitness
watchOS
HealthKit
Hello,
I’m building a health-related app for both watchOS and iOS, which needs to monitor certain health data (e.g., heart rate, active energy).
Before updating to watchOS 26, the queries worked reliably without any issues. However, after adapting to watchOS 26, some users have reported that health data updates stop being delivered.
What I’ve observed:
HKObserverQuery with enableBackgroundDelivery is set up normally.
On WatchOS 26, the query sometimes stops delivering updates entirely after a certain point, and once an update is missed, it may stop delivering further updates completely.
Restarting the Apple Watch temporarily restores delivery, but the problem reoccurs after some time.
This makes background health data monitoring unreliable for my app.
Here’s a simplified version of the code we are using:
guard let heartType = HKObjectType.quantityType(forIdentifier: .heartRate) else { return }
let query = HKObserverQuery(sampleType: heartType, predicate: nil) { query, completionHandler, error in
if let error = error {
logEvent("Observer error: \(error.localizedDescription)")
return
}
logEvent("Heart rate changed")
MyNotificationManager.shared.sendNotification() // Send a local notification
completionHandler()
}
healthStore.execute(query)
healthStore.enableBackgroundDelivery(for: heartType, frequency: .hourly) { success, error in
if success {
logEvent("Background heart rate delivery enabled")
} else {
logEvent("Failed to enable background heart rate delivery: \(error?.localizedDescription ?? "Unknown error")")
}
}
Could you please clarify:
Is this a known issue with HKObserverQuery and enableBackgroundDelivery on watchOS 26?
Are there any recommended workarounds or best practices to ensure continuous background delivery of health data?
Thank you in advance for your help.
Topic:
App & System Services
SubTopic:
Health & Fitness
Tags:
Health and Fitness
watchOS
HealthKit
Observation
I have a watchOS app with a connected iOS app using Swift and SwiftUI. The watchOS app should read heart rate date in the background using HKOberserQuery and enableBackgroundDelivery(), send the data to the iPhone app via WCSession. The iPhone app then sends the data to a Firebase project.
The issue I am facing now it that the app with the HKObserverQuery works fine when the app is in the foreground, but when the app runs in the background, the observer query gets triggered for the first time (after one hour), but then always get terminated from the watchdog timeout with the following error message:
CSLHandleBackgroundHealthKitQueryAction scene-create watchdog transgression: app<app.nanacare.nanacare.nanaCareHealthSync.watchkitapp((null))>:14451 exhausted real (wall clock) time allowance of 15.00 seconds
I am using Xcode 16.3 on MacOS 15.4
The App is running on iOS 18.4 and watchOS 11.4
What is the reason for this this issue? I only do a simple SampleQuery to fetch the latest heart rate data inside the HKObserverQuery and then call the completionHandler. The query itself takes less than one second.
Or is there a better approach to read continuously heart rate data from healthKit in the background on watchOS? I don't have an active workout session, and I don't need all heart rate data. Once every 15 minutes or so would be enough.
Hi,
I have a workout app in the App Store which mirrors workout data between the phone and watch.
Since iOS 26.x I've been having issues and received reports of the mirroring no longer working. Users in iOS 18 have no problems with this functionality.
Bug description: A workout session is started from the phone app and starts mirroring to the watch companion device. The watch starts the workout session and then the mirroring session is disconnected / lost. Sending data to the companion device fails and ending the session on the phone doesn't end the session on the watch...essentially they become completely disconnected.
Please note I am testing this on physical devices...not simulators.
As a sanity check I've also tried the "Building a multidevice workout app" sample code and it has the same problem.
To re-create on the sample app, I start a workout from the phone, the watch workout starts and then the mirroring session seems to disconnect and is unable to send data.
This is the log from the "Building a multidevice workout app" sample code.
Successfully started workout
Type: Notice | Timestamp: 2025-10-17 06:57:07.341401+02:00 | Process: MirroringWorkoutsSample Watch App | Library: MirroringWorkoutsSample Watch App.debug.dylib | Subsystem: com.example.apple-samplecode.MirroringWorkoutsSampleABC123.watchkitapp | Category: MirroringWorkoutsSampleForWatch | TID: 0x1b2ca7
-[SPRemoteInterface _appRecoverAnyExtendedRuntimeSession:]_block_invoke:4350: Got no sessions back from -[CSLSSessionService existingRunningSessions:] or -[CSLSSessionService existingScheduledSessions:] after receiving a PUICInitializeSessionServiceAction
Type: Error | Timestamp: 2025-10-17 06:57:07.641571+02:00 | Process: MirroringWorkoutsSample Watch App | Library: WatchKit | Subsystem: com.apple.watchkit | Category: default | TID: 0x1b2ca7
Session state changed from 1 to 2
Type: Notice | Timestamp: 2025-10-17 06:57:07.647883+02:00 | Process: MirroringWorkoutsSample Watch App | Library: MirroringWorkoutsSample Watch App.debug.dylib | Subsystem: com.example.apple-samplecode.MirroringWorkoutsSampleABC123.watchkitapp | Category: MirroringWorkoutsSampleForWatch | TID: 0x1b2e87
Failed to send data: Error Domain=com.apple.healthkit Code=100 "Failed to send data to remote session." UserInfo={NSLocalizedDescription=Failed to send data to remote session.}
Type: Notice | Timestamp: 2025-10-17 06:57:07.669922+02:00 | Process: MirroringWorkoutsSample Watch App | Library: MirroringWorkoutsSample Watch App.debug.dylib | Subsystem: com.example.apple-samplecode.MirroringWorkoutsSampleABC123.watchkitapp | Category: MirroringWorkoutsSampleForWatch | TID: 0x1b2ca7
Would appreciate any help with this problem as it's affecting customers.
Thank you
WorkoutKit WorkoutScheduler seems broken with the first beta of iOS 18.2.
I have tested using my app from Xcode and the one that is on the App Store (and working properly on other devices), and it's not working with this new beta of iOS.
They appears in WorkoutScheduler.shared.scheduledWorkouts, but not on the watch.
I even tried with other apps that do the same with
Manual add to Apple Watch with SwiftUI workoutPreview work.
Xcode 16.0
iOS 18.2 Beta 1
WatchOS 11.1