WorkoutKit : retire preview() (API absente du SDK), schedule() à +1min + logs
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.
This commit is contained in:
@@ -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()
|
||||
// 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
|
||||
)
|
||||
_ = try await WorkoutScheduler.shared.schedule(plan, at: now)
|
||||
}
|
||||
let scheduled = try await WorkoutScheduler.shared.schedule(plan, at: comps)
|
||||
NSLog("[CoachWorkoutKit] schedule OK : \(scheduled.id) at \(scheduled.date)")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user