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).