Add HealthBridge iOS app for intelligent health data synchronization
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
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user