When I was first learning to design and build websites, everything that I made was a pet project.
I was ten years old and building video game websites—mostly about StarCraft. At the time, my mother was strict and never let me play. Making websites about games was the next best thing. (Even though all that gaming and coding would prove valuable in the end.)
Passion is motivating. It fuels the learning process in a way that pure academics cannot. Maybe there are people who can sit down with a programming book and digest the whole thing; I am not one of them. If I am going to learn something, I need to be building something with that skill.
Lately, I have been working on my first native app: a simple time-tracking app. It’s one of the simplest, most generic utilities. We’ll get into why I chose that, but it honestly didn’t matter what it was. As long as the project gets me started and keeps me interested, who cares that it’s not the next Uber/Instagram/Snapchat?
While I build my app, I’ll be documenting the design and build process in these “dev diaries.” Enjoy!
First, let’s talk about the idea.
Going into this, I knew that it needed to be simple. Even small apps have hidden complexity. For example, take the humble note-taking app. Where do you backup the data? Do you have to build a syncing engine? If notes are shareable, do you need a user management system? If it’s got server-side syncing, you have maintenance costs; that needs a good pricing model. All these considerations are a bit much for a learning project.
- It had to work offline, without a syncing system.
- It had to be single-purpose—easier to design.
- It had to be extendable to multiple platforms (mobile, desktop, wearables‽).
- It had to be something that I would use everyday, i.e. dog food-able.
There were a few options: ambient noise apps, home inventory apps, weather apps. In the end, these were too complex. I also knew that I wanted to document the whole process in these “diaries,” so it couldn’t be so interesting that I’d worry about people stealing my idea.
A single-purpose, time-tracking app was the obvious choice. The iPhone already has an offline-only timer with generic functionality, so I had a reference product. Also, I need to track time daily for design work, meaning hands-on testing. And later on, it could become a mobile/desktop/wearable/web-based app with syncing.
For a first app—really, a vessel for learning iOS—this idea is low pressure. If it fails, no big deal. If I change my mind later, I didn’t sink months of work into something overly ambitious. And if I do finish it, the final product is something that I’ll use every day.
I’m taking a two-pronged approach: designing the app, and learning the process. Let’s talk about the development part.
I had a hard time finding somewhere to start. Go try a Google search for “learn iOS app development.” There are thousands of courses and tutorials, but all are some combination of shallow, out-of-date, or sketchy.
Over the summer, I was reading The Swift Programming Language: Swift 3 Edition from Apple. It reads like a cross between a computer science textbook and a brochure that wants to entice Objective-C holdouts into switching languages. The company also maintains a developer site, but it isn’t beginning friendly (IMO). Last year, I also bought a copy of Cocoa Programming: For OS X (Fifth Edition) by the Big Nerd Ranch, but it’s no longer current.
Udemy has an iOS 10 development course that I ended up buying. It normally retails for $200 (good Lord), but I purchased it 90% during a month-long sale. Keep your eye on that one. It’s all videos and hands-on experience, and the course instructor has a calming, British accent. We’ll see how that goes.
That’s all I have for now. If you know of other good iOS/macOS development courses of books that I should look into, please send them along! The easiest way is through Twitter; I am @hawkeward.