gjRoutes Is on the App Store
August 25, 2025
Tagged with: gjroutes, ios, macos, app, app store
736 words; 3 minutes to read.
gjRoutes is my tenth iOS app and first macOS released on the App Store.

I’m a runner, mainly off-road, and I like varying my routes and exploring new areas. I wear a Garmin watch to record my runs and often download the GPX files from Garmin Connect to see exactly where I’ve been. Most of my runs start and finish at home, so my routes often overlap or run close to each other. I’d been using a GPX viewing app, but it opened files in separate windows instead of one, which was frustrating. Despite lots of apps out there, I couldn’t find exactly what I wanted.
So, I decided to build my own: display multiple GPX files in different colours on a map, with options to change colours and hide routes to declutter the display.
I’d only written iOS apps before (my apps), so I started gjRoutes as an iPad SwiftUI app. The tricky part was reading GPX files and extracting coordinates. Vincent Neo’s CoreGPX Swift package solved this neatly, making it easy to parse GPX files and display them on a map with Apple’s MapKit.
Soon I had a working app on the iPad. With a few tweaks it ran on the iPhone too—even on my smaller iPhone 13 mini. But I also wanted it on the Mac, to use my 5K display.
I’d never built a Mac app before, but luckily iOS, iPadOS and macOS can share the same SwiftUI code base. That meant one app across all platforms with a single purchase unlocking it everywhere. Perfect. I turned to ChatGPT for help adapting the code for macOS. It wasn’t always smooth—sometimes it got stuck in a loop or ran out of tokens—but eventually, gjRoutes was running on all three platforms. After testing and fixing bugs, I was ready to publish.
Then I had a brainwave. Garmin Connect automatically uploads my runs to Strava. Wouldn’t it be great to view Strava runs directly in the app?
Strava provides an API, and Gustavo Ferrufino’s StravaKit package made integration straightforward. After getting an API key and reorganising some code, gjRoutes could display Strava activities alongside GPX files.
Submitting to the App Store wasn’t straightforward. Strava’s default API key only allowed one user—fine for development, but useless for real users or App Review. To fix this, I had to follow Strava’s brand guidelines, update some screens, and apply for enhanced API access. Thankfully, I was approved within a week.
App Review itself was tougher. The iOS version took three rounds of rejection before approval, and the Mac version five. Some rejections were my fault, others less so, but persistence paid off.
Now I’m happy to say gjRoutes is live on both the App Store and the Mac App Store.
If you’re a GPX user or a runner with a Strava account, download gjRoutes using the links below and give it a try. Hopefully you’ll find it worth the small fee, especially with Strava integration. And if you enjoy it, please consider leaving a review—thanks!