Facebooks new iOS app and the rise of hybrid cross platforms apps which don't suck

Today - or yesterday, depending on your time zone - Facebook released their new iOS client, which has moved from a HTML5-based app, to a native iOS app. It's been all over the usual places:

The Verge: Facebook for iOS goes native, waves goodbye to HTML 5.

"Up until now we've looked at scale," iOS Product Manager Mick Johnson says, "but we've become aware that while we have a great mobile website, embedding HTML 5 inside an app isn't what people expect."

Charles Arthur in The Guardian: Facebook doubles iPhone app speed by dumping HTML5 for native code.

The move, says Facebook's Jonathan Dann, "signals a shift in how Facebook is building mobile products, with a focus on digging deep into individual platforms". The blog post hints that versions written specifically for Android and other mobile platforms are on the way.

ReadWriteWeb/Mobile: How Facebook ditched the mobile web and went native with its new iOS app

Facebook achieved three main benefits by embracing native code for its iOS app. Foremost, the app now opens faster, without the lag that many users complained about. Second, scrolling is smoother. Third, photos are uploaded instantly.

Using the app, the performance difference is astonishing, but that really isn't a surprise. The Facebook app has gone from a necessary evil to an app which is a delight to use. Charlie Kindle, ex-GM of Windows Phone Developer Experience, said:

WRITE ONCE, RUN ANYWHERE (WORA): Here.s the deal. Nobody actually wants WORA. Nobody.

Platform providers don't want WORA. Cross-browser compatibility is orders of magnitude better than it ever has been. But do not think, for one moment, HTML5 is going to EVER lead to WORA Nirvana.

Customers don't want WORA: Facebook gave "write-once, run anywhere" an honest try. But in the end, their customers rebelled and forced them to rewrite their HTML5 based iOS app as a native app. Customers notice poor performance and they notice when apps don.t .feel native..

Developers don't want WORA: Ok, fine. They do. They really do. But only if it lets them also take advantage of unique platform capabilities. Oops.

I'd argue that customers don't care, as long as they get a very good experience. Thats difficult - but not impossible - to do with an HTML5 app.

As Charlie points out, writing native on each platform is the ideal way, but really only if you have unlimited resources - and not even Facebook has that. The only solution is a mixed model:

Mixed Model (Native UI + Cross-platform Core): I obviously think this is the way to go. For a Mixed Model app you still have to have some expertise with each platform.s UI APIs and you still write a lot of platform-specific code. But you use a cross-platform technology that allows for the lion.s share of your .core. code to be shared. The UI is .native. and the guts are .cross-platform..

I totally agree, and this is why I started using the Xamarin tools, even after investigating the likes of Appcelerator or Phonegap (and XCode), and it also looks like others are starting to take note: the Android Rdio app (and the Windows Phone 7 one) is written using Mono for Android, and I'd have to assume that they are reworking their iOS app to use the common back-end, using MonoTouch.

It just makes sense for companies who need to target multiple platforms. You still get the unique things you need on each platform, but for the "boring stuff" that's shared and not platform specific, you don't need to write it three or more times. Common networking. Common data model. Common business logic. Highly platform-specific user interface and user interaction.

I wonder if the future is likely to be Xamarin for those who need to be cross platform, with the native tools - XCode, Eclipse etc - being reserved for people who only have an interest in one platform. At the moment, there isn't really anything compariable to the Xamarin tools tho.

Either way, it's a very good day both for native app developers of any persuasion, and for the users for Facebook on iOS.