Ex-항공정비사가 설계한 러닝 앱
Turn Every
Run Into A Flight.
A320F 정비사 출신 개발자가 만든 iOS 러닝 트래커.
GPS, 심박수, 케이던스를 계기판처럼 읽고, 페이스 이탈을 GPWS 경보로 알려줍니다.
iOS 26+ · watchOS 11.5+SwiftUI · Actor · AsyncStream
GLIDE PATH
MISSION FLIGHTCRUISE
PACE
5'12"
DIST
2.14km
HR
158bpm
CAD
172spm
FUEL
212kcal
Flight Operations
두 가지 비행 모드
항공기 운항 절차에서 착안한 상태 머신으로 러닝 전체를 관리합니다.
시작 버튼을 누르면 이륙 시퀀스가, 러닝 중에는 실시간 계기판이 기다립니다.
MODE A
Mission Flight
목표 페이스와 거리를 설정하고 운항합니다. 허용 오차를 벗어나면 GPWS가 즉시 경고합니다.
- 목표 페이스 ± 오차 설정
- 빠른 거리 선택 (3K / 5K / 10K / 하프 / 풀)
- 목표 거리 50m 전 MINIMUMS 경보
MODE B
Free Flight
목표 없이 자유롭게 달리는 VFR(시계비행) 모드. 수동으로 Touchdown하여 종료합니다.
- 목표 설정 없음
- GPWS 비활성
- 자유로운 페이스 기록
Ground Proximity Warning System
SINK RATE
목표 페이스보다 느려짐
OVERSPEED
목표 페이스보다 빨라짐
MINIMUMS
목표 거리 50m 전 진입
iPhone & Apple Watch
두 화면, 하나의 비행
Watch가 주도하든 iPhone이 주도하든, 두 기기는 같은 FlightData를 공유합니다.
이륙 준비부터 착륙 후 기록까지, 실제 화면으로 확인해보세요.
iPhone · 좌우로 스크롤











Apple Watch



Under The Hood
설계 결정 세 가지
동시성 처리, 상태 관리, 기기 간 동기화 - RunWay를 만들며 가장
많이 고민한 세 가지 지점입니다.
CoreLocation
HealthKit
WatchConnectivity
RunningCenter (actor · serial queue)
AsyncStream<FlightData>
ViewModel (@MainActor) → SwiftUI
왜 이렇게 설계했는가
“GPS, 심박수, 케이던스가 동시에 들어오므로 상태 무결성을 보장하기 위해 RunningCenter Actor를 두고 모든 러닝 계산을 단일 격리 영역에서 처리했습니다.”
SwiftUIUI
@MainActor + @Observable상태관리
RunningCenter (Actor)동시성
AsyncStream센서 → ViewModel
FlightPhase enum상태 머신
WatchConnectivityiPhone ↔ Watch
SwiftData저장
MapKit + MapPolyline경로 시각화