forked from fritob/Camper-Monitor
Compare commits
2
Commits
8e5ee6927e
...
141e321a6f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
141e321a6f | ||
|
|
35f4e6fbcb |
@@ -430,16 +430,18 @@ eingerichtet wurden, wandern beim Update automatisch ins erste Profil.
|
|||||||
## Ohne Fahrzeug ansehen
|
## Ohne Fahrzeug ansehen
|
||||||
|
|
||||||
Ein Demo-Modus füllt die App mit erfundenen Fahrzeugen und Messwerten, damit
|
Ein Demo-Modus füllt die App mit erfundenen Fahrzeugen und Messwerten, damit
|
||||||
sich die Ansichten ohne Bluetooth prüfen lassen. Nur in Debug-Builds, auf zwei
|
sich die Ansichten ohne Bluetooth prüfen lassen – auch ohne die Hardware zur
|
||||||
Wegen einzuschalten:
|
Hand zu haben. Auf zwei Wegen einzuschalten:
|
||||||
|
|
||||||
* **Schalter in den Einstellungen** (*Einstellungen → Entwicklung →
|
* **Schalter in den Einstellungen** (*Einstellungen → Entwicklung →
|
||||||
Demo-Modus*) – der Weg für einen lokal installierten Build ohne
|
Demo-Modus*) – in jeder Build-Konfiguration verfügbar, auch in TestFlight-
|
||||||
Xcode-Verbindung, etwa auf dem eigenen iPhone. Wirkt erst nach einem
|
und App-Store-Builds. Der Weg für jeden lokal installierten Build ohne
|
||||||
Neustart der App (im App-Umschalter nach oben wischen, dann neu öffnen),
|
Xcode-Verbindung. Wirkt erst nach einem Neustart der App (im
|
||||||
weil `DeviceStore` und `BluetoothManager` den Stand nur beim Start lesen.
|
App-Umschalter nach oben wischen, dann neu öffnen), weil `DeviceStore` und
|
||||||
* **Umgebungsvariable** `CAMPER_DEMO=1` – in Xcode unter *Product → Scheme →
|
`BluetoothManager` den Stand nur beim Start lesen.
|
||||||
Edit Scheme → Run → Arguments*, oder im Simulator direkt:
|
* **Umgebungsvariable** `CAMPER_DEMO=1` – nur in Debug-Builds, in Xcode unter
|
||||||
|
*Product → Scheme → Edit Scheme → Run → Arguments*, oder im Simulator
|
||||||
|
direkt:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
xcrun simctl launch --terminate-running-process booted <deine-bundle-id>
|
xcrun simctl launch --terminate-running-process booted <deine-bundle-id>
|
||||||
|
|||||||
@@ -516,7 +516,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 0.1;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl;
|
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
@@ -548,7 +548,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 0.1;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl;
|
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
@@ -574,7 +574,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 0.1;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl.watchkitapp;
|
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl.watchkitapp;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SDKROOT = watchos;
|
SDKROOT = watchos;
|
||||||
@@ -606,7 +606,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 0.1;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl.watchkitapp;
|
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl.watchkitapp;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SDKROOT = watchos;
|
SDKROOT = watchos;
|
||||||
@@ -635,7 +635,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@executable_path/../../Frameworks",
|
"@executable_path/../../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 0.1;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl.watchkitapp.levelwidget;
|
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl.watchkitapp.levelwidget;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SDKROOT = watchos;
|
SDKROOT = watchos;
|
||||||
@@ -664,7 +664,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@executable_path/../../Frameworks",
|
"@executable_path/../../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 0.1;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl.watchkitapp.levelwidget;
|
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl.watchkitapp.levelwidget;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SDKROOT = watchos;
|
SDKROOT = watchos;
|
||||||
@@ -696,7 +696,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@executable_path/../../Frameworks",
|
"@executable_path/../../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 0.1;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl.VanControlLiveActivity;
|
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl.VanControlLiveActivity;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
@@ -725,7 +725,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@executable_path/../../Frameworks",
|
"@executable_path/../../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 0.1;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl.VanControlLiveActivity;
|
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl.VanControlLiveActivity;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
|
|||||||
@@ -3,21 +3,19 @@ import Foundation
|
|||||||
/// Füllt die App mit erfundenen Messwerten, damit sich die Ansichten ohne
|
/// Füllt die App mit erfundenen Messwerten, damit sich die Ansichten ohne
|
||||||
/// Fahrzeug und ohne Bluetooth prüfen lassen.
|
/// 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 \
|
/// xcrun simctl launch --terminate-running-process \
|
||||||
/// booted de.fritob.VanControl
|
/// booted de.fritob.VanControl
|
||||||
/// # mit: SIMCTL_CHILD_CAMPER_DEMO=1 davor
|
/// # 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 {
|
enum DemoData {
|
||||||
|
|
||||||
/// Schlüssel für den Einstellungen-Schalter, siehe `SettingsView`.
|
/// Schlüssel für den Einstellungen-Schalter, siehe `SettingsView`.
|
||||||
@@ -26,10 +24,8 @@ enum DemoData {
|
|||||||
static var isEnabled: Bool {
|
static var isEnabled: Bool {
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
if ProcessInfo.processInfo.environment["CAMPER_DEMO"] == "1" { return true }
|
if ProcessInfo.processInfo.environment["CAMPER_DEMO"] == "1" { return true }
|
||||||
return UserDefaults.standard.bool(forKey: enabledKey)
|
|
||||||
#else
|
|
||||||
return false
|
|
||||||
#endif
|
#endif
|
||||||
|
return UserDefaults.standard.bool(forKey: enabledKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
static let mainProfile = Profile(id: Profile.defaultID, name: "Kastenwagen",
|
static let mainProfile = Profile(id: Profile.defaultID, name: "Kastenwagen",
|
||||||
|
|||||||
@@ -4,16 +4,13 @@ import SwiftUI
|
|||||||
/// betrifft, steht bei diesem Gerät.
|
/// betrifft, steht bei diesem Gerät.
|
||||||
struct SettingsView: View {
|
struct SettingsView: View {
|
||||||
@AppStorage(AppSettings.showDiagnosticsKey) private var showDiagnostics = false
|
@AppStorage(AppSettings.showDiagnosticsKey) private var showDiagnostics = false
|
||||||
#if DEBUG
|
|
||||||
@AppStorage(DemoData.enabledKey) private var demoModeEnabled = false
|
@AppStorage(DemoData.enabledKey) private var demoModeEnabled = false
|
||||||
#endif
|
|
||||||
@Environment(PhoneWatchLink.self) private var watch
|
@Environment(PhoneWatchLink.self) private var watch
|
||||||
@Environment(\.dismiss) private var dismiss
|
@Environment(\.dismiss) private var dismiss
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
NavigationStack {
|
NavigationStack {
|
||||||
List {
|
List {
|
||||||
#if DEBUG
|
|
||||||
Section {
|
Section {
|
||||||
Toggle("Demo-Modus", isOn: $demoModeEnabled)
|
Toggle("Demo-Modus", isOn: $demoModeEnabled)
|
||||||
} header: {
|
} header: {
|
||||||
@@ -24,7 +21,6 @@ struct SettingsView: View {
|
|||||||
+ "einem Neustart der App – einmal beenden (im App-Umschalter "
|
+ "einem Neustart der App – einmal beenden (im App-Umschalter "
|
||||||
+ "nach oben wischen) und wieder öffnen.")
|
+ "nach oben wischen) und wieder öffnen.")
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
Section {
|
Section {
|
||||||
Toggle("Diagnose anzeigen", isOn: $showDiagnostics)
|
Toggle("Diagnose anzeigen", isOn: $showDiagnostics)
|
||||||
|
|||||||
Reference in New Issue
Block a user