Files
VanAligneiOS/CamperMonitor/Views/SettingsView.swift
T
fototeddyandClaude Sonnet 5 7fc9442aeb Add in-app demo mode toggle, enable alignment assistant in demo data
CAMPER_DEMO=1 only works when Xcode or simctl launches the process, so
a build installed locally and opened from the home screen had no way
to enable demo mode at all. Demo mode is now also a persisted toggle
under Settings > Entwicklung (Debug builds only), checked alongside the
environment variable. Takes effect after an app restart since
DeviceStore/BluetoothManager only read it at init.

Also mark the demo leveling sensor as live-connected - it had a level
reading but never a live link state, which left the Ausrichtungs-
Assistent button (and Live Activity toggle) disabled in demo mode.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-05 14:55:47 +02:00

66 lines
2.7 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import SwiftUI
/// App-weite Einstellungen. Bewusst knapp gehalten was ein einzelnes Gerät
/// betrifft, steht bei diesem Gerät.
struct SettingsView: View {
@AppStorage(AppSettings.showDiagnosticsKey) private var showDiagnostics = false
#if DEBUG
@AppStorage(DemoData.enabledKey) private var demoModeEnabled = false
#endif
@Environment(PhoneWatchLink.self) private var watch
@Environment(\.dismiss) private var dismiss
var body: some View {
NavigationStack {
List {
#if DEBUG
Section {
Toggle("Demo-Modus", isOn: $demoModeEnabled)
} header: {
Text("Entwicklung")
} footer: {
Text("Füllt die App mit erfundenen Fahrzeugen und Messwerten, um "
+ "Ansichten ohne echte Sensoren zu prüfen. Wirkt erst nach "
+ "einem Neustart der App einmal beenden (im App-Umschalter "
+ "nach oben wischen) und wieder öffnen.")
}
#endif
Section {
Toggle("Diagnose anzeigen", isOn: $showDiagnostics)
} header: {
Text("Fehlersuche")
} footer: {
Text("Zeigt bei jedem Gerät die technischen Angaben: erkanntes "
+ "Protokoll, Bluetooth-Merkmale, gesendete Befehle und die "
+ "Rohdaten der letzten Antwort. Für den Alltag nicht nötig "
+ "hilfreich, wenn ein Gerät sich nicht wie erwartet verhält.\n\n"
+ "Meldet ein Gerät einen Fehler, werden die Angaben ohnehin "
+ "eingeblendet, auch wenn das hier ausgeschaltet ist.")
}
Section {
LabeledContent("Apple Watch", value: watch.statusText)
} footer: {
Text("Die Uhr zeigt die Werte dieses iPhones und steuert die "
+ "Kühlbox darüber sie funkt nicht selbst zu den Geräten. "
+ "Dafür muss diese App laufen; im Hintergrund liefern "
+ "Neigungsmesser, BMS und Kühlbox weiter, die "
+ "Victron-Werbedaten erst wieder im Vordergrund.")
}
}
.navigationTitle("Einstellungen")
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .confirmationAction) {
Button("Fertig") { dismiss() }
}
}
}
}
}
enum AppSettings {
static let showDiagnosticsKey = "showDiagnostics"
}