App-Namen im iOS-Projekt auf VanControl vereinheitlichen

CamperMonitor (Haupt-Repo) und VanAligneiOS (aus dem gemergten
solar-integration-Branch) liefen unter zwei verschiedenen internen
Namen, obwohl die App nach aussen längst einheitlich "VanControl Pro"
heisst. Jetzt durchgängig VanControl:

- Ordner: CamperMonitor/, CamperMonitorWatch/, CamperMonitorComplication/,
  VanAligneiOSWidget/ → VanControl/, VanControlWatch/,
  VanControlComplication/, VanControlWidget/
- Xcode-Projekt: CamperMonitor.xcodeproj → VanControl.xcodeproj, alle
  Targets/Schemes/Produktnamen entsprechend umbenannt
- Bundle-Identifier auf Wunsch mitgeändert: de.s0.fototeddy.VanControl*
  (App noch nicht veröffentlicht); dabei auch die
  WKCompanionAppBundleIdentifier-Werte korrigiert, die noch das alte
  de.fritob-Präfix statt des tatsächlichen de.s0.fototeddy-Präfixes
  trugen
- Swift-Dateien/Typen: CamperMonitorApp → VanControlApp,
  VanAligneiOSWidget* → VanControlWidget*
- Config/*-Info.plist umbenannt, README.md/Tools/README.md/run-tests.sh
  auf die neuen Pfade angepasst

Bewusst unverändert: firmware/vanalign und alle Bezüge auf "VanAlign"
als Namen der Neigungsmesser-Hardware (eigenständiges Produkt, kein
App-Name) sowie der komplette Android/-Ordner.

Build (App, Watch, Debug) und Protokoll-Testlauf grün.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
fototeddy
2026-09-06 21:25:28 +02:00
co-authored by Claude Sonnet 5
parent 83ea85f3b8
commit 303a9735d0
79 changed files with 190 additions and 190 deletions
+9 -9
View File
@@ -24,18 +24,18 @@ Die Firmware des Neigungsmessers liegt mit im Projekt, siehe
## Bauen und installieren
```bash
open /Users/fritob/GIT/Camper-Management/CamperMonitor.xcodeproj
open /Users/fritob/GIT/Camper-Management/VanControl.xcodeproj
```
Dann in Xcode:
1. Target `CamperMonitor`**Signing & Capabilities** → dein Apple-Team auswählen.
Die Bundle-ID `de.fritob.CamperMonitor` ggf. anpassen, falls sie schon vergeben ist.
Dasselbe beim Target `CamperMonitorWatch`; dessen Bundle-ID muss die des
1. Target `VanControl`**Signing & Capabilities** → dein Apple-Team auswählen.
Die Bundle-ID `de.fritob.VanControl` ggf. anpassen, falls sie schon vergeben ist.
Dasselbe beim Target `VanControlWatch`; dessen Bundle-ID muss die des
iPhones mit angehängtem `.watchkitapp` bleiben.
2. iPhone per Kabel anschließen, oben als Ziel wählen, ⌘R.
Das Schema `CamperMonitor` baut die Watch-App mit und bettet sie ein. Dafür
Das Schema `VanControl` baut die Watch-App mit und bettet sie ein. Dafür
muss die watchOS-Plattform in Xcode installiert sein sonst bricht schon das
Übersetzen des Symbolkatalogs ab:
@@ -376,7 +376,7 @@ Run → Arguments* die Umgebungsvariable `CAMPER_DEMO` auf `1` setzen. Er greift
nur in Debug-Builds.
Die Watch-App kennt denselben Schalter und braucht dann kein iPhone: Im Schema
`CamperMonitorWatch` dieselbe Variable setzen. Die Neigung wandert dort
`VanControlWatch` dieselbe Variable setzen. Die Neigung wandert dort
langsam hin und her, sonst hätte der Ausrichtungs-Assistent nichts zu zeigen.
## Protokolle prüfen
@@ -413,7 +413,7 @@ Shared/ In iPhone- und Watch-App übersetzt
└── WatchLink/
└── WatchLink.swift Datensatz und Befehle zwischen iPhone und Uhr
CamperMonitor/
VanControl/
├── Bluetooth/
│ ├── BluetoothManager.swift Zentraler Scan, Verbindungen, Verlauf
│ ├── VictronAdvertisement.swift Advertisement entschlüsseln und auswerten
@@ -443,7 +443,7 @@ CamperMonitor/
├── SensorSetupView.swift Assistent für die Einbaulage
└── AddDeviceView.swift Scannen und Einrichten
CamperMonitorWatch/ watchOS-App
VanControlWatch/ watchOS-App
├── CamperWatchApp.swift Einstieg, meldet dem iPhone das Hinschauen
├── PhoneLink.swift Gegenstelle zum iPhone
├── WatchLevelRadio.swift Eigene Bluetooth-Verbindung zum Neigungsmesser
@@ -458,7 +458,7 @@ CamperMonitorWatch/ watchOS-App
└── WatchFridgeControls.swift Kühlbox stellen
Config/
└── CamperMonitor-Info.plist Nur der Hintergrundbetrieb für die Uhr
└── VanControl-Info.plist Nur der Hintergrundbetrieb für die Uhr
```
## Bekannte Grenzen
+2 -2
View File
@@ -13,7 +13,7 @@ Anschließend skaliert es auf 1024×1024 ohne Alphakanal.
```bash
swiftc -O -o /tmp/make-app-icon Tools/make-app-icon.swift
/tmp/make-app-icon logo.png CamperMonitor/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.png
/tmp/make-app-icon logo.png VanControl/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.png
```
Nur nötig, wenn `logo.png` sich ändert das erzeugte Icon liegt im Repo.
@@ -32,7 +32,7 @@ gefüllte Form, in der die Details erhalten bleiben.
```bash
swiftc -O -o /tmp/make-vehicle-art Tools/make-vehicle-art.swift
sips --resampleHeight 600 heckansicht.png --out /tmp/rear.png
/tmp/make-vehicle-art /tmp/rear.png CamperMonitor/Assets.xcassets/VansterRear.imageset/VansterRear.png
/tmp/make-vehicle-art /tmp/rear.png VanControl/Assets.xcassets/VansterRear.imageset/VansterRear.png
```
Jedes Fahrzeug-Grafikset (siehe `VehicleGraphicStyle`) hat sein eigenes
@@ -1,18 +0,0 @@
//
// VanAligneiOSWidgetBundle.swift
// VanAligneiOSWidget
//
// Created by Christopher Helberg on 02.09.26.
//
import WidgetKit
import SwiftUI
@main
struct VanAligneiOSWidgetBundle: WidgetBundle {
var body: some Widget {
VanAligneiOSWidget()
VanAligneiOSWidgetControl()
VanAligneiOSWidgetLiveActivity()
}
}
@@ -7,13 +7,13 @@
objects = {
/* Begin PBXBuildFile section */
AA0000000000000000000027 /* CamperMonitorWatch.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = AA0000000000000000000016 /* CamperMonitorWatch.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
AA0000000000000000000042 /* CamperMonitorComplication.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = AA0000000000000000000032 /* CamperMonitorComplication.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
AA0000000000000000000027 /* VanControlWatch.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = AA0000000000000000000016 /* VanControlWatch.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
AA0000000000000000000042 /* VanControlComplication.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = AA0000000000000000000032 /* VanControlComplication.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
AA0000000000000000000046 /* ActivityKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA0000000000000000000053 /* ActivityKit.framework */; };
AA0000000000000000000047 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA0000000000000000000052 /* SwiftUI.framework */; };
AA0000000000000000000048 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA0000000000000000000051 /* WidgetKit.framework */; };
AA0000000000000000000049 /* ActivityKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA0000000000000000000053 /* ActivityKit.framework */; };
AA0000000000000000000050 /* VanAligneiOSWidgetExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = AA0000000000000000000054 /* VanAligneiOSWidgetExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
AA0000000000000000000050 /* VanControlWidgetExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = AA0000000000000000000054 /* VanControlWidgetExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -22,21 +22,21 @@
containerPortal = AA0000000000000000000009 /* Project object */;
proxyType = 1;
remoteGlobalIDString = AA0000000000000000000022;
remoteInfo = CamperMonitorWatch;
remoteInfo = VanControlWatch;
};
AA0000000000000000000043 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = AA0000000000000000000009 /* Project object */;
proxyType = 1;
remoteGlobalIDString = AA0000000000000000000037;
remoteInfo = CamperMonitorComplication;
remoteInfo = VanControlComplication;
};
AA0000000000000000000063 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = AA0000000000000000000009 /* Project object */;
proxyType = 1;
remoteGlobalIDString = AA0000000000000000000062;
remoteInfo = VanAligneiOSWidgetExtension;
remoteInfo = VanControlWidgetExtension;
};
/* End PBXContainerItemProxy section */
@@ -47,7 +47,7 @@
dstPath = "$(CONTENTS_FOLDER_PATH)/Watch";
dstSubfolderSpec = 16;
files = (
AA0000000000000000000027 /* CamperMonitorWatch.app in Embed Watch Content */,
AA0000000000000000000027 /* VanControlWatch.app in Embed Watch Content */,
);
name = "Embed Watch Content";
runOnlyForDeploymentPostprocessing = 0;
@@ -58,7 +58,7 @@
dstPath = "";
dstSubfolderSpec = 13;
files = (
AA0000000000000000000042 /* CamperMonitorComplication.appex in Embed Foundation Extensions */,
AA0000000000000000000042 /* VanControlComplication.appex in Embed Foundation Extensions */,
);
name = "Embed Foundation Extensions";
runOnlyForDeploymentPostprocessing = 0;
@@ -69,7 +69,7 @@
dstPath = "";
dstSubfolderSpec = 13;
files = (
AA0000000000000000000050 /* VanAligneiOSWidgetExtension.appex in Embed Foundation Extensions */,
AA0000000000000000000050 /* VanControlWidgetExtension.appex in Embed Foundation Extensions */,
);
name = "Embed Foundation Extensions";
runOnlyForDeploymentPostprocessing = 0;
@@ -77,36 +77,36 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
AA0000000000000000000001 /* CamperMonitor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CamperMonitor.app; sourceTree = BUILT_PRODUCTS_DIR; };
AA0000000000000000000016 /* CamperMonitorWatch.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CamperMonitorWatch.app; sourceTree = BUILT_PRODUCTS_DIR; };
AA0000000000000000000030 /* CamperMonitor-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "CamperMonitor-Info.plist"; sourceTree = "<group>"; };
AA0000000000000000000032 /* CamperMonitorComplication.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = CamperMonitorComplication.appex; sourceTree = BUILT_PRODUCTS_DIR; };
AA0000000000000000000045 /* CamperMonitorComplication-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "CamperMonitorComplication-Info.plist"; sourceTree = "<group>"; };
AA0000000000000000000001 /* VanControl.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = VanControl.app; sourceTree = BUILT_PRODUCTS_DIR; };
AA0000000000000000000016 /* VanControlWatch.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = VanControlWatch.app; sourceTree = BUILT_PRODUCTS_DIR; };
AA0000000000000000000030 /* VanControl-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "VanControl-Info.plist"; sourceTree = "<group>"; };
AA0000000000000000000032 /* VanControlComplication.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = VanControlComplication.appex; sourceTree = BUILT_PRODUCTS_DIR; };
AA0000000000000000000045 /* VanControlComplication-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "VanControlComplication-Info.plist"; sourceTree = "<group>"; };
AA0000000000000000000051 /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; };
AA0000000000000000000052 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; };
AA0000000000000000000053 /* ActivityKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ActivityKit.framework; path = System/Library/Frameworks/ActivityKit.framework; sourceTree = SDKROOT; };
AA0000000000000000000054 /* VanAligneiOSWidgetExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = VanAligneiOSWidgetExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
AA0000000000000000000054 /* VanControlWidgetExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = VanControlWidgetExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
AA0000000000000000000055 /* Exceptions for "VanAligneiOSWidget" folder in "VanAligneiOSWidgetExtension" target */ = {
AA0000000000000000000055 /* Exceptions for "VanControlWidget" folder in "VanControlWidgetExtension" target */ = {
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
membershipExceptions = (
Info.plist,
);
target = AA0000000000000000000062 /* VanAligneiOSWidgetExtension */;
target = AA0000000000000000000062 /* VanControlWidgetExtension */;
};
/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
/* Begin PBXFileSystemSynchronizedRootGroup section */
AA0000000000000000000002 /* CamperMonitor */ = {
AA0000000000000000000002 /* VanControl */ = {
isa = PBXFileSystemSynchronizedRootGroup;
path = CamperMonitor;
path = VanControl;
sourceTree = "<group>";
};
AA0000000000000000000017 /* CamperMonitorWatch */ = {
AA0000000000000000000017 /* VanControlWatch */ = {
isa = PBXFileSystemSynchronizedRootGroup;
path = CamperMonitorWatch;
path = VanControlWatch;
sourceTree = "<group>";
};
AA0000000000000000000018 /* Shared */ = {
@@ -114,17 +114,17 @@
path = Shared;
sourceTree = "<group>";
};
AA0000000000000000000033 /* CamperMonitorComplication */ = {
AA0000000000000000000033 /* VanControlComplication */ = {
isa = PBXFileSystemSynchronizedRootGroup;
path = CamperMonitorComplication;
path = VanControlComplication;
sourceTree = "<group>";
};
AA0000000000000000000056 /* VanAligneiOSWidget */ = {
AA0000000000000000000056 /* VanControlWidget */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
AA0000000000000000000055 /* Exceptions for "VanAligneiOSWidget" folder in "VanAligneiOSWidgetExtension" target */,
AA0000000000000000000055 /* Exceptions for "VanControlWidget" folder in "VanControlWidgetExtension" target */,
);
path = VanAligneiOSWidget;
path = VanControlWidget;
sourceTree = "<group>";
};
AA0000000000000000000057 /* SharedActivity */ = {
@@ -173,13 +173,13 @@
AA0000000000000000000004 = {
isa = PBXGroup;
children = (
AA0000000000000000000002 /* CamperMonitor */,
AA0000000000000000000017 /* CamperMonitorWatch */,
AA0000000000000000000033 /* CamperMonitorComplication */,
AA0000000000000000000002 /* VanControl */,
AA0000000000000000000017 /* VanControlWatch */,
AA0000000000000000000033 /* VanControlComplication */,
AA0000000000000000000018 /* Shared */,
AA0000000000000000000057 /* SharedActivity */,
AA0000000000000000000031 /* Config */,
AA0000000000000000000056 /* VanAligneiOSWidget */,
AA0000000000000000000056 /* VanControlWidget */,
AA0000000000000000000059 /* Frameworks */,
AA0000000000000000000005 /* Products */,
);
@@ -188,14 +188,23 @@
AA0000000000000000000005 /* Products */ = {
isa = PBXGroup;
children = (
AA0000000000000000000001 /* CamperMonitor.app */,
AA0000000000000000000016 /* CamperMonitorWatch.app */,
AA0000000000000000000032 /* CamperMonitorComplication.appex */,
AA0000000000000000000054 /* VanAligneiOSWidgetExtension.appex */,
AA0000000000000000000001 /* VanControl.app */,
AA0000000000000000000016 /* VanControlWatch.app */,
AA0000000000000000000032 /* VanControlComplication.appex */,
AA0000000000000000000054 /* VanControlWidgetExtension.appex */,
);
name = Products;
sourceTree = "<group>";
};
AA0000000000000000000031 /* Config */ = {
isa = PBXGroup;
children = (
AA0000000000000000000030 /* VanControl-Info.plist */,
AA0000000000000000000045 /* VanControlComplication-Info.plist */,
);
path = Config;
sourceTree = "<group>";
};
AA0000000000000000000059 /* Frameworks */ = {
isa = PBXGroup;
children = (
@@ -206,21 +215,12 @@
name = Frameworks;
sourceTree = "<group>";
};
AA0000000000000000000031 /* Config */ = {
isa = PBXGroup;
children = (
AA0000000000000000000030 /* CamperMonitor-Info.plist */,
AA0000000000000000000045 /* CamperMonitorComplication-Info.plist */,
);
path = Config;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
AA0000000000000000000006 /* CamperMonitor */ = {
AA0000000000000000000006 /* VanControl */ = {
isa = PBXNativeTarget;
buildConfigurationList = AA0000000000000000000011 /* Build configuration list for PBXNativeTarget "CamperMonitor" */;
buildConfigurationList = AA0000000000000000000011 /* Build configuration list for PBXNativeTarget "VanControl" */;
buildPhases = (
AA0000000000000000000007 /* Sources */,
AA0000000000000000000003 /* Frameworks */,
@@ -235,18 +235,18 @@
AA0000000000000000000064 /* PBXTargetDependency */,
);
fileSystemSynchronizedGroups = (
AA0000000000000000000002 /* CamperMonitor */,
AA0000000000000000000002 /* VanControl */,
AA0000000000000000000018 /* Shared */,
AA0000000000000000000057 /* SharedActivity */,
);
name = CamperMonitor;
productName = CamperMonitor;
productReference = AA0000000000000000000001 /* CamperMonitor.app */;
name = VanControl;
productName = VanControl;
productReference = AA0000000000000000000001 /* VanControl.app */;
productType = "com.apple.product-type.application";
};
AA0000000000000000000022 /* CamperMonitorWatch */ = {
AA0000000000000000000022 /* VanControlWatch */ = {
isa = PBXNativeTarget;
buildConfigurationList = AA0000000000000000000025 /* Build configuration list for PBXNativeTarget "CamperMonitorWatch" */;
buildConfigurationList = AA0000000000000000000025 /* Build configuration list for PBXNativeTarget "VanControlWatch" */;
buildPhases = (
AA0000000000000000000019 /* Sources */,
AA0000000000000000000020 /* Frameworks */,
@@ -259,17 +259,17 @@
AA0000000000000000000044 /* PBXTargetDependency */,
);
fileSystemSynchronizedGroups = (
AA0000000000000000000017 /* CamperMonitorWatch */,
AA0000000000000000000017 /* VanControlWatch */,
AA0000000000000000000018 /* Shared */,
);
name = CamperMonitorWatch;
productName = CamperMonitorWatch;
productReference = AA0000000000000000000016 /* CamperMonitorWatch.app */;
name = VanControlWatch;
productName = VanControlWatch;
productReference = AA0000000000000000000016 /* VanControlWatch.app */;
productType = "com.apple.product-type.application";
};
AA0000000000000000000037 /* CamperMonitorComplication */ = {
AA0000000000000000000037 /* VanControlComplication */ = {
isa = PBXNativeTarget;
buildConfigurationList = AA0000000000000000000040 /* Build configuration list for PBXNativeTarget "CamperMonitorComplication" */;
buildConfigurationList = AA0000000000000000000040 /* Build configuration list for PBXNativeTarget "VanControlComplication" */;
buildPhases = (
AA0000000000000000000034 /* Sources */,
AA0000000000000000000035 /* Frameworks */,
@@ -281,16 +281,16 @@
);
fileSystemSynchronizedGroups = (
AA0000000000000000000018 /* Shared */,
AA0000000000000000000033 /* CamperMonitorComplication */,
AA0000000000000000000033 /* VanControlComplication */,
);
name = CamperMonitorComplication;
productName = CamperMonitorComplication;
productReference = AA0000000000000000000032 /* CamperMonitorComplication.appex */;
name = VanControlComplication;
productName = VanControlComplication;
productReference = AA0000000000000000000032 /* VanControlComplication.appex */;
productType = "com.apple.product-type.app-extension";
};
AA0000000000000000000062 /* VanAligneiOSWidgetExtension */ = {
AA0000000000000000000062 /* VanControlWidgetExtension */ = {
isa = PBXNativeTarget;
buildConfigurationList = AA0000000000000000000068 /* Build configuration list for PBXNativeTarget "VanAligneiOSWidgetExtension" */;
buildConfigurationList = AA0000000000000000000068 /* Build configuration list for PBXNativeTarget "VanControlWidgetExtension" */;
buildPhases = (
AA0000000000000000000060 /* Sources */,
AA0000000000000000000058 /* Frameworks */,
@@ -301,12 +301,12 @@
dependencies = (
);
fileSystemSynchronizedGroups = (
AA0000000000000000000056 /* VanAligneiOSWidget */,
AA0000000000000000000056 /* VanControlWidget */,
AA0000000000000000000057 /* SharedActivity */,
);
name = VanAligneiOSWidgetExtension;
productName = VanAligneiOSWidgetExtension;
productReference = AA0000000000000000000054 /* VanAligneiOSWidgetExtension.appex */;
name = VanControlWidgetExtension;
productName = VanControlWidgetExtension;
productReference = AA0000000000000000000054 /* VanControlWidgetExtension.appex */;
productType = "com.apple.product-type.app-extension";
};
/* End PBXNativeTarget section */
@@ -333,7 +333,7 @@
};
};
};
buildConfigurationList = AA0000000000000000000010 /* Build configuration list for PBXProject "CamperMonitor" */;
buildConfigurationList = AA0000000000000000000010 /* Build configuration list for PBXProject "VanControl" */;
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
@@ -348,10 +348,10 @@
projectDirPath = "";
projectRoot = "";
targets = (
AA0000000000000000000006 /* CamperMonitor */,
AA0000000000000000000022 /* CamperMonitorWatch */,
AA0000000000000000000037 /* CamperMonitorComplication */,
AA0000000000000000000062 /* VanAligneiOSWidgetExtension */,
AA0000000000000000000006 /* VanControl */,
AA0000000000000000000022 /* VanControlWatch */,
AA0000000000000000000037 /* VanControlComplication */,
AA0000000000000000000062 /* VanControlWidgetExtension */,
);
};
/* End PBXProject section */
@@ -422,17 +422,17 @@
AA0000000000000000000029 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
platformFilter = ios;
target = AA0000000000000000000022 /* CamperMonitorWatch */;
target = AA0000000000000000000022 /* VanControlWatch */;
targetProxy = AA0000000000000000000028 /* PBXContainerItemProxy */;
};
AA0000000000000000000044 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = AA0000000000000000000037 /* CamperMonitorComplication */;
target = AA0000000000000000000037 /* VanControlComplication */;
targetProxy = AA0000000000000000000043 /* PBXContainerItemProxy */;
};
AA0000000000000000000064 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = AA0000000000000000000062 /* VanAligneiOSWidgetExtension */;
target = AA0000000000000000000062 /* VanControlWidgetExtension */;
targetProxy = AA0000000000000000000063 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
@@ -501,10 +501,10 @@
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = 6AP73NYV5W;
DEVELOPMENT_TEAM = V5C6Q86XJR;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Config/CamperMonitor-Info.plist";
INFOPLIST_FILE = "Config/VanControl-Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = "VanControl Pro";
INFOPLIST_KEY_NSBluetoothAlwaysUsageDescription = "Zum Auslesen von Victron-Geraeten und dem Daly BMS per Bluetooth.";
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
@@ -516,7 +516,7 @@
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = de.fritob.CamperMonitor;
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
@@ -532,10 +532,10 @@
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = 6AP73NYV5W;
DEVELOPMENT_TEAM = V5C6Q86XJR;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Config/CamperMonitor-Info.plist";
INFOPLIST_FILE = "Config/VanControl-Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = "VanControl Pro";
INFOPLIST_KEY_NSBluetoothAlwaysUsageDescription = "Zum Auslesen von Victron-Geraeten und dem Daly BMS per Bluetooth.";
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
@@ -547,7 +547,7 @@
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = de.fritob.CamperMonitor;
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
@@ -562,18 +562,18 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 6AP73NYV5W;
DEVELOPMENT_TEAM = V5C6Q86XJR;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_KEY_CFBundleDisplayName = "VanControl Pro";
INFOPLIST_KEY_NSBluetoothAlwaysUsageDescription = "Zum Auslesen des Neigungsmessers direkt an der Uhr, ohne Umweg ueber das iPhone.";
INFOPLIST_KEY_WKCompanionAppBundleIdentifier = de.fritob.CamperMonitor;
INFOPLIST_KEY_WKCompanionAppBundleIdentifier = de.s0.fototeddy.VanControl;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = de.fritob.CamperMonitor.watchkitapp;
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl.watchkitapp;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
SKIP_INSTALL = YES;
@@ -594,18 +594,18 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 6AP73NYV5W;
DEVELOPMENT_TEAM = V5C6Q86XJR;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_KEY_CFBundleDisplayName = "VanControl Pro";
INFOPLIST_KEY_NSBluetoothAlwaysUsageDescription = "Zum Auslesen des Neigungsmessers direkt an der Uhr, ohne Umweg ueber das iPhone.";
INFOPLIST_KEY_WKCompanionAppBundleIdentifier = de.fritob.CamperMonitor;
INFOPLIST_KEY_WKCompanionAppBundleIdentifier = de.s0.fototeddy.VanControl;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = de.fritob.CamperMonitor.watchkitapp;
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl.watchkitapp;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
SKIP_INSTALL = YES;
@@ -624,9 +624,9 @@
buildSettings = {
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 6AP73NYV5W;
DEVELOPMENT_TEAM = V5C6Q86XJR;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Config/CamperMonitorComplication-Info.plist";
INFOPLIST_FILE = "Config/VanControlComplication-Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = Nivellierung;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@@ -634,7 +634,7 @@
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = de.fritob.CamperMonitor.watchkitapp.levelwidget;
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl.watchkitapp.levelwidget;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
SKIP_INSTALL = YES;
@@ -653,9 +653,9 @@
buildSettings = {
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 6AP73NYV5W;
DEVELOPMENT_TEAM = V5C6Q86XJR;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Config/CamperMonitorComplication-Info.plist";
INFOPLIST_FILE = "Config/VanControlComplication-Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = Nivellierung;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@@ -663,7 +663,7 @@
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = de.fritob.CamperMonitor.watchkitapp.levelwidget;
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl.watchkitapp.levelwidget;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
SKIP_INSTALL = YES;
@@ -684,10 +684,10 @@
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 6AP73NYV5W;
DEVELOPMENT_TEAM = V5C6Q86XJR;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = VanAligneiOSWidget/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = VanAligneiOSWidget;
INFOPLIST_FILE = VanControlWidget/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "VanControl Widget";
IPHONEOS_DEPLOYMENT_TARGET = 18.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@@ -695,7 +695,7 @@
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = de.fritob.CamperMonitor.VanAligneiOSWidget;
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl.VanControlWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
@@ -713,10 +713,10 @@
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 6AP73NYV5W;
DEVELOPMENT_TEAM = V5C6Q86XJR;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = VanAligneiOSWidget/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = VanAligneiOSWidget;
INFOPLIST_FILE = VanControlWidget/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "VanControl Widget";
IPHONEOS_DEPLOYMENT_TARGET = 18.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@@ -724,7 +724,7 @@
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = de.fritob.CamperMonitor.VanAligneiOSWidget;
PRODUCT_BUNDLE_IDENTIFIER = de.s0.fototeddy.VanControl.VanControlWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_COMPILATION_MODE = wholemodule;
@@ -738,7 +738,7 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
AA0000000000000000000010 /* Build configuration list for PBXProject "CamperMonitor" */ = {
AA0000000000000000000010 /* Build configuration list for PBXProject "VanControl" */ = {
isa = XCConfigurationList;
buildConfigurations = (
AA0000000000000000000012 /* Debug */,
@@ -747,7 +747,7 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
AA0000000000000000000011 /* Build configuration list for PBXNativeTarget "CamperMonitor" */ = {
AA0000000000000000000011 /* Build configuration list for PBXNativeTarget "VanControl" */ = {
isa = XCConfigurationList;
buildConfigurations = (
AA0000000000000000000014 /* Debug */,
@@ -756,7 +756,7 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
AA0000000000000000000025 /* Build configuration list for PBXNativeTarget "CamperMonitorWatch" */ = {
AA0000000000000000000025 /* Build configuration list for PBXNativeTarget "VanControlWatch" */ = {
isa = XCConfigurationList;
buildConfigurations = (
AA0000000000000000000023 /* Debug */,
@@ -765,7 +765,7 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
AA0000000000000000000040 /* Build configuration list for PBXNativeTarget "CamperMonitorComplication" */ = {
AA0000000000000000000040 /* Build configuration list for PBXNativeTarget "VanControlComplication" */ = {
isa = XCConfigurationList;
buildConfigurations = (
AA0000000000000000000038 /* Debug */,
@@ -774,7 +774,7 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
AA0000000000000000000068 /* Build configuration list for PBXNativeTarget "VanAligneiOSWidgetExtension" */ = {
AA0000000000000000000068 /* Build configuration list for PBXNativeTarget "VanControlWidgetExtension" */ = {
isa = XCConfigurationList;
buildConfigurations = (
AA0000000000000000000066 /* Debug */,
@@ -6,9 +6,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "AA0000000000000000000006"
BuildableName = "CamperMonitor.app"
BlueprintName = "CamperMonitor"
ReferencedContainer = "container:CamperMonitor.xcodeproj">
BuildableName = "VanControl.app"
BlueprintName = "VanControl"
ReferencedContainer = "container:VanControl.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
@@ -21,9 +21,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "AA0000000000000000000006"
BuildableName = "CamperMonitor.app"
BlueprintName = "CamperMonitor"
ReferencedContainer = "container:CamperMonitor.xcodeproj">
BuildableName = "VanControl.app"
BlueprintName = "VanControl"
ReferencedContainer = "container:VanControl.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
@@ -32,9 +32,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "AA0000000000000000000006"
BuildableName = "CamperMonitor.app"
BlueprintName = "CamperMonitor"
ReferencedContainer = "container:CamperMonitor.xcodeproj">
BuildableName = "VanControl.app"
BlueprintName = "VanControl"
ReferencedContainer = "container:VanControl.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
@@ -15,9 +15,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "AA0000000000000000000022"
BuildableName = "CamperMonitorWatch.app"
BlueprintName = "CamperMonitorWatch"
ReferencedContainer = "container:CamperMonitor.xcodeproj">
BuildableName = "VanControlWatch.app"
BlueprintName = "VanControlWatch"
ReferencedContainer = "container:VanControl.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
@@ -45,9 +45,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "AA0000000000000000000022"
BuildableName = "CamperMonitorWatch.app"
BlueprintName = "CamperMonitorWatch"
ReferencedContainer = "container:CamperMonitor.xcodeproj">
BuildableName = "VanControlWatch.app"
BlueprintName = "VanControlWatch"
ReferencedContainer = "container:VanControl.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
@@ -62,9 +62,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "AA0000000000000000000022"
BuildableName = "CamperMonitorWatch.app"
BlueprintName = "CamperMonitorWatch"
ReferencedContainer = "container:CamperMonitor.xcodeproj">
BuildableName = "VanControlWatch.app"
BlueprintName = "VanControlWatch"
ReferencedContainer = "container:VanControl.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

Before

Width:  |  Height:  |  Size: 341 KiB

After

Width:  |  Height:  |  Size: 341 KiB

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 130 KiB

Before

Width:  |  Height:  |  Size: 253 KiB

After

Width:  |  Height:  |  Size: 253 KiB

@@ -157,7 +157,7 @@ final class BluetoothManager: NSObject {
private(set) var bluetoothStatusText = "Bluetooth wird gestartet…"
/// Verbindet die Live Activity des Neigungsmessers mit dem Funkgeschehen
/// gesetzt von `CamperMonitorApp`, damit diese Schicht nichts über
/// gesetzt von `VanControlApp`, damit diese Schicht nichts über
/// ActivityKit wissen muss, wenn niemand zuhört.
var activityManager: LevelActivityManager?
@@ -171,7 +171,7 @@ final class BluetoothManager: NSObject {
// MARK: - Nur auf `queue`
private let queue = DispatchQueue(label: "de.fritob.CamperMonitor.bluetooth")
private let queue = DispatchQueue(label: "de.fritob.VanControl.bluetooth")
private var central: CBCentralManager?
/// Momentaufnahme der eingerichteten Geräte, damit die Funk-Queue nicht in
@@ -9,7 +9,7 @@ import Observation
/// CarPlay eine laufende Live Activity automatisch im Dashboard an; ein
/// eigenes CarPlay-App-Target braucht es dafür nicht die Inhalte kommen
/// aber nicht von der Sperrbildschirm-Ansicht, sondern von der
/// `.small`-Aktivitätsfamilie (siehe `VanAligneiOSWidgetLiveActivity`).
/// `.small`-Aktivitätsfamilie (siehe `VanControlWidgetLiveActivity`).
@Observable
final class LevelActivityManager {
private(set) var trackedDeviceID: UUID?
@@ -6,7 +6,7 @@ import Foundation
/// Nur in Debug-Builds und nur, wenn beim Start `CAMPER_DEMO=1` gesetzt ist:
///
/// xcrun simctl launch --terminate-running-process \
/// booted de.fritob.CamperMonitor
/// booted de.fritob.VanControl
/// # mit: SIMCTL_CHILD_CAMPER_DEMO=1 davor
///
/// Im normalen Betrieb wird hiervon nichts ausgeführt.
@@ -5,7 +5,7 @@ import Security
/// UserDefaults, deshalb Keychain.
enum KeychainStore {
private static let service = "de.fritob.CamperMonitor.victronKeys"
private static let service = "de.fritob.VanControl.victronKeys"
static func setKey(_ hex: String?, for deviceID: UUID) {
let account = deviceID.uuidString
@@ -1,7 +1,7 @@
import SwiftUI
@main
struct CamperMonitorApp: App {
struct VanControlApp: App {
@State private var store: DeviceStore
@State private var bluetooth: BluetoothManager
@State private var watch: PhoneWatchLink

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

@@ -76,7 +76,7 @@ struct LevelComplicationView: View {
@main
struct LevelComplication: Widget {
var body: some WidgetConfiguration {
StaticConfiguration(kind: "de.fritob.CamperMonitor.complication.level",
StaticConfiguration(kind: "de.fritob.VanControl.complication.level",
provider: LevelComplicationProvider()) { _ in
LevelComplicationView()
// Der Tipp landet nicht irgendwo in der App, sondern auf der

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 51 KiB

@@ -4,7 +4,7 @@ import Foundation
/// ohne Fahrzeug prüfen lassen. Eingeschaltet über `CAMPER_DEMO=1`:
///
/// xcrun simctl launch --terminate-running-process booted \
/// de.fritob.CamperMonitor.watchkitapp
/// de.fritob.VanControl.watchkitapp
/// # mit SIMCTL_CHILD_CAMPER_DEMO=1 davor
///
/// Im normalen Betrieb wird hiervon nichts ausgeführt.
@@ -46,7 +46,7 @@ final class WatchLevelRadio: NSObject {
}
}
private let queue = DispatchQueue(label: "de.fritob.CamperMonitor.watch.ble")
private let queue = DispatchQueue(label: "de.fritob.VanControl.watch.ble")
private var central: CBCentralManager?
private var peripheral: CBPeripheral?
private var session: LevelSession?
@@ -1,6 +1,6 @@
//
// AppIntent.swift
// VanAligneiOSWidget
// VanControlWidget
//
// Created by Christopher Helberg on 02.09.26.
//
@@ -1,6 +1,6 @@
//
// VanAligneiOSWidget.swift
// VanAligneiOSWidget
// VanControlWidget.swift
// VanControlWidget
//
// Created by Christopher Helberg on 02.09.26.
//
@@ -41,7 +41,7 @@ struct SimpleEntry: TimelineEntry {
let configuration: ConfigurationAppIntent
}
struct VanAligneiOSWidgetEntryView : View {
struct VanControlWidgetEntryView : View {
var entry: Provider.Entry
var body: some View {
@@ -56,12 +56,12 @@ struct VanAligneiOSWidgetEntryView : View {
}
}
struct VanAligneiOSWidget: Widget {
let kind: String = "VanAligneiOSWidget"
struct VanControlWidget: Widget {
let kind: String = "VanControlWidget"
var body: some WidgetConfiguration {
AppIntentConfiguration(kind: kind, intent: ConfigurationAppIntent.self, provider: Provider()) { entry in
VanAligneiOSWidgetEntryView(entry: entry)
VanControlWidgetEntryView(entry: entry)
.containerBackground(.fill.tertiary, for: .widget)
}
@@ -83,7 +83,7 @@ extension ConfigurationAppIntent {
}
#Preview(as: .systemSmall) {
VanAligneiOSWidget()
VanControlWidget()
} timeline: {
SimpleEntry(date: .now, configuration: .smiley)
SimpleEntry(date: .now, configuration: .starEyes)
@@ -0,0 +1,18 @@
//
// VanControlWidgetBundle.swift
// VanControlWidget
//
// Created by Christopher Helberg on 02.09.26.
//
import WidgetKit
import SwiftUI
@main
struct VanControlWidgetBundle: WidgetBundle {
var body: some Widget {
VanControlWidget()
VanControlWidgetControl()
VanControlWidgetLiveActivity()
}
}
@@ -1,6 +1,6 @@
//
// VanAligneiOSWidgetControl.swift
// VanAligneiOSWidget
// VanControlWidgetControl.swift
// VanControlWidget
//
// Created by Christopher Helberg on 02.09.26.
//
@@ -9,8 +9,8 @@ import AppIntents
import SwiftUI
import WidgetKit
struct VanAligneiOSWidgetControl: ControlWidget {
static let kind: String = "fototeddy.VanAligneiOS.VanAligneiOSWidget"
struct VanControlWidgetControl: ControlWidget {
static let kind: String = "fototeddy.VanControl.VanControlWidget"
var body: some ControlWidgetConfiguration {
AppIntentControlConfiguration(
@@ -30,7 +30,7 @@ struct VanAligneiOSWidgetControl: ControlWidget {
}
}
extension VanAligneiOSWidgetControl {
extension VanControlWidgetControl {
struct Value {
var isRunning: Bool
var name: String
@@ -38,12 +38,12 @@ extension VanAligneiOSWidgetControl {
struct Provider: AppIntentControlValueProvider {
func previewValue(configuration: TimerConfiguration) -> Value {
VanAligneiOSWidgetControl.Value(isRunning: false, name: configuration.timerName)
VanControlWidgetControl.Value(isRunning: false, name: configuration.timerName)
}
func currentValue(configuration: TimerConfiguration) async throws -> Value {
let isRunning = true // Check if the timer is running
return VanAligneiOSWidgetControl.Value(isRunning: isRunning, name: configuration.timerName)
return VanControlWidgetControl.Value(isRunning: isRunning, name: configuration.timerName)
}
}
}
@@ -1,6 +1,6 @@
//
// VanAligneiOSWidgetLiveActivity.swift
// VanAligneiOSWidget
// VanControlWidgetLiveActivity.swift
// VanControlWidget
//
// Created by Christopher Helberg on 02.09.26.
//
@@ -87,7 +87,7 @@ private struct LevelBubbleGlyph: View {
}
}
struct VanAligneiOSWidgetLiveActivity: Widget {
struct VanControlWidgetLiveActivity: Widget {
var body: some WidgetConfiguration {
ActivityConfiguration(for: LevelActivityAttributes.self) { context in
LevelActivityContent(attributes: context.attributes, state: context.state)
@@ -281,7 +281,7 @@ extension LevelActivityAttributes.ContentState {
}
#Preview("Notification", as: .content, using: LevelActivityAttributes.preview) {
VanAligneiOSWidgetLiveActivity()
VanControlWidgetLiveActivity()
} contentStates: {
LevelActivityAttributes.ContentState.level
LevelActivityAttributes.ContentState.tilted
+9 -9
View File
@@ -5,14 +5,14 @@ set -e
cd "$(dirname "$0")"
OUT=$(mktemp -d)
swiftc -O -o "$OUT/tests" \
CamperMonitor/Bluetooth/AESCounterMode.swift \
CamperMonitor/Bluetooth/BitReader.swift \
CamperMonitor/Bluetooth/VictronAdvertisement.swift \
CamperMonitor/Bluetooth/DalyProtocol.swift \
CamperMonitor/Bluetooth/DalyState.swift \
CamperMonitor/Bluetooth/JBDProtocol.swift \
CamperMonitor/Bluetooth/WattCycleProtocol.swift \
CamperMonitor/Bluetooth/AlpicoolProtocol.swift \
VanControl/Bluetooth/AESCounterMode.swift \
VanControl/Bluetooth/BitReader.swift \
VanControl/Bluetooth/VictronAdvertisement.swift \
VanControl/Bluetooth/DalyProtocol.swift \
VanControl/Bluetooth/DalyState.swift \
VanControl/Bluetooth/JBDProtocol.swift \
VanControl/Bluetooth/WattCycleProtocol.swift \
VanControl/Bluetooth/AlpicoolProtocol.swift \
Shared/Bluetooth/VanAlignProtocol.swift \
Shared/Models/DeviceSnapshot.swift \
Shared/Models/FridgeSettings.swift \
@@ -25,6 +25,6 @@ swiftc -O -o "$OUT/tests" \
Shared/Models/SensorOrientation.swift \
Shared/Models/VictronCodes.swift \
Shared/WatchLink/WatchLink.swift \
CamperMonitor/Store/KeychainStore.swift \
VanControl/Store/KeychainStore.swift \
Tests/main.swift
"$OUT/tests"