A while back I shared my first experiences developing an Android application and now I will also share my iOS development experiences for the same application. The application is simple and it just connects using OAuth to some JSON web services to retrieve and update information. It involves a tabbed interface with a few edit screens to navigate around. It's recommended you first read the Android experiences before continuing.
I'm already working on a Mac and already had XCode installed so that took out already a big hurdle for iOS development, because it's Mac only and XCode is a massive 4+Gb download. XCode and actually everything related to iOS development takes a little while to get used to (unless you are already experience in Mac OS development), but the whole development environment is solid, capable and feels really mature. This last can't be said of the Android development environment that at times is a bit buggy.
The first hurdle to take when getting started is to understand the concepts of iOS development and getting used to Objective-C. I have to say this is a bit of a steep learning curve and compared to Android and Java I couldn't dive into development immediately, but needed to read up on the concepts to get an understanding of the unlaying principles and architecture. Depending on what kind of developer you are this might be a bit of a put off, but can also be a plus to gain more understanding of the the system. Objective-C is weird and it takes some time to get used to the syntax and to me it felt a bit dated, due to all the manual memory management I had to do. The 20 year ago plain C experience came in handy. Fortunately the excellent and powerful intellisense and documentation integration of XCode help here a lot.
The simulator and debugging is really great, it's fast and responsive. This is one of the key differences with the Android simulator that I actually hated, because it's slow to start and often not very responsive. In iOS you can have a really quick turn around with writing some code, running, testing and debugging and move to the next part.
Now on to the application that covers 3 clear areas: The user interface, OAuth authentication and the consumption of JSON services.
- The Interface Builder is significantly better and more mature than the XML layout concept in Android. It now takes you just a few minutes to compose a compelling user interface and get it running (once you have mastered how to link the user interface to the code). Interface builder really helps you in a visual way to make something that is really part of iOS.
- For the OAuth implementation I was again surprised that the iOS framework doesn't support this natively. I again had to rely on a third party library, fortunately Google delivers a great framework with very clear examples and it was very easy to implement. I was a lot easier than on Android and the result is nicer, because no external browser is launched to do the handshaking.
- The consumption of JSON services was harder, because instead of Android it's not natively supported and and external library is required. It took some time to find something that is widely accepted, well documented and easy to implement. With so many mobile applications just being endpoints for web services I don't understand why OAuth and JSON aren't supported by the frameworks.
Both the iOS and Android applications are both working prototypes on feature parity. Many have already asked me which on was easier to develop, but that is hard to say. I worked on the Android version a few full days in a row, while the iOS version was build in a very fragmented way and I even has a 10 day vacation somewhere in the middel. Still I believe that Android prototype was a bit quicker to build, but iOS will catch up when finalizing it in a production version. The iOS devices are all the same, except for a bit of retina display extra graphics, while the variation of Android devices is huge and requires more artwork, testing and exceptions.
What is next? I learned that I need to improve the API the devices us. This combined with improvements on the web part of the services will be first priority and next I will then create more polished versions of the iOS and Android applications. As a side track I'm also pretty keen to develop a Windows Phone 7 version of the application, but that is still pending on an investment choice!