feat(widgets): widgets natifs iPhone (Séance du jour + Score de forme)

Pont WebView→App Group→WidgetKit :
- CoachWidgetSnapshot.swift : modèle partagé App↔extension (App Group group.ch.hypnotruck.coach)
- CoachWidgetBridge.swift : plugin Capacitor setSnapshot/clear + WidgetCenter.reloadAllTimelines
- CoachWidgets.swift : 2 widgets (TimelineProvider + vues SwiftUI, small/medium)
- bundle + enregistrement plugin + entitlements App Group (App + CoachLiveActivity)

⚠️ Reste câblage Mac (App Group portail + capability + Target Membership) :
docs/widgets-runbook-mac.md. Hook web côté coach_sportif.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sylvain Bettinelli
2026-06-29 05:18:17 +00:00
parent edf3783fb5
commit a6bdebcfc8
9 changed files with 466 additions and 2 deletions

View File

@@ -1,6 +1,7 @@
// CoachLiveActivityBundle.swift
// Entry point @main de l'extension WidgetKit. Contient le ou les Widgets
// exposés par cette extension. Ici juste la Live Activity du live workout.
// Entry point @main de l'extension WidgetKit. Contient les Widgets exposés par
// cette extension : la Live Activity du live workout + les widgets d'écran
// d'accueil (séance du jour, score de forme).
import WidgetKit
import SwiftUI
@@ -9,5 +10,7 @@ import SwiftUI
struct CoachLiveActivityBundle: WidgetBundle {
var body: some Widget {
CoachLiveActivityWidget()
CoachTodaySessionWidget()
CoachFormeScoreWidget()
}
}