Let’s face it, mobile application development is targeted to a very small vertical market. Each platform being its own unique and distinct vertical market with some very minor horizontal growth. If you focus on a single platform, you are not only limiting your applications growth to that market, but you are limiting your companies. So how do you expand horizontally, without incurring massive expense? Developing for multiple platforms is expensive, and time consuming. Each platform has its own language, its own development tools, and their own unique constraints. The three platforms that IMO are worth discussing and targeting are Android, iOS, and Windows Phone 7.
For instance on Android you have to handle several different types of handsets, each with a unique screen type and resolution. Each device may have some hardware components, while others may not, you may have a lot of memory on one and very little on the other, etc. Android is also developed using Java with a custom framework.
The iOS devices on the other hand are an entirely different spectrum and at first glance bare nearly no similarities. The iPhone has almost nearly the same specifications for all models, you know exactly what you are designing against. iOS development is done using Objective-C with a custom framework, and you MUST have an Apple computer to do any kind of iOS development.
Next is Windows Phone 7 (WP7), which has a strong similarity to the way Android is handled but with key differences. When Microsoft developed WP7 they setup a set of strict criteria that each WP7 handset must adhere to as a minimum specification. So while you may not know exactly what you are targeting, you do know the minimum spec and you can develop against that in the very least. WP7 development is done using the .NET Framework, with a custom framework for the phone.
So how do you target all three, without re-writing your code? There are two solutions that I have found, and one that IMO is far superior and preferred.
The first option is to use Appcelerator Titanium, its free and supports iPhone, iPad, and Android. I would imagine when WP7 releases IE9 with HTML 5 support they may also be able to support WP7, but this speculation on my part. The way Titanium works is you develop your app using JavaScript and a custom JavaScript Framework that they have developed. You then compile your JavaScript using a custom compiler they have designed, it will then output a native Objective-C application (iPhone, iPad) from your JavaScript, or a native Java application (Android). I have several problems with this, first you are developing everything in JavaScript.
It is very difficult to develop a rich application entirely in JavaScript, it is not very object oriented and just a pain. Also based on my experience, their framework has several bugs and if you write the app for iPhone and expect it to work on Android as they advertise it doesn’t always turn out that way and you may end up tweaking things.
The second option, and the preferred in my opinion is to use Mono. Mono is a project by Novell to develop an open source version of .NET that is nearly 100% compatible with Microsoft .NET. Mono has released MonoTouch which is for iPad, iPhone and iPod; and Mono Android which is for Android. The beauty of this is that you write a Windows Phone 7 app in native code, take that code and it will work with both MonoTouch and Mono Android with some exceptions.
The exception here is that you will need to build a separate UI for each platform, but the rest of your code such as the Data Layer, Business Layer, Domain Model, etc. can be reused. Another caveat is that they are not free, they cost quite a bit of money. But the reason I think this option is superior, especially if you are a .NET developer is that you get to work with the .NET Framework. It is object oriented, is very feature rich, and you can bring in already built frameworks in most cases to use in your project. It has things like OData, Serialization, WebServices, out of the box.
As you can see there is no perfect option, each one has its pros and cons. But if you plan to succeed, you must target multiple platforms, try to spread your application horizontally across multiple verticals. If you do this you can potentially increase your target audience from 2 million to 200 million.
You may be thinking some developers have made huge money and only targeted one platform, you may have read about them in the news in fact! But these successes are extremely rare, so rare that they are published in the news, otherwise it wouldn’t be newsworthy material. You have about the same odds of having that kind of success as winning the lottery, its far and few between. But by being smart, increasing your target audience, you can still do very well!