From cc2c6a87dc35757198e7396b5ced337caae814fc Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 7 Jul 2026 09:31:18 +0100 Subject: [PATCH] fix(ios): skip onboarding for configured gateways (#101481) * fix(ios): skip onboarding for configured gateways Fixes #98570 * fix(ios): prioritize saved gateway state --- apps/ios/Sources/RootTabsNavigation.swift | 10 +++--- .../ios/Tests/RootTabsPresentationTests.swift | 33 +++++++++++++++++++ 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/apps/ios/Sources/RootTabsNavigation.swift b/apps/ios/Sources/RootTabsNavigation.swift index 7af1fe9f9ec2..bdeaf16c4cd5 100644 --- a/apps/ios/Sources/RootTabsNavigation.swift +++ b/apps/ios/Sources/RootTabsNavigation.swift @@ -243,13 +243,15 @@ extension RootTabs { if gatewayConnected { return .none } + // Saved gateway state survives independently of the onboarding markers. + // Explicit resets bypass this route through evaluateOnboardingPresentation(force:). + if hasExistingGatewayConfig { + return .none + } if shouldPresentOnLaunch || !hasConnectedOnce || !onboardingComplete { return .onboarding } - if !hasExistingGatewayConfig { - return .settings - } - return .none + return .settings } static func shouldPresentQuickSetup( diff --git a/apps/ios/Tests/RootTabsPresentationTests.swift b/apps/ios/Tests/RootTabsPresentationTests.swift index a2bb8a8d8af2..2a037d219758 100644 --- a/apps/ios/Tests/RootTabsPresentationTests.swift +++ b/apps/ios/Tests/RootTabsPresentationTests.swift @@ -5,6 +5,39 @@ import UIKit @MainActor struct RootTabsPresentationTests { + @Test func `configured gateway bypasses launch request and stale onboarding markers`() { + let route = RootTabs.startupPresentationRoute( + gatewayConnected: false, + hasConnectedOnce: false, + onboardingComplete: false, + hasExistingGatewayConfig: true, + shouldPresentOnLaunch: true) + + #expect(route == .none) + } + + @Test func `fresh install presents onboarding`() { + let route = RootTabs.startupPresentationRoute( + gatewayConnected: false, + hasConnectedOnce: false, + onboardingComplete: false, + hasExistingGatewayConfig: false, + shouldPresentOnLaunch: false) + + #expect(route == .onboarding) + } + + @Test func `completed setup without gateway opens settings`() { + let route = RootTabs.startupPresentationRoute( + gatewayConnected: false, + hasConnectedOnce: true, + onboardingComplete: true, + hasExistingGatewayConfig: false, + shouldPresentOnLaunch: false) + + #expect(route == .settings) + } + @Test func `quick setup does not present when gateway already configured`() { let shouldPresent = RootTabs.shouldPresentQuickSetup( quickSetupDismissed: false,