I wanted to build my first iOS back during the Objective-C days. I had been building websites using Ruby on Rails, so I figured I'd spend a couple of weeks reading up on the Objective-C syntax, maybe another week or two on whatever framework people used to build iPhone apps, and boom! I'd have an app in the app store in no time.
It turned out that Objective-C was way harder for me to grok that I was expecting. I also couldn't seem to find whatever framework people used to build iOS apps. I was hoping there to be a type of equivalent to Ruby on Rails, but for iOS. There wasn't. I was a bit overwhelmed and started losing motivation to learn. And so, I quit.
A few years later, Apple announced Swift at WWDC. I was drawn to try and build an iOS app, but it didn't take. I got a little further this time, but I kept getting stuck. I would try to google for a solution, but all the results would be in Objective-C. I lost motivation once more, and I quit.
A few more years go by, and I keep dipping my toes into Swift. Casually, without any objective in mind. I find the language fun and engaging. At this point, I enjoy programming with Swift with no ties to my day job. I'm just sort of coding small little programs for fun. However, I couldn't get myself to build an iOS app. The reason? Storyboards.
Let me explain: You see, as a web developer, my biggest obstacle when entering the iOS space, was building the UI. At this point, Apple recommends using storyboards. Almost all the books and tutorials out there focus on storyboards. For whatever reason, I couldn't make the connections. I'm a programmer; I want to see the code. I want to see how all these elements on the screen are laid out and designed. Looking back, I think that being a web developer was the reason things didn't click for me. I was used to a declarative way of constructing my UIs. The storyboard is a drag and drop tool that abstracted all of that away. While I was able to use it to build UIs, I had a hard time understanding what was going on under the hood.
And then, Apple announced SwiftUI at WWDC 2019. My interest is immediately piqued. I downloaded the beta and started hacking away. Here was the declarative UI framework I had been waiting for this whole time. In an instant, I wanted to build the first iOS app that I had bouncing around in my heard years. So I crack open XCode and get started.
Just about as quickly, I start running into the same issues I did when I tried to learn Swift back in 2014. I'd start building my app, and I'd get stuck. Only this time, anytime I googled for an answer, I'd find all the solutions were in UIKit. I was not familiar enough with UIKit to move forward. On top of that, the earlier days of SwiftUI had lots of bugs. I often would not know if it was SwiftUI or me. In all likelihood, it was a little bit of both. Once again, I started to lose motivation to move forward. I saw myself repeating the same cycle and decided that this time, I would not allow my lack of experience to keep me from my mission of launching my first iOS app. I committed to learning UIKit, but without storyboards. If I were going to do this right, I would have to learn how to build UIs the way I was used to: programmatically.
Serendipitously, Sean Allen releases his Take Home Project course, where he builds out an app that allows you to fetch a list of GitHub followers using the GitHub API. In that course, he builds the UI programmatically! This course was precisely the type of resource I was looking for at the time. There are a lot of programmatic UI resources out there, but they're all somewhat scattered, and none touch on what it's like to build a "real" app. I was interested in learning the conventions, from end to end, and this course seemed to explain just that.
Sean Allen's Take Home Project course exceeded my expectations. Over the years, I had built quite a bit of iOS programming knowledge, but it was all scatted. This course helped me connect all the dots. I felt like it all clicked for me, one video at a time.
After completing the course, I went straight to work on my app. I stumbled, but I would find ways to push through. Suddenly, I felt confident I could build this simple app I had been wanting to develop for years. It took me just under a month to put together and launch my first iOS app.
I built my app using UIKit. However, I feel like I'm in a significantly better position to introduce new screens and features using SwiftUI. You see, SwiftUI doesn't do all the things that UIKit can, and so it's nice to be able to fall back to UIKit when I need it. I can now confidently take full advantage of what the iOS development ecosystem has to offer.