/ XAMARIN

Xamarin Tools 2021

Choosing the right tools and resources can make all the difference in being a productive and effective developer. So, what are all the tools and libraries you should be using to build your Xamarin apps in 2021?

I did a similar post a few years ago but so much has changed in the Xamarin ecosystem I figured it was time for an update. I was curious what members of the Xamarin Community were using, so I sent the following tweet for their input on what they use.

It got fairly good traction, and lots of insightful replies from the community. This blog lists out those resources and (hopefully) makes a pretty good starting point for finding “best of breed” components for your next Xamarin app.

First a big thanks to the following people for their kind contributions:

@adpead @allanritchie911 @AltevirNeto @AndrewSheley @Andrik_Just4Fun @beeradmoore @Boehm412 @bratschecody @brungarc @DanJSiegel @David_PETRIC_ @devnl @depechie @dylbot9000 @faraimuteroza @GenieSoftStudio @ibm515511 @IKrugers @InquisitorJax @ivrmirx @jfversluis @jmparent_dev @JosueYeray @kwlothrop @LarsDuewel @leolimanfl @luismatosluna @mallibone @matthewrdev @mayaraga2690 @michaldobro @mr_javicho @mrwcjoughin @normanmackay3 @Osoy13 @PatGet @pauloquicoli @RaamAkkireddy @rdavis_au @sphauck @steven1909 @stntz @strifex24 @unofficial_mozi @usdivers @WorldWeatherApp

This post got a little bit out of hand, so I’ve tried to categorize all the suggestions (and a few bonus ones) to help you quickly find all the goodness.

Table of Contents


Design

We constantly hear about how designers should learn to code, but I think that in order to create amazing products, developers should learn a bit about design and how to use design tools. Here are the most popular highlighted by the community.

Design Guidelines

Design Tools

  • Adobe XD - Adobe XD is a vector based design tool specifically designed for creating UI’s and enhancing collaboration between designers and developers. It’s actually my preferred design tool at the moment. If you wanting to get started Adobe has some pretty good tutorials on their website. Available for PC and Mac with a Free tier (which is all you need).

  • Figma - Another very popular design tool recommended by the community. “Figma brings your teams together to design better products from start to finish.”. Figma has a YouTube channel with good learning content. [PC and Mac - Free version available].

  • Sketch App - Sketch is the original UI specific design tool. At one time, it was my preferred design tool but more recently Adobe XD and Figma have entered the scene. Also it’s Mac only and there is no free version. But having said all that, it’s still very popular and an excellent tool.

  • Zeplin - Zeplin is a plugin and standalone desktop application for Mac and Windows specifically designed to bridge the gap between designers and engineers. It takes designs from Sketch, Adobe XD CC, Figma, or Adobe Photoshop CC and exports them into a format which generates code snippets, design specs, and assets. There is a free version which allows you to work on 1 project, but beyond that it’ll cost you.

  • PaintCode - PaintCode is a unique vector drawing app that generates Objective-C or Swift code in real time, acting as a bridge between developers and graphic designers.

  • Kimono Designer - Kimono Designer allows a developer to graphically edit SkiaSharp based graphic objects that can be converted to code and included in any cross-platform language and OS that SkiaSharp supports.

  • A few people mentioned other Adobe products such as Illustrator and Photoshop which are great products for Vector and Bitmap images, but primarily aimed at designers. They are not free. I have a subscription, but rarely use them for mobile development. If you are after free options, you could try Gimp, paint.net and InkScape.

Image and Font Resources

  • Material Design Icons - Material Design Icons is a large collection of free icons. The website allows you to download them as SVGs, PNGs, and Android resources.

  • SVG Repo - A fantastic resource of SVGs in Monocolor, Multicolor, Outlined and Filled styles.

  • unDraw - If you are looking for great looking illustrations in SVG or PNG formats, look no further.

  • Metro Studio - Syncfusion Metro Studio is a collection of over 7,000 flat and wireframe icon templates that can be easily customized to create thousands of unique icons. It also supports creating custom icon font packages from selected sets of icons.

  • Icons8 - Thousands of free icons in different styles and sizes.  You can also recolour them as well.

  • Google Fonts - Google has loads of fonts you can download and use in your apps.

  • Font Squirrel - If you are after something a little more wacky, Font Squirrel probably has you covered.

  • Spark Joy - Design Tools and Tips for Developers in a Hurry - This is a bonus one. It’s a github repo which lists out a kazillion design resources (mostly aimed at web devs, but still useful for Xamarin / Mobile devs). I’ve linked to the logo section, but there is also sooo much other goodness in here.

