I have wanted to create this post for a while as I have never found an all in one place for a high level overview of everything Xamarin has to offer. Its an eco-system not a product and Xamarin’s/Microsoft’s offering is actually incredibly deep and wide. Here I just focus on the common app building of Xamarin. Xamarin also supports game developing and graphic intensive applications via UrhoSharp (3D/2D) and SkiaSharp (2D) but I won’t cover them here.
This is for developers who know how to code but are just starting their Xamarin journey.
The tooling required to create Xamarin applications is also a little more complex due to the ability to build for numerous platforms and licensing agreements that keep iOS building only available on a Mac. You can use Visual Studio or Xamarin Studio. Visual Studio is recommended when developing on a Windows and Xamarin Studio for developing on the Mac.
Frequently Asked Questions
Do I need a Mac to develop for iOS?
Yes. However you can develop completely develop on Windows, you must connect to a Mac when you want to build your iOS solution or visually design in iOS. You must download the iOS Simulator for Windows if you want to see the iOS Simulator on your local Windows machine, otherwise you can remote desktop into your Mac to see the iOS simulator.
What Emulator do I use for Android?
If you are on Windows I recommend you use the Visual Studio Android Emulator. If you are on a Mac I would suggest using Genymotion (free for individual, paid for commercial use). What about Xamarin Android Player? It is now officially deprecated and they are now recommending you use the Android SDK Emulator. If you feel like solving world peace while waiting for it to load then by all means use it but the other three I mentioned are personally recommended.
Alternatively in beta at the moment is the Android Studio 2.0 Emulator (as of this post in beta) that I have heard is also much better.
How do I download Xamarin?
What is the Alpha, Beta and Stable Channel?
Xamarin has 3 channels that you can choose between when installing Xamarin, given obvious names as to what they hold. In Visual Studio you can go to Tools > Options > Xamarin > Other to change the channel as you see fit. This is generally only for people who want to test out new features coming to Xamarin before they get to the stable release.
Most of the tooling stack in relation to what is directly controlled by Microsoft can be tracked at Current Releases and Previews.
If you want to work with Xamarin Forms (Shared UI and Code) you start at the top, if you wanted to create just for one platform and create UI’s specific to each platform then start from the Traditional layer.
Frequently Asked Questions
Is Xamarin Forms a program?
Xamarin Forms is just a Nuget package that sits on top of the other technologies. It doesn’t have any installer, it sits on top of an Android, iOS or Windows App.
Shared vs Portable (PCL), which should I choose?
Generally if you are a single developer who doesn’t need much architecture in your app, you can go with Shared. For Teams or large complex apps, go with PCL. This isn’t a hard and fast rule, I personally prefer PCL in single developer small apps as much large apps. For my more extensive run down read Portable Class Library (PCL) vs Shared Projects.
What about Windows Phone Silverlight?
Silverlight is a deprecated technology. Xamarin Forms still supports it at the moment but it will disappear in the future. If you need to develop for Windows 8.1+ then use Windows Runtime (WinRT). If you are lucky enough to only need to to support Windows 10+ then develop in UWP (Universal Windows Platform).
If you want to use packages or components for your app, they need to compatible with Xamarin, which is generally Profile 259 to be compatible with all platforms. There are two main places you can download components from, Xamarin Component Store and Nuget. Personally I prefer to just download everything from Nuget where possible. The Xamarin Component Store allows paid components to be listed which is the only real difference between the two. I speculate the component store will disappear in the future but that is just a guess on my part, I do not have any inside information.
If you want some free open source plugins that cover most things you are going to run into, have a look at the Xamarin Components on github. It has a great community list and are currently actively supported in the community and developed.
3rd Party Tools
The Xamarin technology partner network is still young and small. A number of the big players have contributed SDK’s for their services to the component store. However there are some good tools out there for Xamarin Forms where Xamarin has yet to fill in the gaps.
This allows you to make changes to your UI in Xamarin Forms and see it update in real time in iOS and Android emulators.
The first WYSIWYG UI designer for Xamarin Forms.
*Xamarin have developed a previewer for Xamarin Studio but not Visual Studio (just yet) that does similar to what Gorilla Player does. This is also still in preview and not stable yet. Gorilla Player will run on real devices and emulators, whereas the Xamarin Previewer does not.
Testing Suite / Continuous Integration
I prefer to test my code via xUnit, however this only tests the code and not how the UI will interact and behave on a particular device. If you are using an MVVM framework then testing the UI generally isn’t something to be overly concerned about because as long as the ViewModel updates as expected, so should the view and some simple testing by users will suffice. However in the mobile world, particularly on Android, the number of different devices and screen resolutions is massive. Sometimes even a different type of CPU or GPU can crash your app.
To resolve this issue, Xamarin has the Test Cloud. It is a massive cloud based service that runs and tests your code, giving you the ability to mimic users and take screenshots of your app running on up to 2,000 different, real Android devices. With continuous integration this is generally a business or enterprise level service but can be invaluable.
Insight and Exception Reporting
Exception reporting is one of the best type of services out there. You receive exception reports (with stack traces) in a central dashboard on any crash or error that has occurred with your app in the wild. It’s invaluable in tracking issues and resolving them. On top of this sometimes you want to track what parts of the app are used the most and you can do this with Insight reporting.
A few services available to you that support Xamarin are:
HockeyApp (Microsoft Owned) (2 apps free)
- Also provides test build distribution
Xamarin Insights (merging with Hockey App, no new apps)
Application Insights (merging with Hockey App for mobile)
Personally I would go with HockeyApp. Anything that Microsoft has acquired or had existing is merging into HockeyApp for mobile insights and crash reporting.
Xamarin University is one of the best ways to go through a structured course to learn Xamarin and is the only current way to gain a Xamarin Certified Developer status. It takes you through the basics to more advanced material. However at the moment it does cost quite a bit at $1,995 USD per annum. It puts it out of reach of most individual or indie developers and is generally done by businesses paying their employees to go through it.
How to obtain support from Xamarin is a blog post in itself, How To Get Support From Xamarin. There are a number of ways to get community or official support as you can see from within the post. Now with the merger from Microsoft I am assuming that you can also go through existing Microsoft Support Channels for support if needed, though I have not personally attempted.
Disclaimer: I have mentioned a few paid products in this blog post. Nothing is sponsored, I don’t work and am not affiliated with any company mentioned here. These are just my personal opinions.