React Native vs iOS/Android Native: what is the best choice for mobile development today?

Smartym Pro
8 min readApr 22, 2019

--

According to the Statistics Portal “Statista”, the number of mobile apps downloads each year has been steadily increasing. In 2018, there were 205.4 billion app downloads and this number is predicted to grow up to 258.2 in 2022 — a 45 percent increase over five years. People are using their mobiles now more frequently than web and thus mobile apps are projected to hit $188.9 billion in revenue by 2020.

Since the app industry is actively flourishing now, tech enthusiasts all over the world are constantly searching for ways to make the mobile app development process quicker, easier, more convenient and cost-saving. This lead to the appearance of some cross-platform tools in the developers’ community. Unfortunately, each of them had tons of flaws, they were not able to replace even 40% of native development capabilities for both iOS and Android. And so still developers are only dreaming about the invention of a completely all-covering universal tool that will enable them to create mobile apps twice as fast due to the absence of necessity for native developers of Android and iOS to develop apps and maintain them separately.

What is React Native?

A few years ago Facebook presented their framework called React Native (short RN), that is intended to become the tool for cross-platform development number one. The creators of the framework promise that React Native will provide easy and smooth iOS and Android apps development simultaneously using JavaScript programming language. But does it really help and can it cause the end of native mobile development? Let’s look closer at React Native’s pros and cons and find out, why this framework is not the best choice in some cases and why native mobile developers will never be replaced by JS specialists (at least in the nearest future).

There is no doubt that using a cross-platform framework has a lot of advantages since it saves material, human and time resources a lot. You can reuse one code for both iOS and Android, and instead of having to develop separately UI and UX for both platforms, you can do it all in one place. However, everything is not as rainbow-colored as it may seem at first sight. React Native is a dark horse, especially for the web JS developers, who are trying to develop a mobile app for the first time without any Java or Swift experience.

Poor documentation

The first and maybe one of the biggest disadvantages for React Native developers is the absence of adequate documentation. All the available info is mostly obsolete, and there is too little data about how to set up the testing environment. For those who are not acquainted with JavaScript will be very difficult to find out how it all works fast.

The need for native coding

For those who think that the knowledge of JavaScript only is enough to develop an app that will be more or less fine — throw this thought away. Well, of course, if you need a maximum simple app without any platform-specific features or extremely difficult logic, then this disadvantage will probably pass you by. Otherwise, here is the bad news: you can’t build a good mobile app without the help of native coding since it doesn’t support all the native APIs. For example, these are things that can’t be made with React Native instruments only:

  • Deep linking;
  • Push notifications;
  • Many specific UI elements.

So, if you are a web-developer without any native mobile experience, you won’t be able to create, for example, photo-editors, players, Bluetooth-connected apps, AI, ML, social networks and messengers, using JavaScript only.

Moreover, whenever there is an OS update, it takes some time for React Native to implement the support of this updates.

Obviously, any native developer will easily find a way to link a native module or a library, while a pure “JavaScripter” will have to spend some extra time figuring out the working solution.

UI difficulties

The same problem as the previous one: Android and iOS have their own design guidelines to follow, Material Design and Human Interface Guidelines accordingly. So in this case single codebase also doesn’t work. However, if it’s ok for a certain project that the apps will look similar on both platforms, then surely using React Native will speed the processes of development and maintenance up at a great scale.

Moreover, for iOS developers it will be not that comfortable since React Native doesn’t have a visual interface editor, instead, it has a JSX-layout — which is an advantage for Android developers who are used to XML, that is pretty similar to JSX.

JavaScript weaknesses

Despite JS being the most popular programming language among web-developers, it is undeniable that it is called an “untyped” language for a certain reason. Unlike Java and Swift, Javascript does not enforce a type of variables and parameters to functions. This means that your variables can be anything at any time and the compiler is not going to help you. So you need to be extra careful when developing an app using this framework and stick to the strict standards and discipline of native languages in order to escape potential troubles that will be not easy to find due to the absence of a static code analyzer in React Native.

Instability

Unlike mature native languages, React Native is a relatively young and constantly emerging platform, therefore it has a lot of glitches and bugs. Unfortunately, Facebook developers don’t really pay too much attention to fixing bugs and other issues, unless there is something directly connected to their Facebook apps. The framework doesn’t even a have 1.0 version yet.

