A SwiftUI app for iOS that lets you manage GPS coordinates and export GPX files for location simulation in Xcode. Built for QA engineers and developers who need to test location-based features on real devices.
- Xcode 16 or later
- iOS 18 deployment target
- A physical iPhone (location simulation does not work on the Simulator for all scenarios)
- Add coordinates manually by name and lat/lng, or search by address using MapKit
- Organise coordinates into named groups
- Reorder coordinates within a group via drag handles (tap the Reorder button first)
- Move a coordinate to another group by dragging it onto the group header, or via the swipe action
- Rename a group inline by tapping the pencil icon in the section header
- Select individual coordinates or entire groups for export
- Export as Waypoints (static pins) or Route (animated path Xcode walks through)
- Import existing
.gpxfiles — waypoints, tracks, and route points are all supported - Coordinates persist locally between sessions
Manually:
- Tap + in the top-right corner
- Enter a name, latitude, and longitude
- Assign a group or create a new one
By address search:
- Tap + and start typing in the search field
- Select a result — the name, lat, and lng fill in automatically
Tip: In Google Maps, long-press any point on the map to reveal its coordinates. Copy them directly into the lat/lng fields.
- Tap the circle next to each coordinate you want to include (or use the Select button on a group header to select all in that group)
- The list order is the export order — reorder before exporting if needed
- At the bottom, choose Waypoints or Route from the picker
- Tap Export GPX (n)
- Save to iCloud Drive so it's accessible from your Mac without a cable
| Mode | GPX element | Xcode behaviour |
|---|---|---|
| Waypoints | <wpt> |
Static pins — Xcode jumps between them |
| Route | <trk> |
Animated path — Xcode moves smoothly along the route |
For most UI testing scenarios Route is more realistic. Use Waypoints when you need to test specific named locations independently.
- Drag the
.gpxfile into your Xcode project navigator — tick Copy items if needed - Go to Product → Scheme → Edit Scheme (
⌘<) - Select Run → Options → Core Location
- Set Default Location to your GPX file
- Build and run (
⌘R) — Xcode will simulate your device moving through the coordinates
To swap routes without rebuilding, replace the
.gpxfile contents and restart the app. Xcode picks up the file change immediately.
Connect your iPhone and hit Run in Xcode. The build is valid for 7 days, after which you need to re-run from Xcode.
- Install AltServer on your Mac from altstore.io — it sits in the menu bar
- Install AltStore on each target iPhone via AltServer over USB
- In Xcode: Product → Archive → Distribute App → Direct Distribution → Export to get a
.ipafile - Send the
.ipato teammates — they open it with AltStore to install - AltServer re-signs the app every 7 days automatically over WiFi
Exported filenames follow this pattern:
waypoints_<timestamp>.gpx ← Waypoints export
route_<timestamp>.gpx ← Route export
Coordinate names with XML special characters (<, >, &, ", ') are automatically escaped in the output.
All coordinates are stored in UserDefaults on-device. There is no iCloud sync — if you delete the app, your coordinates are lost. Export a GPX backup before uninstalling.
| File | Purpose |
|---|---|
GPXManagerApp.swift |
App entry point, shows SplashView on launch |
SplashView.swift |
Animated splash screen |
ContentView.swift |
Main list view with groups, selection, export controls |
CoordinateStore.swift |
Data model, persistence, and all mutation logic |
CoordinateRow.swift |
Individual row component |
AddCoordinateView.swift |
Add coordinate form with MapKit address search |
EditCoordinateView.swift |
Edit an existing coordinate |
GPXGenerator.swift |
Builds the GPX XML from selected coordinates |
GPXImporter.swift |
Parses imported GPX files |
HelpView.swift |
In-app guide |