Skip to content

Repository files navigation

Roam Control app icon

Roam Control

Choose, test and move an iPhone's reported location from one clean Apple Maps interface.

Public beta: 0.9.0 (Build 29) · Requires: iOS 27+

Roam Control is an open-source SwiftUI app for location-based development, quality assurance and responsible personal testing on an iPhone you own and control. It supports fixed locations, walking routes, favourites, history, native on-device pairing and LocalDevVPN-compatible sessions.

Screenshots

Roam Control welcome screen Selecting a fixed location in London Active simulated walking route

Welcome · Fixed location · Walking route

Privacy-first anonymous statistics choice Roam Control settings

Private by design · Settings

Highlights

  • Search places live with MapKit, enter coordinates or tap the map.
  • Start a fixed reported location and update it without reconnecting.
  • Preview an Apple Maps walking route before starting.
  • Pause, resume, reverse or redirect an active walk.
  • Save named favourites and revisit recent locations.
  • Restore the real location explicitly when testing is finished.
  • Recover safely after an interrupted fixed or walking session.
  • Follow separate, guided LocalDevVPN flows for Wi-Fi and mobile data.
  • Choose automatic, light or dark appearance and standard, satellite or hybrid maps.
  • Use Dynamic Type, VoiceOver and Reduce Motion.

Install the public beta

Roam Control is not distributed through the App Store or TestFlight. Download the IPA attached to the matching GitHub Release and sign it with SideStore using your own Apple account.

You will need:

  • An iPhone running iOS 27 or newer.
  • Developer Mode enabled.
  • LocalDevVPN.
  • SideStore, or Xcode on a Mac.

Read the complete installation guide before installing. Free Apple accounts remain subject to Apple's app-count and seven-day refresh limits.

First-time setup

  1. Install and open Roam Control.
  2. Complete the four-page introduction.
  3. Tap Pair This iPhone on Device Setup.
  4. Open Settings → Privacy & Security → Developer Mode → Pair with Roam Control.
  5. Enter the six-digit code shown in Roam Control.
  6. Install and connect LocalDevVPN.
  7. Choose a location or walking route.

The pairing record is stored in the iPhone Keychain and is never uploaded.

Privacy

Locations, coordinates, searches, favourites, history, walking routes and pairing records stay on the iPhone.

Anonymous usage statistics are optional and off by default. When enabled, a narrow first-party sender reports only a fixed set of activity events, the app version/build and a hashed random installation identifier. It never sends locations, searches, routes, pairing data, device names or diagnostics. No third-party analytics SDK is embedded.

The public project has no live analytics destination or Apple signing team. A checkout therefore sends no statistics unless the builder deliberately supplies a private local configuration.

Read Privacy for the exact event and retention disclosure.

Responsible use

Roam Control is intended for development and testing on a device you own and control. Location simulation can affect every app using the iPhone's reported position. Restore the real location before using navigation, emergency, safety, transport or location-sharing features.

Do not use Roam Control to mislead another person, falsify evidence, access something you are not entitled to use, evade safeguards or breach a third-party service's rules. See Responsible Use.

Build from source

  1. Clone the repository and open RoamControl.xcodeproj in Xcode 27 or newer.
  2. Select the Roam Control target.
  3. Choose your own Apple development team under Signing & Capabilities.
  4. Select a connected iPhone and press Run.

The iPhone simulator is useful for interface work but cannot complete the physical pairing handshake or start a location session.

Normal builds use the included Frameworks/RoamPairingFFI.xcframework. The framework contains arm64 iPhone and Apple Silicon simulator slices. Rebuild it only after changing Native/RoamPairingFFI; instructions are in the build and release guide.

How it works

Roam Control generates or imports an RPPairing record for the same iPhone and stores it in the device-only Keychain. When a location starts, it discovers that iPhone's remote-pairing service through LocalDevVPN, verifies the device identity and opens the encrypted developer session used to set or clear a simulated location.

The native engine is a narrow Rust-to-Swift bridge around the MIT-licensed idevice library, pinned to an exact revision. No Locus source is included or copied.

Documentation

Contributing

Bug reports and focused improvements are welcome. Read CONTRIBUTING.md before opening an issue or pull request, and never upload pairing records, signing material, credentials or private location information.

Licence

Roam Control's own source is available under the MIT Licence. Bundled dependencies retain their own licences; see Third-party notices.

About

Choose, test and move an iPhone’s reported location.

Topics

Resources

Contributing

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages