Visual Studio for Mac: A bunch of new features but Xcode and VS Code are tough competition
Making sense of Microsoft's dev tool family
Hands On Microsoft this week opened the gates on Visual Studio for Mac 2019 8.3, a flexible development environment for .NET, and The Reg can give you the lowdown on some of the new features.
But first, let's see how the Microsofties got here. Redmond has three coding tools under the Visual Studio brand, all of which have different ancestries.
Xamarin is a cross-platform .NET framework designed mainly for iOS and Android, but also with support for macOS applications. A confusing thing is that Xamarin does not use .NET Core, though it does support the .NET Standard 2.1 specification in its latest version. See here for guidance.
Xamarin evolved from the open-source Mono framework, an implementation of .NET for Windows and Linux. Mono had its own IDE, called MonoDevelop, which unlike Visual Studio was originally written entirely in C#. Xamarin adapted MonoDevelop to become Xamarin Studio. When Microsoft acquired Xamarin in 2016, Xamarin Studio became a Mac-only IDE and was renamed Visual Studio for Mac. You can still get MonoDevelop for Mac, Windows and Linux, though the Mac download is now Visual Studio for Mac, and on Windows you have to build it from source.
Visual Studio Code (VS Code) is a cross-platform editor built with the Electron framework, using Node.js and the Chromium browser engine Blink. VS Code was first previewed in 2015 and has been a remarkable success, now ranking as the top development environment on the popular coding Q&A site StackOverflow by a huge margin. Although lightweight in comparison to Visual Studio, VS Code straddles the boundary between an editor and an IDE, with debugging support and a rich range of extensions.
Following the acquisition, Microsoft has been working on sharing some of its Visual Studio for Windows technology with the Mac version. This goes alongside the development of the cross-platform .NET Core, which has allowed code sharing between Mono and .NET Core, though Mono has not been completely replaced. It is still the case that Visual Studio for the Mac is a very different thing from Visual Studio for Windows.
What can Visual Studio for Mac do?
VS Mac is primarily for Xamarin development. The majority of Xamarin developers code applications for iOS and Android, and there are two different approaches to this.
Xamarin.iOS and Xamarin.Android let you write non-visual code in C# while using native tools to build the UI, Xcode for iOS or a built-in Android designer for Android.
Xamarin Forms is a cross-platform GUI framework. You design the user interface with XAML and build for your chosen target platforms.
You can also go beyond iOS and Android. Xamarin.Mac is for Cocoa applications and uses a similar model to Xamarin.iOS. Xamarin Forms can also target Windows UWP (Universal Windows Platform) and, in preview, macOS.
There is also steadily improving support for games development with Unity.
A glance at the Xamarin forums gives a crude guide to usage. Xamarin Forms has more than double the activity of any other section (over 51,000 threads). Xamarin.Android 34,000, Xamarin.iOS 21,000, and relatively low activity elsewhere – 343 threads for Xamarin.Mac, for example.
Visual Studio for the Mac also supports ASP.NET Core development using Razor, Angular or React.js, and serverless with Azure Functions.
Under the Vulture's Claw
We installed VS Mac on a 2018 Mac Mini. The installer pulls down the Android SDK for you, but you have to install Xcode separately. All straightforward, but there is a puzzle about .NET Core. Version 3.0 is installed automatically, and you can create ASP.NET Core apps, but when you go to create a mobile app, the option to create an ASP.NET Core API back end is disabled because it "requires an ASP.NET Core installation".
The look and feel of the IDE is different from Visual Studio on Windows, as you would expect from the product history. It feels more basic and less refined, and has only a fraction of the features of its similarly named cousin.
There is no visual designer for Xamarin Forms, but there is a visual preview. Unfortunately, this did not work for iOS on our very simple demo app, showing instead a MonoTouch exception message. But the app itself worked fine on both Android and iOS. The IDE did crash once or twice but with no loss of work.
Another experiment was to create a Xamarin.Mac application and edit the generated storyboard, which defines the user interface using Xcode. This worked perfectly.
VS Mac 8.3 supports .NET Core 3 and C# 8.0, and Xamarin now supports Android 10, Xcode 11 and iOS 13.
One of the big new features, though in preview, is XAML hot reload in Xamarin Forms. This lets you amend the XAML file defining your UI, save it, and see the changes instantly in the app running on an emulator or device.
There is a new dialog for the NuGet package manager, but care is needed because not all NuGet packages will work on the Mac.
These are highlights; the full list of what's new is here.
Microsoft has two successful Visual Studio development tools, and then there is VS Mac, which is important only for Mac-based Xamarin developers. Xamarin.Mac and Xamarin Forms targeting macOS are both interesting for .NET developers wondering how to get their Windows apps onto a Mac, but both are neglected relative to iOS and Android. If you want to develop for ASP.NET Core you would be better off with Visual Studio on Windows, and probably better off with VS Code with its much larger community and rich extension support. Strategically, it might make sense for Microsoft to invest in making VS Code more useful for Xamarin developers. All that said, VS Mac is substantially improved and the price is right: even the free Community edition is a capable tool. ®