I was talking with a potential client recently about some of the great multi-platform mobile app projects we’ve been working on here at ArcTouch — and specifically how we’re using Xamarin and Xamarin.Forms. When it comes down to it, I’m proud of the Xamarin work that we’ve done for companies like the San Jose Earthquakes, Warner Bros., and most recently, EmployBridge.
For this post, however, I’d like to highlight our work with GUESS. Working in lock-step with our client, we built a suite of three visually stunning cross-platform (iOS and Android) applications using a common C# codebase: GUESS Jeans, G by GUESS, and GUESS Factory. What is a surprise to many however, is that we did so using Xamarin.Forms.
- CASE STUDY: How ArcTouch Used Xamarin for Global Lifestyle Brand GUESS’s Mobile Apps
- NEWS: ArcTouch announces Xamarin Accelerator Program
There’s a perception out there, especially in the design community, that by choosing to use a multi-platform framework for app development, the user experience needs to take a back seat. When it comes to Xamarin and Xamarin.Forms, this perception is unfounded. In reality, by using Xamarin, you get the benefit of a shared code base in C#, but you can design and build as much or as little as you like using the native platforms.
The perception problem facing Xamarin is built upon years of poorly executed apps using other cross-platform technologies. Frameworks like PhoneGap, Sencha, and Appcelerator all rely on web-based technologies that often behave like…well, websites. On mobile devices, this means slower load times and a user interface that doesn’t always feel native.
Even for those familiar with Xamarin, there’s another misconception about Xamarin.Forms. This one stems, in part, from the name. When you hear the word “Forms” it immediately conjures up the idea of a login form or a clunky data entry process. But Xamarin.Forms is much more capable than this.
Xamarin.Forms isn’t just for forms
Xamarin.Forms is a library that works with the Xamarin framework and allows you to share your app’s user interface (UI) design and logic in addition to just the business logic. The code sharing means an increase in all of the benefits that you get from a cross-platform framework — in particular, decreased development time and maintenance costs.
Furthermore, Xamarin.Forms provides abstractions for UI idioms that are common to the supported platforms. You can use features such as gestures and animations, directly from the Xamarin.Forms layer. As proof that the Xamarin.Forms library can go way past a typical form app, I’d encourage you to try out the GUESS Jeans app. It’s true of course that there are limitations to what an abstraction layer can provide, but Xamarin.Forms supports easily accessing native features that are exclusive to a single platform. This leads me to my next point…
Xamarin.Forms doesn’t box you in
Not all cross-platform tools are created equal. And with the web-based tools mentioned above, supporting native features that are exclusive to one platform is not always easy. The process often requires using the platform native tools (e.g. Xcode) to create a “shim” module that communicates with the native libraries. With Xamarin and Xamarin.Forms however, access to the underlying platform is already provided via C# bindings. This means that accessing native features can be done directly from C# code and maintained with the rest of your app’s code base.
“With the GUESS Jeans app, ArcTouch really pushed the boundaries of Xamarin.Forms to deliver an incredibly stylish user interface and an engaging native experience.”
Senior Director, Microsoft Mobile App Innovation Partners
Xamarin.Forms allows you to easily break out of the cross-platform “box” and develop those unique features that make an app feel truly native. In the example of the Guess app, the use of drop shadows and layer clipping required us to write “native” code, but the result is an app that users love and that looks great on both iOS and Android.
The truth about Xamarin.Forms and performance
Historically, one of the shortcomings of Xamarin.Forms has been app speed and responsiveness. While the initial releases suffered slow app load times due to the additional libraries and sub-par performance (most notably on Android), Xamarin.Forms has matured significantly. In the past year, we’ve seen major improvements in performance on both iOS and Android.
Apps that we would never have considered developing using Xamarin.Forms when it was originally released are now practical and the results are great. We also expect continued improvements as Microsoft has committed additional resources specifically to address performance. (Check out Fast Renderers for an idea of what’s on the roadmap).
A second major issue with Xamarin.Forms has been bugs. Like any new technology, the early releases contained sometimes show-stopper bugs and critical memory leaks. The newest releases of Xamarin.Forms have proved to be much more stable and to perform notably better. Microsoft has committed additional resources to the testing process, so we expect this trend to continue as well.
Why we almost always use Xamarin.Forms
I wrote recently about when to choose Xamarin.Forms over just Xamarin Native. With our recent client projects, it’s worth noting that we almost always go with Xamarin.Forms when we make the decision to use Xamarin. The reality is that if you want to create a more maintainable multi-platform app — and avoid the expense of designing and developing only on the native platforms — Xamarin.Forms is flexible enough to be the right choice in most cases. I think we’ll see a lot more app developers and .NET development companies building apps exclusively in Xamarin and Xamarin.Forms as the technology continues to mature under Microsoft’s leadership.