Simulator Location Tools: A Native macOS App for iOS Location & Route Testing

Simulator Location Tools - Select a country and city, preview on Apple Maps, and apply to booted iOS Simulators
For many years, my primary world was Android development. When I expanded deep into iOS development and began building location-driven experiences for Apple devices, I quickly realized how much I missed one specific part of the Android ecosystem: the emulator's location controls.
If you have ever developed location-aware apps on Android (like GPS trackers, trip loggers, navigation, or geofencing tools), you know how straightforward Android Studio's emulator controls are. You open the extended controls window, click on a map, search for any address in the world, or load a route with customizable speed, and test your app instantly.
On the iOS Simulator, however, testing realistic locations and movements has always felt surprisingly clunky and disconnected.
How Location Testing Works in Xcode (and Why It's Clunky)
To be fair, Apple does provide ways to simulate locations in Xcode and the Simulator, but the developer experience is far from friendly when you need to test realistic, dynamic scenarios:
- The Simulator Menu: You get a handful of hardcoded presets (Apple HQ, City Bicycle Ride, Freeway Drive) and a "Custom Location" dialog where you have to manually look up and type raw latitude and longitude coordinates. There is no interactive map to browse or click.
- Xcode Schemes & GPX Files: Xcode lets you attach custom
.gpxfiles to your build scheme or select them from the debug bar. While this works for predefined waypoints, it is not UI-friendly at all:- You can't just pick a start and destination on a map and generate a route. You have to find or create a GPX file externally (calculating coordinates and timestamp intervals yourself), add it to your project, and reselect it.
- If you want to test a different street, city, or route five minutes later, you are back to handcrafting or generating another GPX file.
- No Live Playback Controls: Once Xcode runs a GPX playback, you don't have interactive controls to pause, change speed on the fly (e.g., accelerating from 30 km/h to 90 km/h), loop, or see where the simulator currently is on a live map.
- Targeting Multiple Devices: Xcode schemes only target the actively debugged process. If you have multiple booted simulators (e.g. testing rider and driver apps simultaneously, or comparing iPad and iPhone), broadcasting a route across all of them isn't possible out of the box.
- Terminal Commands: You can use
xcrun simctl location <UDID> set <lat> <lon>, which is great for automated scripts, but inconvenient when exploring and testing features interactively.
When building an app with GPS features (like trip recording, delivery tracking, travel apps, or geofencing), having to manually deal with raw coordinates and static GPX files creates constant friction.
I wanted a fast, visual, native tool: open a map, search any place, calculate a driving route between two points with one click, and play it back with live speed controls across all my running simulators.
So, I built Simulator Location Tools.
What is Simulator Location Tools?
Simulator Location Tools is a native macOS utility built with SwiftUI, MapKit, and SwiftData. It interacts directly with Xcode’s simctl under the hood to control location simulation on any booted iOS Simulator.

Simulator Location Tools - Driving route playback with speed controls and live progress
Here is what the app brings to the table:
1. Built-in Offline Location Catalog (196 Countries)
The app comes bundled with an offline database covering 196 countries, including national capitals, U.S. state capitals, and dozens of major international cities (powered by GeoNames data). You can browse by country, pin frequently tested regions to your Favorites, and instantly set a device to that location without needing an internet connection.
2. Search Real Places with Apple Maps
Need to test a specific address, landmark, or point of interest? Use the built-in Apple Maps search to locate any real-world place, preview it on the interactive map, and save it directly to your custom places library grouped by country.
3. Test Movement, Not Just a Static Pin
Testing a static coordinate is rarely enough when you are building navigation or trip-tracking features. With Simulator Location Tools, you can:
- Calculate realistic driving routes between any two points using Apple Maps directions.
- Import custom GPX files containing track points (
<trkpt>), route points (<rtept>), or waypoints (<wpt>). - Play back the route with live progress, remaining distance, and estimated marker tracking on the map.
4. Advanced Playback & Speed Profiles
You have full control over how routes are simulated:
- Speed Profiles: Choose between constant speed, accelerating profiles, or variable driving speeds.
- Live Speed Adjustment: Adjust speed on the fly during playback.
- Route Looping: Repeat routes automatically for continuous stress testing.
- GPX Export: Export Xcode-compatible GPX files with preserved elevation and timestamp metadata.
5. Multi-Simulator Support
If you are testing multi-device flows (e.g., driver and passenger apps, or different screen sizes running simultaneously), the app automatically discovers all booted simulators. You can target a single simulator or broadcast locations and route playback to multiple devices at the same time.
How It Works
The workflow is designed to stay out of your way:
- Launch your iOS Simulator(s) from Xcode.
- Open Simulator Location Tools — running devices are detected automatically.
- Select a city from the catalog, search on Apple Maps, or drop custom coordinates.
- Select the target simulator(s) and click Apply Location.
- For movement scenarios, pick or import a route and hit Play Route.
Because the app is built 100% natively in Swift and SwiftUI, it is fast, lightweight, and respects privacy: no analytics, no external tracking, and full offline support.
What I Learned: Building My First macOS App
This project was also a personal milestone: it's the first native macOS app I've ever built and shipped.
Coming from years of Android and iOS development, diving into the Mac desktop ecosystem was a great learning experience. While modern SwiftUI makes writing UI for macOS very familiar if you know iOS, shipping a standalone desktop utility comes with its own unique set of challenges:
1. Integrating In-App Updates with Sparkle
Distributing an open-source macOS app directly (outside the Mac App Store) means you need a clean way to deliver updates to developers. I integrated the open-source Sparkle framework via Swift Package Manager. Setting up SPUStandardUpdaterController allows users to check for updates directly from the app menu and Settings window without having to manually monitor GitHub releases.
2. Passing Apple Notarization
If you've ever downloaded an unnotarized Mac app from the web, you know the dreaded Gatekeeper warning. To distribute a polished macOS binary, I had to learn the entire Apple packaging pipeline:
- Code signing with a Developer ID Application certificate.
- Enabling Hardened Runtime with proper entitlements.
- Submitting the binary to Apple's Notary Service (
notarytool) and stapling the notarization ticket to the app bundle.
Passing Apple Notarization means macOS Gatekeeper verifies the app seamlessly on launch, giving users a safe, trusted experience from day one.
Open Source & Getting Started
Simulator Location Tools is open source and available under the MIT License.
You can check out the source code, build it locally with Xcode, or contribute on GitHub:
👉 GitHub: adek/Simulator-Location-Tools
Requirements
- macOS 15 or later
- Xcode 16 or later (with iOS Simulator and command-line tools installed)
If you build location-aware iOS apps, give it a try and let me know how it fits into your workflow! Feedback and contributions are always welcome.