Introduction to Mono on macOS
Mono supports macOS version 10.9 (Mavericks) and later.
Most users would be using the MonoDevelop IDE to create their projects. You will have a choice of GUI toolkits for building your application, from pure cross platform, to Mac-specific using MonoMac. 32 and 64 bit support. The Mono packages published on this web site provide both a 32-bit and a 64-bit Mono VM. Mono runs on Mac, this page describes the various features available for users who want to use Mono or Mono-based technologies on macOS. Installing Mono on macOS is very simple: Download the latest Mono release for Mac; Run the.pkg file and accept the terms of the license. Mono is now installing.
Monodevelop Windows
You can use Mono on macOS to build server, console and GUI applications. Read below for the options available for GUI application development.
If you are interested in creating native GUI applications, use the MonoMac bindings and our MonoDevelop add-in. Read the description on MonoMac for more information on how to get started.
Installing Mono on macOS
You can use Mono either as a runtime to run existing application, or as an SDK to develop new applications with Mono.
Visit the download page to find the latest macOS package. Run it and follow the instructions there, you can either get a basic runtime, or a complete runtime plus a software development kit.
If you plan on developing applications with Mono, we suggest that you also install the MonoDevelop IDE after you install Mono.
Pdf xchange for mac. The Mono package includes:
- The Mono Runtime
- GUI Toolkits: Windows.Forms and Gtk# for macOS.
- Note: the MonoMac GUI toolkit for native macOS GUI development is currently a separate download.
- SDK: C#, Visual Basic compilers, assemblers and tools
- XSP ASP.NET server
- Manual pages.
This package installs as a framework into /Library/Frameworks/Mono.framework
(the same way the Java packages are installed). The executable binaries can be found in /Library/Frameworks/Mono.framework/Versions/Current/bin
. If you’d like to access the mono manpages you’ll have to add /Library/Frameworks/Mono.framework/Versions/Current/man
to your manpath. The macOS Mono package does not include Gtk#, XSP or mod_mono. These will have to be compiled from source.
Our packages currently require macOS 10.9 or better, for older versions, you will need to build from source code.
Using Mono on macOS
At this point, you must use Mono from the command line, the usual set of commands that are available on other ports of Mono are available.
To build applications you can use “mcs”, to run then you can use mono.
From a Terminal shell, you can try it out:
Most users would be using the MonoDevelop IDE to create their projects.
You will have a choice of GUI toolkits for building your application, from pure cross platform, to Mac-specific using MonoMac.
32 and 64 bit support
The Mono packages published on this web site provide both a 32-bit and a 64-bit Mono VM.
Starting from Mono 5.2 the mono
command defaults to 64-bit, you can use the --arch=32/64
switch to control the bitness.
The 64 bit support has a few limitations today:
- Our Windows.Forms implementation uses Carbon, and as such, it would not work with a 64-bit Mono.
Building Client Applications
There are a few choices to build client applications on macOS, you should pick the technology that better fits your goals, your choices are:
Toolkit | Runs on Linux | Runs on Windows | Runs on Mac | Binding Style | License | Status |
MonoMac | no | no | yes | Strongly typed C# binding to Cocoa APIs | MIT X11 | Actively developed, builds on the design lessons from MonoTouch but still incomplete. This will be the new default binding for Mono on macOS. Separate download. |
Gtk# | yes | yes | yes | Strongly typed C# binding to the cross platform Gtk+ API. Applications look foreign on macOS. | LGPL v2 | Actively developed, cross platform. Bundled with Mono. |
Windows.Forms | yes | yes | yes | Cross platform implementation of Microsoft’s Windows.Forms. Applications look foreign on macOS. | MIT X11 | The Windows.Forms API was frozen in time by Microsoft. Bundled with Mono. |
MonObjc | no | no | yes | Binding to the native Cocoa APIs, but requires manual use of Objective-C selectors to work with, relatively thin wrapper around the underlying APIs. | LGPL v3 | Actively developed. Separate download. |
CocoaSharp | no | no | yes | Binding to the native Cocoa APIs, but requires manual use of Objective-C selectors to work with, relatively thin wrapper around the underlying APIs. | MIT X11 | No longer developed, no longer maintained, deprecated. Bundled with Mono. |
Running Mono applications on macOS
Running applications on macOS is very similar to linux systems, from the terminal:
For GTK# applications, it’s easiest to run them the same way but using xterm from X11.app
Windows.Forms
Mono’s implementation of the System.Windows.Forms API is built on top of Carbon and can only run with Mono on 32 bit systems. The look and feel of System.Windows.Forms applications mimics the Windows style and does not currently render like a native macOS application.
Third Party Libraries
ObjC# is a transparent two way bridge that allows the CLR to access the rich underlying ObjectiveC frameworks as well as providing direct access to the CLR frameworks from the ObjectiveC language.
Uninstalling Mono on macOS
Run this script in a terminal:
It also makes it easy for developers to port .NET applications created with Visual Studio to Linux and macOS maintaining a single code base for all platforms.
Multi-platform
Supports Linux, Windows and macOS.
Advanced Text Editing
Code completion support for C#, code templates, code folding.
Configurable workbench
Fully customizable window layouts, user defined key bindings, external tools
Multiple language support
C#, F#, Visual Basic .NET, Vala
Integrated Debugger
For debugging Mono and native applications
GTK# Visual Designer
Easily build GTK# applications
ASP.NET
Create web projects with full code completion support and test on XSP, the Mono web server.
Other tools
Source control, makefile integration, unit testing, packaging and deployment, localization
What's New:
Runtime
Hardened Runtime and Notarization support on macOS
The Mono binary installed by the .pkg for macOS is now using the Hardened Runtime capabilities and the package was notarized to comply with Apple’s new restrictions: https://developer.apple.com/documentation/security/notarizing_your_app_before_distribution.
Download Monodevelop For Mac Os X
This allows the package to work on the upcoming macOS 10.15 Catalina without showing warning dialogs.
Interpreter improvements
The Mono interpreter was updated to support the Windows operating system.
We also completed a lot of groundwork for upcoming future optimizations in the interpreter, like constant folding.
Bitness independent AOT cross compiler
The Ahead-Of-Time (AOT) cross compiler was updated to no longer require being executed with the same bitness that it should generate code for. This means a 64bit Mono can now emit AOT code for 32bit targets.
This work was mainly done to support executing the AOT cross compiler on macOS 10.15 Catalina (which is 64bit only) as we still need to generate code for 32bit targets like older iPhone and Apple Watch devices.
WebAssembly
We continue to work on making our WebAssembly support better. Various sets of issues with the debugger have been resolved in this release and general performance and feature work is happening as well.
LLVM improvements Adobe flash player for mac download chrome.
We now leave it up to the LLVM framework to insert safepoints. Later optimizations can understand safepoints then which leads to better generated code. See https://github.com/mono/mono/pull/11789
The LLVM backend is also supported on the Windows operating system now.
PPC JIT optimizations
The PowerPC JIT received a bunch of optimization from community contributor Calvin Buckley (@NattyNarwhal).
Experimental build support for Fuchsia
A very minimal and experimental support for building Mono targeting the Fuchsia OS landed in the build system.
Class Libraries
.NET Standard 2.1 support
We updated our class libraries to support the latest additions to .NET Standard. You can now run a library compiled against the .NET Standard 2.1 specification on Mono.
CoreFX integration
We continued to replace some of our classes with the implementation from CoreFX to improve performance and compatibility with .NET.
libgdiplus update to 6.0.2
The libgdiplus native library is used for implementing System.Drawing on Unix platforms. This release contains many important improvements from our community members.
Hp printer driver for mac os. Special thanks go to Hugh Bellamy (@hughbe), Frederik Carlier (@qmfrederik) and Filip Navara (@filipnavara) for their awesome contributions!
System.Windows.Forms
More fixes and layout improvements for different controls made by external contributors have landed in this release .
Tools
C# 8 language version support in csc and msbuild
The C# compiler and msbuild tooling were updated to versions that support the final C# 8 language specification.
The Default Interface Methods (DIM) feature also received a few runtime enhancements.
NuGet
Bundled NuGet version has been upgraded to 5.2 RTM.
Resolved Issues
- #7377 - [Mono.Debugger.Soft] Connections are not properly closed
- #7452 - Download link for macOS is osbsolete (5.8 instead of 5.10)
- #7845 - Don’t install monograph
- #8360 - [System.Net.Sockets] flakey failures of SocketTest.TestSelect1 on Darwin systems
- #8486 - struct with 3 bytes not marshaled correctly with LLVM on watchOS
- #8747 - FileSystemWatcher calls event after it is Disposed
- #9267 - Release tarballs should be compressed with xz
- #9621 - 64 bit cross compilers targeting 32 bit platforms
- #9664 - DateTime.Now or Timezone information do not transition out of DST for all time zones
- #10101 - ref local of jagged array leads to InvalidProgramException
- #10277 - [Reflection] Event accessors don’t inherit ReflectedType
- #10645 - WebException is thrown when reading from WebException.Response.GetResponse() stream
- #11431 - Add Brotli compression to existing System.IO.Compression assembly
- #11489 - IronPython 2.7.9 strange issue on mono 5.16
- #11643 - mkbudle problem - Illegal byte sequence
- #12157 - new DriveInfo(Path.GetTempPath()) crashes on macOS
- #12182 - LLVM AOT caches require SSE4.1-capable CPU
- #12747 - System.Reflection.Emit.ParameterBuilder.SetCustomAttribute() throws undocumented ArgumentOutOfRangeException
- #12831 - [iOS] Generic sharing with long float arguments list
- #12839 - [Windows] block_guard_restore_aligment_on_exit.exe frequently times out on CI
- #12843 - Mono Android debugger crashes using HttpClient wrapped in Async Method
- #12871 - wasm var co = new System.Net.CookieContainer(); error System.DllNotFoundException: libc
- #12881 - MonoDevelop SDB regressions
- #12945 - corlib-xunit tests taking 10x longer in the coop configuration
- #12964 - [debugger][wasm] Assertion at mono/metadata/loader.c:2500, condition ‘' not met
- #12981 - [WASM] Transform.c:2856, condition `' not met
- #12988 - [WASM] LLVM failed for ‘ObservableCollectionExtensions.InternalUpdate’: incoming phi sreg1
- #12998 - [WASM] llvmonly-runtime.c:804, condition `' not met
- #13028 - FSharpType.IsUnion broken inside of F# Interactive due to missing System.Reflection.Emit.AssemblyBuilder.ReflectionOnly implementation
- #13030 - Directory.GetLogicalDrives () missing SystemNative_GetAllMountPoints pal function
- #13056 - AV inside mono_local_cprop+0x23f
- #13150 - [WinForms] Related Forms closing
- #13163 - Task: Use async DNS resolution in Socket and web stack code.
- #13195 - [wasm][ci] Intermittent failures with ChakraCore Tests
- #13224 - iOS SDKs test app build doesn’t work when not in sdks/ios directory
- #13231 - CGPattern causes “Attempting to JIT compile method” exception since VS 7.5
- #13250 - Setting CustomErrorsMode for RemotingConfiguration throws NotImplementedException
- #13261 - [sdb] StackOverflow when invoking many methods from client debugger
- #13282 - [SWF] Method OnClosed should pass FormClosedEventArgs type, instead of EventArgs
- #13284 - Checked ulong relational operation throws wrong OverflowException on armeabi-v7a
- #13297 - [WASM] decompose.c:1471, condition `cfg->cbb first_bb’ not met
- #13311 - [sdb] Failure to suspend
- #13319 - Crash executing static methods on interfaces
- #13350 - MemberInfo.ReflectedType returns wrong reflected type for an event method
- #13374 - Crash executing default implemented property in interface
- #13412 - Bump netstandard.dll assembly version to 2.1
- #13445 - Fork regression in Mojave due to MAP_JIT
- #13452 - [Linux] Mono (5.18.0.268) crashes in String:IndexOf(char value, int startIndex)
- #13454 - watchOS apps crash on launch if built with LLVM
- #13455 - AOT crashes with “MVAR 0 (Ts) cannot be expanded with type 0x1e” when compiling monotouch_System.Core_xunit-test.dll
- #13460 - AOT crashes with “Instruction does not dominate all uses” when compiling monotouch_System.Core_xunit-test.dll
- #13463 - [WASM] Mixed Mode: function signature mismatch
- #13466 - Crash at runtime likely related to protected accessibility of a method declared in an interface.
- #13467 - Unexpected System.MethodAccessException is thrown for a protected method declared in an interface
- #13478 - Undefined symbol ___sync_lock_test_and_set_4 on armv7 in xamarin-macios 2019-02
- #13479 - System.Runtime.CompilerServices.UnsafeTests attempting to JIT compile on iOS devices
- #13508 - ILAsm: adds ‘virtual’ attribute to sealed default interface methods
- #13522 - AOT issue on WatchOS: “* Assertion at mini-llvm.c:9381, condition `fields [2 + i]’ not met “
- #13526 - The repl (monotouch_tv_runtime) assemblies don’t work for tvOS
- #13597 - Runtime Error when using span on LeetCode
- #13607 - Assertion in xamarin-macios link sdk test: “mini-generic-sharing.c:568, condition `is_ok (error)’ not met, function:inflate_info, Could not inflate generic type, due to MVAR 0 (T_ULONG) cannot be expanded with type 0x1e”
- #13610 - Returning tuple broken when enabling fullAOT+LLVM
- #13639 - mono-cil-strip crashes when called against the monotouch_Microsoft.CSharp_xunit-test.dll
- #13654 - Interpreter Crash When Doing Fancy Reflection
- #13672 - [2019-02] Xamarin.Android runtime tests crash on free
- #13714 - Exception during static constructor loading is not cleaned up
- #13775 - New Mono drop crashing in C# symbol tests
- #13787 - [wasm] Uint8ClampedArray.From(byte[]) invalid cast
- #13804 - [MacSDK] pkg-config is 32-bit only
- #13834 - Mac crash reports do not give the right SizeOfImage
- #13878 - System.Reflection.Emit.DynamicMethod:CreateDelegate (?) crashes XM apps when under hardened runtime
- #13888 - (FullAOT) Ran out of trampolines of type 3
- #13889 - [llvm] Bounds checks are not eliminated
- #13923 - [DIM] [CoreCLR Test] boring not working
- #13925 - [DIM] [CoreCLR Test] abstractcalls not working
- #13941 - Crash During AOT of ASP.NET Core Assemblies
- #13974 - mono: symbol lookup error: /usr/lib/libmono-llvm.so: undefined symbol: mono_class_get_generic_class
- #14005 - Method mono_type_is_generic_parameter is not exposed in shared libraries
- #14079 - Interpreter Crash on Reference Source System.Web.Extensions
- #14143 - Techempower Platform Plaintext Hangs on Every Request using LLVM JIT
- #14170 - “Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR)” after debugger pauses and then continues on nested exception
- #14181 - Pango modules.cache contains jenkins builder path
- #14195 - 5.20.1.19 configure fails if enable-cxx but no C++ compiler found
- #14214 - HttpClient.SendAsync() with > 2 GB response body.
- #14215 - Suggestion: switch to 7z native format instead of ZIP for Mono archives
- #14234 - SqliteMembershipProvider initialization bug (Failed to map path ‘/’).
- #14243 - [Wasm] Assertion at mini-llvm.c:2106, condition 'clause->flags MONO_EXCEPTION_CLAUSE_NONE || clause->flags MONO_EXCEPTION_CLAUSE_FINALLY || clause->flags MONO_EXCEPTION_CLAUSE_FAULT' not met
- #14246 - Interpreter crashes when encountering build-in types
- #14247 - Assertion on 32-bit iOS device with thumb code
- #14255 - Copying from Mono port of Windows Forms doesn’t work in some programs on Linux
- #14261 - LLVM Generates Wrong IndexOf Span code
- #14290 - [ios] Non-public API usage when submitting app
- #14543 - Decoded custom attribute values leak the encoded value receiver
- #14551 - Result for EnumCompareTo differs from Core implementation
- #14585 - [tests] Don’t send HTTP requests to Google
- #14669 - mempool allocate bug?
- #14729 - interpreter tests fail on iOS and tvOS for mscorlib tests
- #14792 - [sdks][ios] Perform the appropriate cast of objc_msgSend and friends
- #14793 - Mono-Native not working on MacOS Catalina
- #14809 - Cannot box IsByRefLike type 'System.ReadOnlySpan'1' in Forms designer tests with 6.0
- #14839 - [xamarin] TimeZoneInfo.Local always returns “Local” name
- #14841 - opt: Unknown command line argument ‘-place-safepoints’ in XI 2019-06 integration
- #14871 - [wasm] System.Text.Json struct serialization fails (but works on CoreCLR)
- #14872 - System.Runtime.CompilerServices.UnsafeTests.ReadWriteDoublePointer test failure on devices in Xamarin.iOS
- #14972 - Xamarin.iOS: System.ExecutionEngineException: Attempting to JIT compile method ‘(wrapper delegate-begin-invoke) System.IAsyncResult System.Func`2
Software similar to MonoDevelop 7
Monodevelop For Mac App
- 2286 votesDeveloper tools and services for any platform with any language. IDE, DevOps, code editor & more.
- Freeware
- Windows
- 15 votesSharpDevelop is the open-source IDE for the .NET platform.
- Freeware
- Windows
- 18 votesEclipse IDE is a leading open platform for professional developers.
- Freeware
- Windows/macOS/Linux