fiddme-teaserOn the past few weeks I’ve been working on a new venture centered around the iPhone. The process of building our app has been quite an adventure and we’ve experimented with several technologies that were new to us before reaching our current technology stack.
As we’ve finally got our stuff together and made an initial release to a group of testers I thought I’d share some of the technology choices we’ve made and the reasons behind them.

First some information about the team

…because technology choices are affected by the team’s technical skillset.

  • We’re 3 developers (Yosi, Udi and myself) and one designer (the awesome Naor Suki).
  • We’ve allocated two developers for the iPhone and one for the backend APIs & website.
  • We’re all veteran developers with experience mostly on Microsoft’s Development stack. This project meant going out of our comfort zone to a whole new set of technologies. Experience does make a difference easing the learning curve…

iPhone Development

  • iPhone SDK: This one is obvious right? We looked for alternatives for writing Objective-C. Unfortunately, Flash isn’t available for the iPhone (yet?) and MonoTouch looked promising but isn’t quite there…
    Besides its always better to be developing on the platform most developers are using which means there’s a big community that can help when you get stuck. Being on Apple’s official stack also means we get the latest features without having to wait for a 3rd party to convert them…
    To be perfectly honest, I’m not on the iPhone side of the development and did not actually write a single line of Objective-C code but I noticed it took my teammates 1-2 weeks to get the hang of it.
    To me, the fact that the iPhone App store is so successful and has so many apps which Objective-C as the development language (which is definitely harder than modern languages – Java etc.) makes Apple’s achievement even more amazing…
  • Three20: Handful of UI extractions from the Facebook iPhone app and open-sourced by the developer – joehewitt. His announcement blog post details the libraries it contains, shows some demos etc.
    The source code is also a great learning tool for how stuff is done on the iPhone.
  • json-framework: This is a pretty slick JSON parser for the iPhone. Hand parsing JSON in obj-C would not have been fun. This made it easy. I’m pretty sure I followed this tutorial to get it up and running.
  • ASIHttpRequest: A Nice Http framework that enabled easily handling asynchronous Http requests.
  • Stackoverflow is an invaluable resource for asking question and solving all sort of problems. As Yosi, who’s been concentrating on the iPhone side of our development, puts it “I dont think any iPhone development could be done without StackOverflow”
  • MGTwitterEngine: an awesome objective-c wrapper for twitter api which we based our api on.
  • Google Analytics SDK: A library enabling sending information to Google Analytics from the iPhone. This is important for measuring the ways users interact with certain flows on our program. For example, it helps us measure the conversion on our signup flow – how many users go through the signup flow and finish, and if they dont, what steps makes them go away?
    This kind of functionality is essential to measuring and improving UX flows…
  • Google Toolbox for Mac: A library for working with the different services exposed by Google.
Backend Development

After playing around with ASP.NET MVC (which we all had background with having come from the Microsoft ecosystem) and Ruby on Rails (because its cheaper to host than ASP.NET and way simple, faster, more fun to use IMHO) we’ve finally settled for Google AppEngine and django (Python).

We made the decision to base our development on django rather than on Google’s own webapp framework for the following reasons:

  • Lots of out of-of-the-box features. django has been out there for quit a while and is bundled with lots of features (like an easy to build admin interface, authentication system, validation system etc.)
  • Big community. There are lots of people doing django out there lots of open source libraries and samples available. As a rule of thumb its always better to be on the majority side…
  • Not specific to Google AppEngine. django is a standalone Python web development platform. While some parts of our code has to be AppEngine specific it would still be considerably easier to move away from AppEngine (if we ever decide to do so) than if we were entirely Google specific.

Google AppEngine also have Java support. But using Python with django is way easier and has a lot more support when it comes to both AppEngine and web development. Seriously, if you’re thinking of using Java, Don’t! take the leap and go with Python…

Libraries we’ve used:

  • app-engine-patch: This library is absolutely amazing and a must if you’re using django on AppEngine. Since the AppEngine data store API is not compatible with django’s API, a lot of the really cool time-saving features of django will simply not run on AppEngine (such as the admin UI, authentication and basically anything that requires data access). app-engine-patch loads django and patches it so it is compatible with the AppEngine API making all those cool django features work. This one is a must! You just download their project template and start developing your application on top of it.
  • PyDev: An Eclipse plugin for editing and debugging Python and AppEngine applications. It might sound obvious but I was using was actually using Notepad++ (on Windows)  for development until I found out there’s a decent IDE I could use…
  • Piston: a django library for developing REST-APIs. While its not entirely compatible with AppEngine it took a simple forking to edit those parts out…
  • GeoModel: provides basic indexing and querying of geospatial data on Google AppEngine.

Also, I would recommend taking the time to learn and understand how the AppEngine datastore works so you’ll understand how to build your datamodel to run efficiently on Google’s platform.
The following two presentations from Google I/O are invaluable:

So what do you think? If you’re developing an iPhone app, I’m very interested to know what were your technology choices and reasoning…

Oh, and if you have an iPhone and you live in Israel (its a local app so we’re limiting our efforts to Israel at the moment) please head over to our beta signup form and signup :)

Similar Posts:

    None Found

Tags: , , , ,


7 Comments to “Building an iPhone Application”

  1. Building an iPhone Application | CloudAve | October 29th, 2009 at 9:31 pm

    [...] to Israel at the moment) please head over to our beta signup form and signup (Cross-posted @ Developer Zen)Posted Under : Design Tags iPhone Software Development Fiddme Software Architecture python [...]

  2. Reshef | November 9th, 2009 at 5:40 pm

    Nice overview. I am interested in app engine development and was glad to find out about piston :-)

  3. theSiteMan | November 16th, 2009 at 7:31 am

    Interesting write-up… We’re in the same boat as you were – I guess not too long ago. Just like you we are mostly veterans on the MS stack. Unlike you though, the project we’re embarking on needs to run on different platforms – iphone, android, blackberry… so, we’re looking at phonegap. It’s actually pretty cool. I’m curious – did you guys look at phonegap? What did you think of it. Thanks for sharing.

  4. ekampf | November 16th, 2009 at 3:44 pm

    Haven’t heard of PhoneGap until now and it looks pretty cool…
    I still wonder how would you handle the all these devices on the same codebase. I mean, each of these devices requires its own unique user experience (operating an iPhone is very different than operating my Samsung Galaxy Android phone for example)

    As our main concern is iPhone I still think the best choice is to be where the majority of iPhone developers are – coding ObjectiveC.
    For other devices we’ll probably offer a mobile web site that any device with a browser can access…

    I’ll have to keep track on the progress on PhoneGap though… thanks for the info :)

    Regards,
    Eran

  5. theSiteMan | November 17th, 2009 at 4:42 pm

    Agreed…when you’re focusing on the iPhone, you should be using whatever the majority is using.

    Handling all the devices on the same codebase – that will definitely be a challenge. That is one of the most discussed topics around here :) That’s where phonegap is going to prove itself to us.

  6. yog | March 10th, 2011 at 10:46 pm

    What did you use to get the django auth to work outside of a browser?

  7. Eran Kampf | March 11th, 2011 at 2:19 am

    I used Piston to write the REST APIs and basic authentication…