Posted 10 months ago
So betkeeper, an application I have been working on for the past 5 months has entered the iOS app store approval process. Having worked on a handfull of iOS and Android applications now, I believe I am just about qualified to provide an opinion on the application creation process of both platforms, so I will. In this post I will briefly discuss the development aspect alone.
The available languages are obviously solid, being primarily Java with an option to use native code with the NDK where necessary (although generally it isn't). The Java port seems pretty seamless much to Oracle's dismay.
There are certain pattern selections for the framework I have found questionable. The main aspect of the framework I have had most trouble with was the adapter pattern and it's implementation. Interactions with domain objects tend to have to go through the adapter to ensure the UI is updated correctly. This means the adapters can become complicated quite fast and the domain objects can lack intelligence. Overall application structures can become a little confused and inconsistent with people referring to MPV patterns amongst others but nothing really being explicit. There is freedom.
The ability to import most Java jars (sometimes requiring a bit of eclipse tinkering) is very helpful as there has been a lot of time put into Java. GSON is an example of an excellent library used for processing json (a very useful function for mobile development).
Eclipse as the primary IDE choice also has advantages and disadvantages. One advantage being it is very familiar to developers, especially those of Java origins. A disadvantage is that I find eclipse to be a bit slow and flaky when you venture too far from plain Java (but I still think eclipse is great).
The aspect I have found most agreeable about android development is the openness. It is common that I have an idea which is inspired in part by what is possible on Android. I find inspired ideas are more difficult to implement and sometimes impossible on the iPhone. I find the openness comes at a cost and that is neatness of API and the ability to easily create a equivalently neat user interface as on iOS.
Objective C is an interesting language and it's always good to learn new language however productivity takes an knock when you enter into such a venture. The introduction of ARC has assisted with a lot of the language characteristics Java and dynamic language developers would struggle with. It is also possible to use C and Objective C++ which can prove useful. I would just like to mention now I think the NSNumber interface is horrible and core data types should be used where complex calculations are required. On the other hand the NSOperation multithreading mechanism is excellent and even nicer than the Android equivalent AsyncTask which isn't too bad it's self (although a bit ugly).
Patterns are well thought through and battened down as is expected with apple. The MVC pattern is tight (we tend to ignore the portable view aspect of the MVC design pattern with mobiles, although I guess some of it might be portable to OSX projects) and easy to follow.
I find 3rd party libraries are lacking in iOS and integration of existing code/libraries into projects is awkward especially when switching between ARC and non-ARC code. Apple generated iOS Documentation on the other hand is excellent when compared to Google generated Android documentation.
XCode started to grow on me after a couple of months of use but I will never be able to develop as fast with Xcode as eclipse. Xcode is focused on cocoa development which makes iOS development and tooling smoother. There were some similar annoyances as is found in eclipse (auto complete failing and debugger freezing) which in part is due to the complications of embedded development and remote devices but all in all Xcode as a program was faster.
I found the overall development experience nicer with apple and I suspect it is easier to produce a solid app (once familiar with objective C and while using ARC) however the iOS API is limited when compared to Android which can be frustrating and debilitating at times.