forked from fritob/Camper-Monitor
Der Einstellungen-Schalter für den Demo-Modus war in #if DEBUG eingeschlossen und damit in Archiven (Release-Konfiguration, wie sie Product → Archive und damit jeder TestFlight-Build verwendet) komplett herauskompiliert. TestFlight-Tester konnten den Demo-Modus dadurch nicht nutzen. DemoData.isEnabled und der Schalter in SettingsView sind jetzt konfigurationsunabhängig; nur die CAMPER_DEMO-Umgebungsvariable bleibt auf Debug-Builds beschränkt, da sie ohnehin nur über Xcode/simctl gesetzt werden kann. Build (Debug + Release) und Tests grün; per strings(1) im Release-Binary verifiziert, dass der Demo-Modus-Code tatsächlich mitkompiliert wird. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
62 lines
2.7 KiB
Swift
62 lines
2.7 KiB
Swift
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
|
||
@AppStorage(DemoData.enabledKey) private var demoModeEnabled = false
|
||
@Environment(PhoneWatchLink.self) private var watch
|
||
@Environment(\.dismiss) private var dismiss
|
||
|
||
var body: some View {
|
||
NavigationStack {
|
||
List {
|
||
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.")
|
||
}
|
||
|
||
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"
|
||
}
|