With Microsoft's recent acquisition of Xamarin, makers of tools that enable developers to deploy mobile apps to various mobile platforms using a common codebase, the debate about whether to employ such tools or to simply "go native" on each platform has once again been brought to the forefront.
Xamarin sits in the same vein of technology as other, similar offerings such as Adobe's PhoneGap, the similar Apache Cordova, and Appcelerator. All offer some varying degree of promises of native application integration, from making native APIs available to having your final mobile app compiled into a native binary for each platform.
What's the Answer? Is There an Answer?
Although such frameworks and tools have come a long way in the past five or six years (I can recall my company being asked to consider leveraging Appcelerator back in 2011 by a very large client and finding, disappointingly, that such a choice would be a sub-optimal approach), how much has the gap closed between the promises made by these solutions and true, native features and performance on each mobile platform? Is it worth using these products?
As one might imagine, the answer to these questions is not quite so simple. At the end of the day, common sense has to win out, and will vary on a project-by-project basis.
As the CTO of the organization for which I work, where we frequently engage in mobile development, I have my own opinions as to the answers to the above questions. So I thought I would have a brief discussion with fellow Zone Leader James Sugrue, CIO at Carma, an experienced and prolific mobile application developer and leader, to discuss what his thought process is when it comes to deciding whether to "go native" or make use of a tool such as Xamarin, in the hopes of seeing if my views are shared.
Q: What has been your experience in using solutions such as PhoneGap, Appcelerator, Xamarin and the like?
A: Well, I had long been [in the] pro-Appcelerator [camp], but then when I wanted to get to the latest features in an OS release, there was too much waiting.
Q: So when you did use Appcelerator, why were you using it over, say, the others?
A: It was more native, had a better chance of writing your own native modules. But [I believe] all the other others are the same now.
Q: What is your take on whether to "go native" or to use cross-platform tools for mobile development?
A: So, I would say:
Cutting edge app, or want to keep on top of what’s new (e.g. passbook integration, apple watch etc) it’s better to go with [native].
Something simple to get you over the line (and it can still look good) go with Appcelerator [or the like].
If I was being radical I’d say “only use Swift.” And forget about Android.
To answer the questions "What's the answer? Is there an answer?" my reply to the latter question is a firm, "no."
James' replies indeed confirm the line of thinking that I, myself, follow. However, it is also clear based on James' responses that there is still a clear leaning to native development, which is also what we tend to recommend at my company.
Another consideration is the price of these solutions. They range from open source, single-seat licences to team licences between $10/month and $260/seat/month, to enterprise licensing ranging from $1000-$2000/year up to entire custom prices. While these licences often bundle features such as support, analytics, and private deployment, the benefit must be weighed with your budget.
That said, sometimes the requirement of being able to rapidly deploy a single application to mobile platforms is the strongest one. Further, being able to maintain a single codebase as opposed to several can also be an important factor.
So the debate rages on. While many people are squarely in one camp or the other, it is clear that there is no great resolution to this discussion. As with so many other technological choices, it would seem that the options on the table exist to compliment each other, and choosing one over the other should and must be a matter of consideration based on the requirements at hand.