Use HealthKit to enable your iOS and watchOS apps to work with the Apple Health app.

All subtopics

Post

Replies

Boosts

Views

Activity

The Watch App and iPhone App health care permissions are not synchronized.
I developed an iPhone/Watch app with the single target setting (new method) for Watch app projects, which will be available from Xcode14. This app uses HealthKit to retrieve information such as step count and heart rate from healthcare. The watch app is not independent and requires the iPhone app (companion app). Regarding the permission to access health care, i found some differences from the Old WatchApp Project (application project structure using WatchExtension when Xcode 13.4 or lower is used). This does not occur in the iPhone simulator or watch simulator, but only on the actual device. Both the iPhone app and watch app now display a dialog to allow access to health care In the Old WatchApp Project, if access was granted in either app, the granted access is synchronized. When checking the Health Care access status in the iPhone Settings App, permission settings for both the iPhone app and watch app are displayed independently. Because each permission setting is independent, you can choose to allow access to the iPhone app but not to allow it to the watch app. the Old WatchApp Project, permission settings for the iPhone app and watch app were synchronized, so it was not possible to have different settings for each. These behaviors are not described in the documentation. It would be understandable if the transition from watch "extension" to watch "app" is to split the app into two separate units. However, since there is no official documentation explaining this, i cannot determine whether this is the correct specification or not. Furthermore, since the companion app is required rather than a separate Watch app, having the Health Care permission settings out of sync with the companion app could cause unexpected problems and worsen the user experience. (It would be difficult and cumbersome for the user to know what settings they have made). Is there a solution to synchronize this behavior with the companion app like as the Old WatchApp Project? Do i have to go back to the project configuration (use of watchExtension) before Xcode13? I have prepared a sample project below that can test the above. https://github.com/HayakawaAKIRA/SingleTargetWatchOSApp-HealthKit reference: https://developer.apple.com/videos/play/wwdc2022/10133/ https://developer.apple.com/documentation/watchkit/wkapplication https://developer.apple.com/documentation/healthkit/setting_up_healthkit
6
0
2.3k
Sep ’22
Finishing a HKLiveWorkoutBuilder workout with lots of HKWorkoutActivity instances is very slow
I'm using the new watchOS 9 HKWorkoutActivity in my interval training app (Intervals Pro) for each interval. It's a great addition since all the intervals now show in the Apple Fitness app, however, if the workout has lots of activities then saving the workout is painfully slow. For example, on my Apple Watch Ultra I saved a workout with 63 activities and it took more than 1 minute. Here's a code snippet: try await builder.endCollection(at: workoutEndDate) try await builder.addMetadata(metadata) try await builder.finishWorkout() // This is SLOW Is anyone else having the same issue? To demonstrate the issue you can look at a Test Flight build of Intervals Pro: https://testflight.apple.com/join/Nn7iSOzY Tap on the More tab in the iPhone app and then the Apple Watch Settings. On that screen you'll see a switch to either enable or disable workout activities. To demonstrate the issue, edit a timer to continue until manually stopped by changing the Number of Cycles to "Until Stopped". Then start the timer on the watch. Let it run for a period of time to create more than 50 intervals, for example, then stop the timer. Swipe to the leftmost screen on the watch, tap pause, then tap end. At that point you'll see how slow the workout saved. Next, you can go back to the iPhone app, disable using workout activities and repeat the test. The workout will save quickly in this case. I've filed a feedback.
2
0
947
Mar ’23
Inaccurate query results of HKStatisticsCollectionQuery
I have the same issues, when i use HKStatisticsCollectionQuery query user step count, there's a big difference in the number of steps I'm query before and after a minute's interval. 2023-12-17 15:45:41 steps=529 2023-12-17 15:46:52 steps=5817 2023-12-19 19:43:59 steps=2680 2023-12-19 19:44:31 steps=5554 What is causing this issue? I would like some assistance, please.
0
0
524
Dec ’23
In App Purchase for Fitness app
With a web interface and mobile app, a user who buys a subscription through Stripe is automatically created an account that allows them to log in to both the web interface and mobile app. When going through the review, we received a rejection from Apple review team with the requirement to implement in app purchase. I have an already published app with the same functionality where the review team did not require IAP implementation. Does the web interface have to contain 100% of the same features as the mobile app in order for the mobile app to be recognized as a "Read" version and no IAP integration is required? When asked if Stripe can remain available for purchase through the web interface in conjunction with IAP in the mobile app, I received the response "In regards to using Stripe alongside in-app purchases, please note that providing access to mechanisms other than in-app purchases for purchases or subscriptions to be used in the app does not comply with the App Store Review Guidelines." On what basis the subscription purchase in the web interface does not take place, if there are no requirements for mandatory installation of the mobile application and the user can use the web version without installing the mobile application.
1
0
649
Jan ’24
Rings wont close
iPhone 15 pro max. iOS 17.4 (had to ask here because of normal discussion group rules) This past Monday I checked my rings and they were all closed. On Tuesday I saw that my Monday rings had changed and were now not closed. The recorded data for the day should be enough to make all the rings closed, but it is acting like it reads some small proportion of the data and stops. I've not noticed this behavior on any other day in my fitness history. The move ring stops at about 25% and reports 65/260 cal, but the data shows about the same activity as the day before and the day before closed health also shows Monday had a higher than normal active energy level. The step count is off by an order of magnitude. The recorded data clearly shows 15+ minutes of exercise, but the ring shows 1. My stand graph shows 12 hours, but the ring shows 4. (can't post images to this forum so have to describe). Since then I have tried several things to make it recalculate the data. I've had the iPhone delete all health data and reload from the cloud 3 times. I've reset the phone to factory and reloaded from backup. I turned back time to Sunday evening at 11:58 and let the day turn over and did the same for Monday and it keeps drawing to the same point. I looked at the underlying data in health and nothing about the day seems strange. I tried adding 1000 extra steps to see if that would make the move ring jump any with no effect. Any help or ideas would be appreciated since this anomaly broke my 500 day streak (at 498!) Was sent here when I asked in the general forums and they pointed out I was running public beta, so had to ask here.
1
0
799
Feb ’24
Inquiry Regarding Documentation Requirements for Research-Based Healthcare Applications
Dear Apple App Store Team, I am reaching out to seek clarity and guidance specifically regarding the documentation requirements for submitting a research-based healthcare application on the App Store. Our development team is committed to ensuring compliance with all relevant guidelines, and we would appreciate your assistance in understanding the specific documentation needed for these applications. As our application involves collecting data from patients for research purposes, we want to ensure that we provide the necessary documentation to support our submission. Here are the key areas for which we are seeking clarification: Consent Documentation: Any specific forms or templates required to demonstrate the obtaining of informed consent, especially for minors where parental consent is involved. Research Nature, Purpose, and Duration: Guidance on documenting and communicating the nature, purpose, and expected duration of the research to the participants. Procedures, Risks, and Benefits: Clarity on the documentation needed to communicate the research procedures, potential risks, and expected benefits to the participants or users. Confidentiality and Data Handling: Any specific documentation or information required demonstrating how confidentiality will be maintained and how data collected during the research will be handled, including any sharing with third parties. Participant Contact Information: Guidance on providing a point of contact for participant questions and inquiries. Withdrawal Process Information: Documentation needed to explain the withdrawal process for participants who choose to discontinue their involvement in the research. Ethics Review Board Approval: Specific requirements for providing proof of approval from an independent ethics review board, including any templates or forms that may be necessary. Understanding these specific requirements will enable us to compile a comprehensive submission package tailored to the expectations of the App Store review process for research-based applications. We appreciate your attention to this matter and look forward to your guidance. If there are any specific forms or templates that should accompany our submission, kindly let us know. Thank you for your time and assistance. Best regards, Youcef Barkat
0
0
504
Feb ’24
HealthKit - Menstrual cycle start date / how cycles are split?
Hey! TLDR: How Health app knows the new menstruation cycle started? The API Adding .menstrualFlow (HKCategoryValueMenstrualFlow) samples require HKMetadataKeyMenstrualCycleStart: Bool parameter. It's fairly simple for the consecutive days - the first sample includes true, the rest false. The problem What about more complex scenarios like: 3 days of unspecified samples, then 2 days of none samples, and unspecified sample again. Should it be marked as the new cycle start? I don't want to prompt the user to confirm the new menstruation cycle. Observations I noticed Health app performs some logic under the hood. For instance, when I marked 5 days in a row unspecified, then left 6 days in a row empty, then selected unspecified again, I got 2 menstruation cycles (11 days ago and today). But when I changed the number of the days I marked as unspecified before the gap, or the length of the gap, or edited the cycles further in the past, I ended up having just 1 menstruation cycle. I guess Health app takes into consideration: previous menstruation length, gap length, average cycle length. But what is the exact math here? I don't want to ruin the user's statistics 💚 I found in the user guide this info about the fertility: The fertile window will be the six days you're most likely to be fertile, based on data that you’ve logged about your period or a positive ovulation test result. The fertile window prediction is based on a traditional calendar method. The fertile window is calculated by subtracting 13 days (the luteal phase) from the estimated next cycle start date. So I think something similar might be going on here. Thanks in advance!
0
0
649
Mar ’24
Ring App version update review rejected,Guideline 1.4.1 - Safety - Physical Harm
Hello, our app has been rejected in the review of version update, we need to provide relevant medical certificates. And our classification is Health and Fitness.However, our device is not a medical device and does not have a medical hardware regulatory license. How can I pass the audit? “Hello, The issues we previously identified still need your attention. If you have any questions, we are here to help. Reply to this message in App Store Connect and let us know. Review Environment Submission ID: e5e36844-23e5-41fc-a956-eb46746728c1 Review date: April 16, 2024 Version reviewed: 1.0.1 Guideline 1.4.1 - Safety - Physical Harm The app connects to external medical hardware to provide medical services. However, to be compliant with guideline 1.4.1, you must: Provide documentation from the appropriate regulatory organization demonstrating regulatory clearance for the medical hardware used by the app. Provide documentation of a report or peer-reviewed study that demonstrates the app's use of medical hardware works as described. Restrict distribution of the app to regions where you have obtained regulatory clearance for the medical hardware used by the app. Otherwise, you must provide a jurisdiction statement in the app description declaring where the medical hardware has regulatory clearance to be used. Update the app's description to include a disclaimer reminding users to seek a doctor’s advice in addition to using this app and before making any medical decisions. Next Steps To resolve this issue, provide the documentation requested above, restrict your salable storefronts in App Store Connect or include a jurisdiction statement in the app description, and update your app's description in App Store Connect to include the required medical disclaimer. Resources Learn more about requirements for medical apps in guideline 1.4.1. Support Reply to this message in your preferred language if you need assistance. If you need additional support, use the Contact Us module. Consult with fellow developers and Apple engineers on the Apple Developer Forums. Help improve the review process or identify a need for clarity in our policies by suggesting guideline changes.”
2
0
615
Apr ’24
Detecting when Workout Session is being forcibly closed/ended
I noticied that my workout session is sometimes being killed by apple when the app is in the background and it seems that the func workoutSession(_ workoutSession: HKWorkoutSession, didChangeTo toState: HKWorkoutSessionState, from fromState: HKWorkoutSessionState, date: Date) { is only being called when the app comes back into the foreground. I wonder if there is a way for us to get notified when the workout is about to die or has already been killed. Thanks
0
0
451
Apr ’24
How to add "Estimated Time in Each Heart Rate Zone" info to my custom HKWorkout when viewed in Apple Fitness app?
Hello, I’m currently developing a fitness app for watchOS that lets a user to manually set a desired heart rate target zone (enter numbers representing the lower and upper boundaries) and start a workout (right now it’s only “Other” type). After that my app monitors user’s heart rate and alerts them when they’re out of zone. When user ends the workout, the info about this workout appears on “Fitness” iOS app, and user can see the workout data like Workout Time, Active and Total Calories, Avg. Heart Rate. Also user can see Heart Rate chart with info how their heart rate was changing during a workout (see the Figure 1). Now to the question. When user clicks “Show More” button above the Heart Rate chart, they can see the same Heart Rate chart and another one, with Post-Workout Heart Rate (see the Figure 2). But there is no “Estimated time in each heart rate zone” as one can see in the workout’s details that were recorded from Apple’s workout (watchOS “Workout” app, for a workout of “Other” type as well). Please see the Figure 3. The question is: is it possible to add “Estimated time in each heart rate zone” to workout recorded via my third-party app so it would look like on the Figure 3 in "Fitness" iOS app, and if it's possible, what steps should I undertake to implement this ? Thanks in advance! I posted the screenshots in the replies to the post, because otherwise I was not able to submit a post ("sensitive language" warning, I suspect it's because of the ids in the attached screenshot's urls)
2
0
713
May ’24
Delayed reports from CMFallDetectionManager
Our watchOS app uses CMFallDetectionManager (with the proper entitlement) to help alert our users and their caregivers when a fall occurs. We have had a simple implementation in our app for a couple of years now and it seems to work fine. Recently, we received a report of delayed fall alerts and have traced back the root cause to a failure from the system to call func fallDetectionManager(_ fallDetectionManager: CMFallDetectionManager, didDetect event: CMFallDetectionEvent, completionHandler handler: @escaping () -> Void) promptly when a fall occurs. Our implementation of this method begins with the following logging statement: "Fall detected at \(event.date) with status \(event.resolution.rawValue) at \(Date())" When we check our logs, we see a number of events that occur as expected, for example: Fall detected at DATE_AND_HOURS:42:09 +0000 with status 1 at DATE_AND_HOURS:42:51 +0000 However, many events show a period of several minutes from fall detection to a report: Fall detected at DATE_AND_HOURS:28:09 +0000 with status 0 at DATE_AND_HOURS:32:42 +0000 or Fall detected at DATE_AND_HOURS:44:26 +0000 with status 1 at DATE_AND_HOURS:48:14 +0000 And in the instance from our customer, we had a fall detected that evidently wasn't reported for 5 hours and 4 minutes (I'm not sharing exact timestamps publicly to maintain user privacy). We are aware of the documentation regarding the delegate and have programmed it appropriately not to receive duplicate events: Additionally, each time the user launches your app, the system checks to see if a fall event has occurred during the recent past. If one has occurred, it calls this method. Note that your app may receive the same event multiple times, for example, if the app crashes and relaunches. Always check the event’s date property to determine whether your app has already received the event. The system guarantees that different fall events have different date values. Moreover, our logger persists logs when there is no network access, and the delegate callback also requests a network post to our servers that, again, is preserved in a background queue until connectivity is restored if it's not available. Our app's other updates (watchOS complication, etc.) from this user's Watch also show that our app was running in the background and communicating with our servers during that time. We have very high confidence that the watch and our app did not miss any more timely calls to that delegate method. While this one five-hour delay was an exceptionally bad occurrence, we also find the other delays of several minutes to be concerning, considering the time-sensitive nature of falls. Does Apple or do any developers have any insights about what's going on and what expectations we should be setting for our users?
9
0
871
May ’24
App Logo Above Watch Face on Apple Watch
I am running two different background modes(not at the same time), 1 with a workout and 1 with a location. I noticed that the app logo appears above the watch face for both background modes but does not show up consistently. I wonder what the significance of the logo showing up above watch face is? Additionally why does it show up sometimes but not others? Thanks
0
0
436
May ’24
Does WatchOS kill apps when in extreme temperatures?
I have noticed that my Apple Watch app seems to randomly quit from time to time. It's not crashing and I have not been able to reproduce it in a controlled setting, but have noticed that it seems to only happen when I'm in very high or low temperatures. For instance, I was skiing recently and my app was supposed to stay running the whole time, but often when I would raise my wrist it would be back on the home screen and my app wasn't running. This also happened when I was on the beach on a very hot day. But when I'm testing it at home I can keep it running for hours and it never crashes, which leads me to believe it may have to do with the temperature. Does the OS kill apps when it's running in very high or low temperatures? If so, is there anything I can do to prevent this from occurring? Would doing less things in my app possibly prevent this? For instance, I have a timer, and use a bunch of sensors, would turning those off at times and using less of the display make a difference or does the OS not care what the apps are actually doing? If not, any other ideas? Thanks
1
0
583
May ’24