A macOS tool that spoofs the GPS location an iPhone reports, over a USB connection.
An open-source project by Mayoka Labs
For harmless pranks only — do not use to deceive, defraud, or evade tracking.
It's open source specifically so anyone can read exactly what it does to their phone: it only ever sets (or clears) a simulated location via Apple's own developer/instruments protocol. No telemetry or data collection. The Python backend talks to the phone over USB; place search is an optional proxy to OpenStreetMap Nominatim. Map tiles and road routing are fetched by the browser (or the embedded webview), not for analytics.
- Native desktop app (recommended) or browser-based map GUI
- Teleport — jump the phone to any point on the map
- Route — travel real roads at Walk / Bicycle / Motorcycle / Car speed (OSRM)
- Fly — straight great-circle flight to the nearest real passenger airport
- Multi-stop trips — ordered stops with automatic fly/drive legs
- Place search — OpenStreetMap Nominatim (place names) or raw coordinates
- Map styles — OpenFreeMap basemaps (Liberty, Bright, Positron, Dark, Fiord) plus a Normal / 3D camera toggle
- Live USB device detection with a confirm prompt before spoofing starts
- macOS on Apple Silicon, with Xcode Command Line Tools (
python3,git,clang). - An iPhone on iOS 17 or later, connected by USB cable.
- Administrator access when spoofing (macOS password dialog, or
sudofor the CLI/browser server). The location tunnel needs root because it creates a network interface (utun).
python3 -m venv venv
venv/bin/pip install -r requirements.txtBuild the double-clickable app (and optional installer disk image):
venv/bin/python3 build_app.py # → dist/M Maps.app (self-contained)
venv/bin/python3 build_dmg.py # → dist/M Maps.dmg (optional)build_app.py uses PyInstaller (windowed onedir) to produce a self-contained
.app: the bootloader at Contents/MacOS/M Maps loads Python in-process (no
nested Python.app identity for Dock / Cmd+Tab). App code and dependencies are
collected into the bundle. Build with the project venv after
pip install -r requirements.txt and pip install 'pyinstaller>=6.0'.
Then either:
- open
dist/M Maps.dmg, drag M Maps onto Applications, and launch from there, or - double-click
dist/M Maps.app, or - run from a terminal for development (uses the project venv, not the bundle):
venv/bin/python3 m_maps.py appA native window opens with the map inside (not a browser). The app starts the local server with administrator rights so it can talk to the iPhone over USB.
sudo venv/bin/python3 m_maps.py serveOpens a local map at http://127.0.0.1:8765 (this Mac only by default).
To open the same map from another device on your home Wi-Fi (e.g. Safari on the iPhone that is USB-connected to the Mac for spoofing):
sudo venv/bin/python3 m_maps.py serve --lanThat binds to this Mac's private LAN IP (never 0.0.0.0) and prints the exact
URL. Anyone on that Wi-Fi can control the page — there is no password; stop
the server (Ctrl+C) when you are done.
On the map: pick a Mode (Teleport, Route, or Multi-stop) and, for Route, a Speed (Walk / Bicycle / Motorcycle / Car / Fly). Click the map or use the search box to pick a place. First point places you; then teleport, follow roads, fly, or run a multi-stop trip. Stop here holds the current point; Stop & restore GPS clears the spoof entirely.
Road routes come from the free public OSRM demo (no key; personal use). Place search uses Nominatim (no key; be polite with rate limits). Map tiles are OpenFreeMap. Map/routing/search network calls happen in the UI — the Python backend only ever talks to your phone.
Check the phone's status (no root needed):
venv/bin/python3 m_maps.py detectSet a location and hold it until you press Enter (needs sudo — the USB location
tunnel creates a utun interface, which requires administrator privileges):
sudo venv/bin/python3 m_maps.py set 48.8584 2.2945Force-clear a simulated location (e.g. after an unclean exit):
sudo venv/bin/python3 m_maps.py clearRun venv/bin/python3 m_maps.py <command> --help for details.
Color variants of the app mark live under assets/logo/ (SVG + PNG). The
shipping app icon is built from mayoka-black.svg into assets/icon/AppIcon.icns
(scripts/make_app_icon.py). Other colors are reserved for a future in-app
picker and are not wired into the .app yet.