On hybrid apps

After recently spending some time (lots of time…) building a hybrid application for the first time, I thought I would share a few thoughts on the subject, based on experience and what I’ve learnt whilst actually doing it.

There are varying opinions on hybrid apps, ranging from “they’re awesome” to “they’re crap.” Of course these are two extremes and the reality, in my opinion, lies somewhere in between, albeit more towards the “they’re awesome” one.

Not native

As obvious as it seems, something that people – especially customers – fail to grasp is is that a hybrid app is not a native app. No matter how well designed it is, a hybrid app will not look as good as a native app. It also won’t work as well or as smoothly as a native app – this is a given, since that which is native is bound to be faster than that which is not.

So part of this is managing a customer’s expectations. If they want to go down the hybrid route, for whatever reason (usually cost), then they have to be aware of those points I just mentioned. Sadly it can be the case that the customer may have had an iOS native app before and therefore that’s what they compare the first release of the hybrid app against. And when compared to a native app, the hybrid app will always fail.

Tools

Obviously one of the main attractions of a hybrid app is that you can have one code base and deploy it on multiple devices. In theory anyway. On the project I worked on, I used a combination of jQuery Mobile and PhoneGap Build.

This particular client wanted the app to also run on the web, in a browser, including Internet Explorer 8. It also means that this app was a hybrid web app as it was to be installable on devices (only iOS and Android is this case) whilst also being available to desktop and mobile browsers. For these reasons, jQuery Mobile was the framework of choice, given its wide range of browser support.

The only thing I have a problem with here is the claim that it allows you to “build native mobile applications” which, as I’ve stated above, isn’t correct as a hybrid application isn’t a native application and to claim otherwise can be misleading for the other reasons I’ve mentioned above.

It is very useful however as it does allow you to upload a zip version of your web application and turns it into native-like code that allows you to install the hybrid app on Android, iOS and other devices as a native-like app. This of course allows you to make your app available via the Google Play and iTunes Store – which is very useful. Note that I keep saying “native-like” as it’s not native.

The app itself did require a lot of tweaking here and there for different OSes so it’s not plain sailing, but then again when is it ever?

In conclusion

Overall I think that hybrid apps do have their place, but it’s a matter of understanding that the resulting app will not be as good as a native app, and ensuring that the customer understands this also.

3 Responses

Hi Ian. What version on PhoneGap you used? I’m asking this because I found a big performance difference between an app using jQuery Mobile coupled with PhoneGap version 2.0.0 and jQM with PhoneGap 2.1.0+. Did you see the same difference?

Hi Ian and thank you for the answer. About the version of jQM, I was talking about the last version too. The big differences I’ve seen is:

– When you click on a link that send you to an external page, it takes a lot to go outside the app and start processing the page
– In PhoneGap 2.0.0, when you open an external link and then you came back to the app, you’ll see the app at the same state you left it (with the jQM enhancements too). In the version 2.2.0, I noticed that you see the raw page, I mean like jQM wasn’t there

However, a good thing is that I haven’t encountered the “ghost” click problem anymore. For instance, if you have a set of grouped radio buttons (data-role=”controlgroup”), and the user click (read tap) on a button, then if you refresh the screen, chances there are that the new button, in the same position of the previous, is clicked too. A really annoying problem.