Choosing the Right Tech for Mobile App Development

by

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

React Native is a cross-platform technology developed and maintained by Facebook. It uses platform-native components — such as Views, Text, Lists, Images, etc. — to support both iOS and Android compatibility within a single codebase. React Native apps are built with web IDE tools, and use HTML and CSS-like languages for views and styling, and JavaScript/TypeScript for application logic. Not surprisingly, Facebook’s own apps use React Native, as do other well-known apps such as Uber Eats, Tesla, Skype, Pinterest, and Walmart. 

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

If you’re averse to messing around with mobile-specific code, you also have the option of working with one of several technologies that essentially repackage a website as an app. Progressive Web Applications (PWAs) and related solutions like PhoneGap use web development tools and languages (primarily HTML, CSS, and JavaScript), are easy for web developers to work with, and offer the possibility of sharing code between web and mobile apps. However, their support for native device capabilities is mediocre at best, as is their overall performance. 

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:

Pros Cons
Native iOS/Android Performance

Device capability support

Single-platform

Learning curve

React Native Cross-platform

Easy to learn

Out-of-date libraries

Navigation

Debugging

Dependencies

(in some cases) Performance

Xamarin Cross-platform

Documentation

Can reuse desktop code

Learning curve

Out-of-date libraries

Performance

Flutter Performance

Developer efficiency

Large app size

Poor device capability support

Poor device UI matching

Web tech Easy to learn

Can reuse web app code

Performance

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. 

 

Leave a Reply

Your email address will not be published. Required fields are marked