In the past four weeks, my team and I have been working on GermTheory, a web and mobile application to help contain and track disease outbreaks. To deploy the mobile application, we spent a great deal of time considering whether we wanted to build it natively in Objective C/Java or build with the Ionic Framework to speed up the development process.
What is Ionic
Ionic is a front-end framework built on top of Apache Cordova(Phone Gap) that allows web developers to deploy mobile apps using AngularJS. To many people, this sounds immensely appealing. You can build an app in familiar technologies and deploy it to multiple platforms simultaneously. In theory, it sounds like a great idea. Fast development time means lower costs and increased efficiency.
Having worked with it, however, the reality is a bit more complex.
Since working with it, I have found that ionic can be used in a positive way. I've listed below what I think are its strongest selling points.
- Ionic lets you package applications into multiple frameworks once you're done developing, which saves time that might be spent rewriting code
- It's easy to get started thanks to an inherent familiarity with the technology. Not everyone knows objective C and Java, but most web developers have some familiarity with Angular
- It gives you a lot of pre-generated app setups that can get you started quickly with a simple layout application
- It's easy to hook it up to common back-end technologies like Node/Express or Ruby.
These are all benefits that supporters of the technology will commonly claim. However, each of these comes at a cost.
Ionic can help you prototype quickly and get a working product, but it also has some big issues.
- Ionic is buggy and hard to test. Testing in a browser doesn't give you a good sense of the actual phone environment, and emulators limit your access to error logs.
- Web technologies can be buggy and slow on the phone, especially HTML maps like Google Maps or Leaflet. Popping in Native plugins also have limitations and then defeat the purpose of using ionic.
- Apps built with ionic as a whole tend to be slower and feel less responsive, which often indicates a lack of quality to the user.
- Documentation on ionic plugins is often lacking(although there is significant documentation for Ionic itself), and often developers are left with buggy angular plugins ill suited to a mobile app.
- The ionic generated templates are good, but the styling is extremely modular and difficult to decipher, especially when certain classes are added to DOM elements only when the app is actually running.
- Connecting to native phone functionality(calls, push notifications, geolocation, etc) can prove difficult and much less intuitive than doing it natively(after all, these processes are platform specific)
These errors are substantial and represent massive issues when developing using ionic, but they aren't entirely condemning.
Ionic has some major drawbacks that make it difficult to ever feel as though it could rival natively-developed apps. That said, it is great for situations where a high performance is not necessary. In many cases, it can be effective for prototyping ideas. That said, my experiences suggest that production-grade applications would be best built using native technologies, unless they are extremely simple.
This article in no way condemns Ionic. In many ways, Ionic is a joy to work with, and it's often the right choice for a project. Plus, it's great to see technologies that try to bridge the gap between the web and mobile. After all, it's all part of the same ecosystem. Still, at least for me, nothing beats native.