From cb9d32d928fc4e82af266e51ee691473f3d31c75 Mon Sep 17 00:00:00 2001 From: Sylvain Bettinelli Date: Fri, 8 May 2026 10:16:00 +0000 Subject: [PATCH] =?UTF-8?q?WorkoutKit=20:=20retire=20preview()=20(API=20ab?= =?UTF-8?q?sente=20du=20SDK),=20schedule()=20=C3=A0=20+1min=20+=20logs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit preview() ne compile pas dans le SDK actuel (iOS 17.4+ pas dispo). On revient sur schedule() qui marche, avec 2 améliorations : - Schedule à Date()+60s au lieu de Date() pour éviter qu'iOS ignore un workout dont la date passe au moment du traitement (race condition). - NSLog du résultat (id + date) pour diagnostic Console.app si l'user ne voit toujours rien sur la Watch malgré schedule succès. Limitation : avec schedule(), le workout apparaît dans la liste 'Programmées' au TOP de l'app Workout sur l'Apple Watch (avec icône ⏰), PAS dans la sous-section 'Custom Workouts'. C'est l'API qu'Apple expose actuellement pour pousser des CustomWorkout via WorkoutKit — la sous-section Custom Workouts ne semble pas writable depuis 3rd-party apps directement. --- ios/App/App/CoachWorkoutKit.swift | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/ios/App/App/CoachWorkoutKit.swift b/ios/App/App/CoachWorkoutKit.swift index 9057d21..6ac84b4 100644 --- a/ios/App/App/CoachWorkoutKit.swift +++ b/ios/App/App/CoachWorkoutKit.swift @@ -153,25 +153,20 @@ public class CoachWorkoutKitPlugin: CAPPlugin, CAPBridgedPlugin { // iOS la 1re fois, return immédiat si déjà accordé). do { try await WorkoutScheduler.shared.requestAuthorization() + NSLog("[CoachWorkoutKit] requestAuthorization OK") } 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) - } + // 9. Schedule le workout. Schedule pour 1 minute dans le futur (vs + // "now") pour s'assurer que la date n'est pas dans le passé au + // moment où le système traite l'event (sinon il peut être ignoré). + let scheduleDate = Date().addingTimeInterval(60) // +1 min + let comps = Calendar.current.dateComponents( + [.year, .month, .day, .hour, .minute, .timeZone], + from: scheduleDate + ) + let scheduled = try await WorkoutScheduler.shared.schedule(plan, at: comps) + NSLog("[CoachWorkoutKit] schedule OK : \(scheduled.id) at \(scheduled.date)") } }