People jump to conclusions. A lot. It’s human nature and we somehow forget that and we always focus on the negative rather than the positive of most things. This is apparent when you search for “mobile cross-platform frameworks”. Yes you’ll find frameworks like Xamarin, Appcelerator, Apache Cordova, Sencha, etc.; And the list keeps growing everyday.
One of the most intriguing platforms, for C# developers, is Xamarin. A platform that allows you to write C# code and it compiles down into Natvie code for Android, iOS, and Windows Phones. This is possible by the original project called “mono-project“, this is where it all started some years ago as an open source project that quickly grew over night. Now Xamarin has employees and clients around the world building great mobile apps and solving unique problems in less time than ever before. Lets be honest C# (.NET) isn’t on as many devices as Java, yet. Xamarin is helping make that transition more quickly with giving Microsoft’s .NET Framework the ability to go across platform. I’m not sure if Microsoft ever thought that they’d be running, compiling, and deploying products on the Linux Platform, but they are and I believe the push from Xamarin has something to do with that. Enough rambling, lets get into the technical aspect of Xamarin!
What more could you ask for?! A platform that offers you to write C#/F# code and it’ll deploy native code to your target mobile device! We’re not talking a JavaScript layered framework, we’re talking native! Now this shouldn’t be extremely hard to believe for Android, since Java and the .NET Framework are very close “on paper”. Being to be able to compile to native code for iOS is HUGE, I personally don’t know to many people that enjoyed writing Objective-C, but I come from a .NET area so that could be why too.
One of the key aspects that makes Xamarin successful, in my opinion, are its “channels” and same day delivery of native components. If you’re not using Xamarin or simply unware, Xamarin releases components/updates the same day Apple, Google, and Microsoft does for its mobile platforms. Most of the time you can even get access in their “Alpha Channel”. This allows us developers to stay proactive with the latest patches, updates, and enhancements and that allows us developers to give the very latest and best to our clients!
Xamarin’s community is one of the best that I’ve been able to witness in my short time in the field thus far. The Xamarin Forums are active daily with people looking for answers and loads of developers willing to share their knowledge. Although, I feel not enough credit and praise goes to the support staff and Evangelist at Xamarin. People like @JamesMontemagno, @jassmith87 [TheRealJasonSmith], and the others I’m forgetting to mention! These are the real MVPs that Xamarin has, keeping us developers intrigued with the platform and providing solutions and real world applicable functionalities.
Xamarin.Forms
Some people will crucify me, by putting Xamarin.Forms under “The Good”; but I believe those people fail to see the purpose of Xamarin.Forms. It is not a blanket solution for every project by any means. It is a library that can achieve a lot on its own! Check out Nat Friedman’s comment to someone’s negative experience with Xamarin.Forms here, eventually Miguel Deicaza even chimes in!! How many CTOs and CEOs check out forums and reach out to the community to try and understand the frustrations?? I can only think of a few, myself.
Nevertheless, I’ve successfully launched a few Xamarin.Forms applications both professionally and personally. Albeit a few projects would’ve been easier not using Xamarin.Forms, but I also gained quite a bit of knowledge about the Library itself. Creating an app that has simple data entry and data aggregation? Xamarin.Forms is a perfect solution to quickly build your app for all three phone types. Creating an app that has video processing and want the latest fluid animations? It can be done, but with an extra toll. It is possible to do anything with the Xamarin.Forms Library, but you may have to implement your own controls and “renderers” for certain things. This can become a toll on the developer because every “phone” has to have it’s own renderer. This can add up quickly if you’re not careful.
The downfall of Xamarin.Forms is it’s rendering process. But if you understood what is going on under the hood, you may have an appreciation for it. After all using the Library is a trade-off: you get a faster development time for the cost of what you can do out of the box and speed of UI drawing. Now, I’m not talking HUGE notices in speed draw backs, but if you end up making renderers for everything you’re implementing then you may have been better just using Xamarin.Android and Xamarin.iOS. Now Xamarin.Forms hasn’t been around very long (at the time of this article) and is consistently being updated and patched, just check out their NUGET profile and see for yourself. Within due time, the developers working on the Library will be able to improve the speed of it’s delivered controls, they just need the time. Maybe open sourcing that Library could help with this, maybe?!
All in all, after my three of working with Xamarin I’ve come to Love it! Contributing to the community and assisting other developers is such a great pleasure that I hope to continue to make a contribution, no matter how small it might be!
Till next time!