A simple SwiftUI macOS app that simulates a GPS source over TCP or Bluetooth LE (GATT) by streaming NMEA 0183 sentences.
Clients can connect over TCP or BLE to receive live simulated GPS output (GPRMC and GPGGA).
- Runs a TCP server for NMEA clients
- Runs a BLE GATT peripheral service for NMEA clients
- Sends periodic GPS sentences at a configurable rate
- Lets you set latitude, longitude, altitude, speed, and course
- Supports optional movement simulation
- Includes a map dialog to set/reset start position
- macOS
- Xcode 15+ (or newer)
- Open
NMEA Simulator.xcodeprojin Xcode. - Select the
NMEA Simulatorscheme. - Build and run on macOS.
- Select transport mode (
TCPorBluetooth LE (GATT)), then set transport and GPS values. - Click Start Simulator.
- Connect your NMEA client:
- TCP: connect to
<local-ip>:<port> - BLE: connect to service UUID
FFE0and subscribe to characteristic UUIDFFE1
- TCP: connect to
- Watch incoming NMEA sentences in your client (and optionally in the app log).
- In TCP mode, the app listens on all interfaces (
0.0.0.0) and displays the active local IP for convenience. - In BLE mode, the app advertises service UUID
FFE0with notify characteristic UUIDFFE1. - Network client/server entitlements are enabled for sandboxed macOS execution.
