At Vervint, we have expanded our mobile development practice from a few developers supporting other competencies to a growing team that specializes in mobile application development. As a consulting group, we have had the unique opportunity to see how demand for mobile apps has shifted over time and how the tools for app creation have evolved.
Today, organizations have a wide variety of choices when they are setting out on the path to build a new mobile app (or update an outdated one). Based on our collective experience working on mobile apps, we’d like to offer our perspective about some of the pros and cons of popular frameworks that are currently in the highest demand, including:
- Indigenous iOS and Android apps
- Xamarin mobile apps
- React Native applications
- Flutter apps
Indigenous Mobile Apps for Android and iOS
“Indigenous” mobile apps include iOS apps written with Objective-C or Swift and Android apps written in Java or Kotlin. These are the official toolsets supported by Apple and Google, so this is as close to the metal as you can get when writing an app. As soon as a capability is added to one of these software development kits (SDKs), you can start using it in your app. These languages and SDKs are well documented, and development teams will be able to take full advantage of all the functionality of each operating system if they write a mobile app utilizing its SDK.
However, many brands (wisely) want to ensure their application is available across multiple platforms so they don’t alienate a large segment of their consumer base. For example, in late 2019, Google Android held over 51% of market share in the United States, while Apple iOS held about 47%. At the same time globally, Android accounted for 74% and iOS for approximately 25% of mobile operating system market share. Even if most of your current user base utilizes one type of device, you will be excluding some of your users — not to mention closing the door on growth opportunities on the other system.
Unfortunately, creating an indigenous mobile app for both iOS and Android means organizing the app in separate codebases, using different patterns, and potentially working with separate teams for each supported operating system. iOS and Android development require different approaches, so it is often easier to have team members focused on one app at a time. This may result in different release cycles based on the complexity of solutions for each operating system.
Often, the capabilities of the operating systems are slightly different, so the app may look or function differently on Android and iOS as well. Depending on the goals for the app, you may want it to have a distinct look and feel on each operating system, but this has additional implications for up-front and ongoing UI/UX design efforts.
Looking for iOS and Android Developers?
When looking for talented developers for indigenous apps, we have found that these individuals are often highly specialized in one platform or the other. Because of the different architecture and design patterns for each operating system, developers tend to prefer one over the other and stick to what they know and like. This drives them further toward that specialization. In most cases, these talented mobile developers are adept at learning cross-platform frameworks thanks to their domain expertise. But it’s often easier for Android or iOS developers to move into cross-platform development than to completely switch platforms.
Our mobile dev team at Vervint, for example, has experts with backgrounds in iOS, Android, web development and a wide variety of other niches. Indigenous development is one of our core competencies, but most businesses are interested in cross-platform development.
Xamarin Mobile App Development
To avoid the redundant or duplicate effort of creating two separate mobile apps, one solution is to add a layer of abstraction. This enables developers to share a codebase between iOS and Android apps via a different platform, such as Xamarin. At its core, Xamarin is an open-source toolset for building native iOS and Android apps with .NET and C#. Developers can use Xamarin to write apps in C# and compile them to native apps for each platform.
New cross-platform mobile development tools emerge and fizzle out every year, but Xamarin has been operating since 2011 (and in slightly different forms earlier). It is an established, mature platform. This means frameworks and patterns are well documented and can often be used across both iOS and Android apps. Xamarin also leverages native controls, so a Xamarin app will have the native look and feel users expect on their device. In simplistic terms, you can think of Xamarin as a C# wrapper for the iOS and Android SDKs. Anything you can do indigenously, you can also do with Xamarin.
Using Xamarin without any additional libraries, developers can share business logic and other code that isn’t specific to iOS and Android operating systems. To take full advantage of Xamarin, though, you’ll want to share code all the way through the UI level using a library called Xamarin.Forms. This allows developers to write frontend code for iOS and Android at the same time. Xamarin.Forms offers a subset of each operating system’s capabilities that can easily be extended to include platform-specific implementations (see this post for some examples).
At Vervint, we’ve had great success on a wide variety of projects creating cross-platform apps with Xamarin.Forms. Some important benefits associated with using Xamarin.Forms include:
- We’ve seen upwards of 95% code shared across iOS and Android using Xamarin.Forms.
- Functionality can be built by a single team and released for both Android and iOS at the same time.
- Forms is highly extensible and can accommodate beautiful, custom design.
In short, we don’t have to sacrifice functionality or design for the sake of sharing code.
At Vervint, the primary challenges we face with Xamarin stem from the development environment and workflow. Because Xamarin apps are compiled, there is a slower feedback cycle between making changes and testing those changes compared to other frameworks like React Native or Flutter. Working with simulators helps, but until the recent addition of Hot Reload for Xamarin.Forms, making pixel-perfect UI adjustments was a bit slower than most web developers are used to.
Currently, the only viable integrated development environments (IDE) for Xamarin development are Visual Studio for Mac or Visual Studio on Windows with a network connection to a Mac build agent. Visual Studio for Mac has improved tremendously over the last few years but still lags behind Windows’ Visual Studio or VS Code in functionality and extensibility. The IDE and tools within VS for Mac are actively in development and evolving, but because of its nature as an abstraction of the SDKs, VS for Mac seems to always be slightly behind the functionality available in indigenous development.
Do You Need Xamarin Developers?
Lately, we have seen significantly more demand from clients who want to build an app with Xamarin. Some of them simply can’t find qualified, experienced Xamarin developers. This may be due to this skillset’s high demand in an app-driven digital market or because Xamarin is no longer the trendiest cross-platform framework for new developers to learn. Regardless, we’ve had the opportunity to teach Xamarin to a variety of developers with different experience levels and grow our mobile app development team.
When it comes to developers with a background in mobile apps versus developers with experience in .NET development, we have found that mobile developers tend to have an easier time learning Xamarin. This speaks to some of the common patterns and unique aspects of mobile development which are shared by Xamarin.
React Native Mobile App Development
As with Xamarin, we’ve seen a rising interest in and demand for React Native as a framework for cross-platform mobile development. Like Xamarin, React Native allows developers to share a codebase between iOS and Android apps. It also uses native controls to ensure a familiar look and feel for users. React Native uses much of the syntax and patterns of React web apps, so ideally a development team can share business logic code between its mobile and web apps. React Native is made up of modular components that can be combined into complex systems to build up the app’s functionality.
Compared to Xamarin, React Native is one additional layer of abstraction further away from the native SDKs. This is great for getting started building a user interface, especially because it gives developers the ability to see UI changes as soon as they make a change in the source code. However, some of the finer details of the user experience can be tricky to nail down after an initial iteration because there are more layers of abstraction to get through before hitting the native controls. There are plenty of libraries to implement common designs and functions for mobile apps, but this support is less mature than what exists for indigenous or Xamarin development. For things like maps, location services, Bluetooth or even native page navigation, you could need to roll out your own implementation if none of the existing libraries meet your requirements.
Looking for React Native Mobile App Developers?
At Vervint, our experience with React web apps, indigenous mobile apps, and other cross-platform frameworks has given us a solid foundation for building React Native mobile applications.
Cross-Platform App Development With Flutter
Flutter is Google’s solution to cross-platform development. And it has a very different approach than Xamarin or React Native for the user interaction layer. Similar to React Native, Flutter uses reactive functional patterns, but it renders the UI differently. Instead of using native controls for UI components, Flutter treats the UI as a canvas and draws its own controls that can look and feel native. Flutter offers a wide range of base controls, but developers can extend these based on the UI/UX designs for the app. This gives developers full control of the user experience because they are less tied to the native look and feel of the operating system. Flutter also offers fast reload, so developers can quickly test and iterate on the UI.
Flutter’s limitations are similar to React Native’s. Because it is one level of abstraction further removed from the metal, some functionality might require third-party libraries or custom implementations. Flutter is also younger than React Native or Xamarin, so it is more likely that developers will hand roll implementations for OS-specific functionality like Bluetooth or location services, especially in complex use cases. Flutter components are written in Dart, which may be an advantage or disadvantage depending on the experience of your development team.
There is major excitement about Flutter within Vervint and in the broader mobile development community. Its StackOverflow presence is already approaching the size of Xamarin’s or React Native’s. Flutter has been designed to grow from a single device interface to an ambient computing environment. Google’s goal is that Flutter can be used on every screen: all mobile devices and eventually desktop computers, web browsers and even connected products like Google’s own smart clock. There are continuous updates to the tooling and functionality for Flutter, and we are excited to see where it goes.
Vervint: Your Mobile App Development Partner
The landscape of app development, mobile technology capabilities, and end-user expectations continues to shift. As a consultancy, we work closely with our clients to ensure that the selected framework is the right fit both for their specific needs in the short term and for the full lifetime of the app. If you’re considering the best framework for building a mobile app or looking for a partner to help build it, let’s talk!