Lessons From Building My First App
After several months of intermittent work, I released my first app this weekend. It’s an action tracker named Squirrel, and you can download it for free on the App Store.
Squirrel is a productivity app that records when you complete certain tasks that you’re interested in tracking. You can choose to configure each of the actions so you can receive a reminder if you’ve gone too long without doing that task. For instance, a handful of my friends are using the app to keep track of when they water their plants 🌱. If this is something that you might find useful, I encourage you to take the app for a spin.
I alluded to the journey involved in making this on Twitter yesterday, and I wanted to expand upon those thoughts here.
Each year I follow along with Apple’s annual developer conference, where the company announces upcoming software features and developer advancements. Like many others, I was quite interested in last year’s announcement of SwiftUI, Apple’s then-new declarative framework for writing user interfaces.
I had never written a line of Swift or Objective-C, as my trusted language of choice at the time was Python. I took web design and introductory Java courses during college, but I certainly would not have called myself a software developer.
Yet for some reason, the idea of SwiftUI hooked me. I downloaded Xcode and started reading up on SwiftUI. Then the obvious dawned upon me: Maybe I should learn Swift first. These sorts of realizations would become normal for me over the next year.
At some point in the fall, after feeling comfortable with Swift as a language, I once again cracked open Xcode and decided I was going to write an app. I floundered. Instead of learning the fundamentals, I tried to Google my way into building an app, reading up on certain APIs as necessary. Without any understanding of UIKit (the primary framework for building iPhone and iPad apps) or the foundational building blocks of how to make iOS app, I didn’t truly understand what I was doing.
The other mistake I made early on was trying to use the new shiny APIs that were introduced in iOS 13—notably diffable data sources and collection view compositional layouts—without really understanding the previous, but still relevant, methods of implementing these things. (Side note: I’m using those APIs now, and they are indeed awesome.)
Ultimately, I had let my enthusiasm get ahead of learning what I needed to find success. By jumping directly into the deep end, I wasn’t going to be able to create the apps that I had in my brain. And even if I was able to get by, I don’t believe I would have been able to explain the logic behind the technical decisions I had made.
A few months later over the holidays, I decided to go heads down with Apple’s Intro to App Development with Swift, a great free resource for getting started. Once I grasped the the basic concepts of building an app using UIKit, I was then able to branch out to explore new ideas. In my spare time, I continued to read more guides, watch videos, and write Swift code. In early March, I had a basic prototype of Squirrel running, and since then I’ve worked on and off to get the app to where it is today.
Ironically, Squirrel is built almost entirely using UIKit, not SwiftUI. While the latter sparked the initial thought that I could learn to make an app, the process of learning how to develop for iOS led me to learn a whole set of different skills. That said, as Apple announces what they have on deck during their developer’s conference this week (potentially SwiftUI 2.0?), I feel more confident in my ability to learn SwiftUI and other frameworks after this journey.
Building Squirrel allowed me to scratch a technical and creative itch, and I’m proud of what I’ve built thus far. I encourage you to download Squirrel and let me know your thoughts. In the coming weeks, I’ll continue to improve and polish the app.
If my work finds a special place in your heart, please consider leaving a tip in the app’s tip jar. Your feedback and support is very much appreciated!