DEV Community

Tom O
Tom O

Posted on • Updated on

Looking to learn Xamarin.Forms? Think again.

Disclaimer: This is just my opinion. Do not take it to heart; but rather with a grain of salt.

Second Disclaimer: The Xamarin.Forms community is one of the best I've seen in my life. And I fully acknowledge and appreciate the fact that the Xamarin.Forms team is small. I appreciate every single hard-working developer on the team. Thank you from the bottom of my heart.

I am sitting here in my chair, embarking on learning Kotlin and later native Android development. I snapped, I was tired of Xamarin.Forms.

Why was I tired of Xamarin.Forms? Let's have a look at 4 reasons why I quit:

1. Xamarin.Forms apps are impossible to customise:
With Xamarin.Forms apps, you use 'XAML' to customise the UI - it's basically like XML. This is not just regular XAML (which is actually fairly malleable with WPF), this is a different type of XAML only used with Xamarin.Forms.

This XAML flavour is very limiting. Apart from the basics (such as background colour, etc.), it is hard to customise a control with plain Xamarin.Forms-XAML.

Let me tell you something: changing a button's text to lowercase was only possible with custom renderers until one of the newest versions. What are custom renderers, do you ask? Xamarin.Forms controls are not rendered natively, they are passed through a renderer and then, they will be converted into a platform-specific control.

If you want to customise a control, you would need to create your own custom renderer. This means you need to create your own class and extend the base renderer. It also requires additional code, which is a nuisance in my opinion just to change a button's text to lowercase.

If you are looking to create a full-scale application, it may require tens of custom renderers. This is a lot of work, and hard to maintain.

2. Xamarin.Forms apps are incredibly LARGE and slow:
Now, I understand that many people don't think Xamarin.Forms apps are slower than native apps; but in my opinion, yes - they are slower.

On to the main topic: Xamarin.Forms apps are EXTREMELY large. If you create a basic app with nothing inside of it, it can easily be up to 50 MB in size. This is obviously because of the whole layers of abstraction and rendering that needs to be performed (I am just assuming).

I was launching my apps on an old phone with barely any storage. Every time I created a new app, I had to delete the old apps I had created just because I had literally no space left on my phone.

3. The Xamarin.Forms previewer is buggy!
The Xamarin.Forms built-in previewer is practically useless in many scenarios. In the newest Xamarin.Forms, you can change a button's text to lowercase. But - the thing is - you cannot even see these changes until you've actually launched the app on your phone. Only with a custom renderer can you see the changes in the previewer, but even that sometimes is buggy.

I do admit, you could use Vysor to share your phone screen on to your computer. Except you would need to pay for the full version for better quality.

4. Xamarin.Forms is buggy. Period.
As a Xamarin.Forms developer, I encountered around 5, 10, or even 20 bugs a day. This is one of the core reasons I stopped using Xamarin.Forms: Even though it's passed years after it was initially released, it still feels as though it was created yesterday.

Xamarin.Forms - in my opinion - is still immature. You could say it's like a child: it has a lot of growing up to do. The core concept is great: Cross-platform mobile development with up to 95% code reusability (not only iOS and Android but also Tizen - and in the future - desktop and macOS) but it comes at a cost; and everyone who wants to learn Xamarin.Forms should be made aware of these costs.

I heard someone sum it up nicely: Xamarin.Forms creates more problems than it solves them.

Xamarin.Forms is good for cross-platform business-oriented applications that are need to be shipped fast - regardless of how ugly the UI is.

And honestly, there are so many things I love about Xamarin.Forms. I love how it's built upon the .NET framework. You get all the benefits of C#. Using MVVM with Xamarin.Forms was also amazing for me. I don't think anything will ever compare to MVVM-development with C#.

I also appreciate the hard work the small team is putting into fixing these bugs - and just making it better overall. I am grateful for all you do very much.

On the forum: https://forums.xamarin.com/discussion/97145/i-gave-up-on-xamarin-forms

Thanks for reading,

Tom Joney

image

Top comments (5)

Collapse
 
therealbluepandabear profile image

Thanks for commenting :)

I agree with you that we should be fair that it can only make life simpler within reasonable bounds. But we should also be fair to developers... Honestly, developers don't want more problems made. If there are too many bugs and issues, maybe just work on fixing them instead of releasing a product that is stitched up with tape.

I was also disappointed that this new form of XAML was limiting. WPF XAML was great, you could customise almost every aspect of a control and everything else. With Xamarin.Forms XAML is was different.

Also yes, there is no real LOB demo app out there. I don't think there is actually one Xamarin.Forms app which is well-known in the app store. Could be wrong though. If you can make a good-looking, proof-of-concept, fast, and non-buggy app in Xamarin.Forms without going mad then you deserve a praise.

Collapse
 
akashkava profile image
Akash Kava

While I do agree for most of the points, Xamarin Forms is somewhere between Pure native app and Cordova kind of HTML apps.

For most business apps, Xamarin Forms is suitable to create multi platform app with low budget, that gives some native performance. Many of enterprise applications already have too much of code written in C# and reusing it would be easier rather than rewriting them in different language.

I believe more problem is maintaining two different platforms rather than problem with Xamarin Forms. I hear same with anyone who does native android, every new OS update kills previous way of doing thing. Same with Swift, you cant compile swift 1 in swift 2, swift 2 in swift 3.... , this way C# never had problem supporting old features.

However, JSX is more advanced compared to Xaml, (Disclaimer, I am the Author of JSX for Xamarin Forms), so I created a new product where you can bring features of React Native in Xamarin Forms. webatoms.in/play

Though it is dependent on Xamarin Forms, it makes life easier by reducing code size, being able to ship code from server, reducing build/deploy time.

And Xamarin Forms is a basic platform, if you explore commercially available business components from Syncfusion and Telerik, you can achieve similar performance.

Collapse
 
therealbluepandabear profile image
Tom O

Thank you for your reply. I will have a look at this product of yours. :)

Collapse
 
ikrssce profile image
ik-rssce • Edited

Have you tried NativeScript ? I gave up long time ago on Xamarin Forms...

Collapse
 
therealbluepandabear profile image
Tom O

I am learning Kotlin right now, I will be learning development with Android Studio and Kotlin in the future.