Cross-Platform. Hybrid or Native?

Recently I had to build an app for our company (zevenseas) which can work across all the platforms i.e. Windows Phone, Windows 8, iOS (iPhone, iPad) and Android (Phone and Tablet). I started looking for various options like Titanium, Icenium, PhoneGap & Xamarin. Considering the options I had, I chose two best solutions Icenium and Xamarin. But like many, I was confused about which one to use & when, one being hybrid and other native. So, I used and tested both and here are my findings in this post.

Experimenting with Xamarin – A native solution

I started using Xamarin (build on top of Mono) since February 2013 and I’m loving it. Just think about writing apps for Android/iOS/Mac using the language that you’re using since years – C#. The best feature that I can see which Xamarin provides is one solution to build them all. Just think about having one solution, which has all the required projects & dependencies at one place. Everything in one IDE (Visual Studio), one solution and in one repository, built using one language. This is AWESOME. The other most important feature for me is Portable Class Libraries (PCL). Think about having your Data Access Layer, Business Logic Layer, Models, etc.… into PCL and then referring it into various different applications. Just create UI layers. 100% code re-use. Isn’t it? So, think about project structure like this:


Other awesome feature which I liked about Xamarin is, their releases aligned with release of .NET features, iOS and Android. You can use LINQ, Async/Await, PCL in your cross-platform project. One more thing to mention here, Xamarin provided support for iOS7 as soon as it got released. Pretty amazing.

The challenges with Xamarin

I can see some challenges with Xamarin & yes, those can be addressed. First one is third-party SDKs equivalents and controls. Recently Xamarin is coming up with their components-store and I’m waiting for few SDKs and components to appear in it. Perhaps, this can be a great opportunity for some folks to build and sell their components/controls. For example, I wanted to build mobile app to fetch data from SharePoint. For Windows Phone, there is SharePoint SDK for Windows Phone. Being lazy, I wanted that same SDK as Xamarin component. It is doable. No doubt. But if somebody can provide it to me, or provide solution to migrate these kind of SDKs to Xamarin I’ll be happy. (btw, Xamarin has something called scan my code which analyses the code and tells you how much of it can be reused across platforms).


In case of controls (like Telerik, Infragistics, ComponentOne, Mindscape and Syncfusion), it would be great if I can port/use existing controls (without reinventing the wheel) written in .NET; in my cross-platform solution. I know, it is going to take time, but still.

Second challenge that I found is if I want to build highly touch intensive app like which includes drawing/animations/etc…. manipulating that in C# can be difficult. Same can be achieved with existing JavaScript libraries in Icenium. Although there is MonoGame for game development, works just like Xamarin products and built on top of Mono.

Playing around Icenium – A hybrid solution

I have fair understanding of JavaScript/JQuery and have used JQuery Mobile to build mobile web-apps. So, getting used to Icenium was damn easy. The great thing I loved about Icenium is, I can use same code (UI, DAL, BAL, etc…) for all the platforms. Plus, I can run any simulator and test the app LIVE. When I say live means, just make a change in HTML/CSS/JS, save and the it affects the app in simulator. Too good. Plus these simulators are pretty fast. In case of Android emulator, if I start it, I can easily go for a walk, have a cup of tea and still emulator is booting-up on my machine. I’ve ‘one of the best machine’ – thanks to zevenseas.  (P.S. Xamarin has nothing to do with Android emulator. It uses Android’s native emulator i.e. AVD etc.…, which by default slow. You can try Intel HAXM & Intel Atom based Android images in this case)


Being hybrid app platform, I can use all existing JavaScript libraries including Jquery mobile, Kendo UI or what not. The list is endless. This is LEGEN—wait for it DARY… The challenge with Xamarin (third-party libraries) can be solved here. Other feature which I liked the most is, you can build the app and run or test it on Android or iOS device without developer account. It uses something called Icenium Ion. Because *i think* provisioning profiles is pathetic with Apple. Microsoft and Google are way better in this case. However, remember that at the end you need developer account to publish the app. You can delay this, but can’t skip.


The challenges with Icenium

I found some challenges when dealing with Icenium. First, if you already have your existing logic in C# (in case of Xamarin, PCL is the best solution), then porting it to hybrid app (JS) can be time consuming affair. You may need to re-write. But this re-write can help you to use that code across platforms. Second, the simulators are not active simulators and has some limitations. Which means, you can’t use hardware buttons like back/home/menu etc… on Android/iOS. Keyboard inputs work from real keyboard connected to development machine. You also can’t test most of the Cardova plug-ins.

