Mirror a live Apple Watch run on a propped-up iPhone
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
This commit is contained in:
@@ -8,7 +8,18 @@
|
||||
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() }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user