diff --git a/FuelBoard/FuelBoardApp.swift b/FuelBoard/FuelBoardApp.swift index b71d702..04d36f5 100644 --- a/FuelBoard/FuelBoardApp.swift +++ b/FuelBoard/FuelBoardApp.swift @@ -21,7 +21,7 @@ struct FuelBoardApp: App { var body: some Scene { WindowGroup { - ContentView() + rootView .onOpenURL(perform: handleOpenURL) .onReceive(NotificationCenter.default.publisher(for: .fuelBoardWatchRefreshRequested)) { _ in WatchSyncManager.shared.pushSnapshot() @@ -32,6 +32,24 @@ struct FuelBoardApp: App { } } + /// QA hook (Debug builds only): `-qaScreenMarker` paints the whole screen a + /// flat magenta. A macOS capture of the Simulator window can then locate the + /// device-screen rectangle exactly, which yields a pixel-accurate mapping + /// from simulator screenshots to click coordinates. That is the only way to + /// drive REAL taps into the Simulator: `simctl` cannot, and this project has + /// no UI-test target. Everything else renders ContentView as normal. + @ViewBuilder private var rootView: some View { + #if DEBUG + if ProcessInfo.processInfo.arguments.contains("-qaScreenMarker") { + Color(red: 1, green: 0, blue: 1).ignoresSafeArea() + } else { + ContentView() + } + #else + ContentView() + #endif + } + #if DEBUG private func startQALiveActivity(fuel: FuelType) { let state = FuelBoardLiveActivityAttributes.ContentState( diff --git a/FuelBoard/StationDetailView.swift b/FuelBoard/StationDetailView.swift index 835c9f6..7a5e12f 100644 --- a/FuelBoard/StationDetailView.swift +++ b/FuelBoard/StationDetailView.swift @@ -138,6 +138,12 @@ struct StationDetailView: View { .frame(maxWidth: .infinity) } } + // REQUIRED: with the default button style a `List` row has ONE + // row-wide tap target, so two buttons in the same row BOTH fire + // on any tap inside the row (tapping Directions also showed the + // report-issue alert and vice versa). `.borderless` gives each + // button its own hit area — the half-row frame above. + .buttonStyle(.borderless) } Section { // The station name is NOT repeated here: the sheet header