Wednesday, January 30, 2013

My take on mobile hybrid apps

Some time ago I posted on Linkedin Google Android Group a comment with my take on benefits and disadvantages of PhoneGap (also known as Apache Cordova) taken from my own experience. It appears that my post attracted some attention. So I decided to re-post it here so that it can be found easier:

I've written several apps and quite a number of plugins. There are both pro's and con's to PhoneGap (now Apache Cordova) the way I see it:

Pro's:
  • Development of the UI part goes pretty fast. Mostly due to productivity you can gain with using Javascript frameworks. 
  • The 'write once run everywhere promise' holds to some extend. See con's one the same topic. Indeed you write your app in javascript html css and you can share a significant part of the app across platforms.
  • The performance is OK-ish depending what you need to do. If you write just data-driven apps - sure why not.
  • There is somewhat clear separation between the native part and the Javascript part of the application. Enables you to define an API for implementing native parts of the plugins and have the JS part of the plugins as common codebase.
  • If for whatever reason (not asking you why) you want the app look the same on all platforms - this is just for you.

Con's:

  • Don't expect native look and feel. Users will definitely are going to notice slower framerate and non-native scrolling and animation effects. So, watch out if you want to write a UX-rich application.
  • The 'write once run everywhere' promise fades with the number of plugins you have to implement. The more complex your application is the more plugins you need to write for each platform - and this is still native code.
  • Prepare to fight the browser fragmentation issues. The richer UX you want to bring to the users the more issues you are going to see. Mobile web app development frameworks still suffer from browser fragmentation. Do not forget different levels of HTML5 support across browsers (in case you think its a silver bullet).
  • Phonegap is essentially a native app a webapp in one. This means 'double' the memory footprint.
  • Talking about used resources (and to emphasize above) - did you know it actually runs a *socket server* in your app (speaking for android part here)?
  • Beware PhoneGap is not desinged to run in background (this is actually official). Which means all background processing needs to be done in native and integrated with PhoneGap via the plugin API.
  • Debugging and (automated) testing of Phonegap apps still requires a lot of improvement. Even though some tools are available they are nothing comparing to a regular in -IDE or -browser debugging.
  • Phonegap API is asynchronous which may make it cumbersome if you have a lot of integration with native plugins.
  • Native apps are *more* capable of dealing with different screen sizes and specifically screen densities and orientations. Native platforms are actually designed to deal with it.
In summary I would say it's ok to use it for business apps. For rich UX I would advise to go for native implementation.