Cross Platform Mobile
martinfowler.com
martinfowler.com
- Don't use cross-platform toolkits
- For maximum reach: built a web app that looks like web app
- To appeal to a particular platform: build a native app for that platform, with a experience design based on that platforms interaction style
What about some of the others: Airplay, Corona, Cocos2D-X? Has anyone actually tried some of these that could give more insight?
Toolkits you mention are geared towards cross-platform 2D and 3D graphics, i.e. game development. They do not deal with native controls at all, you have to take care of buttons, menus, touch control etc. yourself. My guess is that Martin Fowler is talking about view-based applications.
In my experience, he is right, but it's more subtle than that.
We once built an iphone app with phonegap and HTML5 (back when phonegap had native iphone tab controls). It looked native, it seemed native, but it just didn't feel right.
Our current iphone app uses titanium mobile, which (from a UI perspective) is native - and it feels completely native. Even though under the hood it's interpreted Javascript and not objective C.
The advantages of using Titanium over Objective-C are; I'm already quite handy with Javascript, and Titanium comes with a honking great API example called KitchenSink.
jQuery mobile (boxed into PhoneGap or not) is dog slooow once your page sets or lists get too big, and like some mentioned, interaction just does not feel right sometimes.
One approach that I like is that of applitude (http://applitude.org/). It is DSL for description of view-based applications that is translated source-to-source to Objective C (It is iPhone only). Unfortunately this project looks like one man effort and is not under active development. But I wonder if this is the approach that some cross-platform toolkits should take.
PhoneGap, SproutCore and the like are great if there's a need to get something going right now. Then, in all likelihood, such would be replaced with native apps later.
For example, it seems an obvious approach to have hybrid apps begin with a native skeleton app continually evolve with cross-platform web flows backfilled with more native as the product gets traction and has an opportunity has time to specialize.
Evernote did this on a RIM app. It's not shameful either, it's brilliant expedience.
Update: forgot to mention up-and-coming portable js platform Game Closure.