Xamarin is a cross-platform technology that makes it possible to build native mobile apps for Android, iOS, and Windows Phone using C# and a shared codebase. Like its younger siblings NativeScript and React Native, it allows development teams to build mobile applications using the skills they already have, and spend less time writing code for each platform.
Now that we have Visual Studio 2019 and Xamarin installed let's get to work! When you launch Visual Studio 2019 you will have an option to create a new project. On Windows you can search for Xamarin.Forms or use the project types filter and select Mobile. We will want to select Mobile App (Xamarin.Forms). Visual Studio Tools for Xamarin Deliver native Android, iOS, and Windows apps with a single shared.NET code base. Xamarin is cross-platform, allowing you to develop and deploy mobile apps on your favorite OS. The Visual Studio product family provides a great.NET development experience on Windows and macOS. Learn about Visual Studio Tools for Xamarin.
If you haven’t tried Xamarin yet, now is a great time to get started! Earlier this year, Microsoft bought Xamarin and made it free (and open-source). You can build Xamarin projects on Windows (using Visual Studio), or Mac/Linux (using Xamarin Studio).
I’m excited to dig into Xamarin because mobile apps need authentication and authorization, which Stormpath makes easy. We already have rich SDKs for .NET and ASP.NET, as well as SDKs for iOS and Android separately, but a Xamarin-specific SDK could provide even more value and make it super simple to secure your apps. It’s something I’m currently digging into, so stay tuned!
In this tutorial, I’ll show you how to use Visual Studio and Xamarin to build a basic app for iOS and Android — even if you’ve never done any app development before!
Setting Up Visual Studio and Xamarin
If you don’t have Visual Studio 2015 installed, download the free Community Edition from Microsoft. If you already have Visual Studio, make sure you have the latest update (Update 3 at the time of writing).
You’ll also need to install some optional components for Visual Studio. If you’re setting up Visual Studio from scratch, make sure these items are selected:
If you have an existing installation, you can verify that these components are installed by opening the Control Panel, choosing Uninstall or change a program, and selecting Microsoft Visual Studio 2015. Follow the installation wizard to make sure the above items (at a minimum) are checked.
Once you have the tools set up, you’re ready to create a Xamarin project!
Xamarin vs. Xamarin.Forms
The Xamarin SDK provides bindings to the platform-specific APIs on each mobile platform, so you can call Android or iOS APIs from C# code. This allows you to build native apps using C#, but you still need to design the UI separately for each platform.
Xamarin.Forms is an additional layer on top of the Xamarin SDK that makes it possible to build your UI once (in XAML markup) and let Xamarin do the hard work of translating it into the appropriate UI elements on the target platform. You can drop down to the Xamarin SDK level and interact with the platform APIs if you need to.
Should you use “raw” Xamarin, or Xamarin.Forms? It depends on what you are building:
If you’re building an app that needs little platform-specific functionality or custom UI, go with Xamarin.Forms. This is a good choice for straightforward readonly='><?xml version='1.0' encoding='UTF-8'?><ContentPage xmlns='http://xamarin.com/schemas/2014/forms' xmlns:x='http://schemas.microsoft.com/winfx/2009/xaml' x:Class='HelloWorldApp.HelloWorldPage'> <ContentPage.Padding> <OnPlatform x:TypeArguments='Thickness' iOS='20, 40, 20, 20' Android='20, 20, 20, 20' WinPhone='20, 20, 20, 20' /> </ContentPage.Padding> <ContentPage.Content> <StackLayout VerticalOptions='FillAndExpand' HorizontalOptions='FillAndExpand' Orientation='Vertical' Spacing='15'> <Label Text='Enter your name:' /> <Entry x:Name='NameEntry' Text='Jane Doe' /> <Button x:Name='SayHelloButton' Text='Say Hello' Clicked='SayHelloButton_OnClicked' /> </StackLayout> </ContentPage.Content></ContentPage>2 4 6 8 10 12 14 16 18 20 22 | <ContentPage xmlns='http://xamarin.com/schemas/2014/forms' xmlns:x='http://schemas.microsoft.com/winfx/2009/xaml' <ContentPage.Padding> iOS='20, 40, 20, 20' WinPhone='20, 20, 20, 20'/> <ContentPage.Content> HorizontalOptions='FillAndExpand' Spacing='15'> <Entryx:Name='NameEntry'Text='Jane Doe'/> <Buttonx:Name='SayHelloButton'Text='Say Hello'Clicked='SayHelloButton_OnClicked'/> </ContentPage.Content> |
This XAML code creates a basic layout containing Label, Entry (text box), and Button controls. The control names (specified with x:Name
) will be used to refer to the controls in code.
The Clicked=
attribute on the Button element wires up the button click event to a handler called SayHelloButton_OnClicked
, which doesn’t exist yet (but it’s about to!)
Open up the code-behind for the XAML file by expanding it in the Solution Explorer and double-clicking on the HelloWorldPage.xaml.cs
file.
Replace the generated C# code with the following:
Xamarin Studio Download
2 4 6 8 10 12 14 16 18 20 | using Xamarin.Forms; namespaceHelloWorldApp publicpartial classHelloWorldPage:ContentPage publicHelloWorldPage() InitializeComponent(); privateasync voidSayHelloButton_OnClicked(objectsender,EventArgse) varname=NameEntry.Text; await DisplayAlert('Greeting',$'Hello {name}!','Howdy'); } |
Looks familiar, doesn’t it? The SayHelloButton_OnClicked
method will run when the SayHelloButton
is clicked on the XAML page. First, the value of the textbox is assigned to the name
variable, and then the DisplayName
method is called to display a modal popup on the device.
There’s one more thing to do before you’re done: telling the app to use the new page. In App.cs
, replace the constructor method with this:
2 4 | { } |
That’s it! Your new Xamarin app is ready to go.
Testing Your Xamarin App on Android
If you have the Visual Studio Android Emulator installed, testing the Android version of your Xamarin app is simple. In the Visual Studio toolbar, pick the HelloWorldApp.Droid project and choose an Android device to emulate. Then, click the green Play button to start the emulator.
The Android emulator can be slow to load, so give it some time. If everything builds properly, you should see your app running on Android.
Testing Your Xamarin App on iOS
Testing your Xamarin app on iOS is a little trickier, because it requires a Mac to provide the emulator. If you have a Mac handy, follow the official instructions to set up the Mac agent and connect it to Visual Studio. Then, pick the HelloWorld.iOS project, and switch the architecture to iPhone Simulator. Choose a device version and click Play.
After the project builds, the simulator will launch on the Mac.
Next steps
This tutorial only scratches the surface. There’s plenty more you can do with Xamarin! Here’s some further reading:
If you’ve built something cool with Xamarin, let me know in the comments or on Twitter @nbarbettini!
Visual Studio for Mac is available to install
Visual Studio for Mac builds on top of MonoDevelop, adding open sourced internals from Visual Studio and many new extensions to support new workloads. To get the latest available version, switch to the Stable updater channel after installing.
Supported on macOS 10.11 and later.
MonoDevelop for macOS is available from source
Please refer to the building guide for more information about how to install and configure your MonoDevelop.
- Ubuntu
- Debian
- Raspbian
- CentOS
1 Add the Mono repository to your system
The package repository hosts the packages you need, add it with the following commands.
Note: the packages should work on newer Ubuntu versions too but we only test the ones listed below.
Ubuntu 18.04 (i386, amd64, armhf)
Ubuntu 16.04 (i386, amd64, armhf)
Ubuntu 14.04 (i386, amd64, armhf)
2 Install MonoDevelop
The package monodevelop should be installed for the MonoDevelop IDE.
3 Verify Installation
After the installation completed successfully, it's a good idea to run through the basic hello world examples on this page to verify MonoDevelop is working correctly.
1 Add the Mono repository to your system
The package repository hosts the packages you need, add it with the following commands.
Note: the packages should work on newer Debian versions too but we only test the ones listed below.
Debian 10 (i386, amd64, armhf, armel)
Debian 9 (i386, amd64, armhf, armel)
Debian 8 (i386, amd64, armhf, armel)
2 Install MonoDevelop
The package monodevelop should be installed for the MonoDevelop IDE.
3 Verify Installation
After the installation completed successfully, it's a good idea to run through the basic hello world examples on this page to verify MonoDevelop is working correctly.
1 Add the Mono repository to your system
The package repository hosts the packages you need, add it with the following commands.
Note: the packages should work on newer Raspbian versions too but we only test the ones listed below.
Raspbian 9 (armhf)
Raspbian 8 (armhf)
2 Install MonoDevelop
The package monodevelop should be installed for the MonoDevelop IDE.
3 Verify Installation
After the installation completed successfully, it's a good idea to run through the basic hello world examples on this page to verify MonoDevelop is working correctly.
1 Add the Mono repository to your system
The package repository hosts the packages you need, add it with the following commands in a root shell.
Note: the packages should work on newer CentOS versions too but we only test the ones listed below.
CentOS 7 (x86_64)
CentOS 6 (x86_64, i686)
2 Install MonoDevelop
The package monodevelop should be installed for the MonoDevelop IDE.
3 Verify Installation
After the installation completed successfully, it's a good idea to run through the basic hello world examples on this page to verify MonoDevelop is working correctly.
Xamarin Studio Ubuntu
MonoDevelop for Windows is available from source only
Please refer to the building guide for more information about how to install and configure your MonoDevelop.
Xamarin Studio Download For Mac
GTK# for .NET
Visual Studio Xamarin Android Tutorial
Installer for running Gtk#-based applications on Microsoft .NET: