For a given date, there are discrepancies between the step counts obtained from HealthKit and those displayed in the Health app. Is it possible for such discrepancies to occur even if step counts are not manually entered and multiple devices are not being used?
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
I have a workout app which I am testing on device currently via TestFlight.
The generated workout (tennis and indoor) shows in the fitness app with correct HR and duration.
However, when I go to my Strava app, it does not show in the list of workouts for importing. (note, activities tracked using the regular tennis mode on the Apple Watch show fine)
I have also concurrently reached out to Strava support to see if there's anything they can offer support for.
However, does anybody here have any knowledge/experience of the requirement? Or whether this is a limitation of an application deployed via TestFlight?
I have a terrible feeling I am chasing ghosts, and it may be a TestFlight limitation for exporting workouts?
Thanks
Topic:
App & System Services
SubTopic:
Health & Fitness
Tags:
Health and Fitness
HealthKit
TestFlight
I want to use the Apple Healthkit data to recommend personalised insurance. Is this allowed? As I have read in the documentation that the Apple Healthkit data can only be used for fitness and health purposes. Anyone knows what is meant / scope of "fitness and health purposes"? Will personalised insurance as per health data be allowed under this category?
Hello,
My app syncs workout data from a third-party device and records workouts with HealthKit as follows:
let builder = HKWorkoutBuilder(healthStore: healthStore, configuration: hkConf, device: hkDevice)
try await builder.beginCollection(at: startDate)
try await builder.addSamples(samples)
try await builder.endCollection(at: endDate)
let workout = try await builder.finishWorkout()
let workoutRouteBuilder = HKWorkoutRouteBuilder(healthStore: healthStore, device: hkDevice)
try await workoutRouteBuilder.insertRouteData(filteredLocations)
try await workoutRouteBuilder.finishRoute(with: workout, metadata: nil)
However, I’m encountering two issues:
The workouts appear in Apple Fitness but do not contribute to the activity rings.
The workout includes a route (visible in the raw workout data in Apple Health) but does not display on Apple Fitness.
Is there any way to fix this? I’d appreciate any suggestions you might have.
__
I am using a new Apple Watch Ultra 2 (MX5R3LW/A) running WatchOS 11.3 (22S553).
I noticed that the watch often misses heart measurements during meaningfully long segments of exercise sessions. This has been bugging me for a while and today I read an article that described perfectly, and much better than I could, what I am experiencing. Here is the article: https://apple.news/AK_QJyoLaQ1eaeySWHlkLPw
Is this a known issue that is being worked?
Thanks.
Topic:
App & System Services
SubTopic:
Health & Fitness
Any idea to achieve reliable periodic Bluetooth data retrieval on iOS, even when the app is closed or killed.
I am working on an Apple Watch companion app to an existing live iOS app. I am utilizing the heart rate tracking for an active 'self-care' sauna session. I say self-care in quotes because it's more self-care than a workout activity, but it is closely blurring the lines between the two.
I have come to understand that if a session truly isn't a workout, then you should not use workoutSession.startActivity. However the app needs to function entirely like a workout would. This is not a meditation application. Sauna is actually just one of many activity types supported in the app.
I have tried using extended runtime session, and there have been numerous issues with doing so. It is not nearly as robust for the user. For example, the active session is not prioritized by the watch's CPU. Now playing is no longer functional. Heart rate is far more inconsistent, and this variable is as critical as if it were in a workout.
I have tried using HKWorkoutSession, however I worry the app will be rejected by doing so. This method works most accurately to collect the right data for the user, and prioritizes system resources as expected. The app can be moved to the background as expected and continue to communicate with the iOS app.
What is the best way to move forward here. It almost feels like I am operating in a grey area with no real solution in place. Any assistance is greatly appreciated as we would like to follow all guidelines while producing a high quality experience for our users.
Dear Apple Developers,
Could you kindly add the two following workout types to your Apple Watch? There are large communities that participate in both of these activities globally.
Rucking workout option. goruck.com
TRX suspension trainer option. trxtraining.com
Thank you for your consideration. This addition will make many people happy.
Topic:
App & System Services
SubTopic:
Health & Fitness
HKHealthStore().execute(query) run in main thread it cost 3.5s
here is my code
print("execute begin:(Date().timeIntervalSince1970)")
HKHealthStore().execute(query)
print("execute end:(Date().timeIntervalSince1970)")
query.predicate like this
(startDate >= CAST(0.000000, "NSDate") AND endDate < CAST(0.100000, "NSDate") AND startDate < CAST(0.100000, "NSDate")) OR (startDate >= CAST(60.000000, "NSDate") AND endDate < CAST(60.100000, "NSDate") AND startDate < CAST(60.100000, "NSDate")) OR (startDate >= CAST(120.000000, "NSDate") AND endDate < CAST(120.100000, "NSDate") AND startDate < CAST(120.100000, "NSDate")) OR (startDate >= CAST(180.000000, "NSDate") AND endDate < CAST(180.100000, "NSDate") AND startDate < CAST(180.100000, "NSDate")) OR (startDate >= CAST(240.000000, "NSDate") AND endDate < CAST(240.100000, "NSDate") AND startDate < CAST(240.100000, "NSDate")) OR (startDate >= CAST(300.000000, "NSDate") AND endDate < CAST(300.100000, "NSDate") AND startDate < CAST(300.100000, "NSDate")) OR (startDate >= CAST(360.000000, "NSDate") AND endDate < CAST(360.100000, "NSDate") AND startDate < CAST(360.100000, "NSDate")) OR (startDate >= CAST(420.000000, "NSDate") AND endDate < CAST(420.100000, "NSDate") AND startDate < CAST(420.100000, "NSDate")) OR (startDate >= CAST(480.000000, "NSDate") AND endDate < CAST(480.100000, "NSDate") AND startDate < CAST(480.100000, "NSDate")) OR (startDate >= CAST(540.000000, "NSDate") AND endDate < CAST(540.100000, "NSDate") AND startDate < CAST(540.100000, "NSDate")) OR (startDate >= CAST(600.000000, "NSDate") AND endDate < CAST(600.100000, "NSDate") AND startDate < CAST(600.100000, "NSDate")) OR (startDate >= CAST(660.000000, "NSDate") AND endDate < CAST(660.100000, "NSDate") AND startDate < CAST(660.100000, "NSDate")) OR (startDate >= CAST(720.000000, "NSDate") AND endDate < CAST(720.100000, "NSDate") AND startDate < CAST(720.100000, "NSDate")) OR (startDate >= CAST(780.000000, "NSDate") AND endDate < CAST(780.100000, "NSDate") AND startDate < CAST(780.100000, "NSDate")) OR (startDate >= CAST(840.000000, "NSDate") AND endDate < CAST(840.100000, "NSDate") AND startDate < CAST(840.100000, "NSDate")) OR (startDate >= CAST(900.000000, "NSDate") AND endDate < CAST(900.100000, "NSDate") AND startDate < CAST(900.100000, "NSDate")) OR (startDate >= CAST(960.000000, "NSDate") AND endDate < CAST(960.100000, "NSDate") AND startDate < CAST(960.100000, "NSDate")) OR (startDate >= CAST(1020.000000, "NSDate") AND endDate < CAST(1020.100000, "NSDate") AND startDate < CAST(1020.100000, "NSDate")) OR (startDate >= CAST(1080.000000, "NSDate") AND endDate < CAST(1080.100000, "NSDate") AND startDate < CAST(1080.100000, "NSDate")) OR (startDate >= CAST(1140.000000, "NSDate") AND endDate < CAST(1140.100000, "NSDate") AND startDate < CAST(1140.100000, "NSDate")) OR (startDate >= CAST(1200.000000, "NSDate") AND endDate < CAST(1200.100000, "NSDate") AND startDate < CAST(1200.100000, "NSDate")) OR (startDate >= CAST(1260.000000, "NSDate") AND endDate < CAST(1260.100000, "NSDate") AND startDate < CAST(1260.100000, "NSDate")) OR (startDate >= CAST(1320.000000, "NSDate") AND endDate < CAST(1320.100000, "NSDate") AND startDate < CAST(1320.100000, "NSDate")) OR (startDate >= CAST(1380.000000, "NSDate") AND endDate < CAST(1380.100000, "NSDate") AND startDate < CAST(1380.100000, "NSDate")) OR (startDate >= CAST(1440.000000, "NSDate") AND endDate < CAST(1440.100000, "NSDate") AND startDate < CAST(1440.100000, "NSDate")) OR (startDate >= CAST(1500.000000, "NSDate") AND endDate < CAST(1500.100000, "NSDate") AND startDate < CAST(
Log
execute begin:1739958803.531026
execute end:1739958807.0448961
Topic:
App & System Services
SubTopic:
Health & Fitness
I have auth bloodPressureDiastolic and bloodPressureSystolic,
I can sync my bloodpressure data from my app to healthkit,
but My app listed as inactive under the Data Sources and Access of Health App
Topic:
App & System Services
SubTopic:
Health & Fitness
Hi, I have an iPhone/watch app that measures walking/running distance. It starts a workout session records data successfully into healthkit and then ends the workout session. I can see the data in the Health app from my app and it all appears to be correct. The issue I'm having is that the Health app doesn't use my app's data in its total distance for the day. For example, I can add 1 mile of fake data (I know that's not allowed per policy) for testing and it gets successfully added but not used in the total. The health app is only using distances collected by the watch and the phone for calculating the total distance for the day and is ignoring the distance provided by my app. What could I be missing?
Topic:
App & System Services
SubTopic:
Health & Fitness
Dear Apple Developer Support,
I hope this message finds you well. I am reaching out for guidance on a project that involves sharing heart rate data between an iOS app and an Android app. I have developed a watchOS app that continuously fetches heart rate data from an Apple Watch and displays it in a companion iOS app. Additionally, I have built an Android fitness app using Ionic Angular.
My goal is to create a bridge that allows the heart rate data from the iOS app to be displayed continuously in the Android app. I am considering using a backend server (e.g., Node.js) to facilitate this data transfer.
Could you please provide any insights or recommendations on the best approach for achieving this cross-platform data sharing? I would appreciate any guidance on potential challenges or limitations I might encounter.
Thank you for your time and assistance.
Sincerely,
Venu Madhav
Topic:
App & System Services
SubTopic:
Health & Fitness
Tags:
App Tracking Transparency
CloudKit
Network
Cloud and Local Storage
I cannot access my corporate invoice. I don't know why I couldn't reach it. How and where can I reach it?
Topic:
App & System Services
SubTopic:
Health & Fitness
Hi,
Need input on making ICEcard app paid version , requirements. The app is presently live for India and shortly will be for global. This app is for primary health information which is critical in case anyone faces emergency. Will it have any regulatory concerns ?
https://apps.apple.com/in/app/ice-card-app/id6736453602
Topic:
App & System Services
SubTopic:
Health & Fitness
I've searched all the App Intent and AssistantSchemas related documentation and I can't find anything related to workout, do I still need to use SiriKit?
I keep seeing a red action item to complete a task in settings. IOS beta keeps indicating that I need to enable sensor & usage data. Everything is enabled. I literally enabled everything to get it to go away, but it is still there. Suggestions?
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.
Hello Apple Community,
What does approach use the Fitness app for swimming distance calculation per set (segment)?
I've tried 2 options but all of them have different values than in the Fitness app.
Calculation like that: pool length * number of laps = swimming distance BUT the Fitness app sometimes shows other values for distance per set (segment).
Fetch all distance values via HKQuantityTypeIdentifier.distanceSwimming (HKSampleQuery`) and than try to match distance values with set (segment) duration. Again I got other values for swimming distance per set, values are bigger than in the Fitness app.
let healthStore = HKHealthStore()
let distanceType = HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.distanceSwimming)!
let predicate = HKQuery.predicateForSamples(withStart: startDate as Date, end: endDate as Date?, options: .strictStartDate)
let query = HKSampleQuery(sampleType: distanceType, predicate: predicate, limit: HKObjectQueryNoLimit, sortDescriptors: [.init(keyPath: \HKSample.startDate, ascending: true)], resultsHandler: { (query, results, error) in
if let error {
Logger.e("\(error)")
continuation.resume(returning: nil)
}
continuation.resume(returning: results)
})
healthStore.execute(query)
Is it possible to get the same swimming distance like in the Fitness app per set via HealthKit?
Topic:
App & System Services
SubTopic:
Health & Fitness
Hello Apple Developer Community,
I’m working on creating a chart that combines Screen Time Usage data with Workout Time from HealthKit.
I’ve successfully implemented a DeviceActivityReportExtension to fetch Screen Time data and draw a chart. I’m also able to read HealthKit data from the main app.
However, I’m having trouble integrating the HealthKit data into the View generated by the DeviceActivityReportExtension. I’ve attempted to read HealthKit data directly from the extension , but this doesn’t seem to work, likely due to HealthKit access restrictions in extensions.
I also tied using a shared object to pass HealthKit data to the extension, but unfortunately this didn’t seem to work as expected.
I’d greatly appreciate any suggestions on how to successfully integrate HealthKit data into the extension-generated View. Has anyone dealt with a similar challenge or found a workaround for this?
Thanks in advance for your help!
I am trying to track a user's real-time sleep state using heart rate data, but I have encountered several issues:
When using HKSampleQuery on the phone to fetch heart rate data, I can only retrieve data recorded before the app comes to the foreground or before it is terminated and restarted (see related issue: https://developer.apple.com/forums/thread/774953).
I attempted to get data on the Apple Watch and send updates to the phone via Watch Connectivity. However, if I use WKExtendedRuntimeSession, although I can obtain data on the watch, once the watch screen goes off, it can no longer transmit data via Watch Connectivity to the phone (since I cannot guarantee the app will remain in the foreground when lying in bed).
On the other hand, using HKWorkoutSession results in interference with the activity rings and causes the heart rate sensor to run too frequently, which I worry may affect the battery life of the watch.
Is there an elegant solution for tracking a user's heart rate data for sleep monitoring?