forked from fritob/Camper-Monitor
Demo-Modus auch in Release-/TestFlight-Builds verfügbar machen
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>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
8e5ee6927e
commit
35f4e6fbcb
@@ -3,21 +3,19 @@ import Foundation
|
||||
/// Füllt die App mit erfundenen Messwerten, damit sich die Ansichten ohne
|
||||
/// Fahrzeug und ohne Bluetooth prüfen lassen.
|
||||
///
|
||||
/// Nur in Debug-Builds, auf zwei Wegen einzuschalten:
|
||||
/// Auf zwei Wegen einzuschalten:
|
||||
///
|
||||
/// * Umgebungsvariable `CAMPER_DEMO=1` beim Start – praktisch im Simulator:
|
||||
/// * Schalter in den Einstellungen (`SettingsView`) – in jeder
|
||||
/// Build-Konfiguration verfügbar, auch in TestFlight- und
|
||||
/// App-Store-Builds. Der Weg für jeden lokal installierten Build ohne
|
||||
/// Xcode-Verbindung. Wirkt erst nach einem Neustart der App, weil
|
||||
/// `DeviceStore` und `BluetoothManager` den Stand nur beim Start lesen.
|
||||
/// * Umgebungsvariable `CAMPER_DEMO=1` beim Start – nur in Debug-Builds,
|
||||
/// praktisch im Simulator:
|
||||
///
|
||||
/// xcrun simctl launch --terminate-running-process \
|
||||
/// booted de.fritob.VanControl
|
||||
/// # mit: SIMCTL_CHILD_CAMPER_DEMO=1 davor
|
||||
///
|
||||
/// * Schalter in den Einstellungen (`SettingsView`) – der einzige Weg auf
|
||||
/// einem lokal installierten Build ohne Xcode-Verbindung, da sich dort
|
||||
/// keine Umgebungsvariable setzen lässt. Wirkt erst nach einem Neustart der
|
||||
/// App, weil `DeviceStore` und `BluetoothManager` den Stand nur beim Start
|
||||
/// lesen.
|
||||
///
|
||||
/// Im normalen Betrieb wird hiervon nichts ausgeführt.
|
||||
enum DemoData {
|
||||
|
||||
/// Schlüssel für den Einstellungen-Schalter, siehe `SettingsView`.
|
||||
@@ -26,10 +24,8 @@ enum DemoData {
|
||||
static var isEnabled: Bool {
|
||||
#if DEBUG
|
||||
if ProcessInfo.processInfo.environment["CAMPER_DEMO"] == "1" { return true }
|
||||
return UserDefaults.standard.bool(forKey: enabledKey)
|
||||
#else
|
||||
return false
|
||||
#endif
|
||||
return UserDefaults.standard.bool(forKey: enabledKey)
|
||||
}
|
||||
|
||||
static let mainProfile = Profile(id: Profile.defaultID, name: "Kastenwagen",
|
||||
|
||||
@@ -4,16 +4,13 @@ import SwiftUI
|
||||
/// 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: {
|
||||
@@ -24,7 +21,6 @@ struct SettingsView: View {
|
||||
+ "einem Neustart der App – einmal beenden (im App-Umschalter "
|
||||
+ "nach oben wischen) und wieder öffnen.")
|
||||
}
|
||||
#endif
|
||||
|
||||
Section {
|
||||
Toggle("Diagnose anzeigen", isOn: $showDiagnostics)
|
||||
|
||||
Reference in New Issue
Block a user