Design Inspiration

  • Dribbble - This is probably my default go-to place for looking at beautiful UI and interaction designs.  So many talented people contribute designs.

  • Behance - Another location for our hipster designer friends to submit their goods.

  • Snppts - Xamarin Forms UI Snippets.  This is a great site to look at if you are interested to see how other devs layout their Xamarin Forms pages, it has links to source code and XAML.

  • Xamarin.Forms goodlooking UI samples - A resource of some of the best looking Xamarin.Forms interfaces out there.


Develop

Developers love tools; they make our life better. Most of us (except perhaps the geekiest) will use an IDE to develop applications. From the community responses it looks like people are using Visual Studio, Visual Studio for Mac and Rider for development. (oh yeah and let’s not forget the greatest developer tool of all time StackOverflow). You might even find yourself using XCode for some iOS things like editing storyboards. Apart form that, below are some resources and tools that might help you develop your apps.

Extensions & Add-Ins

  • MFractor - MFractor is a powerful productivity tool for Xamarin developers. This tool is specifically for Xamarin developers and has loads of great features, especially for XAML developers. There is a free “Lite edition”, or if you are serious get the “Full” edition - you won’t regret it. Available for Visual Studio Windows and Mac.

  • XamlStyler - XAML Styler is a visual studio extension that formats XAML source code based on a set of styling rules. This tool can help you/your team maintain a better XAML coding style as well as a much better XAML readability. I love this tool! As a bonus Sharpnado wrote a cool blog post on how you can setup a config file to keep your project consistent amongst your team.

  • VSMac-CodeCoverage - A code coverage extension for Visual Studio for Mac that provides a new pad for displaying coverage statistics and visualizing line coverage in the editor margin.

  • Resharper - Visual Studio Extension which provides an absolute truck load of refactoring and code quality tools for all types of .NET projects. Personally, I don’t use this any more because there have been so many great refactoring additions to core Visual Studio, but it is still super popular amongst .NET devs.

Device Mirroring and Emulation

  • scrcpy - This application provides display and control of Android devices connected on USB (or over TCP/IP). It works on GNU/Linux, Windows and macOS. I don’t use this at the moment, but that may change because this gets really great reviews.

  • AirDroid - AirDroid enables you to transfer files across different platforms, mirror and remote control mobile devices, receive and reply to messages on the computer.

  • Genymotion Desktop - Let’s face it, Android emulators can be in pain in the butt. Genymotion aims to remove that pain but giving you a better Android emulator than the one provided by Google.

  • Reflector - Allows you to mirror your iOS and Android device to a bunch of different devices.

  • Vysor - Vysor allows you to mirror your Android device as an emulator on your desktop. I normally use this when I am mirroring my Android device during development, because I can control my physical device with a mouse.

Working with Data

Like it or not, a great deal of our time is working with Data.  In a mobile context that mostly means hitting Web Services and local databases. Here are some great tools to help you out.

Web Things

  • Fiddler - Fiddler is a debugging proxy server tool used to log, inspect, and alter HTTP and HTTPS traffic between a computer and a web server or servers. There are a few different editions now, but there is still the Classic version which is free.

  • Postman - Postman is a popular API client that makes it easy for developers to create, share, test and document APIs. This is done by allowing users to create and save simple and complex HTTP/s requests, as well as read their responses. The result - more efficient and less tedious work. Another option suggested is Advanced REST Client.

  • Quicktype - This tool is fantastic. If you’ve got some JSON you can paste it in and it will generate you models and serialization code.

  • Refit - Simplify calling Rest services.  If you want to simplify your code for calling web services give Refit a shot, you can basically just create an interface which describes your web service, then let it do all the hard work of accessing the service - no need to worry about doing the serializing and deserializing yourself or creating GET and PUT methods. It’ll do it for you.

  • HttpTracer - A simple http tracing library to write request and response information to your output window. Making your life easier when debugging http calls!

  • Polly- Automatic retry policies. The reality is that on mobile devices your connection sucks. It’s going to disappear for no apparent reason and sometimes the best thing is to just reissue a request. Polly is going to help you out here by allowing you to define automatic retry policies.

  • Newtonsoft Json.NET still my goto library for anything to do with serializing, deserializing and parsing JSON results.

  • protobuf-net - protobuf-net is a contract based serializer for .NET code, that happens to write data in the “protocol buffers” serialization format engineered by Google.

  • RestSharp - Featuring automatic serialization and deserialization, request and response type detection, variety of authentications and other useful features.

  • modernhttpclient-updated - This library brings the latest platform-specific networking libraries to Xamarin applications via a custom HttpClient handler.

