What is our primary use case?
I need to use Visual Studio to use Xamarin. Xamarin is the platform, and Visual Studio is the IDE. I use Visual Studio 17.6.2 Community Edition for Mac.
The organization I'm working for is a retail company. We have hundreds and hundreds of stores across multiple countries and regions in the Middle East and Asia. The app I develop, build, and enhance is used by about 30,000 to 40,000 store employees across all these stores. It's a store management app that has a huge amount of functionality built into it. It can do inventory management, store receiving, and customer management. We built the app using Xamarin.Forms.
We not only have external people who use our app, but we also have in-house house people, especially store employees, who use the app, and that's where the MDM solution, Microsoft Intune, comes into play. Microsoft Intune is more for distributing the app internally to our store employees. It's a device management kind of thing. The apps automatically get upgraded without users being required to update the app. Intune does a whole lot of other things, like match policies or devices.
How has it helped my organization?
Xamarin.Forms reduced the effort and time to build and market our solution, market our features, and get our solution into production. We have Android and iOS. When using Xamarin.Android and Xamarin.iOS, we have to write the same solution two times, one for each platform. But with Xamarin, if we write the solution once, it will run on both platforms. We can reuse as much as 90% to 95% of the code, which, in our case, was written in Xamarin.Forms to be used across both Android and iOS. The other 5% we wrote needed to be tailored for the specific platform. Suppose we want to create some niche or some specific features that are not available in Xamarin.Forms would be the 5% we need to write for each platform. Xamarin.Forms help reduce the effort required to build across platforms and solutions and time to market.
What is most valuable?
One of the major benefits of Xamarin.Forms are that you can write once and run anywhere. A valuable feature is that you write UI using XAML, something like HTML, except that XAML is Microsoft technology, which helps you write and build mobile interfaces. XAML is a mature technology. The good part of Xamarin is that if you use it to build something cross-platform but find that that's not available out of the box, you can extend Xamarin using many features, like dependency services and custom vendors. You could use those to tailor your solution for a specific platform. For example, suppose you want a feature to be implemented in Android and iOS differently than in a standard implementation. In that case, many features are available in Xamarin to facilitate that. A simple example would be that if you want a page to look different on Android and iOS, Xamarin can easily do that.
What needs improvement?
There are issues with Xamarin, such as when you run into errors doing something called linking. When you build your solution, you can use Linker, which can give you errors if you don't link properly. However, the major I see with Xamarin right now is that there is no visual editor. For example, Android Studio or Xcode have visual editors where you can drag and drop controls. If you are designing a mobile screen with an image, some text, and a button, you could just drag controls from the library into the screen and see how they look. But there is no feature in Xamarin, and you have to write code.
For how long have I used the solution?
I've been working with Xamarin Platform for the last seven years.
What do I think about the stability of the solution?
I rate Xamarin's stability an eight out of ten.
How are customer service and support?
Customer support takes time. They're not very responsive.
How would you rate customer service and support?
How was the initial setup?
The initial setup for App Center was easy. I rate it a seven out of ten. AppCenter is primitive. Some solutions, like Azure with the DevOps pipeline, have much more functionality. However, App Center does the job for us. Once you release it to production, you can configure App Center to build your solution and release it to stores like the App Store and Google Play.
Setting up the developer environment could take about half a day because you must set up the IDE, Microsoft Visual Studio. For Android, you have to get all the SDKs. Xamarin also cannot work without Xcode, the development IDE for iOS, so you must also set that up. Xamarin works on .NET Framework, which you download as part of the IDE installation.
What about the implementation team?
We just required one person for the deployment since it's automated. Once we triggered the deployment, App Center took care of that. We need teams of Xamarin developers to build, enhance, and maintain the app. One person is not enough to maintain the app, but that depends on the scale and complexity of the app.
What's my experience with pricing, setup cost, and licensing?
You can build in Xamarin without paying any money. What costs money is the IDE, Visual Studio, Professional, or Enterprise edition. What would cost you money if you're building apps for the Apple Store is the Apple developer fee, which is $99 per year. If you release the app to the Play Store, you have to pay $25. But Xamarin's license is free.
Which other solutions did I evaluate?
Other solutions like React Native and Flutter also help you write code once and then run it on multiple platforms like Android and iOS. They do that without requiring you to write the same solution for each platform, which involves duplication or complication of effort.
What other advice do I have?
Xamarin comes in various flavors. At the technical level, we use something called Xamarin.Forms, which is the most popular flavor of Xamarin. You also have some older flavors like Xamarin.Android and Xamarin.iOS. Those are specifically targeted for native app development, whereas Xamarin.Forms are more for cross-platform app development, where you can write code once, and it will run on all supported platforms like Android and iOS.
However, Xamarin will be "decommissioned," though that's probably not the right word because Microsoft has introduced something called MAUI as a successor to Xamarin.Forms. Microsoft acquired Xamarin, built on top of it, and introduced many features after they acquired Xamarin. Xamarin has some flaws, but since it's been there for eight to nine years, there are known workarounds for existing issues found through the developer community. On the contrary, MAUI is a new product full of bugs because it was introduced very early. It's an extremely buggy solution introduced by Microsoft, which is why, if you do some research, you will discover that there are currently no enterprise solutions that use MAUI. Microsoft is then going to lose its limited foothold. Even though MAUI was introduced more than a year ago, there has been no large-scale adoption by any enterprise. Microsoft is kind of forcing all these companies to move from Xamarin to MAUI, but none of them are willing to do that because it's such a poor product, including my organization. However, the first two or three iterations of Microsoft's products were full of bugs before they radically overhauled their solutions. MAUI is useful for small hobby projects or individual developers who want to play around with mobile development. Many of these organizations will now move to other solutions like React Native, an open-source solution from Facebook, or Flutter from Google. Likewise, they might choose native solutions like Android Studio with Kotlin or iOS with Xcode.
Xamarin has a very limited market share in the mobile development space. There are hardly any job openings for Xamarin. On some sites, there would be fewer than 50 job openings for Xamarin. By contrast, with React Native, you would find the number of openings for it to be much more than Xamarin. The same goes even if you search for something like iOS or Android. This suggests that Xamarin is used by a very small percentage of enterprise clients.
We use App Center when deploying the solution, and it automates deployment. Likewise, If you want to update the version of the app on the Apple Store or Google Play, you just have to trigger a build on App Center, and then it takes care of building and deploying the app to the App Store or Google Play.
I rate Xamarin a five out of five. The way I see it right now is that there are three big players in the market for cross-platform development. We have Flutter offered by Google, React Native offered by Facebook, and Xamarin offered by Microsoft. If React Native would be eight in popularity and adoption, Xamarin would be maybe five point five or five out of ten. Flutter is a relatively new technology, but it's picking up very rapidly. It has already surpassed Xamarin or will surpass it very soon. Xamarin will retire in a year or so, and MAUI is in bad shape. I expect Flutter and React Native to be the two most popular technologies for cross-platform mobile development.
Which deployment model are you using for this solution?
On-premises
*Disclosure: I am a real user, and this review is based on my own experience and opinions.