There have been countless blog posts, presentations, articles etc over the last few years about the seemingly endless debate about which is the better approach for mobile development, native app or web apps.
Despite the title of this blog I’ve always been pretty technology agnostic. I’ve developed applications with Appcelerator Titanium (almost native), Sencha Touch (hybrid), Objective-C (purely native) and Java (purely native). And over the last 12 months I’ve been working with Ionic (hybrid).
How you choose to develop an app usually comes down to requirements and resources. If the requirements absolutely demand native development you go with native development. But in the majority of cases they don’t and it comes down to what skills you have and what resources you have available (time, money, people and so on). Companies like Facebook, Google etc with armies of native developers will probably always develop apps natively to get the slickest performance possible. And that makes sense. But they’re in a different world to the rest of us.
What got me thinking about this subject this week was the idea of Progressive Web Apps that I talked about here and here. This concept brings another factor into play – the ability to have a web site start out as a normal web site but then as you gradually engage with it more it becomes more app like (using Service Workers). This really brings the power of the web into play and its why I think it’s a really exciting time to be developing hybrid apps and in particular, hybrid apps with Ionic.
Having developed native apps with Titanium and then in Objective-C and Java and spent countless hours working out how best to do this or that on each platform, what I have always loved most about working with Ionic is that it truly is a write-once, run-anywhere framework. I never have to adapt code for iOS or Android. It just works, all the time, on all devices (well, 99% of the time). It’s a fantastic feeling – if you have developed apps natively in separate codebases – to work on an Ionic app and know that it will work across platforms without any hacks or work-arounds or separate components. And recently, Windows Phone support was added to Ionic 2 (apparently it took Brandy Carney just three days to add support for it).
But what I’ve never really thought too much about is how my Ionic apps, because they already work in the browser, are already servable websites.
So the Ionic app that I currently compile to native could initially be sitting on a server somewhere and be that Progressive Web App that operates as a normal device responsive web site but which – upon a certain level of engagement with the user – becomes more app like when added to the user’s home-screen. And then maybe when engagement reaches a further level (or requires certain device features), the native version of that app is installed. The user gets the experience they need but only when they need it.
From URL to tab. From tab to home-screen. From home-screen to app.
All with the same single codebase.
And although I’ve not tried it yet, with tools like Electron, that very same app with the very same single codebase, can become a desktop app for Windows, Mac or Linux.
How exciting is that?
I think (?) at the moment – until Safari supports Service Workers – the truly Progressive App experience described above is only possible on Android. But hopefully it’s only a matter of time before Safari supports it too.
What an extraordinary time it must be for the Ionic team right now and what an exciting time it is for us, as developers, to be part of it.
I’m a mobile applications developer based in the UK, concentrating primarily on hybrid application development with Ionic and Ionic 2 but also with native development skills. Please visit www.crossplatformsolutions.co.uk for more information about me and how I may be able to help you with mobile application development, particularly with Ionic 2 but also with other mobile frameworks and technologies. Thanks for visiting.