Local Data

  • Sqlite-Net Dead simple SQLite integration – This package from Frank Krueger is the best way (I know of) to integrate SQLite into your Xamarin Apps. It also provides a light weight ORM interface to make it really simple to use. There is also an option to provide encryption support with sqlite-net-sqlcipher.

  • LiteDB - Embedded NoSQL database for .NET. An open source MongoDB-like database with zero configuration - mobile ready

  • DB Browser for SQLite - A free cross platform tool which will allow you to create databases, define the schema, and add records to the database.

  • Akavache - An asynchronous, persistent key-value store created for writing desktop and mobile applications, based on SQLite3. Akavache is great for both storing important data as well as cached local data that expires.

  • Monkey Cache - A great dead-simple caching library for any .NET application. It can work with File, SQLite and LiteDB persistence.

MVVM Life

I often joke that to be good at MVVM you really just need to have a really strong opinions and tell everyone else they are doing it wrong. But seriously MVVM is a great architecture for building your applications. I feel that in the future we are also going to see more and more MVU. In the meantime, check out these great MVVM frameworks and libraries.

  • MVVM Helpers - James Montemagno’s Collection of MVVM helper classes for any application. I think this is getting merged into the Xamarin Community Toolkit, but I still like to use this directly sometimes.

  • Fody Property Changed - This is an code weaver that can help you out writing your INotifyPropertyChange notifications and keep your code nice and clean. Not everyone loves this because it does magic behind the scenes, but still pretty popular.

  • Prism - Prism is a framework for building loosely coupled, maintainable, and testable XAML applications in WPF, Xamarin Forms, and Uno / Win UI Applications. A very popular choice for people looking for an MVVM framework.

  • FreshMVVM - FreshMvvm is a super light Mvvm Framework designed specifically for Xamarin.Forms. It’s designed to be Easy, Simple and Flexible.

  • MvvmCross - Share behavior and business logic in a single codebase across supported platforms, using the Model-View-ViewModel (MVVM) design pattern. MvvmCross is a framework specifically developed for Xamarin and the mobile ecosystem.

  • ReactiveUI - An advanced, composable, functional reactive model-view-viewmodel framework for all .NET platforms! I don’t do a lot of Reactive programming is definitely something I should look into more.

  • ReactiveProperty - ReactiveProperty provides MVVM and asynchronous support features under Reactive Extensions.

  • MvvmLight - Yet another popular framework for cross platform MVVM.

Debugging and Logging

  • LinqPad - LinqPad is a great tool to just smash out some code and test it out. No more creating a new VS Solution called Console765.exe.

  • moq - The most popular and friendly mocking library for .NET

  • SeriLog - Serilog is a diagnostic logging library for .NET applications. It is easy to set up, has a clean API, and runs on all recent .NET platforms.

  • xunit - xUnit.net is a free, open source, community-focused unit testing tool for the .NET Framework. Written by the original inventor of NUnit v2, xUnit.net is the latest technology for unit testing C#, F#, VB.NET and other .NET languages. xUnit.net works with ReSharper, CodeRush, TestDriven.NET and Xamarin.

  • AutoFixture - Because sometimes you can’t be bothered creating your own data for unit tests. This library will reflect over your models, so you can just ask it to create a bunch of objects for you.

Xamarin.Forms Libraries

