Thoughts & Musings
A shift to SwiftUI
It seems incredible to me that Fight Scores is now over a decade old. What started as a way of combining my interests, boxing and Apple, quickly became a constant throughout my life. Fight Scores 1.0 was released April 2, 2015 at 6:22 PM, originally at $9.99 and later fluctuating between $6.99 and $3.99. Too much wine has filtered through the system since for me to remember the exact moment it was released, but I remember the feelings: fear, pride, excitement, trepidation. To finally be able to call myself an iOS developer was a massive milestone and one that I'll never forget.
I learned Objective-C and used Core Data to make that initial version possible. Syncing was always an issue, Core Data was buggy, and I wasn't experienced enough to know how to work around these problems. Then Swift came around. It was a language that, as a web developer, made sense to me, and so I set about first learning that, and then rewriting Fight Scores. I dropped Core Data in favor of building my own API, which seems crazy, but at the time I was a professional Ruby on Rails developer and it just seemed the easiest option - in true Apple tradition, if I could control both the API and the client, the possibilities were endless. Fight Scores 2, a brand-new, free app in the App Store (as I had zero will or understanding of how to port my meager number of users from a Core Data backend to a REST API hosted on Linode), went live on September 28, 2016 at 9:30 PM.
The next few years I like to think of as the golden era of my iOS development, with a release going out on average every two months. During this time I intimately learned Swift, and converted the codebase from Swift v1, 2, 3, and 4. Life happens though and things took my attention elsewhere. I occasionally released new features, but increased responsibilities at work plus having children certainly slowed progress.
March 2020, enter Covid, everybody's best friend. I jest of course, and as a Brit living in the US trying to protect a young family while separated by an ocean from my parents and siblings, it was a hugely traumatic time. Boxing had initially shut down over this time, and I, much like many boxing fans, took to diving into the archives to get my fix. This renewed appreciation of the classics gave birth to Fight Scores 3.0 which, alongside the current sparse boxing schedule, encouraged users to score the memorable fights from eras past. Fight Scores 3.0 arrived on Apr 8, 2020 at 1:45 PM.
All of that brings us to today and the release of Fight Scores IV. I haven't shied away from the fact that the last year has been a hard one, professionally I've thrown myself into my exciting, yet high-pressured job that I love, while my marriage collapsed and I worked frenetically to ensure my children were not just unaffected, but happy and balanced. Unsurprisingly, while boxing continued to be an outlet, Fight Scores was not a priority for me. I'm proud that throughout everything I continued to update the fight schedule every week - however app updates have been few and far between, as outlined in this post.
I'd previously made some attempts to move to SwiftUI but they hadn't come to much. The general consensus in the Apple dev community was that it wasn't ready, didn't allow for enough customization, and lacked the documentation and maturity to warrant putting too much time into. However, I knew that at some point I'd have to make that considerable leap or watch Fight Scores slowly die off.
I haven't been in any way as excited by WWDC keynotes in the last 5 years as I was the previous 10, I was once a "fanboy" with the latest iPhone, iPad, and Macbook, but honestly, I'm still rocking an iPhone 12 Pro and it's been great. We've entered an era of incremental improvements, and alongside it has come a certain apathy for the predictable CPU and camera improvements. This year was different though, Apple announced Liquid Glass, a new design language that I knew I could not ignore, whatever my personal feelings on it, both aesthetically and accessibility, I understood that it was something I would need to address.
After watching the dedicated WWDC session on Liquid Glass, I knew that it was the forcing function I needed to finally make that shift from Swift 5 to SwiftUI. Once I was consuming the more modern APIs it would allow me to more easily switch to Liquid Glass.
At this same time, I'd been spending a lot of time in my day job in Cursor. While my job title is Design, a lot of my IC work still revolves around code, and I'd been using AI assistants to supercharge my workflows for quite some time. My assumption was, as Apple is notoriously as bad with AI as it is with basic documentation, that in this particular use case, I was on my own. After some false starts with various models, I was pleasantly surprised to find that Claude Code 4 is an exceptional partner in this space. I'm not exaggerating when I say that certain tasks that would have taken me multiple months, were completed in a mere evening. If Claude didn't provide me with the precise code, it would explain certain concepts and patterns that I would have previously spent many a night frustratingly chasing down from outdated Stack Overflow answers. It's a true gamechanger.
Fight Scores IV itself is something that I'm incredibly proud of, it's a cutting-edge, modern app available across iOS, iPadOS, MacOS, and VisionOS. It's added new features, such as reordering scorecards and adding a search history, along with hugely relevant UX improvements like Sign in with Apple, all while staying true to its beliefs that simplicity will always be welcomed in a world of complexity. What I'm most excited about is the future - I have some updates in the works that I think are truly exciting and open up a whole world of opportunity, and they wouldn't have been possible without this shift to SwiftUI.
Here's to another decade of Fight Scores. 🍻🍻