Moreover, no one can guarantee, that Facebook developers won’t shut down React Native’s support at some point, as they did with their backend-as-a-service Parse platform all of a sudden.

In this case, it can be concluded that React Native is not a good choice for long-term mobile development, that presupposes software maintenance and new features development over time.

However, React Native is not only about drawbacks and negative sides. It has a lot of advantages as well! Let’s look at React Native’s benefits.

Time-saving

Perhaps the key advantage of React Native in mobile development is the amount of time resource it enables to save due to the single codebase for both Android and iOS. So in case you need to build and release an app on both App Store and Google Play in an extremely short time period — React Native is exactly what you need. Besides, it will not only save time but also human resources, because instead of having two people working on the same project for iOS and Android, you will be able to involve only one web-developer. However, keep in mind, that, due to the reasons mentioned above, native development might become necessary, so it’s better to at least have some native developers as consultants on any issues.

Faster app building

It is a well-known fact, that building an app using native instruments can be a long-lasting burden. It is especially exhausting when you need to rebuild an app with such insignificant changes implemented like different text color or label size.

There is a great solution in React Native called “hot reloading” that works in an incremental way, therefore it enables to inject and rebuild only the changed modules, and not all the code every time. And moreover, there is a “live reloading” tool that automates the building process, so that you don’t need to do it manually every time — React Native will make a rebuild every time the code changes.

Responsive UI/UX

React Native provides the developers with FlexBox — a tool that is already being successfully used in web development. FlexBox gives the necessary instruments for creating a nice responsive and intuitive UI. FlexBox is a good opponent to Android’s Constraint Layout and XML as well as iOS’s XIB and Storyboard. The only disadvantage, which has already been mentioned above, is the inability to use some native-specific APIs like Camera, GPS or TouchID, tools for animation and complex UI. So if you need an app with sophisticated animations or complex interface components — it is better to take advantage of native programming.

Performance tools

In the recent React Native version 0.57 release, there appeared a component Profiler, that provides performance metrics for all wrapped components.

There already dozens of famous mobile apps that were developed with the use of React Native, the list of React Native apps can be seen below. However, it should be noted, that the developers of the apps listed didn’t use pure React Native, but also implemented some features separately for Andriod and iOS using traditional native programming:

  1. Facebook and Facebook Ads — the first application made with React Native. Obviously, because the framework itself is Facebook’s invention;
  2. Skype — in this case, a single codebase was utilized 2 times: for both mobile platforms and for a Windows desktop application as well. However, although the app performance has significantly improved, a lot of users are pretty unsatisfied with the new interface;
  3. Instagram — the developers took the challenge of transferring to React Native, and now they claim that they have shared 85–90% of the code between iOS and Android. Yes, they have gone through some difficulties in the process, but in the end, they managed to deliver the app much faster than with the native programming approach;
  4. Tesla — the famous organization developed an app using the Facebook’s framework that enables to diagnose and locate a vehicle and even partially control it via the mobile phone;
  5. Walmart — the developers claim that due to 95% of the code base having been shared between the platforms, they achieved improved performance because now they use fewer resources and need less time;
  6. Airbnb — recently this company refused to continue modernizing their app using React Native due to the inability of reaching their goals via this framework. So now they are transferring their application back to native Android and iOS development.

So what shall I choose?

So, after having looked closer at the main React Native’s advantages and disadvantages compared to real native mobile development, we can conclude, that:

  • React Native is better in these cases:
  • When you are limited by the customer and need to develop an application in a very short and with minimum costs;
  • If you need to take advantage of fast app building;
  • Your developers have a huge React and Web-development experience;
  • It is okay for your application to look absolutely identical on both platforms.
  • And so using native programming is surely more beneficial when:
  • When the requirements are to create an app for one platform only, it is better to use native Java or Swift;
  • In case you are required to create an exclusive app, that needs the utilization of platform-specific code;
  • When the project is intended to be long-term, with a lot of new features planned in the future and the need for maintenance;
  • Your app needs to support all the OS updates as soon as they are released;

Be very attentive when choosing the mobile development approach, so that not to comprise on quality speed and efficiency. There are already a lot of examples of successful React Native usage, it has proved to be a viable alternative to separate native app development. We are sure, that eventually more and more successful apps will pop up on mobile app markets as the framework is emerging step-by-step, since there are many solid reasons to use React Native.

So if you have a project idea or need a consultation, feel free to apply to us to receive smart recommendations.

--

--