Native, Ionic or React Native?
These days, one of the hardest parts of making an app is just choosing how to start. There are 3 popular approaches: native code, Ionic and React Native.
This is a short and simple guide to help you pick the one that’s right for you and right for your app.
Now, the bad news is that there is no easy answer. That’s because there is no single best technology for all apps. Just like there is no best tool, best car or best pizza topping. To choose between them, you need to figure out which one is a good fit for your existing skills and the features you want.
Disclaimer: To keep this guide somewhat short and readable, I’m not going to consider some less mainstream technologies (sorry Xamarin, Appcelerator, etc).
Native
Most of the popular apps you use every day are native apps: SnapChat, Uber, Strava, Pinterest, YouTube, WhatsApp, Slack, Tinder, and on and on and on… I’ve got a few native apps around as well: Best Baby App, Megan Nielsen Patterns.
The good stuff
The reason most apps are native is because Apple and Android have done a really good job of providing flexible and powerful frameworks to help developers make gorgeous apps. These frameworks make it easy to create beautiful, intuitive apps that take full advantage of everything your phone can do.
The bad stuff
The problem is that their frameworks are different. Totally different.
Android and iOS apps even use different programming languages: iOS apps are written in Swift or Objective-c while Android apps are written in Java. So if you want to make an app for both Apple and Android devices you literally need to learn 2 different programming languages. And then learn 2 different frameworks. And then write your app twice.
Seriously.
This isn’t an issue if you only want to support one platform. But when you support both platforms, it’s so difficult that many companies actually hire separate developers for each platform.
Ionic
Ionic is pretty amazing. Ionic apps grew out of a frustration with having to make every app twice. Ionic uses a few simple tricks (thanks Cordova) to allow you to make one website that can be run as a mobile app on both Android and iOS. That means you can use web development skills (HTML/CSS/JavaScript) to make one app that will run on both Android and Apple devices.
You’ve probably used an Ionic app at some point. You won’t see too many at the top of the charts but they are very popular for internal business apps, for small businesses, for restaurants and for conferences.
There are some really nice examples that you can download here.
The good stuff
Half the development time of Native.
It also allows web developers to make mobile apps without having to learn new skills.
The bad stuff
The reason Ionic apps aren’t more popular is because they have a problem: they’re slow.
This means Ionic apps don’t tend to look and feel quite as nice as native apps. They’ll often have a user interface that flickers, has choppy navigation and weird scrolling.
But these problems won’t effect all apps. Here at Westpac, we made an app using Ionic and it’s gorgeous. Ionic worked well for us because our app only has static images, text, forms and charts. But if we had tried to make an app with lots of user created photos and videos we would have had problems. I wouldn’t even think about making games.
Another problem is that not everything in an app can be written as a webpage. Lots of very standard app features such as photo filters, uploading files or reading the GPS can’t be written as a webpage. Ionic is built on an open source library called Cordova which has a workaround called “plugins”. These allow you use bits of native code inside your Ionic app. Plugins can be a real nightmare to write and use. They often have limited features and severe performance issues. If your app is going to rely heavily on plugins you’re going to have a hard time.
React Native
In the world of mobile apps, React Native is the cool new kid.
React Native was created by Facebook to allow you to write an app one time for both Android and iOS, but without the issues of an Ionic app. React Native creates a common layer that plasters over the differences between the Android and Apple native frameworks. It allows you to write your app once in JavaScript and have all of the great performance and integration of native apps.
Since it was made by Facebook, you’ve probably used React Native apps like Instagram and Facebook
The good stuff
Half the development timeline of native and none of the performance issues of Ionic.
If your team has good JavaScript skills, they’ll love the developer experience.
The bad stuff
If you don’t have good JavaScript skills, you’ll need to learn. A lot. You’ll want to know the latest ES6 JavaScript, the front end library React.js and if you’re really brave, Redux.
React Native also doesn’t allow you to use all the features of the native frameworks. There are still plenty of gaps where you’ll have to write some native code or integrate a native code library.
Another issue is that React Native doesn’t have widespread adoption yet. Which means it’s a little harder to find open source libraries and learning resources. However, as more and more companies start using React Native this will become less of an issue.
Some encouragement and a warning
I’ve used all 3 and I think they’re all great in their own way, but they all certainly have drawbacks. Do some research, try some tutorials and decide for yourself.
But be careful, the internet is full of people who are either financially or emotionally tied to one of these 3 technologies. So be a bit sceptical when anyone tells you that one of them is the best at everything.
Happy coding :)