// // WatchLinkStatus.swift // Keging // // 첫 화면의 워치 연결 표시용 상태 — PhoneSync 델리게이트 콜백·씬 활성화 때 refresh(). // ⚠️iOS 쪽 isReachable은 워치에서 케깅 앱이 켜져(포그라운드) 있을 때만 true가 되는 // 시스템 제약이 있다 — '연결됨' 표시는 "워치의 케깅과 지금 통신 가능"의 의미 // (설정·도움말에 이 기준을 안내해 뒀다). // import Combine import WatchConnectivity @MainActor final class WatchLinkStatus: ObservableObject { static let shared = WatchLinkStatus() enum LinkState { /// 워치 미페어링 또는 케깅 워치 앱 미설치 case notLinked /// 연동은 되어 있지만 지금은 통신 불가 (워치가 멀거나 워치 앱이 꺼져 있음) case unreachable /// 워치의 케깅 앱과 지금 통신 가능 case reachable } @Published private(set) var state: LinkState = .notLinked private init() {} func refresh() { guard WCSession.isSupported() else { state = .notLinked return } let session = WCSession.default guard session.activationState == .activated, session.isPaired, session.isWatchAppInstalled else { state = .notLinked return } state = session.isReachable ? .reachable : .unreachable } }