From a721ccd187f6ff9fcff9d686feab0c065655692a Mon Sep 17 00:00:00 2001 From: FuelBoard Contributor Date: Wed, 12 Aug 2026 21:13:24 +0100 Subject: [PATCH] Raise deployment target to iOS 26.0; enable CarPlay Live Activity - IPHONEOS_DEPLOYMENT_TARGET 17.0 -> 26.0 (iPhone 11+, Apple's current floor) - Widget CarPlay disfavor is now unconditional (no #available guard) - Live Activity gains supplementalActivityFamilies([.small]) so it renders in the car's small slot on CarPlay Ultra (display-only: FuelBoard has no CarPlay entitlement, car taps can't launch anything) --- FuelBoard.xcodeproj/project.pbxproj | 4 ++-- FuelBoardWidgets/FuelBoardLiveActivityView.swift | 6 +++++- FuelBoardWidgets/FuelPriceWidget.swift | 13 ++----------- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/FuelBoard.xcodeproj/project.pbxproj b/FuelBoard.xcodeproj/project.pbxproj index 2ece08b..2d09c61 100644 --- a/FuelBoard.xcodeproj/project.pbxproj +++ b/FuelBoard.xcodeproj/project.pbxproj @@ -251,7 +251,7 @@ "DEBUG=1", "$(inherited)", ); - IPHONEOS_DEPLOYMENT_TARGET = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 26.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -276,7 +276,7 @@ ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 26.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; diff --git a/FuelBoardWidgets/FuelBoardLiveActivityView.swift b/FuelBoardWidgets/FuelBoardLiveActivityView.swift index 7758a6d..0ed4754 100644 --- a/FuelBoardWidgets/FuelBoardLiveActivityView.swift +++ b/FuelBoardWidgets/FuelBoardLiveActivityView.swift @@ -10,7 +10,10 @@ import WidgetKit /// The Live Activity itself — registered in the widget bundle alongside the /// regular price widget. No CarPlay entitlement involved: this renders on the -/// Lock Screen, Dynamic Island, and (iOS 26+ / CarPlay Ultra) the car display. +/// Lock Screen, Dynamic Island, and the car display (CarPlay Ultra, iOS 26+). +/// `.supplementalActivityFamilies([.small])` makes it eligible for the car's +/// small Live Activity slot — display-only there (FuelBoard is not a +/// CarPlay-enabled app, so car-side taps can't launch anything). struct FuelBoardLiveActivity: Widget { var body: some WidgetConfiguration { ActivityConfiguration(for: FuelBoardLiveActivityAttributes.self) { context in @@ -37,6 +40,7 @@ struct FuelBoardLiveActivity: Widget { .font(.caption2.bold().monospacedDigit()) } } + .supplementalActivityFamilies([.small]) } } diff --git a/FuelBoardWidgets/FuelPriceWidget.swift b/FuelBoardWidgets/FuelPriceWidget.swift index 3d89089..f4d6fc3 100644 --- a/FuelBoardWidgets/FuelPriceWidget.swift +++ b/FuelBoardWidgets/FuelPriceWidget.swift @@ -38,18 +38,9 @@ struct FuelPriceWidget: Widget { // CarPlay: mark as disfavored — FuelBoard is not a CarPlay app, so // widget taps there can never launch Maps (Apple only allows a widget // to launch its own app in CarPlay, and only CarPlay-enabled apps). - // Disfavored = read-only in the car, no dead interaction. The - // locations array is empty below iOS 26 where `.carPlay` doesn't - // exist, making the modifier a harmless no-op there. + // Disfavored = read-only in the car, no dead interaction. baseConfiguration() - .disfavoredLocations(carPlayLocations, for: [.systemSmall]) - } - - private var carPlayLocations: [WidgetLocation] { - if #available(iOS 26.0, *) { - return [.carPlay] - } - return [] + .disfavoredLocations([.carPlay], for: [.systemSmall]) } private func baseConfiguration() -> some WidgetConfiguration {