iOS-GPS-Spoofer README

The project's README from github.com/SegFault42/iOS-GPS-Spoofer. As one markdown file: README.md.

iosgpsspoof

Spoof the GPS location of a connected iPhone (iOS 17+) for as long as the tool runs. The fake location is cleared automatically on exit, and re-applied automatically if the device disconnects and reconnects.

Ships as two front-ends over a shared core (SpooferCore):

It drives Apple's developer location-simulation service — the same mechanism Xcode's Product ▸ Scheme ▸ Simulate Location uses. On iOS 17+ that service lives behind the encrypted CoreDevice tunnel, so the actual transport is handled by pymobiledevice3; this tool is the user-facing wrapper (CLI, device selection, the "keep it spoofed while connected" supervision loop, clean teardown).

Download

No build required — grab the DMG from the Releases page:

⬇ Download the latest release

Open the DMG, drag iOS GPS Spoofer to Applications. First launch: right-click ▸ Open (the app is ad-hoc signed, so Gatekeeper asks once). Then prepare your iPhone — see IPHONE-SETUP.md.

Want to build it yourself instead? See Setup / Package as a DMG.

Screenshots

Fixed GPS location

Click a spot on the map (or type coordinates / pick a preset) and the connected iPhone reports that exact location for as long as the tool runs.

Fixed-point mode

The spoofed position as the iPhone itself sees it — Apple Park, the mid-Atlantic, and the Eiffel Tower:

Apple Park North Atlantic Eiffel Tower

Route

Drop waypoints A → B and any points in between, set a duration (h : m : s) or a speed (km/h), and the iPhone moves along the path at constant speed. Optionally loops.

Route mode

Requirements

Setup

./setup.sh          # creates .venv with pymobiledevice3, builds release binary

The binary lands at .build/release/iosgpsspoof. Copy it onto your PATH if you like (cp .build/release/iosgpsspoof /usr/local/bin/). It looks for pymobiledevice3 in ./.venv/bin, then next to the binary, then on $PATH; use --python-path to point at a specific one.

GUI

./run-gui.sh          # or: .build/release/iosgpsspoofer-gui

Stopping is immediate, and cleanup is robust: closing the window / Cmd-Q clears the simulated location; a kill (SIGTERM/SIGINT) still kills the tunnel child; and if the app is ever kill -9'd, the next launch reaps the orphaned pymobiledevice3 process automatically.

Automation: set SPOOF_UDID=<udid> and/or SPOOF_START="lat,lon" in the environment to preselect a device and auto-start spoofing on launch.

Package as a DMG

./package-dmg.sh              # → dist/iOS-GPS-Spoofer-<version>.dmg
./package-dmg.sh --no-venv    # lean build; app expects pymobiledevice3 on PATH

Builds iOS GPS Spoofer.app (generated icon, ad-hoc signed) and a drag-to-install DMG. By default it bundles ./.venv inside the app, so the app finds pymobiledevice3 on its own — it looks for Contents/Resources/venv, then $PYMOBILEDEVICE3, then a .venv beside it, then $PATH.

The bundled venv's Python still references this machine's Homebrew Python, so the default DMG runs on this Mac and Macs with the same brew install [email protected]. For a portable build use --no-venv and have users install pymobiledevice3 themselves. First launch of an ad-hoc-signed app: right-click ▸ Open.

Publishing a release (maintainer):

VERSION=1.0.0 ./package-dmg.sh
gh release create v1.0.0 "dist/iOS-GPS-Spoofer-1.0.0.dmg" \
  --title "v1.0.0" --notes "iOS GPS Spoofer 1.0.0"

The Download link points at releases/latest, so it always resolves to the newest published release.

CLI

# list paired devices
iosgpsspoof list

# spoof to a fixed point (Eiffel Tower). Holds until Ctrl-C, then restores real GPS.
iosgpsspoof spoof 48.8584 2.2945
iosgpsspoof spoof "48.8584,2.2945"          # single-token form also works

