In this article, we address the advantages and disadvantages of native apps and compare them to those of React Native apps. We will then propose one example of a ‘good fit’ native app and a ‘good fit’ React Native app. The article concludes with a general recommendation for when you should build your application natively and when to do so in React Native.
Essentially, native applications must be written in the language that Android or iOS will run. For example, building an application in iOS generally needs to be written in Objective C or Swift. Alternatively, Android applications are written in Java or Kotlin.
An advantage to natively built applications is the ability to leverage platform-native tools. For iOS applications, this means access to all styling elements, e.g. buttons, labels, scrolling, tables. This makes for a product that will display and behave like most apps would on the native device. Not only this, but building applications with platform-native languages allows for easy integration with native APIs like precise GPS location, Bluetooth, etc.
Another advantage to native apps is discoverability and trust. The app store is a market, so consumers can stumble upon your app, just like they can with any competitive applications. Moreover, applications in the app store must go through a review process before being approved. So when an application is found in the app store, there is an assumption of reliability, stability and security in that app that may not be assumed from websites.
To have an application available on both Android and Apple app stores, it is necessary to build two separate applications. This will prolong development time, a significant cost driver. Other elements of the development cycle can further prolong development time, like prototyping. As a developer writes code during the prototyping phase, reloading the application takes longer for native builds than it would in React Native development.
A ‘Good Fit’ Example
Let’s illustrate an example of a proposal that we would recommend to be built natively. In this example, a company is building a Bluetooth device and wants to build an iOS application in tandem with the Bluetooth beacon. We would recommend building this application natively for several reasons. For starters, the app interacts with Bluetooth extensively. If that application was built in React Native, the development team would have to write functions in the native language and then link them to the React Native app. Even then, the app may run into weird bugs from writing native code twice. Moreover, the application only needs to be written once as it is being built for only the Apple App Store. Having to write the application only once significantly reduces the impact on development time and budget.
React Native Apps
Applications built with React Native are only written once. For apps built for both Apple and Android, only one view is built and works on both platforms e.g. no need to write the view in Swift and then convert it into Kotlin. Naturally, the length of the development cycle for React Native apps is much quicker as prototyping is less demanding. The prototyping phase is less demanding because the developer can quickly reload the application to test changes.
However, deployment can quickly become complicated for React Native applications deployed to both platforms. So partnering with a DevOps team skilled in both Android and iOS development is essential for maintaining stable deployments.
In order for an app to run properly and deploy to the app store, the development team has to fix bugs in Xcode and/or Android Studio. This is due to functionalities that may have bugs on one platform but work fine on the other. Additionally, native tools and styling elements are lost when building an application with React Native. These styling elements and native tools standardize functionalities like buttons, labels, scrolling or tables, which would otherwise make the application look and feel just like an iOS or Android app. Furthermore, certain functionalities can only be written in the native language. For React Native apps on both platforms, these functionalities must be built in both iOS and Android and then linked to React Native before everything will work properly.
A ‘Good Fit’ Example
Let’s illustrate an example of a proposal that we would recommend to be built with React Native. In this example, a company is building a simple messaging application that they want available on both Android and Apple app stores. The application functions as follows: It shows a list of all messages that, when tapped, display the message thread. From the message thread users can send and receive messages. Normally, when a user receives a new message, everything is updated in the background. This makes the application a good fit for React Native as messages are sent and received while interacting with very few native APIs. Not to mention building the application with React Native will significantly reduce development time as React Native apps are only written once.
For companies developing an application for only one platform, we generally recommend a native build as native tools and styling elements help standardize the application to look and behave like other native applications. The same recommendation applies to those applications that interact extensively with platform-specific functions like location, Bluetooth, etc.
In some cases however, clients want their application to be available on both Android and iOS. In these cases, we generally recommend a React Native build as it is only written once, leading to a shorter development cycle and cost-efficiency.For those with large budgets, building both applications natively is a valid solution.