Restore preview() (iOS 17.4+) pour ajouter dans Custom Workouts Apple Watch

schedule() (iOS 17.0+) que j'utilisais met le workout dans la Schedule (le
calendrier Fitness iOS) → utile pour 'demain à 14h je fais cette séance' mais
pas pour 'mets cette séance dans ma bibliothèque, je la lancerai quand'.

preview() (iOS 17.4+) ouvre une sheet système 'Ajouter à mes workouts' qui
ajoute la séance dans **Custom Workouts** de l'Apple Watch — accessible via
Workout app → Course → Custom Workouts → [séance].

Ajouts :
- requestAuthorization() en amont (idempotent, déclenche dialog iOS la 1re fois)
- if #available(iOS 17.4) → preview(plan)
  else → schedule(plan, at: now) en fallback (rare car iOS 17.0-17.3)
- NSLog('[CoachWorkoutKit] ...') pour visibilité Console.app au cas où

L'erreur compile précédente sur preview() venait probablement des autres
problèmes API (WorkoutAlertEnumeration, IntervalStep init), maintenant tous
réglés. preview() devrait compiler proprement avec ce build.
This commit is contained in:
Sylvain Bettinelli
2026-05-08 10:13:15 +00:00
parent b98e47f17a
commit f3c976e0d7

View File

@@ -149,14 +149,29 @@ public class CoachWorkoutKitPlugin: CAPPlugin, CAPBridgedPlugin {
// 7. Plan
let plan = WorkoutPlan(.custom(custom))
// 8. Schedule pour "maintenant" l'API la plus stable iOS 17.0+.
// Le workout devient immédiatement disponible dans Apple Watch
// Exercice Workouts personnalisés. Le 1er schedule déclenche la
// demande d'autorisation native si besoin.
// 8. Demande d'autorisation explicite (idempotent déclenche dialog
// iOS la 1re fois, return immédiat si déjà accordé).
do {
try await WorkoutScheduler.shared.requestAuthorization()
} catch {
NSLog("[CoachWorkoutKit] requestAuthorization failed: \(error)")
}
// 9. preview(plan) (iOS 17.4+) ouvre la sheet système 'Ajouter à
// mes workouts' qui ajoute le workout à la **Custom Workouts**
// library de l'Apple Watch (vs schedule() qui le met juste dans
// le calendrier Fitness sans le rendre lançable de manière standalone).
if #available(iOS 17.4, *) {
try await WorkoutScheduler.shared.preview(plan)
} else {
// Fallback iOS 17.0-17.3 : schedule pour "maintenant".
// L'user verra le workout dans le Workout app au lancement (top
// de la liste des activités) mais pas dans Custom Workouts.
let now = Calendar.current.dateComponents(
[.year, .month, .day, .hour, .minute],
from: Date()
)
_ = try await WorkoutScheduler.shared.schedule(plan, at: now)
}
}
}