a16e8ec270
Add an ephemeral live-run presence channel (separate from the durable iCloud progress sync) so a propped-up iPhone can mirror the Watch's Ready → work/rest → Finish flow in real time as the user swipes. Watch drives, phone mirrors (read-only), so there's no echo loop: - Watch's ExerciseProgressView broadcasts a LiveProgress frame on every phase transition (and an ended signal on leave) via sendMessage, reachable-only — throwaway presence, never written to iCloud. - Timers ride as wall-clock anchors (Date kept native in the WC dict to preserve sub-second precision), so both devices count independently off shared start times and stay in lockstep without streaming ticks. - Phone holds a transient LiveRunState; ContentView auto-presents a read-only LiveProgressMirrorView full-screen cover while a run is live. Claude-Session: https://claude.ai/code/session_01SCv7zvGFcKy47KSTnTLxRe
26 lines
710 B
Swift
26 lines
710 B
Swift
//
|
|
// ContentView.swift
|
|
// Workouts
|
|
//
|
|
// Copyright 2025 Rouslan Zenetl. All Rights Reserved.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
struct ContentView: View {
|
|
@Environment(LiveRunState.self) private var liveRun
|
|
|
|
var body: some View {
|
|
WorkoutLogsView()
|
|
// Prop the phone up and it mirrors a live workout running on the Apple Watch.
|
|
.fullScreenCover(isPresented: Binding(
|
|
get: { liveRun.presentable != nil },
|
|
set: { presenting in if !presenting { liveRun.mute() } }
|
|
)) {
|
|
if let frame = liveRun.presentable {
|
|
LiveProgressMirrorView(progress: frame) { liveRun.mute() }
|
|
}
|
|
}
|
|
}
|
|
}
|