In present day, we all know that computing has cleaved into 3 segments: Microsoft, Apple, and Google. Each have phones (WP7, iPhone, Droid) and tablets (several, iPad, several).
Since these are competing companies, we developers lose out. Each platform is proprietary. If we developers are to offer a product on all 3 of these, we must learn or hire someone with those competencies. Until now?
This morning, Jamie Dixon forwarded a link to a blog post by K.Scott Allen, pointing to a website about MonoDroid. Hmm, "mono" usually refers to the non-Windows port of the .NET Framework. This is where you can build native .NET apps to run on platforms like Linux and Mac. "Could this be something that would allow me to write .NET code that would run on a Droid?". Yes, yes it is!
Writing apps for Android (MonoDroid):
I got a DROID X last year and could not be happier with it. It’s got a huge, bright screen, is plenty responsive, the Android market is great – it’s just great. The downfall is that I can’t write apps for it. Well, until now.
I literally just followed the steps from this link. From there, I was able to open Visual Studio 2010, create a new project (there is a new project template). When the project loads, I can hit F5 – the Android SDK prompts me to load an emulator image, then it copies the app to the emulated device – and the app worked!!
What’s even crazier, is I put my DROID X into the cradle/dock which is connected to this PC. The next time I hit F5, I realized that it actually installed the "hello world" app onto my phone!
What’s better is I went into the IRC chat (they don’t have forums set up yet) and asked a few questions. Questions like "can I consume web services?" and "can I connect to a SQL database?". The answer is yes on both counts! So, I created a basic WCF service, hosted it in my local IIS (because the phone won’t be able to connect to the Cassini instance – long story). And sure enough, on a button click, in C#, I was able to see the results of the web service call, in the Droid application, in the emulator!
The big downside here is the UI design and some aspects of coding are still very awkward. For example, you have to manually modify an XML file to establish the screen layout.
But even still – if you need to write an app for the Android for your company, I think this is a far better option than having to submerge yourself in a radically different programming model. With this, you can still use VS2010 and C#, and only the Android-specific UI stuff is different. You just have to modify a couple of XML files.
Writing apps for iPhone (MonoTouch):
Writing apps for the iPhone seems a few notches more complicated. From what I understand, Mac, iPhone, and iPad developers use Objective-C for all development and that is it’s own proprietary world.
If you want to use the same approach as MonoDroid, then you can check out MonoTouch (http://monotouch.net). However, it looks like you have to be a member of the Apple development community, and the emulator only runs on a Mac. That means that you’d be doing Mono development on a Mac, using MonoTouch. BUT – the upside would be that you don’t have to learn Objective-C and you could still leverage all the good things you already know about .NET.
Writing apps for Windows Phone 7:
WP7 is probably the most frustrating. I have dabbled in Windows Mobile development since the CE days. This has been such a waste. It’s so ridiculously easy to create apps for these phones – but no one uses them!
In fact, I did a blog post about how easy WP7 development is, with screenshots of the emulator. Painless! And although the WP7 gets high marks from everyone, it was just too late to the game. iPhone, and now Android just have way too much momentum.
That really sucks from the development standpoint because development for this platform is pretty much effortless – but it’s useless, if no one uses the phones.
The point here is that in today’s day-and-age, the .NET developer has some pretty reasonable options to be able to satisfy the mobile market. If your company has an online presence and you offer some sort of functionality that would be useful to mobile users, you don’t have to limit yourself around the tooling and expertise for these proprietary platforms – now regular .NET developers can write apps for all three platforms!