Over a month ago, I made a post on the (then) UrhoSharp sub-forum pointing out the obvious, that UrhoSharp, like many other Xamarin projects before it (CocosSharp, SkiaSharp, Visual Studio Android Emulator, Xamarin Studio, Forms Previewer and I'm sure there are a bunch more since I've only been using Xamarin for a year) had apparently been abandoned because .NET Standard support still hadn't been implemented for UrhoSharp a year after Miguel's promised deadline.
Surprisingly, Miguel de Icaza actually responded and said that the developer responsible for UrhoSharp (Egor) had been misallocated and said "On Standard, Egor was going to take a look last week, we should have an update soon." (notice the weasel words and lack of a specific deadline). It has now been another month, still without a .NET Standard UrhoSharp release. Looking at Github, Egor checked in a few hundred lines of mostly auto-generated changes (i.e. changing a property in the Project Properties page) by November 12th. It has sat there ever since, supposedly waiting on a broken Continuous Integration build server).
Personally, if one of my developers took two weeks to make a bunch of Property page changes and then spent weeks doing nothing, blaming it on their Continuous Integration server, instead of just manually doing a NuGet build and release, I would fire them, but hey, that's how I roll.
Anyway, the main purpose of this post is not to bash the Xamarin team, but rather to warn people contemplating using Xamarin about what they should know before they take the leap (and more specifically, why I don't think things will ever change).
In my previous UrhoSharp post, I mentioned a Docker rant that I had read and noted that if you replaced the word 'Docker' with 'Xamarin', it would be equally true:
"The Docker release cycle is the only constant in the Docker ecosystem:
1. Abandon whatever exists
2. Make new stuff and release
3. Ignore existing users and retro compatibility"
“We make software not for people to use but because we like to make new stuff.” — Future Docker Epitaph
My first experience with Xamarin a year ago was this. I installed Visual Studio and the Xamarin frameworks, ran the new project wizard and hit 'Build'. Normally this type of 'Hello World' project would compile in seconds. Instead, I got this error:
"Build action 'EmbeddedResource' is not supported by one or more of the project's targets"
Thus began the first of endless trips to the Xamarin Forums and StackOverflow. Can you believe that? Six years after Xamarin was formed, the new project wizard STILL didn't work. And that's just the beginning. The first reply to 90% of the help requests on these forums start with "Quit Visual Studio, delete all project 'bin' and 'obj' folders, and restart Visual Studio". Does that sound like a seven-year old 'mature' product or an alpha release?
If you look at the bug counts for Xamarin, Xamarin Forms, UrhoSharp, etc, etc, etc, they only go up over time. Xamarin Forms is now up to 935 open bugs. A couple of years ago, that number was 600. Simply put, there is no desire to do the 'boring' work of making Xamarin reliable. It is why so many open-source projects are useless - The developers are only interested in the 'glory' of being the acknowledged creator of something new and working on the fun parts. When it comes to the boring bits of bugfixes, testing and documentation, well, that's for the 'community' to do.
Anyway, this got me to thinking about why, two years after Microsoft bought Xamarin, nothing has changed. And I believe I know the answer. Sit down, cause here comes the answer and it's going to blow your mind.
Microsoft doesn't want Xamarin to succeed.
Think about it. Right now, Microsoft has everything they want from Xamarin. And the Xamarin devs have everything they want as well. Let me explain.
First off, Microsoft's point of view. With Xamarin (and Mono), Microsoft gets to virtue-signal to the moon. "Look at us! We're so great! We're open-source and cross-platform and magical unicorns graze on the Microsoft campus! We're nothing like the bad old Steve Ballmer anti-trust monopoly Microsoft! This is the new kind and gentle Microsoft that saves the rainforests and serves organic vegan free-range hummus in our cafeterias!"
Secondly, from the Xamarin devs' point of view. They get paid to play all day! How can you beat that? Their recent blog post announcing Xamarin Forms 3.3 was FILLED with examples of all the "community contributions". How awesome is that? You get to collect a fat paycheck from Microsoft while letting annoyed Xamarin users fix their own bugs! It's having your cake and eating it too.
Now the question you may be asking yourself is: Why would Microsoft allow this? No self-respecting company (other than Google and Apple) would want its employees to collect a paycheck for doing nothing all day.
Microsoft doesn't want Xamarin to succeed.
Think about it. If Xamarin was bug-free and easy and reliable to use, then people wouldn't be shackled to Windows. They'd just write their app once and start running it on Mac, iOS, Android and (horrors!) ChromeOS.
Right now, Xamarin is perfect for Microsoft. They get to tout how open-source and cross-platform friendly they are while knowing that anyone who actually tries to write a cross-platform app using Xamarin will be punching holes through their monitor(s) with their fists in no time. If Xamarin and/or Microsoft were serious about this making this product useable, there would be a full-time dev solely devoted to debugging and closing bug reports. And WFP XAML and Xamarin XAML would be merged so that you could actually use a GUI forms designer like Expression Blend instead of using 'code' to create UI's. In 2018! Can you believe that?
Anyway, this rant has gone on long enough. For quick demo's whipped up for Marketing that must be cross-platform, Xamarin is okay. For any production (or God-forbid, mission-critical) app, forget it. Any time you save from avoiding maintaining three different codebases will be eaten up on endless debugging and workarounds. And that is not even mentioning the flakiness and random crashes.
Personally, for myself, I am going to be spending the next six months migrating my Xamarin Forms app to separate native iOS, Android and WinForms versions. I was never happy about Xamarin's lack of support of Windows 7 & 8 but was willing to live with it. But I've reached my threshold of pain and it's time to make a clean break. I've looked into the other cross-platform solutions and they're all cr*p - Flutter, PhoneGap (what a joke), etc. And this is coming from someone who LOVES C# and Visual Studio. Anyway, I hope this helps someone else. I wish I had known what I know now before I jumped in head-first.