fix(workoutkit): warmup/cooldown nil quand durée 0 (évite assertion crash)
La signature CustomWorkout(warmup: WorkoutStep?, cooldown: WorkoutStep?)
accepte nil. Or notre code passait toujours un WorkoutStep(goal: .time(
warmupMin * 60, .seconds)) — avec warmupMin = 0 on créait un step de
durée zéro qui déclenchait un assertion failure interne dans
CustomWorkout.init (precondition Apple non catchable depuis try/catch
Swift, crash dur).
Confirmé via crash report iOS sur build 1.2 (14) :
Thread 5 crashed → _assertionFailure
→ CustomWorkout.init(activity:location:displayName:warmup:blocks:
cooldown:)
EXC_BREAKPOINT (SIGTRAP)
Fix : let warmupStep: WorkoutStep? = warmupMin > 0 ? WorkoutStep(...)
: nil — idem cooldown. Permet aux apps web de pousser des séances 100%
décrites en blockSteps (renforcement avec items warmup + main + aux +
cooldown détaillés et nommés via displayName).
Bump version requis côté Mac avant rebuild TestFlight.
This commit is contained in:
@@ -151,8 +151,15 @@ public class CoachWorkoutKitPlugin: CAPPlugin, CAPBridgedPlugin {
|
||||
cooldownMin: Double
|
||||
) async throws {
|
||||
|
||||
// 1. Warmup — un WorkoutStep avec un goal time
|
||||
let warmupStep = WorkoutStep(goal: .time(warmupMin * 60, .seconds))
|
||||
// 1. Warmup — un WorkoutStep optionnel. Si warmupMin == 0, on passe
|
||||
// nil au CustomWorkout (la signature accepte WorkoutStep?). Passer
|
||||
// un WorkoutStep(goal: .time(0, .seconds)) déclenche un assertion
|
||||
// failure dans CustomWorkout.init (precondition Apple non
|
||||
// catchable). Cas d'usage : séances 100% décrites en blockSteps
|
||||
// (renforcement avec items détaillés warmup+main+aux+cooldown).
|
||||
let warmupStep: WorkoutStep? = warmupMin > 0
|
||||
? WorkoutStep(goal: .time(warmupMin * 60, .seconds))
|
||||
: nil
|
||||
|
||||
// 2. Construit la liste d'IntervalSteps depuis stepsSpec.
|
||||
// Chaque entrée = (durée min, zone HR optionnelle, isWork bool, label optionnel).
|
||||
@@ -177,8 +184,11 @@ public class CoachWorkoutKitPlugin: CAPPlugin, CAPBridgedPlugin {
|
||||
// se répète repeats fois.
|
||||
let block = IntervalBlock(steps: intervalSteps, iterations: repeats)
|
||||
|
||||
// 4. Cooldown
|
||||
let cooldownStep = WorkoutStep(goal: .time(cooldownMin * 60, .seconds))
|
||||
// 4. Cooldown — idem warmup : nil si cooldownMin == 0 pour éviter
|
||||
// l'assertion failure sur WorkoutStep de durée 0.
|
||||
let cooldownStep: WorkoutStep? = cooldownMin > 0
|
||||
? WorkoutStep(goal: .time(cooldownMin * 60, .seconds))
|
||||
: nil
|
||||
|
||||
// 6. CustomWorkout — location selon l'activité (indoor pour
|
||||
// strength/yoga/core, outdoor pour cardio extérieur).
|
||||
|
||||
Reference in New Issue
Block a user