Project Description

Writing prompts app update #1

Published: April 28, 2020

I want to make an iOS app. It’s something I’ve wanted to do for a while now. It’s on my 30 before 30 list, which I put together back in 2018, but iOS development has been on my mind for more years than that.

I want to build and launch something that I create with my own hands start to finish. Put something out into the world that starts as an idea and becomes something real and polished that a stranger I’ll never meet can download and benefit from. I want to make things that solve my own problems. Maybe even make something that someone somewhere will be willing to pay money for someday. Something that’s all my own.

I have some programming skills, and it honestly kinda feels like a waste that I haven’t been using them to make cool shit in my spare time.

I had an internship doing iOS app development back in college, and I really enjoyed it. That was during the iOS 5/6 days shortly after Apple introduced automatic reference counting for Objective-C. No Swift yet. Definitely no SwiftUI yet. iPhones still had bezels and home buttons. That was 2012-2013, which feels like forever ago now.

I haven’t worked on any iOS projects since then. I miss it. It was a fun platform to develop for. I’m an iPhone user, and I love downloading and playing around with new apps on the App Store. It’s inspiring to see the cool stuff people are building every day for that platform. It’s a community I want to be a part of.

All in on SwiftUI

A lot has changed in iOS land since I was last involved. In 2014 Apple released an entirely new general-purpose programming language called Swift that’s meant to replace Objective-C for app development. Swift syntax is almost Pythonic, so it’s way easier to read than Objective-C (which has a lot of syntax quirks). Unlike Python, Swift is a strongly-typed language, and it’s compiled, which means it’s fast.

As someone who’s been working with Python exclusively in my professional life for the last few years, there’s a lot about Swift that excites me.

At WWDC 2019, Apple released a new UI framework for writing apps called SwiftUI. I don’t know much about SwiftUI other than it uses a declarative syntax to describe user interfaces, so no more Interface Builder or Storyboards I guess. I also know the latest versions of Xcode include some fancy new design tools for rendering live and interactive previews of SwiftUI code without having to run apps in the Simulator, which should speed up development, so I’m excited about that.

As a new iOS developer, SwiftUI seems like the fastest way to get from zero to an app in the App Store, so I’m not going to spend any time re-learning Objective-C or UIKit. If I wanted to be a professional iOS developer, then I don’t think I’d be able to take these shortcuts because legacy iOS codebases are still largely dependent on those older technologies. But it’s just me right now, and I’m starting from scratch, so I have the luxury of picking and choosing the technologies I use.

SwiftUI seems like the future, so I’m going to try to build my first app using nothing but SwiftUI. Out with the old, in with the new!

Avoiding the tutorial trap

Even though my focus will be SwiftUI, there’s still a ton of new stuff for me to learn: Swift, SwiftUI, Xcode, Combine… the list goes on. New programming languages, new development tools, new paradigms for describing and presenting UI views.

On top of all that, iOS developers are pushing the app quality bar higher every day. It’s insane how little mobile apps cost compared to how polished, beautiful, and genuinely useful so many of them are. There are going to be a lot of little details to obsess over if I want my app to include the bare minimum feature set that users expect today.

With so many new things to learn, and with so many high quality (and free) resources available online to learn from, I need to be careful not to fall into the tutorial trap. I don’t want to get sucked down too many rabbit holes, and I don’t want to delay actual app development in favor of “mastering” a topic that I literally just started learning. I love learning new things, but my main goal right now is to build an app, so I don’t want to let my desire to learn distract me from that.

Textbooks are great, but the fastest way to learn will be trying and failing while working on a real project that I’m passionate about. It’s okay if I don’t fully understand every line of code that goes into my app. There will be future apps (hopefully), and every new app will bring more opportunities for me to tighten up my understanding of things.

My app: Writing prompts

I’ve been a little bit obsessed with writing prompts the last few years. There’s a popular subreddit dedicated entirely to writing prompts, and I think it’s a fun place to hangout. I’m consistently impressed by how clever and imaginative the people who post prompts are. I’m also just generally impressed with anything related to creative writing. It’s a skill I want to grow, but I’m terrified of it at the same time, so it’s a challenge to sit in that space long enough for me to actually improve.

Scared or not, I think everybody has at least one book in them waiting to be written. Maybe hanging out on the outskirts of a writing prompts community is something that will help me unearth my own book someday.

Last year I made a little Twitter bot that posts new writing prompts every hour. It reads from a CSV file that I loaded with prompts, picks a random one, makes sure it hasn’t posted it already, and then shares it. It was a fun little project. All the prompts came from Reddit, and I built the CSV file using Reddit’s API.

I want my first iOS app to extend my Twitter bot. It’ll be a simple client for browsing the r/WritingPrompts subreddit.

Here are some crappy sketches:

The app will have two primary tabs:

  1. New prompts. Whatever’s been shared on Reddit recently. You’ll be able to sort by hot, top, and new, which are common Reddit sort modes.
  2. Favorite prompts. Anything you favorite in the new prompts tab will show up in a list here so you can easily reference it later.

I like this idea for a lot of reasons. It’s simple. The scope is contained. There’s only a single data source I have to interact with. The data is free to access. The Reddit community is huge, so there will be tons of content generated on a daily basis that my app can consume and share to keep things interesting. All functionality can easily exist on the client (your phone), so I won’t have to write, maintain, or pay for any server-side stuff.

It’s not a totally original idea. There are other writing prompts apps out there, and there are tons of Reddit clients that exist already, but this idea still excites me. It’s something I would use myself, and it’s something I think I’ll be able to carry all the way to the finish line. For me, right now, finishing something is what matters.

Let’s make it happen!


Photo credit: Dave (@johnwestrock)