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
Tabelle 1: SPM-Abhängigkeiten.

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
Tabelle 2: 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
Tabelle 3: Sicherheitsmaßnahmen in der App-Implementierung.

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)

  1. Archive erstellen: Product → Archive
  2. In App Store Connect hochladen
  3. Tester über TestFlight einladen

App Store (Studienphase)

  1. App Store Connect Eintrag erstellen
  2. VPP-Verteilung über Apple Business Manager (für Leihgeräte)
  3. 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”.