Consumer chain: GitHub-only — relay removed from app+widget, Local Network permission gone
The LAN relay is unreachable from any phone outside the developer's LAN, so for App Store users a relay fallback was dead weight AND harmful: attempting the private IP fires the iOS Local Network prompt on a stranger's phone and adds a timeout before the bundled dump. GitHub raw is reachable anywhere the relay would be, and more reliably. - LiveChainProvider: GitHub mirror first EVERYWHERE (focused alert path no longer relay-first); LAN relay only joins behind the hidden dev flag fuelboard.relayFallback (Settings → Debug, keychain-first, off by default) - MirrorFuelProvider: focused() projection replaces the relay's server-side radius endpoint (fuel filter + within-radius + nearest-first + limit 500) — the alert path re-checks radius/fuel itself, so behaviour is identical - Widget: fetchFocused/fetchFuelOnly now GitHub-first via the chain (day-cache shared through the app group); relay + widget-diag GET gated on the same dev flag — off-LAN widgets no longer attempt local network at all - FuelBeacon: fires only when the dev flag is on — consumers make zero local-network attempts; /stats app-hit spike = GitHub down + dev flag on - Onboarding: Local Network machinery removed entirely (no probe, no prompt, no 12 s stall) — data page is now informational: prices download from the internet, no permissions needed. Replay on cellular can no longer hang. - Info.plist: NSLocalNetworkUsageDescription copy → optional dev-only wording - 95 tests (6 new: relay-skip-when-disabled x2, focused prefer-mirror, mirror focused projection x3, beacon dev-flag gate)
This commit is contained in:
@@ -301,6 +301,7 @@ struct FuelStore {
|
||||
static let alertsFollowSearchKey = "fuelboard.alertsFollowSearch" // Bool — alerts mirror the Stations-tab distance
|
||||
static let liveActivityFollowSearchKey = "fuelboard.liveActivityFollowSearch" // Bool — Live Activity mirrors the Stations-tab distance
|
||||
static let debugModeKey = "fuelboard.debugMode" // Bool — hidden dev flag
|
||||
static let relayFallbackKey = "fuelboard.relayFallback" // Bool — dev-only relay fallback
|
||||
static let liveActivityKey = "fuelboard.liveActivity" // Bool — Live Activity toggle
|
||||
static let liveActivityFuelKey = "fuelboard.liveActivityFuel" // FuelType raw value
|
||||
static let liveActivityRadiusKey = "fuelboard.liveActivityRadiusMiles" // Int miles (5/10/15)
|
||||
@@ -552,6 +553,22 @@ struct FuelStore {
|
||||
saveString(enabled ? "1" : "0", service: debugModeKey)
|
||||
}
|
||||
|
||||
// MARK: Relay fallback (dev-only)
|
||||
|
||||
/// Dev-only switch: re-inserts the LAN relay into the live chain as a
|
||||
/// fallback for home testing. OFF by default — consumers must never make
|
||||
/// a local-network attempt (the relay is unreachable off the developer's
|
||||
/// LAN, and the attempt itself would fire the iOS Local Network prompt).
|
||||
/// Toggled from Settings → Debug; keychain-first so it survives the
|
||||
/// delete → reinstall test loop like every other small setting.
|
||||
static func loadRelayFallbackEnabled() -> Bool {
|
||||
loadString(service: relayFallbackKey) == "1"
|
||||
}
|
||||
|
||||
static func saveRelayFallbackEnabled(_ enabled: Bool) {
|
||||
saveString(enabled ? "1" : "0", service: relayFallbackKey)
|
||||
}
|
||||
|
||||
// MARK: Favourites
|
||||
|
||||
/// A favourite pins a station FOR ONE fuel type. Starring a row while
|
||||
|
||||
Reference in New Issue
Block a user