If you are a mobile app developer you will eventually be faced with the decision of choosing the right tool set to develop cross-platform mobile apps.
Native? Hybrid with Cordova or HTML5 (Sencha Touch, KendoUI, JQuery Mobile) framework?
Each framework has its own merits and problems but there is no question that pure native apps offer the best of all metrics. Depending on your coding skills, native apps are the best looking and provide top user experience by leveraging all device capabilities and ensuring the app subscribes to the platform paradigms. The app feels and behaves native to the device because that’s exactly how it was designed.
Xamarin is a cross platform mobile solution that allows one shared C# codebases and separate platform-specific user interfaces also in C#. The idea is having hybrid apps with native interfaces that share business logic, data access, networking code etc. Now, you can potentially reuse your business logic since everything can be coded using a single, common programming language instead of three, but this really only applies to business logic code, and business logic code alone.
The amount of code sharing and C# components available is extensive, but when looking into this approach take into account type of system complexity, agility you require. This will be a large factor in your decision. The cost of building a mobile app is really a simple case of platform specific versus cost.
Do you really want your app to look like all the other apps on the device? Consider the following Xamarin breakdown when faced with such a decision:
- Xamarin apps are built in overhead which makes them a few megabytes larger in size, and this can grow proportionately as the code uses more of the APIs. This is due to the way code from .NET assemblies is statically linked (as native code) into apps as the assemblies are referenced.
- The larger size affects download time and storage used on a device.
- User Interface development is not portable between iOS and Android.
- Time consuming aspects such as APIs, event logic, widgets and designers must be used and coded differently for each platform. Despite the argument that trying to abstract UI APIs across different platforms can create unnecessary complexity or lead to poor UX with a lowest common denominator design, for most mobile UI problems, Xamarin will not save developers or designers any time.
Limited Code Sharing
- Xamarin does not allow creation of reusable components or modules outside of its own environment. Code written in Xamarin cannot be used in native or HTML 5 apps.
Lack of Support
- The available support, service and 3rd party components, and related tooling is significantly smaller that for native or HTML5 based apps.
- Concepts and techniques specific to Xamarin require special knowledge adding a third learning curve for developers beyond programming language and native APIs.
To be fair, Xamarin never promises that UI work won’t be repeated. It allows developers to write true native apps leveraging native UI paradigms that share business logic. In the end, try and quantify the benefits of development abstraction such as language. Would you rather use C# or Objective-C? In a technology era, things can change fast and although it may appear cheaper in the beginning, remember if that experience is poor then the end user will think poorly of the company.