From f3c976e0d75968615cda2662f9cf8b618110fa59 Mon Sep 17 00:00:00 2001 From: Sylvain Bettinelli Date: Fri, 8 May 2026 10:13:15 +0000 Subject: [PATCH] Restore preview() (iOS 17.4+) pour ajouter dans Custom Workouts Apple Watch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- ios/App/App/CoachWorkoutKit.swift | 33 ++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/ios/App/App/CoachWorkoutKit.swift b/ios/App/App/CoachWorkoutKit.swift index e694f9b..9057d21 100644 --- a/ios/App/App/CoachWorkoutKit.swift +++ b/ios/App/App/CoachWorkoutKit.swift @@ -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. - let now = Calendar.current.dateComponents( - [.year, .month, .day, .hour, .minute], - from: Date() - ) - _ = try await WorkoutScheduler.shared.schedule(plan, at: now) + // 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) + } } }