The alternative is to develop the app separately for each platform using languages like Python, Java or Swift. If you are planning to launch an app for both Apple's and Google's platform you'd need to run two parallel projects with two development teams. It has always been a problem, that's why hybrid solutions are in demand.
React Native is the leading hybrid mobile development framework. With React Native you write an iOS app just like you would write a web app. That's very convenient, but also may cause some problems.
React Native uses React.js library for building user interfaces, another project maintained by Facebook and the community. Unlike React.js, which uses web components for the interface, React Native uses the Android and iOS library.
React Native components are similar to HTML and styling is similar to CSS. These components relate to native iOS and Android components.
The idea sounds great, but some obstacles still make going all native the right choice in many cases. Let's take a look at the pros and cons of the two solutions.
You only use the same codebase for the two world's most significant mobile operating systems. You need fewer developers to build and support the code, there are no separate iOS and Android teams, it takes less time, and each update works on both platform immediately. You can test and optimize the application simultaneously in both ecosystems.
With one codebase come some problems. It is impossible to link the iOS and Android components directly 1:1. The two platforms compete with different design guidelines and UX module behaviors. Google and Apple want to be different since they are looking for arguments in favor of their platform.
At times hybrid solutions don't look as smooth as native ones. However, even if the two platforms share just a part of your app's code, it brings substantial savings.
At times React Native team have to write some platform-specific code. This may be a problem if nobody on the team has any experience with native iOS or Android development.
The developers' tools for iOS and Android (Xcode, Eclipse and Android Studio) require a time-consuming building time. At times when you are making small changes in a complex app, you have to wait long to see the result. With hot reloading in React Native let you introduce changes just to the data or screen you are working on. There are also many auto reloading mechanisms available.
It's easier to integrate the camera, GPS, touch ID, accessories (such as Apple Watch) and other elements when using natural solutions. If your app is focused on perfect integration with some key APIs, you may consider choosing one platform for a start and go native.
As I wrote before, you have to consider writing some native code when developing a React Native app. This is necessary when you want to connect your app with the native modules or external services.
Publishing an app may be challenging. Especially in AppStore, but also in Google. That is why you need people with some native development expertise in your team.
It all depends. You have to answer some key questions.
Do your customers prefer any of the two platforms? Would you like to launch an iOS or Android app first? Is perfect integration with some key modules (camera, GPS, etc.) essential for your product? Are you entering a competitive market with flawless UX and UI?
If the answer to these is "yes," maybe you should consider going Android or iOS native.
Do you want to reach all the devices? Are mobile apps just a part of your product? Are you developing a web app for desktops and laptops as well? Do you want to build your app fast?
If the answer is "yes," React Native is the solution for you.