How to build an iOS App in less than 3 days

And get some ad revenue while you’re at it…

I’m one of those people who tend to code when I’m not busy coding. By day I’m an iOS developer, but by night I’m a Go developer. Close friends are usually always working on open source side projects and that also tends to be how I spend my time with them.

But it turns out, you don’t have to be a coding addict to get something into the App Store that is both functional and generating revenue.

I wanted to see just how fast I could get an app in the iOS App Store using what I already knew. My goals were easy: provide some functionality, and receive some ad revenue.

My app idea also happened to come easy since I’m a geek and I like the idea of Bitcoin. I decided that I could meet these bare minimum goals with a minimalist Bitcoin Price app.

App Icon based off of the Coin Alert logo design.

Solidifying the Idea

A simple UI, simple features, and minimal functionality were a requirement for me. Starting with less would allow me to create an app and get it into the store faster. My goal was to prove that it does not take long at all to go from start to finish and hopefully encourage others to do the same for their own app ideas.

Now that I had the base idea, I began to prototype it on paper (aka brainstorm).

Cave Drawings Possibly Depicting Primitive Technological Reasoning

Translation:

CoinAlert tracks the current price of bitcoin and allows you to set alerts for when BTC hits high or low prices. The plan was to make it slightly customizable with the ability to set your favorite currency as the “base currency” for Current Prices and alerts.

Note: While this original plan included alerts, my released app did not. I decided I could always add it in later and that just displaying the current price would be enough functionality to submit to the app store.

At this point I stopped to consider what all the moving parts would be. What was required for this bitcoin price app?

Requirements

The key ingredient is of course an iOS app. Next, a Bitcoin exchange with a public API would be a requirement, however I was pretty sure I didn’t want to directly call this API from each launched application. Not only did it seem rude to put a ton of extra load on someone else’s API, but I also wouldn’t have any insight into metrics about my own App’s usage.

To solve that, I decided I’d also implement a simple web service to act as a man-in-the-middle between the client apps and the BTC exchange. This would allow me to call the exchange API at a consistent rate for updates and then feed that to all the client apps that needed prices. It also gave me the opportunity to mix Go into the equation, even if it’s not completely necessary.

Other than the iOS app, web service, and 3rd party API, I figured it’d also need minimal branding so I would have to find a logo.

Choosing a Bitcoin Exchange

Right here I decided Coinbase would be the easiest option as I’ve seen their API and it’s easy to use. In addition, I could put a little “powered by” label at the bottom with a referral link to Coinbase (ooh, look, a hyperlink). An extra monetization source sounds like a great idea!

Their API also allows for different currencies, and most recently Ethereum trade, for when I want to expand the app’s functionality.

A Go Web Service

I decided to tackle the server implementation before the iOS app. I chose this first since it has the least variables in design. For example, the server won’t have to worry about different screen sizes, a UI design, iOS signing certificates and provisioning profiles, app store submission, etc. Once the server is done, the last step will be the app and it’s a natural progression from start to finish by writing code and then submitting it to the App Store.

I’ve written several Go powered web services for both work and hobby. Using snippets of previously written code I was able to host a primitive API that returned a hard coded price via JSON.

Return a hardcoded JSON payload.

Of course returning an inaccurate, hard coded price for exchange isn’t going to fly. I added in Coinbase by creating a goroutine that updated the current trade price for BTC every 10 seconds. I also made the current price a global variable to allow all application calls to my service to quickly return the current price instead of calling Coinbase every time I got a request.

Testing was a simple cURL command:

curl -X GET https://whatdoesabitcoincost.com/api/current

An important thing to notice is I’m using HTTPS. Getting a valid TLS certificate with LetsEncrypt is extremely easy. There is no excuse not to provide proper HTTPS support nowadays with scripts like Lego that do the work for you.

With the goal of keeping this project drop dead simple, I spun up my web service the easiest way I knew how. First, I loaded up a very basic Ubuntu droplet on DigitalOcean and started the firewall only allowing SSH, HTTP, and HTTPS. Then I installed Go, git, and tmux, then cloned my repo. After compiling, I started the service in tmux and it can forever be reached at whatdoesabitcoincost.com.

iOS App and Logo

Next I started a new iOS project in swift. Starting with a single page application I added in the basic labels and a progress bar to fill out the app. I realized here that I would need a decently sized and decently looking logo.

Created in less than 15 minutes on Logojoy

Using the recently released Logojoy service, I was able to create and purchase a simple logo in about 15 minutes (promo code “x4nmvh” for $20 off). I was provided with 4 different versions of the logo, several different file formats (including .svg), and Dawson was kind enough to not only tell me the font used in my Logo, but he also personally emailed the font files which I was able to then use in my app!

Once I threw my logo into the app I got cooking on the API request to update the price. The swift code for making GET requests was mostly copy/pasted from StackOverflow, just remember to make sure you update UI on the main thread!

I made the progress bar continuously scroll for 15 seconds before resetting and triggering another price update against my server. Right above the progress bar is a hidden UILabel that will warn users if there is any network trouble reaching the server to update.

Lastly, I placed an AdMob smart banner ad at the bottom. I think it really rounds out the whole app design. Also it earns me money.

App Store Submission

Now that I had everything working, I decided to release it! Why wait to finish the other features?

I’ll be honest, it’s not fun to submit apps to Apple. They are very picky. Luckily, this app is drop dead simple so I didn’t have to worry about a demo account or a demo video showing off it’s features.

Here’s a brief list of things needed to get the app ready for submission:

Buy an Apple Developer membership ($99 a year) Create distribution provisioning profile Create icons in sizes that fit all supported devices Take screenshots of the app in action for the store Fill out all the required info for selling an app

Also, if this isn’t the first version of the app, you must make sure to increment the version appropriately.

Conclusion

It took me three days in total to design and create a fully functioning iOS app with server component. Brainstorming the design and implementing the server took slightly more than a day, and creating the iOS app took another. Within the third day, I created the logo, added it to the app, and got the App Store submission ready to submit.

Please check out the app and, most importantly to me, shoot me some feedback! Leave comments here, review the app on iTunes, submit an issue in the repos, or send me a message on Twitter!