Today, it's time to take you behind the curtain of the making of my latest project - BetterMetro.
The idea for this app stemmed from a frustration with my states public transit app. Something that I need to check multiple times a day that was clunky, slow, hid the thing i was there to check behind a pointless view and had core functionality fully broken.
One day, my patience with the user experience had worn a little too thin and my curiosity got the better of me. I decided to export a copy of the Android app with SAI and disassemble the bundle with apktool.
After quickly passing the resulting code through Codex for an initial search, I was able to find almost all of the endpoints I needed, the data types I should be looking for in responses and a good idea of how to make the authentication work.

From here, I was able to begin testing the endpoints myself in Insomnia to check for things like CORS and session cookies. From my initial testing, nothing of the sort was present. There was one blocker but that was not discovered until much later.
Authentication was rather simple to replicate, and there was very little restrictions on most of the endpoints.

Knowing that my connection to their backend was functional, I was able to start building a simple SwiftUI scaffold for the data,

From there, I was able to polish the UI, and add support for top ups, reloading the data and handling cached data and errors.

It was also at this point that focus was put on privacy and avoiding trouble. I began to work on an onboarding flow that made it very clear that I was not Metro, and that I dont store any data. I created a website that excplained in a clear, understandable way to go alongside my full privacy policy that I submit to Apple. I also made sure to spell out data handling very clearly to ensure that I came accross as responsible as possible.


From there, I decided to take a big gable and apply for the Apple Developer Program just to see what would happen.
A lot of patience was needed, and a lot of manual review.
A lot of polish and legal requirements have to be met to even partake in an App Review - screenshots, terms of service, contact details, IDs, crash handling, the works.
During the review for my first beta build, I hit my first real snag - the API blocks any IP that isnt in Australia.
I had a few options here - make a demo mode, proxy requests locally.
But all of them were corner cutting.
So instead I contacted Apple and explained it with a video demonstrating the app's use.
And I'm pleased to say that as of this morning, my hobby project that quickly became a tool I use daily can now be used by others!
You can join the beta here - https://testflight.apple.com/join/JKkegvZ1
Hopefully I'll get on the App Store at some stage, but the thrill is unmistakable.