.NET Shops are in a Mobile Pickle
When it comes to native mobile development, .NET shops are in a pickle. Mobile and tablet use is estimated to make up 90% of new device adoption by 2015 (Gartner). Steve Jobs saw this coming and had this to say:
“When we were an agrarian nation, all cars were trucks, because that’s what you needed on the farm, but as vehicles started to be used in the urban centers, cars got more popular. Innovations like automatic transmission and power steering and things that you didn’t care about in a truck as much started to become paramount in cars. … PCs are going to be like trucks. They’re still going to be around, they’re still going to have a lot of value, but they’re going to be used by one out of X people.”
This statement, made at the D8 conference in 2010, was prescient for consumer users of computing machines. (The jury is still out for business users – they still need PCs with standalone screens and keyboards.)
For Microsoft .NET development, this trend has proven complicated. Microsoft’s goal is to capture market share in both mobile software and hardware platforms. That means Windows tablets and mobile phones trying to beat out iPhone and Android. With Google in the lead for number of users, Apple in close second, and Windows phones and tablets coming up far in the rear with less than 5% of the market, this is hard to imagine today. Developers and stakeholders just haven’t bought into it yet. That’s because the apps are developed where the eyes are, which means Android and iPhone for now.
According to International Data Corporation, in 2016, the platform breakdown will be as follows:
- 68.8% – Android
- 19.1% – iOS
- 11.4% – Windows Phone
- 4.1% – BlackBerry OS
- 1.6% – Other
This is a becoming a huge problem for .NET shops who are ready to enter the world of mobile development. Microsoft’s conflict of interest has left them behind in providing a cross-platform development solution. We need to build mobile apps in C# that will work on iOS, Android, and Windows devices! It’s a lot like the browser wars of the nineties when all we wanted were web apps that worked but all we got was competition, errors, and plug-ins that only worked in their native browsers. So here are the popular solutions available right now to build cross-platform native mobile apps:
Xamarin – http://xamarin.com/
From the ashes of Mono rises Xamarin. Develop in Visual Studio using C# to create Android, iPhone, and Windows phone apps. Xamarin’s track record is good, the driving force behind Mono and MonoCross, though their efforts are still relatively untested.
Infoworld Review – 4/2013 – the executive summary:
- Xamarin lets you write mobile apps entirely in C#, with no hacking necessary to access native iOS and Android APIs
- You can use Visual Studio to debug code both in simulators and on hardware
- Tech support responds promptly
- The Mac required for final iOS code generation can be shared
- Documentation is still not complete
- You still need a Mac for final iOS code generation
MonoCross – http://monocross.net/
Another Xamarin project, an open source cross-platform mobile framework using C# .NET and the Mono framework. Very recently resuscitated and future uncertain.
PhoneGap – http://phonegap.com/ – I have heard of some successful projects using this open source framework which wraps HTML5 web apps in native apps(creating hybrid mobile apps), but the samples on their website are slow, broken, or missing. Not encouraging.
Appcelerator Titanium – http://www.appcelerator.com/
A few good smackdowns between these two:
More great info on cross-platform mobile development:
As you can see, the native mobile development options are very limited for .NET. Beyond building web apps for use on mobile browsers, nothing in Visual Studio 2012 or 2013 addresses the cross-platform problem. It’s as if Microsoft fully expects C# developers to develop only for Windows devices, which is not practical in the forseeable market. Therefore, mobile development , a risky proposition on any platform, is doubly risky from the standpoint of .NET.
If you build mobile apps against existing .NET code bases, I suggest decoupling from data sources using RESTful Web API services so newer apps can use older services. Learn something about Android and iOS development so your approach is informed. Try building a mobile web app in HTML5, ASP.NET, or MVC , which will work in all mobile and tablet browsers. Native device functions may be unavailable and it will look and work like an HTML app, not like a native mobile app.
For .NET enterprise mobile development, build simple, effective apps that you expect to be disposable in the short run until this blows over.