Gone are the days where the only options in mobile app development were native iOS and Android. The choices are broader nowadays, and frameworks have popped up with React Native being the most popular alternative. So what approach should you choose for your next app?
Native App vs React Native App - What Should You Choose?
Written by
I have worked with both native iOS and Android apps and React Native apps. I have also worked for companies that have switched between the two. In short, going for the native approach requires you to develop two separate apps with, in turn, requires that you have both iOS and Android developers. React Native is a web technology that allows web developers to develop a single app that works on both platforms.
From the outside, React Native seems like a no-brainer to go with, given its cross-platform capabilities. In reality, the choice is very dependent on your organization and switching costs from one to another can be huge, so you might want some knowledge to back up the decision. Here's the blog post that I wish existed before making decisions on what to choose.
When to choose Native
If you're targeting a specific platform, native development is what you want to go with. We could end this discussion right here, as the disadvantage of no shared code between platforms is ignorable. If you're targeting both platforms, there are a few more things to take into consideration.
Tools
The native iOS and Android platforms are opinionated in how you develop your apps, ranging from the tools you use for navigation to how you implement dark mode in your app. You have a ton of official tools and APIs available that are supported by the platform vendors. You have most of what you need to get the app off the ground and to start working on the product, rather than dealing with platform requirements. Having opinionated platforms is an advantage if you have many different people working on your project since they can be very efficient from the first day by being familiar with the platform standards.
Performance
Going native comes with full control of how much you abstract from the underlying platform and, thereby, the performance you achieve. If you haven't written any terribly inefficient code, you should expect a decent performance without any need for extreme performance tuning. This aspect of native apps, compared to React Native, will be most prominent when you're running on relatively slow devices.
You should choose native, if:
- You are targeting a specific platform
- Decrease time for developers new to project to be efficient
- You want full control of performance
When to choose React Native
The biggest advantages of React Native are:
- Cross-platform compatibilities, allowing for writing one JavaScript codebase that works on both iOS and Android, meaning you won't have separate teams for each platform.
- Being a web technology, allowing for the migration of existing web developers to your project, especially if they're already familiar with ReactJS.
These two advantages are very dependent on your organizational setup. In the right setup, React Native is often the most cost-efficient approach, as you develop one app that works on both platforms. If you have web developers, and maybe even an existing ReactJS codebase to reuse code from, you will beat native apps in time-to-market.
These advantages come with a few hidden pitfalls in larger projects. The most prominent one is that, inevitably, you're going to deal with the underlying platforms, for instance, to bridge any gaps in functionality. Unless you're confident in both iOS and Android, you risk introducing unforeseen issues or doing a lot of troubleshooting. This has ultimately led companies, such as Airbnb, to move off of React Native.
The companies I've seen succeed with React Native in large, enterprise apps have set up a separate core native team to deal with the native aspects of the app. That will go a long way when the React Native platform-agnosticism starts to peel off.
Tools
React Native is limited in what you get out of the box, so you might find yourself spending excessive amounts of time laying the foundation for the app. You either decide on which external libraries to use and what you'll implement yourself. The choice of libraries to use for navigation, HTTP communication, etc. is all up to you. Someone who wants a highly custom and flexible application might benefit from not using an opinionated framework.
Performance
React Native and other hybrid options are, by nature, an abstraction on top of the native platforms and hardware. As a result, some control is lost when it comes to performance. Unless you want supreme performance at all costs, this might not be an issue for you. In my experience, it sometimes requires more effort to keep high performance compared to native code. I've seen very complex React Native code that was written to achieve smooth animations, in an attempt to run the code on the native thread instead of the usual JS-thread.
Overall, React Native is implemented in a fairly efficient way. React Native and native can be used efficiently or inefficiently, and that will honestly have a much bigger say on how an app performs.
You should choose React Native, if:
- Time-to-market and rapid development is a major concern
- You have many existing web developers and perhaps few native developers
- You want to reuse large parts of existing ReactJS codebase
Conclusion
Making the decision whether to go with native iOS and Android or React Native is very much about the fit in the organization. Whether you're a startup and mostly concerned with releasing an app for both platforms in the lowest amount of time while keeping costs low, React Native is probably your weapon of choice. Perhaps you're a larger organization where high performance or onboarding speed of new developers is a priority, then native is likely the way to go.
There are, of course, other things that play a role in the choice of technology. It's not as black and white as depicted here, but I've done my best to highlight the key points of both sides you should consider before making the decision.
Share this post
Facebook
Twitter
LinkedIn
Reddit
You may also like
Automation
Automate Screenshot Framing with Text Using Fastlane
Framing your App Store screenshots greatly improves your store listing. But doing it manually takes hours away from perfecting your app. Instead, here’s how you automate the process of adding device frames and text to your screenshots.
DevOps
Architecting a Logging Service for iOS Apps
Understanding how your apps behave in production is a fundamental part of our jobs as iOS engineers. We need to gather log events in order to investigate and reproduce issues that customers run into. Here’s how you create a log service with a clean architecture that’s modular and easily extensible.
Process
How Do I Work?
Over the past few years, I’ve been exposed to various ideas and processes that have affected my way of working in software development teams. From my experiences, here’s what has helped me work as efficiently as possible as a software developer.