Xamarin.Forms is the way most people develop Xamarin Applications and it has some amazing libraries you can use to help you out.

  • ACR User Dialogs - A cross platform library that allows you to call for standard user dialogs from a shared/portable library. Supports Android, iOS, and Unified Windows Platform (UWP, UAP). This is a popular library to show dialogs, but looking at the github repo it looks like it may not be getting any more updates.

  • CardsView - In my opinion, this is the best Carousel style control available for Xamarin.Forms. It is very flexible and performs excellently.

  • Debug Rainbows - This is a niftly little addition to your app used for debugging layouts. Flip a switch in your XAML and you can see the bounds of your controls. As Steven himself says, “The package you didn’t even know you needed”!

  • FFImageLoading - This is an amazing library for better downloading and caching of images across all the platforms.

  • Glide - Glide is a fast and efficient image loading library for Android focused on smooth scrolling. There is also a Xamarin.Forms focused version called GlideX.

  • GrailKit - Designed for .NET Developers. Grial UI Kit provides a complete ready made collection of fully customizable beautiful XAML templates, UI screens and resources to help you build cross-platform apps with Xamarin.Forms.

  • Lottie - If you are working with designers who are throwing After Effects animations at you, or if you just want to spice up your UI with animations have a look at this bad boy. To go along with this you’ll also want to have a look at Lottie Files which has free animation files and some very cool tools for creating and editing Lottie files.

  • MagicGradients - If you love gradients (and who doesn’t) this library is for you.

  • Mapbox - If Apple or Google Maps aren’t doing it for you, or if you want to have offline maps this could be a good solution. There is MapBox Xamarin Forms to use as well.

  • PancakeView - A delicous library that provides an extended ContentView for Xamarin.Forms with rounded corners, borders, shadows. As I understand it, most of the functionality is being moved into Xamarin Community Toolkit. But I still love you. Regardless, you’ll still see PancakeView referenced in a bunch of solutions and tutorials.

  • Rg.Plugins.Popup - Rg.Plugins.Popup - is a cross platform plugin for Xamarin.Forms which allows you to open Xamarin.Forms pages as a popup that can be shared across iOS, Android, UWP, and macOS.

  • Shared Transitions - If you want to provide dynamic transitions between your pages you can do it in platform specific code… or just use Shared Transitions!

  • Sharpnado - Sharpnado is a great collection of UI based improvements, including Tabs, HorizontalListView, MaterialFrame, Shadows and a pretty cool TaskLoaderView

  • Shiny - Xamarin.Essentials has some fantastic platform abstractions for devices, but Shiny really… err… shines when it comes to deep platform abstractions for things like Background Jobs and location.

  • SkiaSharp - I can’t even tell you how much I love SkiaSharp for doing cross platform 2D Graphics. It’s super fast and super powerful.

  • Xamarin.Essentials - This library provides so many amazing abstractions over the platform APIs. It is now part of the standard template when creating a Xamarin.Forms application. Between Essentials and Shiny I feel like I may never need to write platform specific code ever again.

  • Xamarin Community Toolkit - A collection of Animations, Behaviors, Converters, Controls and Effects for mobile development with Xamarin.Forms. This library is almost certainly going to be a “must have” for new Xamarin.Forms projects. Very importantly, it is providing a bridge of new features as we head towards the MAUI future.


Build and Deploy

Continuous Integration and Continuous Deployment practices these days should be considered a must have. And with the tools available it’s really very simple to get started.

  • Mobile.BuildTools - The Mobile.BuildTools are a collection of MSBuild Tasks that help make MSBuild smarter in handling the build process for CI/CD with Mobile Applications.

  • Visual Studio App Center - Connect to GitHub, Bitbucket, GitLab, or Azure DevOps and build your app in the cloud on every commit. Automatically run unit tests, release to testers and stores, or test your UI on real devices.

  • Azure DevOps - Azure Pipelines - Get cloud-hosted pipelines for Linux, macOS and Windows. Build web, desktop and mobile applications. Deploy to any cloud or on‑premises. Very full featured and customizable.

  • Github Actions - If you are on GitHub then GitHub Actions seems to me to be something which is growing in momentum.

Other Resources

This blog post was meant to be much shorter, but there is just so much awesome stuff available for the Xamarin Ecosystem that I couldn’t help myself. Other resources you might want to check out are:

Wrap-up

So there you have it people, a grab bag of tools, libraries and resources I (and the community) recommend for Xamarin Development. I hope you find it useful. Maybe you have some tools or resources which you consider essential… please let me know or post some comments below. Remember, sharing is caring.

Take care, and happy coding!

kphillpotts

Kym Phillpotts

Geek, Parent, Human, Senior Content Developer at Microsoft. Co-curator of http://weeklyxamarin.com and twitch streaming live coding at http://twitch.tv/kymphillpotts.

Read More