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. If you know the basics, consider skipping to the sections you are interested in.
It’s impossible to ignore Xamarin when talking about the key approaches to mobile application development. Xamarin is a tool used for cross-platform mobile app development that allows engineers to share about 90 percent of code across major platforms. 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, led by Miguel de Icaza and first introduced in 2001. The Xamarin company was founded on May 16, 2011.
However, unlike its predecessor, Xamarin was created as a commercial project until the company was acquired by Microsoft in 2016. Xamarin became a popular cross-platform product for developing mobile apps within the Microsoft ecosystem. This acquisition broke the financial barrier for using Xamarin. As Microsoft made Xamarin SDK open-source, it became part of Xamarin Visual Studio Integrated Development Environment (we discuss best IDEs to use for Xamarin development below). What are the main features of Xamarin?
C# language. Xamarin 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.
Based on .NET framework. C# is a mature language with strong safety-typing that prevents code from unexpected behavior. As C# is one of the .NET framework languages, it can be used with a number of useful .NET features such as Lambdas, LINQ, and Asynchronous programming (Asynk).
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. Additionally, Xamarin can leverage all native and the latest API access to utilize underlying platform capabilities in Xamarin apps such as ARKit on iOS or Android Multi-Window.
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.
Compilation. The platform has two major products: Xamarin.iOS and Xamarin.Android. In the case of iOS, the source code is compiled directly into native ARM assembly code (Ahead-of-Time compilation), while 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.
Xamarin.Forms. Xamarin.Forms is a separate product designed to create prototypes or simple mobile apps sharing 100 percent of the code across iOS and Android.
Xamarin.Mac. Additionally, engineers can use Xamarin.Mac to build applications for Mac OS. These and some other products from the Xamarin stack will be discussed in a bit.
Platform SDKs. Xamarin provides access to platform-specific SDKs (CocoaTouch for iOS and Android SDK) via simple C# syntax.
Platform-specific code bindings. In most cases engineers will be able to handle development keeping the native look and feel of the respective platforms within the Xamarin environment. However, Xamarin allows you to call existing platform code (e.g. Swift for iOS) if you must reuse some modules or realize some platform-specific functions like barcode scanning, PayPal or Google Analytics integration.
Support of wearables. Xamarin supports building apps for Apple and Android Watch devices. Engineers can use Visual Studio both for Mac and Windows to build iOS Apple Watch apps. Also, Xamarin fully supports Android Wear.
Xamarin project structure. Most of the Xamarin-related work is expected to be run via a Windows development computer with Visual Studio and Xamarin installed. The apps can be debugged straight from the desktop or on devices and emulators. If you plan to develop iOS apps on Windows, it’s also possible as Visual Studio connects to the iOS storyboard designer and iOS simulator. There’s also Visual Studio for Mac which allows for running a simulator on the Mac or directly on a tethered iPhone. Debugging is run via Visual Studio.
Xamarin project structure. Image source: Visual Studio Docs
To get more in-depth understanding of Xamarin engineering aspects consider checking these resources:
Main Xamarin Documentation Hub
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.
There are good reasons why Xamarin is used by numerous companies, including Trello, Slack, and GitHub.
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.
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.
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.
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.
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.
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.
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 suggests developers build mobile apps in two ways. The first one is to use Xamarin.iOS and Xamarin.Android, which is considered the main approach. Using Xamarin.Forms, the Visual Studio Library is the second one. Xamarin.Forms allows for rapid prototyping or producing apps with less platform-specific functionality. That’s why Xamarin.Forms is the best fit for apps where code sharing is more important than custom UI. You’ll be able to create a single interface and share it across platforms without designing for each platform individually. You can also build applications where some parts of their user interfaces are made with Xamarin.Forms and the others are engineered using the native UI toolkit.
While Xamarin.Forms remains a compromise in terms of native look and feel compared to Xamarin.iOS and Xamarin.Android, there’s a vibrant community paying attention to this tool. For instance, some tech providers contribute their libraries like Telerik UI that enrich engineering capabilities providing pre-configured UI components.
As Xamarin.Forms is aimed at fast and frictionless development, Microsoft suggests using a Live Player tool. It’s an application installed on actual phones to immediately test and debug your apps without emulator deployment or tethering a device to a workstation. Upon Live Player installation a developer scans a QR-code in Visual Studio using a phone camera, which provides access to a currently developed app. An app on the phone synchronizes in real time with the one in Visual Studio. This drastically simplifies all set up and further debugging procedures.
Xamarin.Mac allows for developing fully native Mac apps using C# and .NET. It integrates with the same libraries that are used for developing in Objective-C with Xcode. By using Xamarin.Mac combined with Xamarin.iOS and Xamarin.Android, developers can share up to 90 percent of native code across Android, iOS, and Mac OS. Furthermore, Xamarin.Mac integrates with Xcode, so a developer can use the Xcode’s Interface Builder to create an app’s user interfaces.
Xamarin University is a dedicated e-learning portal for people who are just getting familiar with the package. University caters to engineers that know C# as well as anyone with a little programming experience. If you just onboard new engineers to your Xamarin-based product, University will provide all essential knowledge. The portal puts forward classes from beginner to advanced levels that include free self-guided learning, live online classes, office lectures, and guest lectures.
However, there are still some drawbacks that can cast a shadow upon the platform. So, why not use Xamarin?
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.
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.
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.
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.
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.
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.
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.
If you have a feeling that Xamarin is right for you, you’ll be interested to know the main Xamarin IDEs that can be used and how they compare with each other.
Visual Studio (VS) is a Microsoft Integrated Development Environment, software used for building, debugging, and publishing applications across all platforms and devices. There are three main Visual Studio Versions for Xamarin — Visual Studio Community, Visual Studio Professional, and Visual Studio Enterprise. The key factors for choosing an acceptable version are the experience of developers (students or professional engineers) and their team size. Programmers can develop software for Web, mobile, server, and desktop with all versions.
Visual Studio Community is a good fit for students, open-source projects, small development teams with up to 5 users. The Community package is also good for teams that are new to Visual Studio. This version is free for use.
Visual Studio Professional is a set of tools and services created for professional developers, small teams, and enterprise use. This version provides powerful features to quickly understand your code: showing code references, changes to your code, displaying who last modified a method, or discovering whether tests are being passed. The professional version includes Team Foundation Server 2017 that provides features such as agile project planning tools, delivery plans, charts, and more. The annual price for this version is $539 per user.
Visual Studio Enterprise has strong support tools and services. They allow for managing complex processes between development and IT operations; tracking quality with manual and automated tracking tools; access to professional trainings; and the entire Microsoft engineering and testing ecosystem. It includes Microsoft extensions for Visual Studio Team Foundation Server and Visual Studio Team Services. In this version, Team Foundation Server provides you with Test Manager, Package Management, and Private Pipeline. The Enterprise Version also has priority support, partner offers, and much more. The annual price for Enterprise Studio is $2,999 per user.
For enterprise use, we also recommend checking the Visual Studio App Center. It’s a tool that organizes app development workflow across different mobile technologies including Xamarin. Here, engineering teams that work on multiple apps can bring their tool set together. It automates app packaging through GitHub or Bitbucket, provides integration for different testing services, enables email app distribution for testing, does crash tracking, and analytics.
Visual Studio Online (VSO) is a set of tools, which allows developers to easily set up continuous integration across different platforms. Continuous integration is a software practice in which all code changes are immediately tested and integrated with the main code base. It helps to check and debug code quickly. This version is likely the most relevant, most interesting one for mobile developers.
If your development team considers transitioning from Android Studio (AS) or Xcode to Visual Studio, the learning curve won’t be that steep. The feature-to-feature comparisons show that the IDEs are very much the same in terms of development flows with little nuances for each of the environments.
From Android Studio to Visual Studio. While Android Studio official support is focused on Java, C/C++, Kotlin, and XML languages, VS supports all major programming languages including those of AS. This is due to the wide spectrum of platforms that IDE caters to. VS provides more engineering freedom and allows for working with different projects from one environment. If you’ve been using the Google Cloud Platform integrated with AS to run virtual machines or just manage projects, Google is kind enough to provide its cloud platform extension for VS as well. Basically, you can use both the Microsoft cloud ecosystem and Google Cloud right from VS. Visual Studio can be installed on all main platforms: Windows, Android, Mac OS, and Linux.
From Xcode to Visual Studio. Xcode IDE, similar to VS, supports source code for all major programming languages. So, there won’t be any surprise after transitioning. Again, if you’ve been tied to Mac OS while using Xcode, Apple hardware isn’t needed for VS. For those, who use CloudKit for server-side storage, Visual Studio and Xamarin allow for simple integration of CloudKit. The main drawback in using VS compared to Xcode is the same: Both Android Studio and Xcode are free to use while VS requires a pretty high subscription fee.
According to developers’ estimates, Visual Studio and Android Studio, both, have mostly the same ease-of-use level and support quality. Comparing the same indexes with VS and Xcode, we can say that VS estimates are a bit better. Also, Visual Studio is more popular among enterprises (>1000 employees) while about 50 percent of Android Studio and Xcode users are small businesses (50 or fewer employees).
Considering Strategy Analytics ranks on mobile development environments, Xcode achieved the highest ranking on testing capacities as did Visual Studio. Android Studio lagged behind. Total scores were: Xcode-22; Visual Studio -21; and Android Studio -13.
Recently, many developers tend to agree that Xamarin can be considered “native” development tool. Indeed, there is an opinion that “a_nything 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 (also 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).
Yet, there is a JavaScript-based mobile development tool that outperforms hybrid solutions, at least in terms of UI. It’s NativeScript. This cross-platform open source framework, backed by Telerik, allows you to implement native UI and connect to native APIs for better mobile experience while using a single code base. Its main difference is that it uses XML markup, which compiles into Android and iOS native equivalents, instead of HTML webview.
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.
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.
However, if you are looking for a Xamarin alternative to build a cross-platform mobile app, you might be disappointed. While the most widely used cross-platform mobile development tools are PhoneGap/Apache Cordova, Ionic Framework, Appcelerator/Titanium, they rely primarily on web technologies, such as HTM5 or JavaScript. That is why none of these tools can have the same level of performance and native functionality that Xamarin offers.
This article is a part of our “The Good and the Bad” series. If you are interested in web development, take a look at our blog post on the
The Good and The Bad of Angular Development
The Good and the Bad of JavaScript Full Stack Development
The Good and the Bad of Node.js Web App Development
The Good and the Bad of ReactJS and React Native
The Good and the Bads of Swift Programming Language
Liked the story? Let us know by clapping so more people can find it! 👏Originally published at AltexSoft’s blog: “The Good and The Bad of Xamarin Mobile Development”