Mobile app development technology has evolved quite a bit in the past decade. In this post, I’ll provide an overview of current development options — from native solutions, to legacy cross-platform technologies, to emerging toolkits — and offer some thoughts on choosing the right tech for your project.
Most popular: Native iOS or Android
The vast majority of modern apps are built specifically for either iOS or Android devices, using resources provided by Apple and Google. Native development tools include XCode, AppCode, and InterfaceBuilder for iOS, and Android Studio and IntelliJ IDEA for Android; iOS apps are usually written in Swift, Objective C, or C/C++, while Android apps most often use Kotlin or Java.
Native apps offer a number of advantages. They tend to be highly performant, particularly when it comes to graphics, since they’re built specifically for the device operating system using tools designed and tailored by the vendor. Libraries and APIs are available for all device capabilities, and they’re kept up to date as new OS versions are released. They’re also widely used and thus have excellent third-party support.
However, there are a few big cons to going native, too. The most obvious is that native apps aren’t cross-platform, so if you want to offer apps for both iOS and Android, you’ll essentially end up doing twice the work. The other downside is that there’s a significant tech ramp-up for developers who are new to working with iOS and Android languages and tools.
Biggest cross-platform player: React Native
Web developers usually find it easy to transition to working with React Native, since the languages and frameworks are similar to those used in web development. Another advantage to this technology is its use of native components, which means developers have access to ready-made components that provide a good experience for both iOS and Android users. But React Native has downsides, too — libraries and APIs aren’t always kept up to date, navigation options are clunky, debugging can be difficult, and hundreds of dependencies make updating a chore. And, although simple React Native apps can perform well, complexity will compromise performance in some cases.
Strong legacy option: Xamarin
Microsoft’s Xamarin platform is an older development solution that can be used to build iOS, Android, and Windows apps. Xamarin developers work with Microsoft tools such as VS Code and Visual Studio; most apps are written in .NET, C#, and F#, and use the Mono .NET framework for UI components.
Xamarin is well-documented and maintained — in fact, the API documentation in most cases is much better than React Native. It also offers developers the option of re-using .NET code written for desktop apps. However, there’s a steep ramp-up for developers who don’t have experience with Windows tech; it’s also not the most performant option, and updates for new device capabilities tend to be slow in coming.
New to the party: Flutter
Flutter is a relatively new toolkit, provided by Google, that uses a custom render engine (Skia) rather than platform components. Flutter apps are built with Google’s Android tools (Android Studio, VS Code, IntelliJ IDEA) and are written in Flutter SDK and Dart. Google’s AdWords app is built with Flutter, as are a few other prominent apps, but the technology is still new and hasn’t caught on with many big players.
Many developers enjoy working with Flutter because it offers a complete development ecosystem with internally consistent language and syntax; it also supports a hot reload during development, which makes for a smoother workflow. Additionally, it’s fast and performant. Downsides include a large app size (since the custom render engine is packaged into every app), a lack of native APIs for device capabilities, and the fact that custom-rendered UIs may not match the expectations of either iOS or Android users.
Quick and dirty: Web tech solutions
So…which technology should you use to build your app?
No surprises here — it depends on your needs and goals. Here’s an at-a-glance summary of the options discussed above:
Device capability support
Easy to learn
(in some cases) Performance
Can reuse desktop code
|Large app size
Poor device capability support
Poor device UI matching
|Web tech||Easy to learn
Can reuse web app code
Poor device capability support
These pros and cons point to some general conclusions:
- Provided you have the resources and expertise, a native app is the best choice if you need reliable access to all device capabilities, if your app has a complex UI that includes graphics and animation, or if you’re simply only targeting one platform.
- A non-native app is a good option if you’re targeting multiple platforms with a simple app that doesn’t rely on device capabilities; it may also be the better bet if you need to build something quickly using your existing web dev team.