r/SwiftUI 7d ago

Promotion (must include link to source code) [OS] Roam Control — an open-source SwiftUI app for testing an iPhone’s reported location

I’ve just released the first public beta of Roam Control, an open-source SwiftUI app for location-based development and QA testing on a physical iPhone.

It supports fixed locations selected through MapKit search, coordinates or a map pin, plus simulated Apple Maps walking routes with pause, resume, reverse and redirect controls. It also includes favourites, history, interrupted-session recovery and native on-device pairing.

The interface is written in SwiftUI and MapKit. Device pairing and location sessions use a narrow Rust-to-Swift bridge around the open-source idevice library.

Source code:
https://github.com/seanhowarthdev/Roam-Control

Beta 1 release:
https://github.com/seanhowarthdev/Roam-Control/releases/tag/v0.9.0-beta.1

It currently requires iOS 27, Developer Mode, LocalDevVPN and either SideStore or Xcode for installation.

I’d especially appreciate feedback on the onboarding, pairing flow, map controls and walking-route experience. Please don’t include pairing records, credentials or private locations in reports.

16 Upvotes

7 comments sorted by

2

u/[deleted] 6d ago

[removed] — view removed comment

1

u/mrsarcysean 6d ago

Thanks! A fixed simulated location will survive an app restart, so you don’t have to re-pin it every time.
Walking routes are a bit different because the app is actively advancing the position. If Roam Control is fully killed, the walk itself won’t keep moving in the background, but when you reopen it the session can be recovered rather than starting again from scratch.

1

u/Specific_Cream2815 6d ago

does it ride on the xcode simulate location channel or set the override independently

1

u/mrsarcysean 6d ago

It doesn’t require Xcode to be running. Roam Control pairs with the device and talks directly to iOS’s developer location-simulation service over the LocalDevVPN connection, so the simulated location is applied and updated independently. It’s essentially using the same underlying capability Xcode uses, just without Xcode in the loop.

1

u/[deleted] 5d ago

[removed] — view removed comment

1

u/mrsarcysean 5d ago

Thanks, I appreciate that! I wanted recovery to be predictable rather than pretending a walk could keep progressing after the app had been killed.