Developing my first iPhone app

This is an article on how I went from zero to a fully featured iPhone app in about 6 weeks. My challenge was to build an iPhone application for my task management tool ThunderTask. I already had a web app and decided to make an iPhone app to make the service more attractive to users.


The goal was to develop a basic first version which included the following challenges for me:

  • Learning Objective-C, a completely new programming language for me
  • Learning Xcode, the iOS development environment
  • Building a sync web service
  • Not spending too much time 😉

First week: Learning the basics

The first thing I did was buying a book about iOS development, in this case Beginning iOS 5 Development: Exploring the iOS SDK. It’s a good book to get started with lots of examples. Every chapter is about some aspect of iOS development, beginning with the basics and ending with sophisticated topics like iCloud or OpenGL. I bought the Kindle edition, so I could read it on my Mac and do the example projects. I did this for about a week until I finished the book.

First mistake: Not using Xcode

After learning the basics, I was still quite confused about some things. This may be the reason why I made a stupid mistake that cost me about a week. Some innocent googling about how to build an app fast brought me to Titanium from Appcelerator which allows you to code “native” iPhone apps with JavaScript. I will not go into details, long story short, I tried it, made great progress for 5 days, then everything started to crash without any debug info and I had to give up. Pseudo native apps are evil…

Back to Xcode

So, I went back to the real thing, Xcode. I wanted to build this from the ground up, so I started a new application from scratch. At first, I build a simple interface with the Xcode Interface Builder, which is kind of a nice tool. I connected several views via segues in my Storyboard and built the corresponding controllers. This was quite different from what I’m used to. The last time I used a WYSIWYG editor for software development was in 2002 and the program was called Microsoft FrontPage…

Programming by googling

When I ran into problems, which was about every 15 minutes, I googled the problem. Usually, I found an answer on Stack Overflow, great site! What really helped are example projects from iOS developers that show off a certain functionality. I usually learn a lot by imitating and looking at other people’s Xcode projects is a great way to get more insights on app development.

One good thing about the app I was developing is that I could use a SQLite database for saving user data. Since I’m a MySQL expert, it was nice to transfer some knowledge and by the way learn how to use SQLite, which might come in handy in future projects.

Building the online sync web service

One big challenge was to build a robust cloud sync. I wanted the iPhone app to sync with the web app via a shared database, so that users could manage their tasks on any device. I’ve never done this before. At first, I planned the whole thing out in every detail and made up a lot of test cases. There was work to be done on the server side and the app itself. Also, there are security and authentication issues. In the end, it worked out well. It was not as difficult as it looked at the beginning and thanks to some great free libraries for the iPhone, implementing the iPhone side was no problem either.

Designing the interface

Since I’m a very detail-oriented person, designing a simple and clear interface was top priority. In this very first version, I tried to stick to standard elements provided by the iPhone SDK. Of course, I had to build some custom cells and interfaces, but that’s about it. I put some more work into the register/login pages, because that’s what users see first, if they download the app. Since people have to register/login first to access the task manager, it’s critical that the first views look good and trustworthy.

If you design an iPhone app, always check out the competition. Test every app and take some time to think about the positioning of elements, navigation structure and such things. Be sure to take a good look at established apps that are updated on a regular basis. Why? Because this guys have the most experience and probably tested a lot of things and they should have the best interface. But don’t be afraid to do things a little bit different, there is more than one way to design a good interface. Just keep the important stuff in mind (example in my case: “How many clicks does an user need to add a task?”).

Waiting for review…

So, once my app was finished, I uploaded it to Apple and the waiting began. It took 11 days for someone at Apple to take a look at this simple app for 5 minutes (I know, because I see when somebody syncs…). The long review time is really annoying. I’m used to push out new versions of software on a daily basis in web development. But hey, I passed the review and the app went live on a Saturday and had about 150 downloads. After dropping out of the “new apps section” on the Apple App Store, the download rate went down to about 10 downloads/day.

Was it worth it?

Building an iPhone app was a great experience. Yes, I could have outsourced the whole thing and spent the 6 weeks doing something different. But I think, the very first version of a program lays out the foundation for future development. If this foundation is somehow broken, future development might not be easy. Also, I really wanted to understand how such an app is built, so I just built it 😉

I’m now able to code iPhone apps, except games. I learned a lot about interface design and see apps from a different perspective now. It was interesting to code in a “proper” language like Objective-C with variable types and OOP. I usually code in PHP, so that was new 😉
Another additional benefit is that I’m probably able to code Mac apps now, too. Correct me if I’m wrong.

If you built your own iPhone app, tell me about it in the comments. You can download my ThunderTask app in the App Store.

Leave a Reply

Your email address will not be published. Required fields are marked *