My first job revolved around building a Xamarin Native app. Every full-time role I had afterwards focused mainly on Xamarin Forms. I’ve worked with other technologies, sure, but I always introduced myself as a Full Stack Developer specialising in Xamarin. I know it well and can make things quickly. Or at least I thought so…
Writing code in Xamarin.Forms is quite pleasant. I love C#, and I find XAML very easy to work with. Throughout the years I’ve come to know all the useful packages and tricks to bypass some of the framework quirks. It is a smooth and enjoyable process… until you press that Debug button😅.
I use a Mac, so perhaps this problem isn’t something Windows users experience, but I find Android Emulators horrible to work with. They’re slow and take forever to launch. Using a device was always much easier. The same can’t be said about iOS, where simulators are generally easy to work with, but you can’t use them for everything. Things such as push notifications, or Bluetooth connection require a physical device, which in turn needs the provisioning profiles and certificates set up. It’s completely automatic in XCode, but VS never caught up, making things doable, but a bit of a pain.
Build and deploy times in XF are generally long, but the worst part is when after an eternity of waiting you see an error that has nothing to do with the code you just changed. Just the environment being hostile 😂. If you didn’t rebuild, restart, or clear the cache/project at least 10 times, did you even work today?
Truth to be told, it wasn’t always that bad, but I found these issues getting worse in the past year or two. On top of that, every VS or Xamarin update brought a feeling of dread, as it was very likely your project would break completely for the next couple of weeks if you only decided to download the new version. It’s become the norm in the community to avoid the updates and stay a couple of versions behind for fear of losing productivity.
You can’t always avoid the latest versions, however. I bought a new Mac a while ago to, ironically, be more productive on my projects. I installed MacOS Ventura, the latest XCode and Visual Studio, cloned my repos and ran one of my apps on a simulator. All worked fine, and I spent the next two weeks introducing new updates and features to the project. The last of them had to do with push notifications, so I plugged in my iPhone, and… error. I couldn’t debug on the device. Not iOS, not Android.
I spent the next two weeks researching the errors and trying to make things work. Combing through SO, Github, and all articles I could find. Tinkering with settings, recloning repos, resetting, restarting, and reinstalling. Nothing. I spent one day wiping off my Mac and setting up everything from scratch. Still no luck.
I won’t be going into the specifics of the errors I was facing, as this is not the focus of this rant blog. Suffice it to say there is an open issue on GitHub and after over two months it’s still not been resolved. This caused me a lot of headaches and stress on a hobby project. I can’t imagine people experiencing it on commercial apps.
Enter Flutter(Flow)
Coincidentally, I had been exploring the world of no-code and low-code builders at work at that time and had just finished a small project in FlutterFlow. I liked this tool a lot as it allows you to download code and carry on with your work in Flutter. I had wanted to get into Flutter for a while now and the app I was trying to update was quite simple. I decided it was a good opportunity to attempt a rewrite.
It took me about three afternoons to rewrite the app to the state matching the feature set of the live Xamarin version. Another three to add the changes I wanted in the update. Things that took me days to figure out in Xamarin worked out of the box in Flutter. I downloaded the code and carried on with the release stuff and things unavailable in the builder. This was probably the hardest as both frameworks are very different, but it’ll get easier with time. What’s most important is that even with the initial learning curve, the rewrite took me pretty much the same amount of time as trying to make Xamarin work (and failing)!
With both iOS and Android updates now live in stores, I can’t help but feel silly for “sticking to what I know” for so long. Part of it was the genuine belief that I am much more productive working in tech I am familiar with, which is true enough, but the other part was probably just my brain rejecting change and the discomfort that it brings. This is normal for most of us, but learning to notice it will surely make life easier in the future.
Lesson learned. New skills unlocked. I fell out of love with mobile development lately, but with all those recent experiences I am now looking at my apps with excitement again. Knowing that a simple update won’t take forever made the previously shelved projects feasible. The spark’s come back and it feels as good as ever🔥
Top comments (3)
It's an issue common to 1 million frameworks how they start with a good/great idea, have a decent implementation, work well when used correctly and then... leave loose ends everywhere, resulting in a mix of a tough learning curve and wading through porridge on a daily basis.
Bit of a business model too. Heavyweights often get away with showing off stuff that works (sometimes even just saying "this works, this is great!") while turning a blind eye on the 100s of ways it does not.
Cross platform frameworks are even more prone to this - incurring commitments to keep up to date with moving targets. So it doesn't even matter how well it works at time t - sooner or later the incentive to support users will fade.
A variant of the "comfort zone" syndrome is the urge to get ports of familiar frameworks when adopting a new platform. This actually happens company wide, where I see them asking "can you use (name of baggage we're dragging along)" which comes across as travelling around the world eating burger, no matter how soggy and unburger-y it might get.
Well. But for you, time to have fun!
I have written both Android (Java & Kotlin) native apps & iOS Native apps and I've tried Xamarin and I actually find it easier to just write the apps natively.
This is especially true since SwiftUI has been released.
SwiftUI is the best app creating platform ever.
I say that as a Dev who has been developing Windows app since Win3.1 (first using VisualC++ and then VisualStudio (with C#) since it released.
SwiftUI is a game-changer and it is amazing.
AndroidStudio and Kotlin is fantastic too and it is honestly just so much easier to write the apps natively.
Not to mention... a cross platform bird is essentially a third platform.