Let’s continue the showdown between these two mobile operating systems. We’ve looked at it from different angles before; this time we’ll take the developer’s point of view.

The first step is to analyze each environment and weigh the pros and cons. To decide, we’ll look at personal criteria Do I want to make the most money? Do I want to reach the largest number of people? Do I want to code within a huge community? Do I want to succeed with the ladies? (Step away from the computer and go to the gym).

I’ll try to be as neutral as possible. On one hand, I love Android devices — uploading your app and having it available to millions of people within seconds is simply awesome. On the other hand, we have Apple’s mobile devices, with a spectacular design, great responsiveness, and simple enough that my grandmother could learn to use one in a few hours.

We’ll evaluate the following sections: Accessibility, Learning curve, memory management, documentation, XCode && Eclipse, presentation interface, emulator/simulator, Other considerations.

Round 1. Accessibility.

Here we have a clear winner: Android. To write a single useful line of code for iOS, you need a Mac. Once you have a Mac…if you’re running the latest version of Mac OS, you can download the latest Xcode. Otherwise, you’ll have to pay. Eclipse, on the other hand, is available on Mac, Linux, and Windows, and  you can install the SDK on any of those platforms.

On top of that, iOS is tied to Apple’s own devices, while Android can be adapted by manufacturers and is therefore accessible through a wide range of devices and price points. iOS isn’t available through every carrier, and not everyone can afford to shell out the money for an iPhone or iPad. Android is aimed at a mass audience.

Android Win (0-1)

Round 2: Learning curve: Java vs Objective-C.

Java is a very well-known programming language, so with Android you can already have a solid foundation.

Among developers, Android is more competitive, since existing knowledge can be applied quickly. When there’s a lot of something, its value tends to drop, along with the salaries. Unless you’ve already done some Mac or iOS development, you don’t know Objective-C, so the learning curve for iOS is steeper in most cases.

On the surface, Objective-C and Java look somewhat alike. Both languages have a C-inspired syntax, and they share most of their primitive types. However, Objective-C and Java have some fundamental differences:

– The Java community is large. For example, there are many books about Java.

– Java uses static typing, while Objective-C favors dynamic typing.

– Objective-C has all of C’s low-level features

In summary, while Objective-C has its advantages, Java’s cultural and practical advantages are greater.

Android Win (0-2) 

Round 3. Memory management.

Many Android developers claim that memory management in iOS eats up a lot of time because of manual “garbage collection”. Android tells you: “Hey man, don’t worry about the trash, I’ll take it out”.

The tables turned with iOS 5 (there had been other, less efficient solutions before that); it has something much better than a garbage collector: it has Automatic Reference Counting (ARC) .  A garbage collector uses some of the hardware’s resources. ARC, on the other hand, is a feature of the LLVM compiler. With ARC enabled, the compiler uses a set of rules to insert memory-management logic into the app’s code at compile time. The idea behind ARC is that developers write less code without sacrificing performance.

Hardware resources (memory, disk space, CPU power) on mobile devices have always been limited. Personally, I prefer manual resource management, and in Objective-C it’s very easy, so I’d say iOS wins on this point.

iOS Win (1-2)

Documentation.

Google and Apple have both delivered great documentation for their platforms. Even so, the sample-code collections sometimes seem insufficient for both operating systems. Personally, I have no major complaints about the documentation for either OS. For iOS, it’s very hard to find anything once you want to go a bit further than the basics. Android has a larger amount of sample code than iOS. That’s probably down to the philosophy of the system and, by extension, its developers.

Android Win (1-3)

Interface Design: XML vs xib.

Both Android and iOS have visual design editors. In Android these layouts are essentially written in XML, while in iOS they’re Xib files. The design editor in Xcode is much smoother than the one for Android. The good thing about XML layouts in Android is that they make it easy to reuse code (copy and paste). It’s also true that laying out screens in Android is quite a bit more complicated, since it has to adapt to many different screen resolutions. There’s no clear winner on this point.

(1-3)

IDE: Xcode vs Eclipse

Eclipse wins in one, and only one, way: it’s compatible with Linux and Windows (which we already covered under accessibility). To use Xcode, you need a Mac.

Eclipse uses too much memory. That’s something I find very hard to get past. Eclipse is an IDE mainly for Java, and if we’re talking about Java development it would win hands down, but when you compare it to developing Objective-C in Xcode, the latter is much better. I’ve seen Eclipse run out of memory just trying to open an XML file. I’ve spent way too much time staring at the spinning beachball while Eclipse is frozen.

Besides being slow, it desperately needs a redesign. There are some other interesting things in Eclipse that should be more accessible. Also,  I don’t want to have to switch windows to the “debug perspective” every time I’m trying to debug my app. I want to be able to develop and debug quickly, and I don’t want my window jumping back and forth between coding and testing.

iOS Win(2-3)

Emulator/Simulator

One of the great features of both the Android and iOS development experience is that you don’t need to own a device to develop an app (although it’s highly recommended). Thanks to the emulator, you can test your code while you’re developing. Having to install and uninstall the app constantly eats up a lot of development time.

The iOS SDK comes with a device simulator, and the Android SDK comes with a device emulator. So, what’s the difference?

The Android emulator mimics both the software and the hardware of a device. You can configure an emulated device with specific hardware parameters (for example, the amount of RAM available on the device). The iOS simulator only mimics the device’s software and can, in theory, access any resource on the computer. At this point you might think the Android emulator makes a lot more sense than the iOS simulator, since it can match a device’s real performance. The answer is a flat-out NO. It’s a bad idea for CPU performance to match the device’s. That makes it extremely slow. If I’m using the emulator to avoid installing the app, it’s annoying to end up waiting a similar amount of time anyway. Two tips for Android: don’t close the emulator console between tests, and pick the most advanced device on the list for testing.

iOS Win(3-3) 

Other factors

Android is fragmented. There are many versions of the operating system. Android development is somewhat similar to web development in that you need the app to work across many operating system versions and devices. With iOS, in the worst case you have to test the app on around 10 devices (assuming you want to test it on every version of the iPhone,  and iPad), compared with around 200 Android devices.

Conclusion

Which platform is better? It’s hard to say. Android has a larger market share, but you make more money with iOS. I’ll leave the final decision up to the reader.