元航空整備士が設計したランニングアプリ

Turn Every
Run Into A Flight.

A320Fの整備士出身の開発者が作ったiOSランニングトラッカー。
GPS、心拍数、ケイデンスを計器のように読み取り、ペースのズレをGPWS警報でお知らせします。

iOS 26+ · watchOS 11.5+SwiftUI · Actor · AsyncStream
Flight Operations

2つの飛行モード

航空機の運航手順にヒントを得た状態機械が、ランニング全体を管理します。
スタートボタンを押すと離陸シーケンスが始まり、走行中はリアルタイムの計器パネルが待っています。

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

2つの画面、1つの飛行

WatchがリードしてもiPhoneがリードしても、両方の端末は同じFlightDataを共有します。
離陸準備から着陸後の記録まで、実際の画面でご確認いただけます。

iPhone · 横にスクロール
HOME · ダッシュボード
HOME · ダッシュボード
MISSION FLIGHT · 設定
MISSION FLIGHT · 設定
TAKEOFF · 事前点検
TAKEOFF · 事前点検
MISSION FLIGHT · CRUISE
MISSION FLIGHT · CRUISE
FREE FLIGHT · CRUISE
FREE FLIGHT · CRUISE
TOUCHDOWN
TOUCHDOWN
FLIGHT SUMMARY · マップルート
FLIGHT SUMMARY · マップルート
LOGBOOK
LOGBOOK
ALERTS · GPWS履歴
ALERTS · GPWS履歴
FLIGHT CALENDAR
FLIGHT CALENDAR
DYNAMIC ISLAND
DYNAMIC ISLAND
Apple Watch
WATCH · モード選択
WATCH · モード選択
WATCH · PFD
WATCH · PFD
WATCH · サマリー
WATCH · サマリー
Under The Hood

3つの設計判断

並行処理、状態管理、端末間の同期 - RunWayを作る上で
最も悩んだ3つのポイントです。

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ルート可視化