Disclaimer: this is an automatic aggregator which pulls feeds and comments from many blogs of contributors that have contributed to the Mono project. The contents of these blog entries do not necessarily reflect Xamarin's position.

March 21

Connect Unity Cloud Build to Plastic Cloud

This blog post explains how to build your Unity project stored inside a Plastic Cloud Edition repository.

Unity Cloud Build does not provide native support to download code from Plastic, but it is possible to take advantage of the Plastic ability to synchronize with Git to solve the problem.

We explain how to use GitLab as an intermediate storage for Plastic repos so that Unity Cloud Build can access them.

Read more »

March 20

Get Your Apps Ready for Apple’s New Watch Processor Architecture

Last fall, Apple announced that new applications and updates would need to support the Apple Watch Series 4.

“Starting March 2019, all new apps and app updates for iPhone, including universal apps, will need to be built with the iOS 12 SDK and support iPhone XS Max. All new apps and app updates for Apple Watch will need to be built with the watchOS 5 SDK and support Apple Watch Series 4.”

Apple Watch Series 4

The Series 4 watch runs on a new processor architecture, ARM64_32, and the Xamarin team has been hard at work adding support.

Today, we have a preview ready for testing and app submission. It is based upon the Xamarin.iOS SDKs shipping with Visual Studio 2019 and Visual Studio for Mac 8.0, currently in preview.

Get Started!

To get started, install or upgrade to the latest preview of Visual Studio, and then install the appropriate preview of Xamarin.iOS:

After installing the preview, one manual step is required to opt-in to the new support.

  • Right click on the watchOS extension project > Tools > Edit File (or open in a text editor)
  • Add “, ARM64_32” to the MtouchArch node for the Release|iPhone configuration.
  • This will look similar to: ARMv7k, ARM64_32

Release Configuration

Currently, ARM64_32 (and thus Apple Watch Series 4) builds are limited to the Release configuration. Make sure to confirm that you are using Release builds when deploying to the Apple Watch Series 4 as debug builds are not supported in this preview.

Give It A Try!

We encourage you to try it out this preview and we look forward to receiving your feedback. If you have feedback or run into any issues, please create an issue on GitHub so that our team can look into it.

The post Get Your Apps Ready for Apple’s New Watch Processor Architecture appeared first on Xamarin Blog.

Split merge conflicts blocks

One of the most frequent questions we receive about Xmerge, Plastic SCMs built-in mergetool, is why the following merge scenario does not automatically resolve:

Read more »

March 19

Unity Support for Stadia: Here’s what you need to know

If you tuned in to Google’s special keynote at GDC earlier today, you probably heard about their new cloud-based game streaming platform, Stadia. Today, we are excited to announce Unity will make Stadia an officially supported platform. One of our core missions is democratizing game development. That means enabling developers to build for the platforms […]

Announcing Unity and Havok Physics for DOTS

During our GDC Keynote, we announced our partnership with Havok to build a next-generation physics system for Unity. Today, we want to give you more details on what we’ve been collaborating on. When Worlds Collide When we first set out to build our Data-Oriented Technology Stack (DOTS), we wanted to empower creators to build rich, […]

The Heretic, Megacity release, real-time ray tracing, and more news from GDC 2019

We kicked off GDC 2019 in the best way possible – with a keynote filled with major announcements, jaw-dropping demos, and appearances from some of the industry’s most storied franchises. Read on to get the highlights. A full overview of all of our GDC activities can be found on our Unity at GDC page.  […]

March 18

Xamarin.Essentials Adds Detect Shake, Browser Customization, Color Helpers, and More!

Xamarin.Essentials are your ultimate open source library to access native features from a single cross-platform API. Since the first release, we have received awesome feedback on GitHub from developers that integrated it into their apps. We have also received some great pull requests to add some new features and bug fixes that have gone into the newest release 1.1.0 that are available today. This includes the ability to detect shake movement of the device, customization when opening the browser, ability to check for mock location, and several platform helpers.

Detect Shake

