When considering the current landscape for mobile app development, there are three major options. They are cross-platform, hybrid, progressive web, and native. Below we explore each option including the advantages and disadvantages of each:
Cross platform development involves using a framework to write code that renders natively on different platforms / devices. The mantra behind cross platform development is "write once, use everywhere" meaning the code you write will run as both Android and iOS apps. React Native, Ionic, and Xamarin are among the most popular frameworks for cross-platform development. Let's explore each of these options in a bit more detail:
React Native's key strength is also its weakness. While you can mix and match React components with native code, your ability to do so depends largely on bridging components and third party libraries. If the native platforms roll out new features, you have to wait for a bridge to be built for that feature (or build one yourself!).
Angular's Ionic framework uses TypeScript to create web based apps that run in native containers. This means the app is ultimately a web page that mimics native design and functionality. This is not to be confused with a progressive web app as it runs within native technology. Ionic apps ultimately become native Android/iOS apps. You can distribute them as native apps through different platforms.
It should be noted that Ionic apps can also be considered hybrid apps since they are ultimately web apps running within native containers.
The main advantage of Ionic is it's portability. Since it leverages web based technologies, it can run easily on different platforms without having to worry about bridges and connectors (although PhoneGap/Cordova can still be used to better access things like the camera feature, etc.). Ionic also does better at looking native and can surpass React Native in terms of it's look and feel.
The main disadvantage of Ionic is that it's web based. HTML runs slower on native platforms than native UIs and elements do. It's important to remember that Ionic apps simply mimic native features and therefore run less efficiently than their native equivalents.
The main advantage of hybrid apps is portability. Since most devices come with browser support, they can run web apps inside container views. This makes it easy to run the same web app on multiple devices and render consistently.
The major disadvantage with hybrid apps is performance. While these apps can mimic native behavior, they ultimately run slower since they are HTML based. Hybrid apps will also struggle more with accessing native components like the camera feature.
Progressive web apps are like hybrid apps, except they literally run in the browser. Progressive web apps are basically websites that you go to that look and feel like native apps. Using the right meta tags, you can even link to progressive web apps through native badge icons. This can make it difficult to discern between your web app and a truly native one.
Progressive web apps can run just as fast as native apps. The main disadvantage with progressive web apps is that it's hard to access native features through the browser. Progressive web apps will continue to evolve with HTML5 however they continue to face challenges when competing against truly native apps.
Native apps are apps written with their native technology. For iOS, this means Swift and Objective-C. For Android, it means using Java and the Android SDK.
While you certainly lose the "write once, use everywhere" factor with native apps, the advantages can't be ignored. You don't have to worry about bridges or connectors since you are using the native technology to build the app. This also means you get the quickest access to new features released with new devices, etc.
If your development team has experience using React, then using React Native is a clear winner. With the strong community backing React Native, it's hard not to find a bridge for any feature you want to tap into. If your team is under time constraints, then choosing one of the cross platform frameworks may be the best move to avoid writing the same functionality twice. If performance is highly valued, then exploring native development may be worth the extra efforts.
When deciding which approach is best for your team, it's important to consider experience, time frames, and the nature of the application your building. If this app is largely read only, then writing a progressive web app could make sense since your not relying on native features as much. Also remember that frameworks like React Native make it possible to mix and match what you build out natively.