Choosing the Right Framework for Your Mobile App
The Pros and Cons of the Most Popular Frameworks for Mobile Apps
Chris Leja, Software Engineer
Mar. 18, 2022
So you’ve decided to make a mobile app–congratulations! You’ve found an idea, and decided to take the plunge to make it a reality. Both of those are hard things, and deserve to be celebrated. Now comes the fun part, where you get to help your mobile app take shape. Among the most important decisions you can make here is which framework(s) to start building in–it’s a decision that will help to determine your speed of development, the app’s performance, and perhaps most importantly, the cost.
But there are a lot of options, and it can be hard to know which is the right choice. It’s important to note that there is no one-size-fits-all approach here–the right choice for your team will depend on your app’s specific requirements. Instagram and Lyft have different requirements for their apps, and the frameworks they’re written in reflect that. So before we proceed further, here are a few questions that you should consider:
What is your development timeline?
When do you hope to get to market?
What is the budget for your project?
Do you want your app to be available on both iOS and Android?
What are the core features of your app? Do they require heavy processing (things like augmented reality, video editing, constantly updating map data, etc)?
Once you have those answers, we can start comparing the options to find the best tools for you. For each of the most popular options, I’ll make the case for and against. So without further ado, let’s dive in.
The Native Languages (Swift & Kotlin)
I’m pairing these two together because if you want a cross-platform app, you will need both. Swift was released in 2014 and quickly became the preferred language for iOS and MacOS apps, replacing Objective-C. Kotlin is the Android equivalent, replacing Java as Android’s primary development language. It’s important to note, if you don’t need a cross-platform app for whatever reason, the benefit of using a native language skyrockets.
The case for native languages:
Working with native languages ensures that you can always access every feature of each device
Both languages are highest-performing for their devices, especially around heavy CPU processing
Both produce smaller app bundles by virtue of removing the middleman, reducing download size
Both come with extremely useful tools for writing, seeing, and debugging your code (XCode for iOS, Android Studio for Android)
The case against:
Using native languages for cross platform apps immediately doubles your development/maintenance time, since you have to write everything twice
There’s always a risk of inconsistencies between the iOS and Android versions–maintaining feature parity can be a challenge
Swift and Kotlin developers are rarer (and usually more expensive), so there’s likely a learning curve or added costs for your team
Effectively requires you to have separate Android and iOS development teams
The following options all share a common benefit, which is their cross platform functionality. This theoretically cuts development and maintenance costs in half, though if we factor in accommodating discrepancies between iOS and Android, it may be more accurate to say it cuts those costs by ⅓. Still, a shared codebase that can be leveraged on both platforms is a marked improvement in development time for your team, and can help ensure feature parity across devices.
The case for React Native:
Currently the most popular cross platform approach
A more mature framework than any other on this list
A very wide pool of developers available, with a huge open-source community
Boasts high performance and flexibility
Compiles to native components, so app components look the way you would expect them to on each device
The case against:
It struggles with heavy CPU processing
Flutter is another open source cross-platform framework, backed by Google. It uses the Dart coding language as its foundation and doesn’t leverage native components–rather, it uses a widget system, which is closer to how a game renders--it overlays its own elements on screen. It’s a young framework, but expanding rapidly, and has already earned many enthusiastic fans. Like React Native, Flutter apps can run on any device that runs apps, including tvs, watches, gaming consoles, and computers, as well as in the browser.
The case for Flutter:
Doesn’t compile to native components, which can allow greater visual customization.
The widget system also means your app should look the same on all versions of each operating system
Rapidly growing with a very promising future
The case against:
Dart isn’t a widely known coding language, so there will likely be a learning curve for your team
Flutter is young, and while there is a supportive developer community, it’s not yet at the level you will find with other frameworks
Greater risk of issues due to immaturity of the framework
Progressive Web Apps
Progressive Web Apps aren’t so much a framework as a method of building apps that allows your website to be downloaded onto a device–they function similarly to native apps, but with a few key differences. Nearly all of the modern web frameworks (React, Angular, Vue, etc) can easily transition your site to a PWA.
The case for Progressive Web Apps:
Simplicity. They’re very easy to develop or migrate from an existing website
Updates are immediately available to users
Consistency across devices
Memory friendly for devices
A huge pool of developers available--after all, they're websites
The case against:
Can’t access all native features (for example, push notifications on iOS)
Faster battery consumption, due to it being more CPU intensive than an equivalent native app
Low performance relative to native solutions
They struggle with feature rich apps
You may have to spend extra time making your website look and feel like an app
Can’t currently be downloaded on atypical devices (watches, tvs, gaming consoles, etc)
Ultimately, there is no one-size-fits-all approach to find the best framework for your needs. It always depends on the requirements of your app. That said, I would argue that for most mobile apps, at least as of this writing, React Native has the broadest appeal.
What you get out of React Native is a scalable, performant platform with a large developer community, access to native features, and a very fast development experience. It powers Facebook, Instagram, Discord, UberEats, and AirBnB, amongst many others. It combines high performance with low development costs, without the steep learning curve of Flutter (and with a more mature framework to boot). Adding popular infrastructures like Expo to a React Native app can simplify the development process further. If you’re making an MVP app, or simply trying to keep your development lean and efficient, React Native will be the best option far more often than it isn’t.
But again, it depends. Think about the needs of your app. There is no perfect solution, and there will always be tradeoffs. Choosing the right framework(s) for your app will lay the foundation for your success, and as such, warrants careful consideration. But keeping the focus on your app’s specific needs will show you the right answer for your team.