My story with cross-platform development
When I first heard about cross-platform mobile app development, I thought it was something about the Apache Cordova framework.
At first, I was excited about the possibility to have a single code base for Android and iOS apps, but this excitement quickly faded when I actually tried it out. It was difficult to make good-looking apps, and the performance wasn’t anything close to native apps.
This was why a returned to native Android development, and it took me a couple of years to give cross-platform development another try. This time, Flutter was my framework of choice.
And wow, what a difference!
My Flutter apps ran smoothly and even looked good – at least if you don’t want to build natively looking iOS apps.
Perfect, right? Why still bother with native app development? Well, unfortunately it’s not that simple. There are many advantages from cross-platform frameworks compared to native development, but so are there many reasons to stick with native mobile app development.
So what should you choose? In this article, I want to list the arguments for cross-platform development and those for native Android/iOS app development to help you decide what to use for your next project.
You should use cross-platform frameworks when…
Cross-platform frameworks allow building apps for different platforms like iOS and Android using one single code base. Let’s start with the arguments for using cross-platform frameworks like Flutter or React Native.
… you have limited resources
Having a shared code base is a huge benefit of cross-platform frameworks. Especially, if you work alone (or in a small team), have deadlines or a tight budget, this is a big plus.
Instead of essentially writing your app twice (let’s assume you’re building for Android and iOS), you just need to code it once and then build different versions for your target platforms.
Of course, this does not quite halve your development time. There are always situations where you need to handle some platform specific problems, or you need to consider differences in the design guidelines between Android and iOS.
Also, you need to be aware that you are building, signing and deploying/releasing the apps is different on Android and iOS.
Nevertheless, cross-platform frameworks allow you to reach your goal faster (thus cheaper) and with fewer people needed.
… you use all custom UI elements
If you just want to use standard UI components to make your app look like a truly native Android or iOS app, you might be in trouble with cross-platform frameworks.
Whereas React Native supports displaying native UI elements, Flutter comes with a set of UI Elements that primarily focuses on Google’s Material Design used by Android. Although there is also a set of components mimicking their iOS counterparts, they probably won’t be enough for building a native looking app.
This might be no problem at all if you decide to design and build custom elements anyway. In this case, you can save a lot of time when you only have to style a component once and then use it for all your platforms.
… you build a ‘rather standard’ app
Fetching data from an API, displaying it in your app, receiving user input, and sending the data back to a server. If this is the basic flow of your app, this is where cross-platform frameworks shine.
You need to receive a bit stream over a Bluetooth connection? That’s where cross-platform frameworks might not be so great. At least, you will have to write some platform specific code to access the device’s hardware (or hope someone already did it and released a library).
… you want to build for web and desktop as well
“Done” with your app and decide you also want to release a web and a desktop app? Flutter also supports building for web and desktop operating systems.
So if your app is already able to handle large screens (e.g. for tablets) you might just release it for desktop and web as well.
…you are web developer
When you are a web developer, cross-platform frameworks are closer to the frameworks you are familiar with. React Native is based on React.js – so if you know that already it shouldn’t be too hard for you to start working on mobile apps.
But also Flutter uses similar concepts. Although Flutter does not use JavaScript or TypeScript, it uses Dart which is very similar.
You should use native Android / iOS when…
As already mentioned above, there are still cases where it makes sense to develop your mobile app natively. Most likely this is the case when advanced hardware support is required.
… you just need one platform
When you only need to develop for either Android or iOS you naturally only have one code base. In this case, there’s no need to use a cross-platform framework.
Of course, you should also keep in mind that you might want to support other platforms some months (or years) later.
… you write a hardware focused app
When you build your app around sensor data or external devices, a native app might be the better choice.
In hardware focused apps, a lot of your code will be platform specific. Especially, if you do not have a lot of UI components, the amount of code you would share using cross-platform frameworks would be rather small.
Also, you won’t release web or desktop versions of these type of apps, since you won’t even have access to the hardware needed.
… you already know your Frameworks
If you already have lots of experience writing Android and iOS apps natively, it might make sense continuing to do so.
Learning a new framework takes some time, and if you are not familiar with the concepts of React Native or Flutter, this will slow down your development process.
So, if you do not want to spend time reading the docs and searching for libraries, stick with what you have.
… you use heavy animations
Cross-platform frameworks cannot quite compete in terms of performance when compared to their native counterparts (although Flutter gets close).
If you rely on many heavy animations in your app, these usually perform better using native development. Have a look at this article on Medium with an in-detail performance analysis between Flutter, React Native and native apps.
… you want to use a native style
If you want all UI elements and animations to feel as native as possible, you should write a native app. Sounds obvious, right?
This might not be so true for Android apps, since Flutter as well focuses on Material Design, but Flutter’s iOS elements library is incomplete and apparently does not have the highest priority on the Flutter roadmap.
Summary (tl;dr)
Both cross-platform frameworks and native Android and iOS apps have their advantages and drawbacks.
Cross-platform frameworks like Flutter and React Native allow to release your apps from a single code base. If you use custom UI elements and focus on apps reading from and writing to APIs and displaying data, these frameworks shine. Also, if you are a web developer who wants to get started with mobile app development, Flutter or React Native are the better way for you.
Native apps have their strengths if you want to build hardware-centered apps or include heavy animations. Also, the advantages of cross-platform frameworks vanish, if you only need to develop for a single platform.
If you are already experienced writing Android and/or iOS apps, you might not want to learn a new framework with different concepts. Although, it might be worth in the long run, so see it as an investment.
In conclusion, whether you should use a cross-platform approach or develop your app natively depends on different factors. You will have to specifically weigh them according to your project and your experience.
Your Input
Are there any more things to consider when deciding between cross-platform and native development? Leave a comment below and let my know what you think.