Web apps are great but sometimes, for a variety of reasons, you want a native app. That might be because of functionality, pricing model, distribution or to help drive engagement.
There are quite a few very different ways you can build your Native App. Let's have a look at the things to think about, options and winners.
What is important to your project
What you end up choosing will be largely driven by the requirements of your app, the resources at your disposal and budget. Key questions to ask are:
- What features do you need now?
- What features might you need in the future?
- How important is speed of development / time to market?
- What is the budget for the project and ongoing maintenance?
- What kinds of User Interfaces are required?
- How much data needs to be processed and displayed?
- Are there dynamic features like animations, gameplay etc?
- Do you need access to native APIs? Which ones?
- Which Platforms do you want to deploy to?
- Is distribution through the app stores important?
The main options are to build with Native technologies, Web Technologies, Hybrid Technologies or something that compiles to Native code. Each has their set of strengths and weaknesses.
Do you really need a native app? Web technologies are now very, very powerful. Responsive design has made using websites on tablets and phones part of daily modern life. With HTML5, web developers get access to some device APIs, like geolocation and battery status. Client side frameworks like Angular and React have made building rich interfaces much easier and with web storage you don't even need to be online once the app is loaded. Deployment is simple and doesn't require an approval application as you don't use the App Stores.
The downsides are that you don't get app distribution via the App Stores, can't access all the device APIs and your app doesn't get an icon on the device to help users to remember to use it.
So web technologies are really the anti-option. Just take a moment to consider: is a native app the best solution for this problem? If not, a web app will probably be cheaper, easier to deploy, distribute and update and a great solve for you.
At the other end of the extremes, there is the Native route. This is where apps are developed in a language the device runs directly to create views, define logic and access APIs.
The technology choices are pretty simple. Java for Android apps. Swift for IOS apps. At this point new development on Objective C is probably a poor choice and Apple seem to be steering developers away from it.
Native Apps are generally slow and expensive to develop and maintain. If you want to deploy to both platforms, you will need to develop the app twice.
Native apps run fast, have full access to the device APIs, can cope best with large data sets and heavier processor load operations.
They are distributed via the App Stores, with all the advantages of reach, promotion and monetisation that brings along with the added complexity of getting approval.
Hybrid Apps aim to bring the best of the other options together. The ease, speed and cost efficiency of web apps with the functionality of Native Apps.
Hybrid apps run as web technologies inside of your app, and make calls out to the native APIs.
- Hybrid apps are faster and cheaper to develop most apps
- Can use Native APIs
- Multiplatform. Develop once, deploy to both platforms.
- Distributed via the app stores
- Not as fast for some features (heavy lifting processes)
- Challenging to develop some native-like experiences (eg Games).
The leading framework for developing Hybrid Apps is Ionic, which provides an entire ecosystem to develop multi platform Native Apps including UI Components, API wrappers and a hosted development environment enabling compilation and live updates.
Compile to Native
Compile to native development environments allow developers to build apps using easier to use technologies aiding development speed and cost efficiencies. They then compile the code into native code for required platforms.
The goals of compile to Native are similar to Hybrid apps - Apps that are easy and efficent to develop with access to APIs and the app stores - but with the added compile-to-native power/speed boost.
RubyMotion is ideal for people who love really Ruby (and who doesn't) and for Apps that require more processing power than Hybrid Apps can manage. It doesn't however offer the same breadth of tools, ease of development and community as some of the other options.
React-Native has a lot of backing, being a Facebook project and has been used in some high profile Apps. It uses the JS framework React but compiles to native. There is a lot of hype around React-Native. Is this the holy grail? Web tech development ease with native power? At the moment, it's early days and the eco-system is not as mature as other options - but things are very promising. There is even a visual editor.
So, what should you use? As usual with Tech, the answer is - "It depends". Frustrating I know! The best options boil down to:
Native Code for best performance, at much higher cost & slower delivery- Use Swift and Java.
Hybrid App for Great UI, lower cost when maximum power not required - Use Ionic.
Want to Join Facebook and Instagram in a less well charted but possibly awesome future - Consider React-Native.