Apart from these challenges, I found both Icenium and Xamarin good options to build cross-platform solutions. So, the question is when to use what?

  Icenium Xamarin
Use existing C# Knowledge and code
Incl. Async/Await, LINQ, PCL, etc…
Use existing JS knowledge and code
Inc. Jquery, JQMobile, KendoUI, etc…
(Windows Phone/8, Android/iOS/Mac/Desktop/XBOX)
Android & iOS

Edit: I just found that Icenium as IDE allows you to build apps for Android, iOS. However, the same code can be used to build for Blackberry and Windows Phone externally i.e. like using Visual Studio to build XAP (Windows Phone package). Using respective build process. Thanks to Lohith for pointing out my mistake.

When it comes to documentation and support, both of these solutions are good. Xamarin uses default .NET APIs which you already know. In case if you’re looking for platform specific API, while going through Xamarin docs, you can navigate to Apple or Android documentation. Basically, Xamarin has one-to-one API mappings/bindings (just for example, it may be different. I don’t know internals). So, it makes life easier. Icenium on the other hand, is all JavaScript. You may need to check with each JS library vendor for documentation. Support is good as both the solutions have active forums and twitter handles to ask questions.

I will not talk about performance. I haven’t built similar kind of application using these two solutions to check performance. Hence, I can’t comment on this point.

So far I’m loving both of these solutions to build cross-platform applications and I’ve my own reasons to choose right-one at right-time. Do you? Do let me know if you need any further information.


Mayur Tendulkar


Build Windows Phone Apps In A Jiffy

Want to build Windows Phone apps? Don’t know anything about development or just want to get started, build working POC and hand-over to professional for final touch? Or just want to try your hands on Windows Phone development? This is the ‘right time’.

Today, Microsoft announced a Windows Phone App Studio for the savvy developer filled with great ideas but not enough time.


You can create apps in just 4 steps.

  • Select a template
  • Add content (static or dynamic like RSS feeds, HTML, etc…)
  • Choose the style, logo, design or do full customization
  • Use it, Share it, Publish it


The app created using this has a high-standard code and is ready to publish on Windows Phone store. Just download the package and publish it using your publisher account on Windows Phone Store. Don’t have one? Well, you can get one in just $19 “Summer Break” limited-time Dev Center registration offer (through August 26, 2013).

I hope, this will help you to get started with Windows Phone development and build that one mobile app, you always wanted to build Smile


Mayur Tendulkar

Windows Phone ‘Hello World’ App Using MVVM Light

When building any application, it is always a good practice to follow tried and tested design-patterns which will help in separation of concerns, code-reuse, maintainability, testability etc.… Just like ASP.NET there is MVC, for XAML based technologies (like Silverlight, Windows Presentation Foundation, Windows Store and Windows Phone apps), there is MVVM.

In this case, MVVM stands for – Model View ViewModel. As name suggests Model is nothing but classes representing data/entities. View represent actual view (pages in this context) whereas ViewModel does the binding between View and Model.

There are many frameworks out there which helps to build Windows Phone apps using MVVM pattern like Prism from Microsoft and MVVM Light from GalaSoft. In this blog, we’ll focus about MVVM Light.

First create a Windows Phone application.


Select Windows Phone 8.0 as OS Version in next dialog box.

Now, click on TOOLS > Library Package Manager > Manage NuGet Packages for Solution and search for MVVM Light in Online Gallery and install the same


When MVVM Light toolkit is installed, it modified App.Xaml file to instantiate the ViewModelLocator. These ViewModels are added in ViewModel folder.


MainViewModel is responsible to communicate between view and model. However, to keep things simple, we’ll expose a ApplicationName property which we’ll bind to Page.


Now, to bind ViewModel to View, in MainPage.xaml, add following code in phone:ApplicationPage element:


Now, bind ApplicationName to the textblock which displays App Name in MainPage.xaml


As soon as you modify above code, the UI changes and shows the Application Name. This is the beauty of using MVVM.


In next few blog-posts we’ll explore more about patterns and best practices in Windows Phone applications. Stay tuned! Smile



Mayur Tendulkar


Virtual Tech Conference 2013

South East Asia Microsoft Most Valuable Professionals are taking an initiative and hosting a virtual tech-conference. Best of the best speakers are going to talk about latest technology offerings from Microsoft. You can learn a lot from these sessions and you’ll also get an opportunity to ask questions if you’ve any. For more information, you can visit: for more information.


Even registration links are:

Dev Track –
IT Pro Track –

Join us with this event and enjoy the learning.


Mayur Tendulkar