When considering iOS or Android app development, most of us think about Objective-C/Swift, and Java first of all. Being considered native tech stacks, they are naturally most often used mobile development tools when it comes to iOS and Android app development. However, there are more ways to build performant and user-friendly mobile apps. And Xamarin is one of them.
What Is Xamarin?
It’s impossible to ignore Xamarin when talking about the key approaches to mobile application development. Being a comparatively new tool, it is based on the Microsoft technology stack and already has a community of over 1.4 million developers.
The platform was built by the developers behind Mono, an open source development platform based on the .NET Framework, which was first introduced in 2001. However, unlike its predecessor, Xamarin was created as a commercial project until after the company was acquired by Microsoft.
Xamarin is a unique tool that uses a single language, C#, to create apps for all mobile platforms. Unlike interpreted solutions, such as Appcelerator Titanium, Xamarin is natively compiled, which makes it a go-to option for building high-performance apps with native look and feel.
Technically speaking, Xamarin uses C# and native libraries wrapped in the .Net layer for cross-platform app development. Such applications are often compared to native for both iOS and Android mobile development platforms in terms of performance and user experience.
While the code related to business logic, database access, and network communication can be shared across all platforms, Xamarin allows you to create platform-specific UI code layer. Thus, Xamarin cross-platform apps look 100% native on any device, providing better user experience, as compared to generic hybrid apps.
The platform has two major products: Xamarin.iOS and Xamarin.Android. In case of iOS, the source code is compiled directly into native ARM assembly code (Ahead-of-Time compilation), whereas Android Xamarin apps are first compiled down to Intermediate Language and then – into native assembly code at runtime (Just-in-Time compilation). However, in both cases the process is automated and tailored to handle such issues as memory allocation, garbage collection, and platform interoperability by default.
Being an efficient and simple approach, it is still no panacea. As any other technology, Xamarin has its own benefits and drawbacks, which have been a subject of a heated discussion recently. To make an informed decision about Xamarin vs native development, let’s weigh all the pros and cons of app development with Xamarin.
Pros of Using Xamarin for Development
There are good reasons why Xamarin is used by numerous companies, including Trello, Slack and GitHub.
⊕ One Technology Stack to Code for All Platforms
Xamarin uses C# complemented with .Net framework to create apps for any mobile platform. Thus, you can reuse up to 96 percent of the source code speeding up the engineering cycle. Xamarin also does not require switching between the development environments as it works with both Xamarin IDE (for Mac) or Visual Studio (for Windows). Although many developers argued about the quality of support provided by both IDEs, Xamarin Visual Studio integration has been largely improved since the company’s acquisition by Microsoft. The cross-platform development tools are provided as a built-in part of the IDE at no additional cost.
⊕ Performance Close to Native
Unlike traditional hybrid solutions, based on the web technologies, a cross-platform app built with Xamarin, can still be classified as native. The performance metrics are comparable to those of Java for Android (as explained here) and Objective-C or Swift for native iOS app development. Moreover, the efficiency is constantly being improved to fully match the standards of native development. Xamarin platform offers a complete solution for testing and tracking the app’s performance. Its’ Xamarin Test Cloud paired with Xamarin Test Recorder tool allow you to run automated UI tests and identify performance issues before the release. However, this service is provided at an additional fee.
⊕ Native User Experiences
Xamarin allows you to create flawless experiences using platform-specific UI elements. Simple cross-platform apps for iOS, Android or Windows are built using Xamarin.Forms tool, which converts app UI components into the platform-specific interface elements at runtime. As the use of Xamarin.Forms significantly increases the speed of app development, it is a great option for business-oriented projects. Yet, there might be a slight decline in performance due to the extra abstraction layer. For custom app UI and higher performance you can still use Xamarin.iOS and Xamarin.Android separately to ensure excellent results.
⊕ Full Hardware Support
With Xamarin, your solution gets native-level app functionality. It eliminates all hardware compatibility issues, using plugins and specific APIs, to work with common devices functionality across the platforms. Along with the access to platform-specific APIs, Xamarin supports linking with native libraries. This allows for better customization and native-level functionality with little overhead.
Xamarin Cons to Consider
However, there are still some drawbacks that can cast a shadow upon Xamarin.
Θ Expensive Xamarin License
Business subscription comes at the annual fee of $999 per developer, per device platform, which might seem a little too high if you plan to create only one small app. For example, it will cost you almost $10,000 annually to run a team of five engineers, each building apps for iOS and Android. However, if you are going to build other cross-platform mobile solutions in the future or provide Xamarin app development services, Xamarin license would be a good investment compared to the development cost of native apps.
UPDATE: Since its acquisition by Microsoft, Xamarin has significantly changed its pricing policy. It is currently being provided at no cost for all Visual Studio users and will soon be completely open-sourced. Thus, this disadvantage is no longer valid.
Θ Slightly Delayed Support for the Latest Platform Updates
This depends completely on the Xamarin developer team. It’s impossible for third-party tools to provide the immediate support for the latest iOS and Android releases: it takes some time to implement the changes and/or introduce new plugins, etc. Although Xamarin claims to provide same-day support, there still might be some delays.
Θ Limited Access to Open Source Libraries
Native development makes extensive use of open source technologies. With Xamarin, you have to use only the components provided by the platform and some .Net open source resources, facing both developers and consumers. While the choice is not quite as rich as it is for Android and iOS mobile app development, the Xamarin Components provide thousands of custom UI controls, various charts, graphs, themes, and other powerful features that can be added to an app in just a few clicks. This includes built-in payment processing (such as Stripe), Beacons and wearables integration, out of the box push notification services, cloud storage solutions, multimedia streaming capabilities and much more.
Θ Xamarin Ecosystem Problems
Obviously, Xamarin community is significantly smaller than those of iOS or Android. Thus, finding an experienced Xamarin developer could be a challenge. Although the platform is growing its following fueled by the support from Microsoft. Based on the info from different sources, Xamarin community makes 10 percent of the global mobile development society. Despite the fact that the number of Xamarin engineers does not compare to iOS or Android native communities, the platform provides extensive support to its developers. Namely, there is a dedicated educational platform, Xamarin University, that provides resources and practical training for those who are new to this technology. Using this support, the learning curve for an experienced C#/.Net engineer is minimal.
Considering Other Options: Xamarin vs Native iOS/Android vs Hybrid Development
Recently, many developers tend to agree that Xamarin can be considered “native” development tool. Indeed, there is an opinion that “anything that can be done in an iOS application using Objective-C or Swift, and anything that can be done in an Android app using Java, can be done in C# using Xamarin.”
Yet, there are many pitfalls in native vs Xamarin debate. Let’s see how the Xamarin compares to the native development tools and hybrid development platforms (Ionic, PhoneGap/Cordova).
Although hybrid mobile development tools are evolving quickly, they still lack the performance and native capabilities that Xamarin offers at roughly the same cost. When considering the two approaches, the most popular dilemma is Xamarin vs Ionic or Xamarin vs React native. However, the latter tends to lose due to a number of restrictions in the underlying technologies (web stack).
This approach fills the gap between native and hybrid development, similar to the way Xamarin does. The main difference between the two tools lies in the programming languages they use. So Xamarin vs NativeScript comparison should be a subject of a more detailed research.
At the same time, Xamarin vs native Android/iOS development debate seems to be even more complicated: Both options prove to deliver value in terms of product quality and performance, the choice typically depends on the type of application you want to build.
Piece of Advice
When comparing the pros and cons, the listed drawbacks are usually considered to be a collateral damage. Most business owners choose Xamarin mobile app development platform as it decreases the time to market and engineering cost, by sharing the code and using a single technology stack. Yet the purpose of the app and its target audience might be an even more important factor to consider.
Based on our team’s experience, the best use-case for Xamarin is enterprise mobile solutions. With standard UI which covers 90 percent of the projects, all the core product logic can be easily shared across the platforms. Hence, platform customization will only take 5-10 percent of the engineering effort.
In case of consumer-facing apps with heavy UI, the amount of shared code decreases drastically. Thus, Xamarin cross-platform development loses its major benefit and might equal in time and cost to native solutions.