Entwickler-Dokumentation
Voraussetzungen
Xcode 16.0+ (Swift 5.10+), iOS 18.0 SDK, macOS 14.0+ (Sonoma), Apple Developer Account.
Projekt bauen
Repository klonen, in Xcode öffnen, Scheme “HyponaTrack” auswählen, iPhone 16 Simulator oder physisches Gerät, Build and Run.
Abhängigkeiten (Swift Package Manager)
| Paket | Version | Verwendung |
|---|---|---|
| CareKit | 4.0.0 | Pflegeplan, Aufgabenverwaltung |
| ResearchKit | 3.1.4 | Consent, Surveys |
Architektur (Entwickler)
Schichten: SwiftUI Views (Presentation Layer) → ViewModels (MVVM, Observable) → Services / Business Logic (EscalationEngine, RiskEngine, HealthKit, REDCap, CareKit) → SwiftData / Keychain (Persistence Layer).
MVVM-Pattern: Models: SwiftData (Model?) Klassen. ViewModels: (Observable?) Klassen. Views: SwiftUI Views, gruppiert nach Feature.
Dependency Injection: Services als Singletons oder über SwiftUI Environment.
Datenmodelle (Entwickler)
PatientProfile: Zentrale Stammdaten, surgeryDate, baselineWeight, Risikofaktoren (Kat. A/B/C), buildRiskProfile(), buildBaseline().
DailyEntry: Ein Eintrag pro Tag, alle Messwerte, Alert-Level + Reasons.
SymptomEntry: 6-Item gewichteter Score.
CognitiveTestResult: Reaktionszeit, Trail Making, Tapping.
Escalation Engine (Entwickler)
EscalationEngine.evaluate(entry:profile:) → EvaluationResult(level, reasons). Ablauf: RiskProfile → AlertThresholds → Baseline → DailySnapshot → AlertEngine → Ergebnis. Detaillierte Spezifikation: siehe Teil II.
REDCap-Integration
REDCapService (Actor)
actor REDCapService {
func configure(serverURL: URL, token: String) throws // HTTPS-Pflicht
func autoSync(entry:profile:) async // Nach jeder Eingabe
func exportAll(profile:entries:) async throws // Manueller Vollexport
func retryPendingIfNeeded() async // Offline-Queue nachsenden
}Sicherheit: API-Token im Keychain (nicht UserDefaults). HTTPS wird in configure() und post() erzwungen. Offline-Queue: Fehlgeschlagene Requests werden gespeichert und bei nächster Verbindung nachgesendet.
Datenmapping: Baseline → patient_baseline Instrument. Tageseinträge → daily_monitoring Repeating Instrument (Instance = POD).
HealthKit
HealthKitService liest und schreibt:
| Typ | Richtung | Verwendung |
|---|---|---|
| Schritte | Lesen | Aktivitäts-Trend |
| Ruheherzfrequenz | Lesen | Kontext |
| HRV (SDNN) | Lesen | Kontext |
| Schlafdauer | Lesen | Kontext |
| Gewicht | Lesen + Schreiben | Automatischer Import von WLAN-Waagen |
| Wasser | Schreiben | Manuelle Eingabe → HealthKit |
HealthKit-Datentypen und Richtung.
Background Delivery: Gewicht und Schritte werden im Hintergrund aktualisiert.
CareKit
CareKitStoreManager erstellt den Pflegeplan mit 7–9 OCKTasks (Gewicht, Symptome, Fluid, Urin-SG, Kognition, Tapping, optional Desmopressin). Schedules basieren auf dem OP-Datum und laufen 14 Tage.
Sicherheit (Entwickler)
| Maßnahme | Implementierung |
|---|---|
| PIN-Hashing | SHA-256 + Salt (CryptoKit) in KeychainService |
| Biometrische Auth | Face ID → Passcode Fallback (AppLockManager) |
| Token-Speicherung | Keychain (kSecAttrAccessibleWhenUnlockedThisDeviceOnly) |
HTTPS-Pflicht |
Erzwungen in REDCapService.configure() und .post() |
| Kein Passcode | App bleibt gesperrt (Simulator ausgenommen) |
| Datenlokalität | SwiftData lokal, kein Cloud-Backend |
Projektstruktur
HyponaTrack/
├── Sources/
│ ├── Models/ 6 SwiftData-Modelle
│ ├── Services/ 16 Service-Klassen
│ ├── ViewModels/ 5 MVVM-ViewModels
│ ├── Views/ 26 Views in 8 Feature-Gruppen
│ ├── Components/ 6 wiederverwendbare UI-Komponenten
│ └── Utilities/ Branding, Konstanten, Extensions
├── Resources/
│ └── Assets.xcassets/ App-Icon, Logos, Farben
├── HyponaTrack.xcodeproj
├── HyponaTrackWidget/ Widget-Extension
├── HyponaTrackWatch/ Watch-App
└── docs/ Entwickler-Dokumentation
Deployment
TestFlight (Pilotphase)
- Archive erstellen: Product → Archive
- In App Store Connect hochladen
- Tester über TestFlight einladen
App Store (Studienphase)
- App Store Connect Eintrag erstellen
- VPP-Verteilung über Apple Business Manager (für Leihgeräte)
- Guided Access / MDM für Kiosk-Modus konfigurieren
Detaillierte Architektur-Dokumentation: siehe App-Architektur.
Testing
Schulungsmodus (Demo-Daten)
Einstellungen → “Schulungsmodus” → “Testdaten anlegen”: 7 Tage realistische Demo-Daten mit Ampelverlauf (Grün → Gelb → Rot → Gelb), Gewichtstrend mit typischem DPH-Muster, Symptom-Scores und Flüssigkeitsbalken. Nach Schulung: “Testdaten löschen”.