# choose a device / link explicitly
iosgpsspoof spoof 37.3349 -122.0090 --udid 00008110-000815C10CD1801E --connection usb

# drive the device along a GPX track, looping forever
iosgpsspoof route ./drive.gpx --loop --timing-randomness 200

# manually clear a simulated location (e.g. if a previous run was killed hard)
iosgpsspoof clear

While spoof / route is running it:

Options (spoof / route)

option default meaning
--udid <id> first device target device
--connection any|usb|network any which link to use / require
--transport native|tunneld|userspace native tunnel mechanism. native = no root (macOS). tunneld needs sudo pymobiledevice3 remote tunneld running. userspace = in-process, no root, slower
--retry-interval <s> 5 delay before re-establishing after a drop
--no-clear-on-exit off keep the fake location after exit
--python-path <path> auto explicit pymobiledevice3 binary

Notes / limitations

iOS-GPS-Spoofer (SegFault42/iOS-GPS-Spoofer)

Searching Database…

这是什么?一个让已连接的 iPhone 在运行期间报告虚假 GPS 定位的工具,停止时会自动恢复真实定位。它调用的是苹果的开发者位置模拟服务——和 Xcode 的 Simulate Location 用的是同一套机制。
它是 Mac 应用还是命令行工具?两者都是,基于同一个核心构建:一个 SwiftUI macOS 应用,带自动识别的设备列表、点击即可设置位置的地图、预设方案和实时日志;另外还有一个命令行工具,提供 spoof、route、list 和 clear 等命令。
我需要越狱 iPhone 或以 root 权限运行吗?不需要——在默认的原生传输方式下,Mac 端无需 root,因为它借助的是苹果自己的 remotepairingd 隧道。iPhone 也不用越狱:只需完成配对并信任,再开启开发者模式即可。
iOS 16 的 iPhone 能用吗?默认的原生/tunneld 传输方式不行——它们要求 iOS 17 及以上。如果是 iOS 16 或更老的系统,README 会指引你直接通过 usbmux 使用 pymobiledevice3 的 developer simulate-location 功能。
能在 Windows 或 Linux 上运行吗?不能——它只支持 macOS:图形界面是 SwiftUI Mac 应用,而且连编译这个工具都需要装了 Xcode / Swift 6 工具链的 macOS。
它只能固定一个假位置,还是能模拟移动?路线模式可以在地图上设置 A → B 两个航点以及中间经过的点,然后让 iPhone 沿路径匀速移动——可以用时长(时:分:秒)或速度(km/h)来控制节奏,还可以选择循环。路线运行过程中,航点可以重新排序和编辑。
我停止它或手机断开连接后会怎样?停止或退出时会立即清除虚假定位;如果手机断开后重新连接,虚假定位也会自动重新生效。即使 kill -9 强制结束进程,清理照样有效——残留的隧道进程会在下次启动时被回收——另外 --no-clear-on-exit 参数可以让假位置保持不变。
为什么需要 Python 和 pymobiledevice3?在 iOS 17 及以上版本中,苹果的位置模拟服务位于加密的 CoreDevice 隧道之后,而这条隧道由 pymobiledevice3 负责处理;本工具在它之上封装了设备选择、持续保持假定位的循环以及干净的退出清理。注意:DMG 里自带的 venv 引用的是构建那台机器上的 Homebrew Python——在其他 Mac 上请使用 --no-venv 构建方式,并自行安装 pymobiledevice3。
模拟出来的位置有多完整?只有经纬度是假的——海拔、航向和速度都不会设置,这点和 Xcode 的 simulate-location 一样。首次运行时可能还要等几秒,因为要挂载 DeveloperDiskImage 并建立隧道。
Creator
SegFault42
Size
5.8 MB
Stars
240
Age
1mo
Commits · 90 Days