Cross Device Apps
Now that Flash is again welcome on iOS devices, and new tablets and phones are showing up with Flash runtime support (and AIR support), app developers have a real choice when it comes to app development technologies.
Let's say you've got an idea for a killer app and you want to build it. Do you target one device or many? And do you develop native, develop in HTML5, or develop for the Flash runtime?
RIM just announced a new OS for their new tablet, the Tablet OS. Developing native and supporting the range of devices that are going to be on the market over the next six or twelve months means supporting iOS, Android, possibly Windows Phone 7, and now the Tablet OS. On top of PC and Mac, of course (hey there are still a few people that run desktop operating systems .. mobile first makes a lot of sense but it doesn't hurt to bring your app to the desktop).
Native can give the best app on every target runtime. Can't argue with that, but at what cost? Even if you have the resources to develop for all these targets, managing that kind of software development (simultaneously shipping 4 implementations of the same app) is difficult and frankly it's better to spend your time working on your app's magic than on platform support.
So what cross-platform options are there?
HTML5, Java, and AIR.
HTML5 works, but the tools for creating applications built on HTML5 technologies aren't there yet. It's an uphill battle building an app that targets HTML5. It's possible, but in my experience, it's not enjoyable (okay so maybe that's not a criteria you care about), and it doesn't convey any real advantages other than that your app runs on multiple targets. There are better ways of achieving that.
Java isn't there on iOS, and the Java runtimes that are there on Android are different enough from what you can do on the desktop that I don't think that's really a viable option. Java itself isn't a problem - you can write classes and run them anywhere - but the framework you need to build the user experience isn't there for cross platform Java apps.
AIR lets you choose whether you want to build your apps using Flash, an animation-focused tool, or Flex and Flash Builder, a developer-oriented tool. It's nice to have that option, since these are very different models and call for different tooling. Flex is built from the ground up for building apps; Flash for building games and a different sort of rich interactivity. Pick whichever works for you.