b953908f58
Complete implementation of a SwiftUI iOS app that serves as a "Single Source of Truth" for health data. The app reads from all Apple Health sources, detects conflicts between devices, merges data using configurable strategies, and writes cleaned data back. Features: - Phase 1: HealthKit integration with automatic source discovery - Phase 2: DataReader with conflict detection (time-window based) - Phase 3: RuleEngine with 8 merge strategies (exclusive, priority, higher wins, etc.) - Phase 4: MergeEngine for conflict resolution + DataWriter for HealthKit writes - Phase 5: SwiftUI UI for dashboard, conflicts, rules, and sources management - Phase 6: Background sync with configurable intervals and push notifications - Phase 7: Complete rule editor and polished UI components Supported data types: - Steps, Heart Rate, Blood Pressure, SpO2, Sleep - Distance, Floors Climbed, Active Energy, HRV, Respiratory Rate Architecture: SourceManager -> DataReader -> RuleEngine -> MergeEngine -> DataWriter
141 lines
6.8 KiB
Markdown
141 lines
6.8 KiB
Markdown
# HealthBridge
|
||
|
||
Intelligente Health-Daten-Synchronisation für iOS – Eine "Single Source of Truth" für Gesundheitsdaten.
|
||
|
||
## Übersicht
|
||
|
||
HealthBridge liest alle Quellen aus Apple Health, erkennt Konflikte zwischen verschiedenen Geräten und Apps, merged intelligent basierend auf konfigurierbaren Regeln und schreibt bereinigte Daten zurück.
|
||
|
||
## Features
|
||
|
||
### Source Discovery
|
||
- Automatische Erkennung aller verbundenen Datenquellen
|
||
- Klassifizierung nach Gerätetyp (iPhone, Apple Watch, Drittanbieter-Watch, Apps)
|
||
- Übersicht über Fähigkeiten und unterstützte Datentypen pro Quelle
|
||
|
||
### Konflikt-Erkennung
|
||
- Automatische Erkennung von Datenkonflikten zwischen Quellen
|
||
- Zeitfenster-basierte Analyse (15-Minuten-Intervalle)
|
||
- Schweregrad-Klassifizierung (minor, moderate, significant, major)
|
||
|
||
### Merge-Strategien
|
||
- **Exclusive**: Nur eine Quelle möglich (z.B. Blutdruck, SpO2)
|
||
- **Priority**: Fixe Rangfolge basierend auf Benutzereinstellungen
|
||
- **Higher Wins**: Grösserer Wert gewinnt (ideal für Schritte)
|
||
- **Coverage**: Quelle mit Daten für Zeitfenster gewinnt
|
||
- **Coverage Then Higher**: Erst Abdeckung, dann höherer Wert
|
||
- **Average**: Durchschnitt aller Quellen
|
||
- **Manual**: Benutzer entscheidet bei jedem Konflikt
|
||
|
||
### UI-Komponenten
|
||
- **Dashboard**: Tagesübersicht aller Gesundheitsdaten mit Sync-Status
|
||
- **Konflikte**: Liste offener Konflikte mit One-Tap-Auflösung
|
||
- **Regeln**: Konfiguration der Merge-Strategien pro Datentyp
|
||
- **Quellen**: Übersicht aller erkannten Datenquellen
|
||
|
||
### Background Sync
|
||
- Automatische Synchronisierung im Hintergrund
|
||
- Konfigurierbares Intervall (15 Min bis 2 Stunden)
|
||
- Push-Benachrichtigungen bei neuen Konflikten
|
||
|
||
## Unterstützte Datentypen
|
||
|
||
| Datentyp | Primärquelle | Strategie |
|
||
|----------|--------------|-----------|
|
||
| Schritte | Watch | Coverage + Higher |
|
||
| Herzfrequenz | Watch | Exclusive |
|
||
| Blutdruck | Watch D2 | Exclusive |
|
||
| SpO2 | Watch | Exclusive |
|
||
| Schlaf | Watch | Priority |
|
||
| Distanz | Watch/iPhone | Coverage + Higher |
|
||
| Stockwerke | iPhone | Exclusive |
|
||
| Aktive Energie | Watch | Coverage + Higher |
|
||
|
||
## Architektur
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ Apple Health │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
▲
|
||
│
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ HealthBridge App │
|
||
│ │
|
||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||
│ │ DataReader │→ │ MergeEngine │→ │ DataWriter │ │
|
||
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
||
│ ▲ ▲ │
|
||
│ ┌─────────────┐ ┌─────────────┐ │
|
||
│ │SourceManager│ │ RuleEngine │ │
|
||
│ └─────────────┘ └─────────────┘ │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||
│ │ SyncCoordinator │ │
|
||
│ └─────────────────────────────────────────────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
## Projektstruktur
|
||
|
||
```
|
||
HealthBridge/
|
||
├── App/
|
||
│ └── HealthBridgeApp.swift # App-Entry, Background Tasks
|
||
├── Models/
|
||
│ ├── HealthDataTypes.swift # Datentypen, TimeWindow
|
||
│ ├── Source.swift # HealthSource, SourceReading
|
||
│ └── Conflict.swift # Conflict, MergeStrategy, MergeRule
|
||
├── Services/
|
||
│ ├── HealthKitManager.swift # HealthKit-Integration
|
||
│ ├── SourceManager.swift # Source Discovery & Management
|
||
│ ├── DataReader.swift # Daten lesen, Konflikte erkennen
|
||
│ ├── RuleEngine.swift # Merge-Regeln verwalten & anwenden
|
||
│ ├── MergeEngine.swift # Konflikte analysieren & lösen
|
||
│ ├── DataWriter.swift # Daten zurückschreiben
|
||
│ └── SyncCoordinator.swift # Orchestrierung aller Services
|
||
├── Views/
|
||
│ ├── ContentView.swift # Tab-Navigation
|
||
│ ├── DashboardView.swift # Hauptübersicht
|
||
│ ├── ConflictsView.swift # Konflikt-Liste & Detail
|
||
│ ├── RulesView.swift # Regelwerk-Editor
|
||
│ ├── SourcesView.swift # Quellen-Übersicht
|
||
│ ├── SettingsView.swift # Einstellungen
|
||
│ └── Components/
|
||
│ └── HealthChart.swift # Diagramm-Komponenten
|
||
├── ViewModels/
|
||
│ └── DashboardViewModel.swift # Dashboard-Logik
|
||
├── Utils/
|
||
│ ├── Extensions.swift # Swift-Erweiterungen
|
||
│ └── NotificationManager.swift # Push-Benachrichtigungen
|
||
└── Resources/
|
||
├── Info.plist # App-Konfiguration
|
||
└── HealthBridge.entitlements # HealthKit-Berechtigungen
|
||
```
|
||
|
||
## Voraussetzungen
|
||
|
||
- iOS 16.0+
|
||
- Xcode 15.0+
|
||
- Apple Developer Account (für HealthKit-Entitlements)
|
||
- Physisches Gerät (HealthKit nicht im Simulator verfügbar)
|
||
|
||
## Installation
|
||
|
||
1. Projekt in Xcode öffnen
|
||
2. Team für Code Signing auswählen
|
||
3. HealthKit-Capability aktivieren
|
||
4. Auf physischem Gerät ausführen
|
||
|
||
## Berechtigungen
|
||
|
||
Die App benötigt folgende Berechtigungen:
|
||
- **HealthKit Read**: Lesen aller Gesundheitsdaten
|
||
- **HealthKit Write**: Schreiben gemergter Daten
|
||
- **Background App Refresh**: Für automatische Synchronisierung
|
||
- **Notifications**: Für Konflikt-Benachrichtigungen
|
||
|
||
## Lizenz
|
||
|
||
MIT License
|