Sometimes you need to detect shake movement of a device that your app is running on to open a feedback form or put the app into edit mode. Xamarin.Essentials’ built-in Accelerometer API gives you everything you need to calculate this cross-platform. Having to figure out all of the math and queue systems could be a bit much. So we figured why not just create a unique ShakeDetected event that you can register for. You will still have to start the Accelerometer, but now you have the option to get all changes or just when a shake is detected:

public override void OnAppearing()
    Accelerometer.ShakeDetected += Accelerometer_OnShaked;

void Accelerometer_OnShaked(object sender, EventArgs e)
    ShakeTime = $"Shake detected: {DateTime.Now.ToLongTimeString()}";

public override void OnDisappearing()
    Accelerometer.ShakeDetected -= Accelerometer_OnShaked;

Browser Customization

When you need to launch a website the best approach is to use the built-in Open Browser from Xamarin.Essentials. It will automatically handle opening the system optimized browser with SFSafariViewController and Chrome Custom Tabs. In the new release of Xamarin.Essentials you now have more control over the look. You can also get the feel of the browser including the title visibility and the colors of the toolbar and controls.

await Browser.OpenAsync(uri, new BrowserLaunchOptions
                    LaunchMode = BrowserLaunchMode.SystemPreferred,
                    TitleMode = BrowserTitleMode.Show,
                    PreferredToolbarColor = Color.AliceBlue,
                    PreferredControlColor = Color.Violet

Platform Helpers

The core goal of Xamarin.Essentials is to simplify cross-platform app development. Most of the APIs that are part of the library up until now have abstracted common platform features into a single API. Xamarin.Essentials 1.0 launched with a plethora of built-in unit converters such as converting Miles to kilometers or Celsius to Fahrenheit. With this release, we are pleased to introduce several key helper utilities for converting between .NET and platform structures such as Color, Rect, Size, and Point.

Color Converters

For System.Drawing.Color we want to bring all of the goodies that Xamarin.Forms developers are able to take advantage of such as creating color from Hsl, Hex, or UInt.

var blueHex = ColorConverters.FromHex("#3498db");
var blueHsl = ColorConverters.FromHsl(204, 70, 53);
var blueUInt = ColorConverers.FromUInt(3447003);

Additionally, you can easily convert System.Drawing.Color to the platform specific color structure:

var system = System.Drawing.Color.FromArgb(255, 52, 152, 219);

// Extension to convert to Android.Graphics.Color, UIKit.UIColor, or Windows.UI.Color
var platform = system.ToPlatformColor();

var platform = new Android.Graphics.Color(52, 152, 219, 255);

// Back to System.Drawing.Color
var system = platform.ToSystemColor();

Rect, Size, and Point Converters

Just like the Color extension methods to convert to and from the platform specific classes can be done with Size, Rect, and Point:

var system = new System.Drawing.Size(width, height);

// Convert to CoreGraphics.CGSize, Android.Util.Size, and Windows.Foundation.Size
var platform = system.ToPlatformSize();

// Back to System.Drawing.Size
var system2 = platform.ToSystemSize();

The same can be done for Rect with ToPlatformRectangle and ToSystemRectangle and for Point with ToPlatformPoint and ToSystemPoint.

Community Contributions

We want to call out the amazing community contributions that helped make this release possible:

Contributor Description

Chris Dinon

Use Apply on Android Preferences (#636)

Niklas Schilli

Browser Customization APIs (#196)
Fix Launcher Sample (#629)

Pedro Jesus

Add IsFromMockProvider for Geolocation (#676)
Detect Shake API (#126)

We have also received several great bug reports and feature requests from the community, which has been great to see! If you are looking to help out simply head over to the Xamarin.Essentials GitHub page to open an issue or send a pull request.

Learn More

You can learn more by browsing the full Xamarin.Essentials documentation including new documentation for Detect Shake, Color Converters, Platform Extensions, Browser options, and more. Additionally, each week you can find a brand new Xamarin.Essentials API of the Week videos covering a single feature in just a few minutes.

The post Xamarin.Essentials Adds Detect Shake, Browser Customization, Color Helpers, and More! appeared first on Xamarin Blog.

Isometric 2D Environments with Tilemap

With the release of Unity 2018.3, we introduced Isometric Tilemap support – closely following Hexagonal Tilemap support which was added in the 2018.2 release. The new Tilemap features provide a fast and performant way to create 2D environments based on isometric and hexagonal grid layouts, the likes of which are seen in many game classics, […]

March 17

March 15

Introducing the New Xamarin Customer Showcase

Developers around the world use Xamarin every day to build beautiful native mobile apps with .NET. What better way to highlight the amazing work that these developers are doing than with a customer showcase. As you browse through you will find customers building apps for all industries including consumer-facing, service, healthcare, charity, and enterprise.

Each customer in the showcase has a full case study to learn more about how they leveraging .NET to build mobile apps with Xamarin. It also showcases other services here at Microsoft including Azure, App Center, Azure DevOps, and more! Additionally, you can even download and try these apps from the app stores including several apps developed here at Microsoft:

Community Showcase

As you browse through the customer shows you will find additional customer stories on the official Microsoft Customers site covering all Microsoft technologies. You will also find a link directly to the new community built and community maintained community showcase: BuiltWithDot.net

There you can browse through apps and libraries built not only with Xamarin but with all .NET technologies. You can even submit your very own project to get it featured, so head over there now and submit your app today.

We hope that you love the new customer showcase highlight amazing companies and developers building .NET mobile apps with Xamarin.

The post Introducing the New Xamarin Customer Showcase appeared first on Xamarin Blog.

March 14

Next week at GDC: How to stream the Keynote and where to go

Every year at GDC we make major announcements and debut our latest technologies. We can’t wait to reveal our latest features, jaw-dropping demos, spectacular games made with Unity, and plenty more next week. Here’s how you can stream our keynote, as well as some opportunities to connect with us that you won’t want to miss. […]

March 13

A Quick Update on Google Components for iOS and Android

One of the best parts about using Xamarin for mobile development is access to all of the platform APIs from C# bindings. Additionally, any native iOS or Android library can be consumed by a Xamarin application by creating a custom binding project. That’s exactly what the Component Team here at Microsoft does for the most popular libraries that developers need access to. In the last 6 months, there have been drastic changes across several key libraries such as Google Play Services and Android Support Libraries. To catch everyone up on work that the team has been doing, what is available for you today, and what’s coming in the future.

Open Source & Issue Reporting

The first thing to share is that all of the work our team does is completely open source on GitHub. This is the best place to follow the work for any SDKs that our team supports. It is also the official place to report any issues. Here is a quick list of the official open source components that you may want to follow:

To stay up to date by Starring each of the repositories on GitHub. Turn on notifications under Watch as well to ensure you don’t miss a release!

We also encourage pull requests to any of the component repositories, including fixes for existing bindings or new 3rd party bindings, that you may be doing yourself.

Updates on Google APIs

Google moves fast updating their APIs across iOS and Android. We wanted to give you an update on the libraries and technical work that we have been doing to keep up to date.

Core Work

Recently we’ve invested substantial time and effort into improving the way we create and maintain bindings for massive SDKs such as Google Play Services / Firebase for Android and Android Support libraries.

A lot of these changes have been happening quietly, behind the scenes but they are nearly complete. These improvements will not only help increase the reliability and consistency of our updates but allow us to react more quickly to new releases and changes in the future.

Google APIs for iOS

We support many of the major Google and Firebase SDKs from Google for iOS and you can find a full list and version number mapping on the official Google APIs for iOS GitHub repository. Newly added to the list is support for Firebase ML-Kit. Recently some libraries were deprecated by Google and the updates broke older versions of our bindings such as mobile ads. These breaking changes were reported by the community which alerted us to take quick action to prioritize finishing the work the team had already started.

AndroidX & Support Libraries

If you haven’t already done so, check out our latest bindings for Android Support libraries v28 with multi-targeting to make installation in your projects easier.

The Components and Android teams have also been hard at work on AndroidX support for Xamarin. Our initial work at providing bindings to these libraries is almost complete, and we will be releasing preview packages for them soon. You can track the binding work on the AndroidX branch of the official AndroidX GitHub repository. Later this year we will be introducing support for helping you migrate your existing apps and third-party dependencies which currently use Android Support libraries to the new AndroidX ecosystem.

Android WorkManager

You asked for it, and we’re on it! We’ll be releasing bindings for Android Architecture WorkManager very soon so you can get on with scheduling your work!

Google Play services for Android

This year saw another major change in the Android ecosystem with Google splitting up Play services and Firebase libraries for Android into individually released artifacts. As part of our previously mentioned core work on improving our binding process, we are very close to bringing you another release of bindings for Google Play services and Firebase libraries for Android. Google has deprecated some older library versions and included bugfixes in these versions which you’ll soon be able to use in your apps! Our progress can be seen in the 15.0.1-binderate branch of the official Google Play services & Firebase for Android GitHub repository.

Future Roadmap

The team is always hard at work keeping up with the latest updates and changes that library creators are making in these SDKs. We will always prioritize breaking app SDK changes in our work sprints as we are made aware of them. With the vast amount of components that the team supports we are taking a strategy of prioritizing based on core consumption of libraries through NuGet. Through looking at the numbers we know that there are several essential libraries that a vast majority of our developers are using today and those are put at the top of our list for updates. We are here to listen and you can always chat with us in our Xamarin Components Gitter chat room.

The post A Quick Update on Google Components for iOS and Android appeared first on Xamarin Blog.

multi-instance: a fault tolerant on-premise server

Over the last four months, part of the team was quite busy working on an evolution for the Plastic server.

We wanted to provide Enterprise Edition customers with a fault-tolerant, zero-downtime server for their on-premise setups.

This is the story of how we achieved it.

Read more »

Too many cores

Arming yourself

ARM is important for us. It’s important for IOT scenarios, and it provides a reasonable proxy for phone platforms when it comes to developing runtime features.

We have big beefy ARM systems on-site at Microsoft labs, for building and testing Mono – previously 16 Softiron Overdrive 3000 systems with 8-core AMD Opteron A1170 CPUs, and our newest system in provisional production, 4 Huawei Taishan XR320 blades with 2×32-core HiSilicon Hi1616 CPUs.

The HiSilicon chips are, in our testing, a fair bit faster per-core than the AMD chips – a good 25-50%. Which begged the question “why are our Raspbian builds so much slower?”

Blowing a raspberry

Raspbian is the de-facto main OS for Raspberry Pi. It’s basically Debian hard-float ARM, rebuilt with compiler flags better suited to ARM11 76JZF-S (more precisely, the ARMv6 architecture, whereas Debian targets ARMv7). The Raspberry Pi is hugely popular, and it is important for us to be able to offer packages optimized for use on Raspberry Pi.

But the Pi hardware is also slow and horrible to use for continuous integration (especially the SD-card storage, which can be burned through very quickly, causing maintenance headaches), so we do our Raspbian builds on our big beefy ARM64 rack-mount servers, in chroots. You can easily do this yourself – just grab the raspbian-archive-keyring package from the Raspbian archive, and pass the Raspbian mirror to debootstrap/pbuilder/cowbuilder instead of the Debian mirror.

These builds have always been much slower than all our Debian/Ubuntu ARM builds (v5 soft float, v7 hard float, aarch64), but on the new Huawei machines, the difference became much more stark – the same commit, on the same server, took 1h17 to build .debs for Ubuntu 16.04 armhf, and 9h24 for Raspbian 9. On the old Softiron hardware, Raspbian builds would rarely exceed 6h (which is still outrageously slow, but less so). Why would the new servers be worse, but only for Raspbian? Something to do with handwavey optimizations in Raspbian? No, actually.

When is a superset not a superset

Common wisdom says ARM architecture versions add new instructions, but can still run code for older versions. This is, broadly, true. However, there are a few cases where deprecated instructions become missing instructions, and continuity demands those instructions be caught by the kernel, and emulated. Specifically, three things are missing in ARMv8 hardware – SWP (swap data between registers and memory), SETEND (set the endianness bit in the CPSR), and CP15 memory barriers (a feature of a long-gone control co-processor). You can turn these features on via abi.cp15_barrier, abi.setend, and abi.swp sysctl flags, whereupon the kernel fakes those instructions as required (rather than throwing SIGILL).

CP15 memory barrier emulation is slow. My friend Vince Sanders, who helped with some of this analysis, suggested a cost of order 1000 cycles per emulated call. How many was I looking at? According to dmesg, about a million per second.

But it’s worse than that – CP15 memory barriers affect the whole system. Vince’s proposal was that the HiSilicon chips were performing so much worse than the AMD ones, because I had 64 cores not 8 – and that I could improve performance by running a VM, with only one core in it (so CP15 calls inside that environment would only affect the entire VM, not the rest of the computer).

Escape from the Pie Folk

I already had libvirtd running on all my ARM machines, from a previous fit of “hey one day this might be useful” – and as it happened, it was. I had to grab a qemu-efi-aarch64 package, containing a firmware, but otherwise I was easily able to connect to the system via virt-manager on my desktop, and get to work setting up a VM. virt-manager has vastly improved its support for non-x86 since I last used it (once upon a time it just wouldn’t boot systems without a graphics card), but I was easily able to boot an Ubuntu 18.04 arm64 install CD and interact with it over serial just as easily as via emulated GPU.

Because I’m an idiot, I then wasted my time making a Raspbian stock image bootable in this environment (Debian kernel, grub-efi-arm64, battling file-size constraints with the tiny /boot, etc) – stuff I would not repeat. Since in the end I just wanted to be as near to our “real” environment as possible, meaning using pbuilder, this simply wasn’t a needed step. The VM’s host OS didn’t need to be Raspbian.

Point is, though, I got my 1-core VM going, and fed a Mono source package to it.

Time taken? 3h40 – whereas the same commit on the 64-core host took over 9 hours. The “use a single core” hypothesis more than proven.

Next steps

The gains here are obvious enough that I need to look at deploying the solution non-experimentally as soon as possible. The best approach to doing so is the bit I haven’t worked out yet. Raspbian workloads are probably at the pivot point between “I should find some amazing way to automate this” and “automation is a waste of time, it’s quicker to set it up by hand”

Many thanks to the #debian-uk community for their curiosity and suggestions with this experiment!

2D Pixel Perfect: How to set up your Unity project for retro 8-bit games

Retro games with simple mechanics and pixelated graphics can evoke fond memories for veteran gamers, while also being approachable to younger audiences. Nowadays, many games are labeled as “retro”, but it takes effort and planning to create a title that truly has that nostalgic look and feel. That’s why we’ve invited the folks from Mega Cat […]

March 12

Enhanced Xamarin Development With MFractor

This post was guest authored and contributed by Matthew Robbins. Matthew is a Microsoft MVP and the founder of MFractor, incredible Xamarin tools for Visual Studio Mac.


MFractor is a powerful Visual Studio for Mac extension to streamline the development of your Xamarin applications. By improving many common Xamarin workflows, MFractor can save a significant amount of development time and effort over the course of your project.

In this article, we’ll explore three of MFractors handiest features, the XAML editor, Image Manager, and Font Importer. We will also discuss how we can leverage them to save time and effort when building our Xamarin apps. Let’s get started by taking a look at the XAML editor.

XAML Editor

Have you ever created a data-binding and ran your application only to discover you misspelt the property name? It’s an annoying mistake and let’s be honest, we’ve all done this! Wouldn’t it be great if our ViewModel properties were included IntelliSense to prevent this?

ViewModel property IntelliSense is one of the many features in MFractors XAML editor. By automatically detecting the ViewModel for a XAML file, MFractor suggests your ViewModels properties in IntelliSense. It even lets you generate properties and commands onto your ViewModel.

MFractor checks binding expressions for many common issues, for example, does that property exist in the ViewModel? Additionally, it can provide detailed binding tooltips and includes navigation shortcuts to let you quickly move between your View and ViewModel. The XAML editor also includes dozens of additional completions, 70+ XAML inspections, insightful tooltips, navigation shortcuts and 50+ XAML refactorings to make editing XAML faster and easier.

For example, MFractor can suggest image assets, static and dynamic resources, grid rows and columns and much more. Want to see what image is being used in XAML? Simply hover over the image to see a preview.

MFractors XAML editor is available for free in MFractor Lite; use it in up to 4 XAML files per day!

Image Asset Management

Imagine that your designer has just handed you a bunch of image assets. Now you need to add them to your Android and iOS projects. We’d have to copy each image into the different density folder, then manually add them one by one into our projects. This highly manual process is a big and expensive time sink in app development.

To improve this workflow, MFractor’s Image Importer can generate new images for the different densities from a source image. Choose a source image and the Image Importer will create a new version of that image for each density. It will then place them into the correct folders and add them to our Android and iOS projects.

The Image Importer is just one of many features included in MFractors Image Manager. A useful tool to simplify image resource management for your iOS and Android projects. Access the Image Manager by going to the MFractor menu in the top menu bar and choosing Manage Image Assets.

The Image Manager gives a ‘birds-eye’ view of all the images across your application. Groups them by name in the left list and displays a preview of that asset. Thus enabling you to visually explore the images in your projects.

The Image Manager can:

  • Delete all occurrences of an image from your app. Right click on an image, choose Delete and MFractor will remove all densities from your Android and iOS projects.
  • Optimise your image assets using TinyPNG; this can save 30-70% of the final size of each image in your app.
  • Show you a preview of an image asset when you are choosing an image through XAML IntelliSense.
  • Open image assets within the IDE. Double click on an Android or iOS image to open it in the Image Manager.
  • And much, much more!

You can learn more about the Image Manager in our Simplified Image Asset Management for Xamarin Apps blog post.

The Image Manager is available in MFractor Professional.

Font Importer

Custom fonts are one of the backbones of modern app development. They are critical to an apps branding and fonts like FontAwesome are often used for iconography.

To use a font in Xamarin.Forms, we include adding the font to our Android and iOS projects. Update the Info.plist for iOS to use the FontFamily property and apply the fonts in XAML. All in all, it’s a lot of manual work. It’s very easy to miss a step and then spend an hour debugging to fix it.

Instead of doing this fiddly work, we can use MFractors Font Importer to add a ttf or otf file into our Android an iOS projects. This handy tool adds the new font in each project, creates an Info.plist entry in any iOS projects, and generates the font lookup XAML ready for us to use:

Access the Font Importer through the top MFractor menu. Then select -> Import, Font.

You can learn more about the Font Importer in our Using Custom Fonts In Xamarin.Forms blog post. The Font Importer is available in MFractor Professional.


MFractor is available in two flavours; Lite (free) and Professional (paid).

MFractor Lite is a fantastic value by enabling our XAML Editor in four files per day. Use MFractors XAML IntelliSense to gain ViewModel property code completion. Use 70+ code inspections to spot a range of common issues, 50+ code actions, detail tooltips and navigation shortcuts.

If you want even more powerful features, upgrade to MFractor Professional to use:

To get MFractor, open the Extension Manager using the Extensions item in the main Visual Studio menu. Then, under “Gallery and IDE Extensions”, select MFractor to install. To learn more about MFractor, head to www.mfractor.com.

PS: Use the discount code MFRACTOR-101 to take 10% off MFractor Professional 😉

The post Enhanced Xamarin Development With MFractor appeared first on Xamarin Blog.

Look closer. That’s the power of real-time 3D for AEC

In March, we had our first webinar for AEC (Architecture, Engineering, and Construction), allowing audiences to see how to beautify models to make their pitches really stand out. Read on to catch the highlights. By bringing 3D models straight into Unity, you can add textures and lighting, or even create a video for people to […]

March 11

Creating Assets with Photogrammetry using a rotating surface

Photogrammetry empowers you to create realistic high-fidelity assets at speed from everyday objects. By placing a variety of small objects on a rotating surface, you can capture them from every angle. We recently published an expert guide about that 360° capture process that helps you master the art of photogrammetry. All you need to have […]


Monologue is a window into the world, work, and lives of the community members and developers that make up the Mono Project, which is a free cross-platform development environment used primarily on Linux.

If you would rather follow Monologue using a newsreader, we provide the following feed:

RSS 2.0 Feed

Monologue is powered by Mono and the Monologue software.