WatchKit

RSS for tag

Build apps that leverage watchOS features like background tasks, extended runtime sessions, and access to the Digital Crown using WatchKit.

Posts under WatchKit tag

53 Posts

Post

Replies

Boosts

Views

Activity

App Not Appearing in "Available Apps" List in Watch App
I’ve developed an Apple Watch extension for an existing iOS app. When I run the app on the watch via Xcode using the simulator, everything works fine. However, when I try to install it on my iPhone, the Watch app doesn’t show it in the "Available Apps" list, so I can't install it on the watch. The Apple Watch is connected to my iPhone, and I can see other apps available for installation without any issues. I also created a brand new project with watchOS support to troubleshoot, but the same problem occurred. Any ideas on how to resolve this?
2
0
641
Nov ’25
New WatchOS 26 App & View Lifecycle
The WatchOS app and view lifecycles for WatchKit and SwiftUI are documented in https://developer.apple.com/documentation/watchkit/working-with-the-watchos-app-life-cycle and https://developer.apple.com/documentation/swiftui/migrating-to-the-swiftui-life-cycle. WatchOS 26 appears to change the app & view lifecycle from the behavior in WatchOS 11, and no longer matches the documented lifecycles. On WatchOS 11, with a @WKApplicationDelegateAdaptor set, the following sequence of events would occur on app launch: WKApplicationDelegate applicationDidFinishLaunching in WKApplicationState .inactive. WKApplicationDelegate applicationWillEnterForeground in WKApplicationState .inactive. View .onAppear @Environment(.scenePhase) .inactive App onChange(of: @Environment(.scenePhase)): .active WKApplicationDelegate applicationDidBecomeActive in WKApplicationState .active. App onReceive(.didBecomeActiveNotification): WKApplicationState(rawValue: 0) View .onChange of: .@Environment(.scenePhase) .active In WatchOS 26, this is now: WKApplicationDelegate applicationDidFinishLaunching in WKApplicationState .inactive. WKApplicationDelegate applicationWillEnterForeground in WKApplicationState .inactive. App onChange(of: @Environment(.scenePhase)): .active WKApplicationDelegate applicationDidBecomeActive in WKApplicationState .active. View .onAppear @Environment(.scenePhase) .active When resuming from the background in WatchOS 11: App onChange(of: @Environment(.scenePhase)): inactive WKApplicationDelegate applicationWillEnterForeground in WKApplicationState .background. App onReceive(.willEnterForegroundNotification): WKApplicationState(rawValue: 2) View .onChange of: .@Environment(.scenePhase) inactive App onChange(of: @Environment(.scenePhase)): active WKApplicationDelegate applicationDidBecomeActive in WKApplicationState .active. App onReceive(.didBecomeActiveNotification): WKApplicationState(rawValue: 0) View .onChange of: .@Environment(.scenePhase) active The resume from background process in WatchOS 26 is baffling and seems like it must be a bug: App onChange(of: @Environment(.scenePhase)): inactive WKApplicationDelegate applicationWillEnterForeground in WKApplicationState .background. App onReceive(.willEnterForegroundNotification): WKApplicationState(rawValue: 2) App onChange(of: @Environment(.scenePhase)): active WKApplicationDelegate applicationDidBecomeActive in WKApplicationState .active. App onReceive(.didBecomeActiveNotification): WKApplicationState(rawValue: 0) View .onChange of: @Environment(.scenePhase) active App onChange(of: @Environment(.scenePhase)): inactive WKApplicationDelegate applicationWillResignActive in WKApplicationState .active. App onReceive(.willResignActiveNotification): WKApplicationState(rawValue: 0) View .onChange of: @Environment(.scenePhase) inactive App onChange(of: @Environment(.scenePhase)): active WKApplicationDelegate applicationDidBecomeActive in WKApplicationState .active. App onReceive(.didBecomeActiveNotification): WKApplicationState(rawValue: 0) View .onChange of: @Environment(.scenePhase) active The app becomes active, then inactive, then active again. The issues with these undocumented changes are: It is undocumented. If you relied on the previous process, this change can break your app. A view no longer receives .onChange of: .@Environment(.scenePhase) .active state change during the launch process. This bizarre applicationWillEnterForeground - applicationDidBecomeActive - applicationWillResignActive - applicationDidBecomeActive process on app resume does not match the documented process and is just...strange. Is this new process what is intended? Is it a bug? Can an Apple engineer explain this new App resume from background process and why the View is created slightly later in the App launch process, so it does not receive the .onChange of @Environment(.scenePhase) message? In contrast, the iOS 26 app lifecycle has not changed, and the iOS 18/26 app lifecycle closely follows the watchOS 11 app lifecycle (or watchOS 11 closely mimics iOS 18/26 with the exception that watchOS does not have a SceneDelegate).
0
0
245
Nov ’25
Complications not showing up after WatchOS 26
We are having an issue with our app after upgrading to WatchOS 26. After some time our complication disappears from the watch face. If you go to add it back, our app shows up with an empty icon placeholder and you are unable to tap it to add it back. Sometimes restarting the watch will bring it back, sometimes it does not. Has anyone experienced this? What should we be looking at to figure out why this is happening? Or could this be a bug in WatchOS 26?
3
1
487
Oct ’25
watchOS 26: Audio Playback Interrupted by Fitness Notifications Across Multiple Apps
After upgrading to watchOS 26, users report that when playing music on Apple Watch, if a fitness reminder is received, the music automatically pauses and users need to manually tap the play button to resume music playback. This phenomenon occurs with multiple music and podcast apps. This issue did not exist before the upgrade. We would like to know if this is an Apple bug or if there are any special development configurations needed?"
1
0
258
Oct ’25
Copying of app targets and corresponding files from older Xcode projects to a current one
Hi, so here's my situation: I am currently building an app of which I want to have an Apple Watch standalone version / companion (idk yet, also doesn't matter). For it to be compatible with basically every Watch except for the original (Series 0) I want support for down to watchOS 6, as many models ended there. I also don't need the newest features for basic functionality and I can still add more for newer versions while keeping the basic functionality for watchOS 6, so that is not a concern, I'd rather have the compatibility. However, watchOS 6 is the last version to require the Storyboard architecture with an app bundle and extension target. I did some research and found out that you can create that and set the development target to 6.0 while also having a SwiftUI target with a development target of 7.0. That would have the benefit of being able to use SwiftUI for modern features to give a nice experience while building a basic but functional version for 6.0 in Storyboard architecture. And it would figure out what to install on its own based on the watchOS version. Now the problem is, in Xcode 26 I can't create a watchOS target with the Storyboard architecture anymore, the option is just not there. So to solve that, I installed Xcode 12 on Big Sur and created one from the template in a new project. That project can be opened and edited with no problems in Xcode 26 as long as it is already configured, you just can't create a watchOS target with that architecture anymore, it has to be there already to work with it. Now I just need to copy the app and extension target with the corresponding files and configuration to my other project, and that is the problem. I can't seem to find proper way to copy that over, and that is where I need your help. Or maybe someone has a way to create that in Xcode 26, but from my understanding the template is gone. Thanks so much in advance
2
0
233
Oct ’25
Background Refresh Stalls After Charging on watchOS 26
Hello everyone, I’m a new developer still learning as I go. I’m building a simple watchOS app that tracks Apple Watch battery consumption, records hourly usage data, and uses that information to predict battery life in hours. I’ve run into an issue where background refresh completely stalls after charging and never recovers, regardless of what I do. The only way to restore normal behavior is to restart the watch. Background refresh can work fine for days, but if the watch is charging and a scheduled background refresh tries to run during that period, it appears to be deferred—and then remains in that deferred state indefinitely. Even reopening the app or scheduling new refreshes doesn’t recover it. Has anyone else encountered this behavior? Is there a reliable workaround? I’ve seen a few reports suggesting that there may be a regression in scheduleBackgroundRefresh() on watchOS 26, where tasks are never delivered after certain states. Any insights or confirmations would be greatly appreciated. Thank you!
1
0
241
Oct ’25
Has Background Refresh Stopped Working on watchOS 26?
Hi everyone! My Apple Watch app has relied for years on the WKApplication.scheduleBackgroundRefresh(...) method to keep the app updated in the background. The system would reliably trigger WKApplicationDelegate.handle(_:), where I would then schedule the next refresh task (usually 15 minutes later). As stated in the documentation, as long as there is a complication on the watch face, these background tasks should run at a relatively stable frequency. However, this approach seems to have stopped working on watchOS 26. I no longer receive any WKApplicationRefreshBackgroundTask at all. Has anyone else experienced this issue?
4
1
417
Oct ’25
in OS26, X Large circle uses small circle size for the maximum image sizes
Create a static widget kit based widget for watchKit. Use swiftUI and an image. IE on 42mm you can import a 141x141 image at 2x. Import a 141x141 image in the widget and load it in swiftUI. In watchOS 11.x simulator the image will allow up to the size for X Large circles, and on os26, it will not load and complain the image is too large and report the area for the smaller circle, IE 89x89 @ 2x for 41mm Also submitted a "feedback" ticket FB20506200 This is a big issue b/c the size difference for X large circles v the smaller circles is really large. To get existing images to load I am having to resize them down 75-80% on OS26 in the X Large complication.
1
0
131
Oct ’25
AppIntentConfiguration WatchOS & iOS inconsistent
I'm having problems with my released app with iOS & WatchOS 26 support. I've added AppIntentConfiguration support in the WatchOS app such that users can configure the complication. My complications also support multiple families and so I have slightly different configuration options available if its in the .accessoryRectangular slot or the .accessoryCircular one. This works fine on Apple Watch when editing the Watch face. Here you can then select the configuration options fine and they are correct for the different variants. However on iOS when configuring in the Apple Watch app on iPhone, the different complication size is ignored and the same configuration options are offered meaning they are wrong for one of them. I created a sample project, here is the app intent code: struct TestWidgetConfigurationIntent: AppIntent, WidgetConfigurationIntent { static var title: LocalizedStringResource = "New Widgets with Configuration" static var description = IntentDescription("Lots of stuff.") static var isDiscoverable: Bool { return false} init() {} func perform() async throws -> some IntentResult { return .result() } @Parameter(title: "Enable More Detail", default: true) var moreDetail: Bool @Parameter(title: "Enable Other Parameter", default: true) var otherParameter: Bool static var parameterSummary: some ParameterSummary { When(widgetFamily: .equalTo, .accessoryRectangular) { Summary("Test Info") { \.$moreDetail \.$otherParameter } } otherwise : { Summary("Test Info") { \.$moreDetail } } } } In WatchOS you get the correct configuration options: In iOS you do not, you get the same configuration option regardless of which family size you select: This could be a bug so I've filed feedback FB20328319. Otherwise if anyone has insights, it would be very appreciated. This is all tested on the current iOS 26.0 and WatchOS 26.0 versions. Thanks!
1
1
219
Oct ’25
Guidance / Documentation on iOS 18.6.1 Blood Oxygen Saturation
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.
7
0
472
Sep ’25
scenePhase not work consistently on watchOS
Hi there, I'm using WCSession to communicate watchOS companion with its iOS app. Every time watch app becomes "active", it needs to fetch data from iOS app, which works e.g. turning my hand back and forth. But only when the app is opened after it was minimised by pressing digital crown, it didn't fetch data. My assumption is that scenePhase doesn't emit a change on reopen. Here is the ContentView of watch app: import SwiftUI struct ContentView: View { @EnvironmentObject private var iOSAppConnector: IOSAppConnector @Environment(\.scenePhase) private var scenePhase @State private var showOpenCategories = true var body: some View { NavigationStack { VStack { if iOSAppConnector.items.isEmpty { WelcomeView() } else { ScrollView { VStack(spacing: 10) { ForEach(iOSAppConnector.items, id: \.self.name) { item in ItemView(item: item) } } } .task { DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { loadItems() } } .onChange(of: scenePhase, initial: true) { newPhase, _ in if newPhase == .active { loadItems() } } } fileprivate func loadItems() -> Void { if iOSAppConnector.items.isEmpty { iOSAppConnector.loadItems() } } } What could be the issue? Thanks. Best regards Sanjeev
1
0
326
Sep ’25
Upload failed Validation Issue WKApplication or WKWatchKitApp is required
I added a watchkit extension to an existing app. I get this error when uploading to App Store Connect. Building the archive itself is fine: Prepared archive for uploading Upload failed error: Validation failed Missing Info.plist value. A value for the key “WKApplication”, or “WKWatchKitApp” if your project has a WatchKit App Extension target, is required in “Runner.app/Watch/watch_Watch_App.app” bundle. For details, see: https://developer.apple.com/documentation/watchkit/creating_independent_watchos_apps/setting_up_a_watchos_project have the exact same issue when bundling. I added the flag manually in a additional plist fields entry with WKApplication=1 because my Info.Plist is generated and it didn't help. I wrote a custom Run Script Phase that added the flag and that didn't help as well. I need a reply from someone from Apple here. This needs to be fixed.
5
0
381
Aug ’25
Issue with opening browser on Apple Watch SE 2 – black screen
Hello, I am experiencing an issue when trying to open the browser on my Apple Watch SE 2 running the latest version, watchOS 11.6. When I attempt to visit any website, the browser opens and displays the URL at the top as if it is loading, but the screen remains black and no content is displayed. The internet connection is available, and all other apps on the watch work normally. This issue occurs only with the browser. I would appreciate any guidance or solution to resolve this problem. Thank you for your assistance.
2
0
605
Aug ’25
WatchOS smart alarm using WKExtendedRuntimeSession
I’m developing a smart alarm app that makes use of the extended runtime session. I’ve looked at the docs, and one of the background modes for Apple watch is smart alarm. The docs also say that an extended runtime session can only be scheduled one at a time, and while the app is open, which isn’t very intuitive for an alarm app that runs on schedules. I’ve seen other apps do something similar, but I’m trying to make this fully automated, without the user having to do too much manually to reschedule the smart alarm. Is there no way to do this? I would’ve thought the smart alarm background modes would allow to schedule more than 1/a repeating extended runtime session.
1
0
168
Jul ’25
WKApplication、WKWatchKitApp
Validation failed Missing Info.plist value. A value for the key “WKApplication”, or “WKWatchKitApp” if your project has a WatchKit App Extension target, is required in “demo.app/demo.app” bundle. For details, see: https://developer.apple.com/documentation/watchkit/creating_independent_watchos_apps/setting_up_a_watchos_project (ID: 1***fc8) 我们APP中没有watchkit相关功能,但是在xcode16.3上传包的时候一直提示此错误?是什么原因?
3
1
175
Jul ’25
Couple simple suggestions to make WKExtendedRuntimeSession a lot better
I just launched my watch app with alarms using WKExtendedRuntimeSession, as an api I wish it was possible to: set a small title/message on the alarm ui itself, right now all it displays is the "Alarm from < app name >" with the app icon, but it would be nice to be able to set a short 1~2 line message below it as well! be able to read the current scheduled date, right now it's only possible to know it's scheduled.
2
0
102
Jul ’25
Using notifyUserWithHaptic for Background Alarms in Standalone Watch App
I’m building a standalone Apple Watch smart alarm app that should trigger alarms on the watch in response to Bluetooth or internet events. This means the app operates in the background and attempts to trigger an alarm when such an event occurs. As far as I know, the appropriate API for this is WKExtendedRuntimeSession.notifyUserWithHaptic:repeatHandler. However, I can’t seem to start an extended runtime session while the app is in the background. I’m getting the following error: -[WKExtendedRuntimeSession _invalidationReasonAndDelegateCallbackErrorForError:outCallbackError:]:729: WKExtendedRuntimeSession hit internal error. Error Domain=com.apple.CarouselServices.SessionErrorDomain Code=17 "startSession cannot be called on a scheduled session" UserInfo={NSLocalizedDescription=startSession cannot be called on a scheduled session} Calling notifyUserWithHaptic directly also similarly fails. It seems notifyUserWithHaptic is intended to be scheduled during a foreground session to trigger at a later time, rather than being called ad hoc from a background context. Is there any way to create a proper alarm view on the Apple Watch from a background execution context?
0
0
157
Jul ’25
Apple Watch Logs and Debugging
Developing a standalone app for the Apple Watch. Unless I turn off Bluetooth on the paired iPhone, the Apple Watch’s Wi-Fi deactivates every ~30 seconds, which causes the connection to Xcode to drop. How is this supposed to work? I can see my app’s logs in Xcode, but I can’t view any other system logs from the Apple Watch. I tried using the Console app, with the iPhone connected via USB, trusted, etc, but I don't see any system logs. How can I access full system logs? Thanks!
1
0
237
Jul ’25
App Not Appearing in "Available Apps" List in Watch App
I’ve developed an Apple Watch extension for an existing iOS app. When I run the app on the watch via Xcode using the simulator, everything works fine. However, when I try to install it on my iPhone, the Watch app doesn’t show it in the "Available Apps" list, so I can't install it on the watch. The Apple Watch is connected to my iPhone, and I can see other apps available for installation without any issues. I also created a brand new project with watchOS support to troubleshoot, but the same problem occurred. Any ideas on how to resolve this?
Replies
2
Boosts
0
Views
641
Activity
Nov ’25
New WatchOS 26 App & View Lifecycle
The WatchOS app and view lifecycles for WatchKit and SwiftUI are documented in https://developer.apple.com/documentation/watchkit/working-with-the-watchos-app-life-cycle and https://developer.apple.com/documentation/swiftui/migrating-to-the-swiftui-life-cycle. WatchOS 26 appears to change the app & view lifecycle from the behavior in WatchOS 11, and no longer matches the documented lifecycles. On WatchOS 11, with a @WKApplicationDelegateAdaptor set, the following sequence of events would occur on app launch: WKApplicationDelegate applicationDidFinishLaunching in WKApplicationState .inactive. WKApplicationDelegate applicationWillEnterForeground in WKApplicationState .inactive. View .onAppear @Environment(.scenePhase) .inactive App onChange(of: @Environment(.scenePhase)): .active WKApplicationDelegate applicationDidBecomeActive in WKApplicationState .active. App onReceive(.didBecomeActiveNotification): WKApplicationState(rawValue: 0) View .onChange of: .@Environment(.scenePhase) .active In WatchOS 26, this is now: WKApplicationDelegate applicationDidFinishLaunching in WKApplicationState .inactive. WKApplicationDelegate applicationWillEnterForeground in WKApplicationState .inactive. App onChange(of: @Environment(.scenePhase)): .active WKApplicationDelegate applicationDidBecomeActive in WKApplicationState .active. View .onAppear @Environment(.scenePhase) .active When resuming from the background in WatchOS 11: App onChange(of: @Environment(.scenePhase)): inactive WKApplicationDelegate applicationWillEnterForeground in WKApplicationState .background. App onReceive(.willEnterForegroundNotification): WKApplicationState(rawValue: 2) View .onChange of: .@Environment(.scenePhase) inactive App onChange(of: @Environment(.scenePhase)): active WKApplicationDelegate applicationDidBecomeActive in WKApplicationState .active. App onReceive(.didBecomeActiveNotification): WKApplicationState(rawValue: 0) View .onChange of: .@Environment(.scenePhase) active The resume from background process in WatchOS 26 is baffling and seems like it must be a bug: App onChange(of: @Environment(.scenePhase)): inactive WKApplicationDelegate applicationWillEnterForeground in WKApplicationState .background. App onReceive(.willEnterForegroundNotification): WKApplicationState(rawValue: 2) App onChange(of: @Environment(.scenePhase)): active WKApplicationDelegate applicationDidBecomeActive in WKApplicationState .active. App onReceive(.didBecomeActiveNotification): WKApplicationState(rawValue: 0) View .onChange of: @Environment(.scenePhase) active App onChange(of: @Environment(.scenePhase)): inactive WKApplicationDelegate applicationWillResignActive in WKApplicationState .active. App onReceive(.willResignActiveNotification): WKApplicationState(rawValue: 0) View .onChange of: @Environment(.scenePhase) inactive App onChange(of: @Environment(.scenePhase)): active WKApplicationDelegate applicationDidBecomeActive in WKApplicationState .active. App onReceive(.didBecomeActiveNotification): WKApplicationState(rawValue: 0) View .onChange of: @Environment(.scenePhase) active The app becomes active, then inactive, then active again. The issues with these undocumented changes are: It is undocumented. If you relied on the previous process, this change can break your app. A view no longer receives .onChange of: .@Environment(.scenePhase) .active state change during the launch process. This bizarre applicationWillEnterForeground - applicationDidBecomeActive - applicationWillResignActive - applicationDidBecomeActive process on app resume does not match the documented process and is just...strange. Is this new process what is intended? Is it a bug? Can an Apple engineer explain this new App resume from background process and why the View is created slightly later in the App launch process, so it does not receive the .onChange of @Environment(.scenePhase) message? In contrast, the iOS 26 app lifecycle has not changed, and the iOS 18/26 app lifecycle closely follows the watchOS 11 app lifecycle (or watchOS 11 closely mimics iOS 18/26 with the exception that watchOS does not have a SceneDelegate).
Replies
0
Boosts
0
Views
245
Activity
Nov ’25
Managing watch faces on paired Apple Watch
Hi all. Does anyone know if there's a way to get a list of watch faces for a paired Apple Watch or to set the current face? Or is this just not allowed? I've taken a look at the WatchOS, WatchKit, and WatchConnectivity documentation and no luck there.
Replies
2
Boosts
0
Views
482
Activity
Oct ’25
Complications not showing up after WatchOS 26
We are having an issue with our app after upgrading to WatchOS 26. After some time our complication disappears from the watch face. If you go to add it back, our app shows up with an empty icon placeholder and you are unable to tap it to add it back. Sometimes restarting the watch will bring it back, sometimes it does not. Has anyone experienced this? What should we be looking at to figure out why this is happening? Or could this be a bug in WatchOS 26?
Replies
3
Boosts
1
Views
487
Activity
Oct ’25
watchOS 26: Audio Playback Interrupted by Fitness Notifications Across Multiple Apps
After upgrading to watchOS 26, users report that when playing music on Apple Watch, if a fitness reminder is received, the music automatically pauses and users need to manually tap the play button to resume music playback. This phenomenon occurs with multiple music and podcast apps. This issue did not exist before the upgrade. We would like to know if this is an Apple bug or if there are any special development configurations needed?"
Replies
1
Boosts
0
Views
258
Activity
Oct ’25
Copying of app targets and corresponding files from older Xcode projects to a current one
Hi, so here's my situation: I am currently building an app of which I want to have an Apple Watch standalone version / companion (idk yet, also doesn't matter). For it to be compatible with basically every Watch except for the original (Series 0) I want support for down to watchOS 6, as many models ended there. I also don't need the newest features for basic functionality and I can still add more for newer versions while keeping the basic functionality for watchOS 6, so that is not a concern, I'd rather have the compatibility. However, watchOS 6 is the last version to require the Storyboard architecture with an app bundle and extension target. I did some research and found out that you can create that and set the development target to 6.0 while also having a SwiftUI target with a development target of 7.0. That would have the benefit of being able to use SwiftUI for modern features to give a nice experience while building a basic but functional version for 6.0 in Storyboard architecture. And it would figure out what to install on its own based on the watchOS version. Now the problem is, in Xcode 26 I can't create a watchOS target with the Storyboard architecture anymore, the option is just not there. So to solve that, I installed Xcode 12 on Big Sur and created one from the template in a new project. That project can be opened and edited with no problems in Xcode 26 as long as it is already configured, you just can't create a watchOS target with that architecture anymore, it has to be there already to work with it. Now I just need to copy the app and extension target with the corresponding files and configuration to my other project, and that is the problem. I can't seem to find proper way to copy that over, and that is where I need your help. Or maybe someone has a way to create that in Xcode 26, but from my understanding the template is gone. Thanks so much in advance
Replies
2
Boosts
0
Views
233
Activity
Oct ’25
Background Refresh Stalls After Charging on watchOS 26
Hello everyone, I’m a new developer still learning as I go. I’m building a simple watchOS app that tracks Apple Watch battery consumption, records hourly usage data, and uses that information to predict battery life in hours. I’ve run into an issue where background refresh completely stalls after charging and never recovers, regardless of what I do. The only way to restore normal behavior is to restart the watch. Background refresh can work fine for days, but if the watch is charging and a scheduled background refresh tries to run during that period, it appears to be deferred—and then remains in that deferred state indefinitely. Even reopening the app or scheduling new refreshes doesn’t recover it. Has anyone else encountered this behavior? Is there a reliable workaround? I’ve seen a few reports suggesting that there may be a regression in scheduleBackgroundRefresh() on watchOS 26, where tasks are never delivered after certain states. Any insights or confirmations would be greatly appreciated. Thank you!
Replies
1
Boosts
0
Views
241
Activity
Oct ’25
Has Background Refresh Stopped Working on watchOS 26?
Hi everyone! My Apple Watch app has relied for years on the WKApplication.scheduleBackgroundRefresh(...) method to keep the app updated in the background. The system would reliably trigger WKApplicationDelegate.handle(_:), where I would then schedule the next refresh task (usually 15 minutes later). As stated in the documentation, as long as there is a complication on the watch face, these background tasks should run at a relatively stable frequency. However, this approach seems to have stopped working on watchOS 26. I no longer receive any WKApplicationRefreshBackgroundTask at all. Has anyone else experienced this issue?
Replies
4
Boosts
1
Views
417
Activity
Oct ’25
in OS26, X Large circle uses small circle size for the maximum image sizes
Create a static widget kit based widget for watchKit. Use swiftUI and an image. IE on 42mm you can import a 141x141 image at 2x. Import a 141x141 image in the widget and load it in swiftUI. In watchOS 11.x simulator the image will allow up to the size for X Large circles, and on os26, it will not load and complain the image is too large and report the area for the smaller circle, IE 89x89 @ 2x for 41mm Also submitted a "feedback" ticket FB20506200 This is a big issue b/c the size difference for X large circles v the smaller circles is really large. To get existing images to load I am having to resize them down 75-80% on OS26 in the X Large complication.
Replies
1
Boosts
0
Views
131
Activity
Oct ’25
AppIntentConfiguration WatchOS & iOS inconsistent
I'm having problems with my released app with iOS & WatchOS 26 support. I've added AppIntentConfiguration support in the WatchOS app such that users can configure the complication. My complications also support multiple families and so I have slightly different configuration options available if its in the .accessoryRectangular slot or the .accessoryCircular one. This works fine on Apple Watch when editing the Watch face. Here you can then select the configuration options fine and they are correct for the different variants. However on iOS when configuring in the Apple Watch app on iPhone, the different complication size is ignored and the same configuration options are offered meaning they are wrong for one of them. I created a sample project, here is the app intent code: struct TestWidgetConfigurationIntent: AppIntent, WidgetConfigurationIntent { static var title: LocalizedStringResource = "New Widgets with Configuration" static var description = IntentDescription("Lots of stuff.") static var isDiscoverable: Bool { return false} init() {} func perform() async throws -> some IntentResult { return .result() } @Parameter(title: "Enable More Detail", default: true) var moreDetail: Bool @Parameter(title: "Enable Other Parameter", default: true) var otherParameter: Bool static var parameterSummary: some ParameterSummary { When(widgetFamily: .equalTo, .accessoryRectangular) { Summary("Test Info") { \.$moreDetail \.$otherParameter } } otherwise : { Summary("Test Info") { \.$moreDetail } } } } In WatchOS you get the correct configuration options: In iOS you do not, you get the same configuration option regardless of which family size you select: This could be a bug so I've filed feedback FB20328319. Otherwise if anyone has insights, it would be very appreciated. This is all tested on the current iOS 26.0 and WatchOS 26.0 versions. Thanks!
Replies
1
Boosts
1
Views
219
Activity
Oct ’25
Guidance / Documentation on iOS 18.6.1 Blood Oxygen Saturation
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.
Replies
7
Boosts
0
Views
472
Activity
Sep ’25
scenePhase not work consistently on watchOS
Hi there, I'm using WCSession to communicate watchOS companion with its iOS app. Every time watch app becomes "active", it needs to fetch data from iOS app, which works e.g. turning my hand back and forth. But only when the app is opened after it was minimised by pressing digital crown, it didn't fetch data. My assumption is that scenePhase doesn't emit a change on reopen. Here is the ContentView of watch app: import SwiftUI struct ContentView: View { @EnvironmentObject private var iOSAppConnector: IOSAppConnector @Environment(\.scenePhase) private var scenePhase @State private var showOpenCategories = true var body: some View { NavigationStack { VStack { if iOSAppConnector.items.isEmpty { WelcomeView() } else { ScrollView { VStack(spacing: 10) { ForEach(iOSAppConnector.items, id: \.self.name) { item in ItemView(item: item) } } } .task { DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { loadItems() } } .onChange(of: scenePhase, initial: true) { newPhase, _ in if newPhase == .active { loadItems() } } } fileprivate func loadItems() -> Void { if iOSAppConnector.items.isEmpty { iOSAppConnector.loadItems() } } } What could be the issue? Thanks. Best regards Sanjeev
Replies
1
Boosts
0
Views
326
Activity
Sep ’25
Upload failed Validation Issue WKApplication or WKWatchKitApp is required
I added a watchkit extension to an existing app. I get this error when uploading to App Store Connect. Building the archive itself is fine: Prepared archive for uploading Upload failed error: Validation failed Missing Info.plist value. A value for the key “WKApplication”, or “WKWatchKitApp” if your project has a WatchKit App Extension target, is required in “Runner.app/Watch/watch_Watch_App.app” bundle. For details, see: https://developer.apple.com/documentation/watchkit/creating_independent_watchos_apps/setting_up_a_watchos_project have the exact same issue when bundling. I added the flag manually in a additional plist fields entry with WKApplication=1 because my Info.Plist is generated and it didn't help. I wrote a custom Run Script Phase that added the flag and that didn't help as well. I need a reply from someone from Apple here. This needs to be fixed.
Replies
5
Boosts
0
Views
381
Activity
Aug ’25
Issue with opening browser on Apple Watch SE 2 – black screen
Hello, I am experiencing an issue when trying to open the browser on my Apple Watch SE 2 running the latest version, watchOS 11.6. When I attempt to visit any website, the browser opens and displays the URL at the top as if it is loading, but the screen remains black and no content is displayed. The internet connection is available, and all other apps on the watch work normally. This issue occurs only with the browser. I would appreciate any guidance or solution to resolve this problem. Thank you for your assistance.
Replies
2
Boosts
0
Views
605
Activity
Aug ’25
Nearly activated O2 function on updated Apple Watch, while iPhone is in public beta 3 release
I updated my watch to take advantage of the reactivated blood oxygen/O2 function, but with my iPhone on public beta 3, it still shows unavailable. Will there be an update to beta three to allow this newly reactivated Apple Watch feature to function?
Replies
1
Boosts
0
Views
116
Activity
Aug ’25
WatchOS smart alarm using WKExtendedRuntimeSession
I’m developing a smart alarm app that makes use of the extended runtime session. I’ve looked at the docs, and one of the background modes for Apple watch is smart alarm. The docs also say that an extended runtime session can only be scheduled one at a time, and while the app is open, which isn’t very intuitive for an alarm app that runs on schedules. I’ve seen other apps do something similar, but I’m trying to make this fully automated, without the user having to do too much manually to reschedule the smart alarm. Is there no way to do this? I would’ve thought the smart alarm background modes would allow to schedule more than 1/a repeating extended runtime session.
Replies
1
Boosts
0
Views
168
Activity
Jul ’25
WKApplication、WKWatchKitApp
Validation failed Missing Info.plist value. A value for the key “WKApplication”, or “WKWatchKitApp” if your project has a WatchKit App Extension target, is required in “demo.app/demo.app” bundle. For details, see: https://developer.apple.com/documentation/watchkit/creating_independent_watchos_apps/setting_up_a_watchos_project (ID: 1***fc8) 我们APP中没有watchkit相关功能,但是在xcode16.3上传包的时候一直提示此错误?是什么原因?
Replies
3
Boosts
1
Views
175
Activity
Jul ’25
Couple simple suggestions to make WKExtendedRuntimeSession a lot better
I just launched my watch app with alarms using WKExtendedRuntimeSession, as an api I wish it was possible to: set a small title/message on the alarm ui itself, right now all it displays is the "Alarm from < app name >" with the app icon, but it would be nice to be able to set a short 1~2 line message below it as well! be able to read the current scheduled date, right now it's only possible to know it's scheduled.
Replies
2
Boosts
0
Views
102
Activity
Jul ’25
Using notifyUserWithHaptic for Background Alarms in Standalone Watch App
I’m building a standalone Apple Watch smart alarm app that should trigger alarms on the watch in response to Bluetooth or internet events. This means the app operates in the background and attempts to trigger an alarm when such an event occurs. As far as I know, the appropriate API for this is WKExtendedRuntimeSession.notifyUserWithHaptic:repeatHandler. However, I can’t seem to start an extended runtime session while the app is in the background. I’m getting the following error: -[WKExtendedRuntimeSession _invalidationReasonAndDelegateCallbackErrorForError:outCallbackError:]:729: WKExtendedRuntimeSession hit internal error. Error Domain=com.apple.CarouselServices.SessionErrorDomain Code=17 "startSession cannot be called on a scheduled session" UserInfo={NSLocalizedDescription=startSession cannot be called on a scheduled session} Calling notifyUserWithHaptic directly also similarly fails. It seems notifyUserWithHaptic is intended to be scheduled during a foreground session to trigger at a later time, rather than being called ad hoc from a background context. Is there any way to create a proper alarm view on the Apple Watch from a background execution context?
Replies
0
Boosts
0
Views
157
Activity
Jul ’25
Apple Watch Logs and Debugging
Developing a standalone app for the Apple Watch. Unless I turn off Bluetooth on the paired iPhone, the Apple Watch’s Wi-Fi deactivates every ~30 seconds, which causes the connection to Xcode to drop. How is this supposed to work? I can see my app’s logs in Xcode, but I can’t view any other system logs from the Apple Watch. I tried using the Console app, with the iPhone connected via USB, trusted, etc, but I don't see any system logs. How can I access full system logs? Thanks!
Replies
1
Boosts
0
Views
237
Activity
Jul ’25