The Good and The Bad of Xamarin Mobile Development
When considering iOS or Android app development, most of us think about Objective-C vs 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. In this article, we conduct an in-depth Xamarin review and compare it to native and cross-platform mobile development solutions on the market.
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: You can build all of your Xamarin apps in Visual Studio which completely replaced Xamarin Studio. 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, Xamarin performance 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.
⊕ Open Source Technology with Strong Corporate Support
After the company was acquired by Microsoft in February 2016, Xamarin licensing policies underwent radical changes. Xamarin SDK, including runtime, libraries, and command line tools, has become open source and available for all under the MIT license as a part of Visual Studio. By eliminating the major barrier, the cost of license, Microsoft paved the way for the further growth of the platform. Plus, headed by Microsoft, and supported by Unity, JetBrains, and Red Hat, the .NET Foundation in general and Xamarin specifically has become a reliable and powerful tech stack.
⊕ Simplified Maintenance
Due to its cross-platform application, Xamarin makes maintenance and updates easier. You can simply deploy the changes or updates to the source file and they will be applied to both iOS and Android apps. However, this works only for the applications that use Xamarin.Forms or the business logic, shared code, updates for Xamarin.iOS and Xamarin.Android apps. Thus, it helps you save your time and money while keeping your apps up to date.
⊕ Complete Development Ecosystem
Xamarin comes in one package with a complete development toolset, including its own IDE (Xamarin Studio that is now replaced by Visual Studio), the platforms itself (Xamarin SDKs), testing (Xamarin Test Cloud), distribution and analytics (Hockeyapp and Xamarin.Insights) platforms. Thus, you don’t need to invest in additional tools or integrate the third-party apps to build, test and deploy your Xamarin apps.
Xamarin Cons to Consider
However, there are still some drawbacks that can cast a shadow upon Xamarin.
Θ 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.
Θ Basic Knowledge of Native Languages Required
When using Xamarin.iOS and Xamarin.Android to build mobile apps with truly native look and feel, you will still need to write a platform-specific layer of code. Thus, at least a basic knowledge of native technologies (Java/Kotlin for Android and Objective-C/Swift for iOS) is required. This, however doesn’t apply to Xamarin.Forms.
Θ Not Suitable for Apps with Heavy Graphics
Xamarin’s main benefit is the ability to share your code across the platforms. Yet, you can only share the logic, UI code will be mostly platform-specific. This makes building games, rich custom UI, or complex animations in Xamarin pretty pointless. With a small amount of shared code, Xamarin becomes unviable option.
Θ Larger App Size
Depending on their type and complexity, Xamarin apps are typically larger than native ones (the latter might be half the size of a Xamarin app). A simple “hello, world” app for Android might take up to 16 MB, much of it being used by the associated libraries, content, Mono runtime, and Base Class Library (BCL) assemblies.
Source – developer.xamarin.com
Thus, Xamarin apps usually need additional optimization to keep the app file size reasonable.
Θ Compatibility Issues with Third-Party Libraries and Tools
There might be some issues when integrating third-party resources with your Xamarin app. While most of the tools and libraries offer full support for native technologies, Xamarin compliance might not be provided by the vedor. Although, Xamarin has its own components store, there is always a chance that you might need a specific capability or integration within your app that are not provided by the platform.
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. We’ve defined the pros and cons of React Native and ReactJS in a different post. When considering the two approaches, the most popular dilemma is Xamarin vs Ionic or Xamarin vs React Native (see our story on pros and cons of ReactJS and React Native for a full explanation of the framework). 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.
To read more about mobile app development tools and technologies, download our recent whitepaper “Pros & Cons of Native vs Cross-Platform Mobile Development with Xamarin“ here.