Post

Replies

Boosts

Views

Activity

Reply to Guidance / Documentation on iOS 18.6.1 Blood Oxygen Saturation
@DTS Engineer this is helpful thank you. Are you able to verify that doing this does not breach App Review or other terms as seemingly it's bypassing the same restrictions Apple has themselves had to implement? Finally this does result in a poor user experience: I don't know which user's Watches are affected, there's no API to query this? It's not actually region specific. Does the HealthKit source differ maybe such that I can observe that? A separate syncing system is inefficient, less likely to be accurate and has all the limitations mentioned previously re. access to iPhone Health Store when device is locked I presume there's not much to add on these points so I'll file a feedback but I do think this is confusing/misleading for users who otherwise presumably expect the SPO2 data to behave like any other.
Sep ’25
Reply to Guidance / Documentation on iOS 18.6.1 Blood Oxygen Saturation
Going back to my original questions I think I have some answers forming: Yes, SPO2 values are saved to Apple Health on iPhone Yes, background measurements are now taken in the same way Yes, the data is visible through the HealthKit APIs on iPhone only - not directly on Apple Watch No, HealthKit does not sync these values back to the Apple Watch Health Store Does this mean I'd have to use frameworks like WatchConnectivity to pass SPO2 data back to my Watch app? Am I allowed to do that as seemingly Apple Health isn't? Is there a better approach given the user's iPhone is most likely locked when using their Apple Watch and so the Health store on iPhone is unavailable?
Sep ’25
Reply to Migrate Widgets from StaticConfiguration to IntentConfiguration
For any unfortunate peoples stumbling across this, the issue was not solved in the RC builds of iOS & WatchOS 26. I'm shipping anyway and have had to build in a knowledge base in the app to help users with missing complications. 😞 Not the outcome I wanted and will undoubtedly lead to a lot of emails and negative reviews..... But I have users who expect the latest features so what else can I do.....
Sep ’25
Reply to `onTapGesture` not triggered on `Map` views
I'm also seeing this problem with Swift Charts. This is with the latest Xcode 26 Beta 6 and iOS 26 Beta 8. This issue doesn't affect devices running iOS 18 and 17 from my testing. As such I've made this modifier which may help someone, hopefully I can remove it in the release seed but who knows! extension View { func CustomTapGesture(tapCount:Int = 1, perform action: @escaping () -> Void ) -> some View { modifier(TapGestureModifier(tapCount: tapCount, action: action)) } } struct TapGestureModifier: ViewModifier { var tapCount:Int = 1 var action: (() -> Void) func body(content: Content) -> some View { if #available(iOS 26.0, *) { content.simultaneousGesture(TapGesture(count: tapCount).onEnded { action() }) } else { content.onTapGesture(count: tapCount) { action() } } } } Which can be used like this: Text("Hello World") .CustomTapGesture(tapCount:2) { UIImpactFeedbackGenerator().impactOccurred() } To be clear, this doesn't work as well for iOS 26 users as the standard .onTapGesture but it is a workaround.
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Aug ’25
Reply to Guidance / Documentation on iOS 18.6.1 Blood Oxygen Saturation
Hi Ziqiao, Thank you for the response on this. All your first paragraph points sound good. Unfortunately I too don't have an affected device so short of importing one, I'm not sure on the exact behaviour. As for the measurements, yes any further details you can provide would be good including if the background measurements are still taken in the same way on these models and if data can be automatically synced back to iPhone and therefore the HealthKit database when the iPhone is available. Thank you
Aug ’25
Reply to Configurable Watch Widgets "Unable to Load" watchOS 26 Issue
Ok interesting. My intent code is unique for WatchOS and iOS because I have different parameters for the widget depending on platform. This also means having unique timeline code, one timeline provider per intent. My intent which is only targeted to my Watch app widget extension looks like this: struct WatchTrendWidgetIntent: WidgetConfigurationIntent { static var title: LocalizedStringResource = "Trend Widget Configuration" static var description = IntentDescription("Configure trend Health type Watch Widgets.") static var isDiscoverable: Bool { return false} init() {} func perform() async throws -> some IntentResult { return .result() } @Parameter(title: "Chart Health Type", default: TrendHealthTypeOption.restHR) var healthType: TrendHealthTypeOption? @Parameter(title: "Show Day's Date", default: false) var showDaysDate: Bool } I still need to test this on WatchOS 26 beta 4 but on beta 3 it worked.... In the timeline I do this: func recommendations() -> [AppIntentRecommendation<WatchTrendWidgetIntent>] { // Only used in WatchOS if #available(watchOS 26, *) { return []} else ........ } So hopefully this helps. One of the reasons I asked about if you have existing widgets was because of this problem here: https://developer.apple.com/forums/thread/788784 Was just wondering if this issue applied to you if you had existing Watch complication/widget users?
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Jul ’25