Bridges the worlds of .NET with the native APIs of Mac, iOS, tvOS, and watchOS.
C# Python C Ruby Makefile Objective-C Other
Latest commit 252b0dc Jan 20, 2017 @jstedfast jstedfast committed on GitHub [msbuild] Parallelized codesigning of *.dylibs and frameworks (#1528)
* [msbuild] Parallelized codesigning of *.dylibs and frameworks


* Disable timestamps for MtouchDebug builds
Failed to load latest commit information.
builds Remove unnecessary bitcode from dylibs. Fixes #51352 (#1469) Jan 16, 2017
docs/website Merge pull request #1506 from rolfbjarne/mtouch-single-invocation Jan 16, 2017
external Port monotouch-test suite to Xamarin.Mac (#1445) Jan 12, 2017
fsharp [builds] Don't install symlinks to iOS/Classic assemblies in the iOS/… Sep 16, 2016
jenkins [jenkins] Automatically detect mono bumps and enable device build. (#… Dec 3, 2016
mk Bump maccore which also bump maciotools. (#1511) Jan 16, 2017
mono/4.5 Add our mono runtimes to the build. Apr 24, 2016
msbuild [msbuild] Parallelized codesigning of *.dylibs and frameworks (#1528) Jan 20, 2017
opentk Build the platform assemblies. Apr 24, 2016
runtime Remove unnecessary bitcode from dylibs. Fixes #51352 (#1469) Jan 16, 2017
src [generator] Fix a potential compile time error in generated *Async me… Jan 20, 2017
tests [tests] Sleep a bit to work around HFS' lack of sub-second timestamp … Jan 20, 2017
tools [mtouch] Add support for specifying how to optimize LLVM output. (#1532) Jan 20, 2017
.gitignore Update gitignore. (#721) Aug 31, 2016
.gitmodules Remove the watch-mono repository, and use a single mono repository. (#… Oct 5, 2016
LICENSE Adjust license to match requested format Apr 25, 2016
Make.config Merge pull request #1344 from xamarin/xcode82-master-hamons Dec 16, 2016
Makefile [Versions-ios.plist] watchOS started at 1.0 (#1328) Dec 13, 2016
NuGet.config Add a 'repositorypath' to our NuGet.Config and update paths everywher… Nov 4, 2016 [README] Add master build (bot) status info (#1151) Nov 11, 2016 Merge pull request #1344 from xamarin/xcode82-master-hamons Dec 16, 2016 Add and ship file that lists the SDK versions XI/XM supports. (#1162) Nov 22, 2016
Xamarin.Mac.sln Move parts of dontlink tests into new introspection tests (#32) May 5, 2016
Xamarin.iOS.sln [mtouch] Add the mtouch test project to the Xamarin.iOS solution. (#1510 Jan 16, 2017
configure Emit configure arguments into to make it easier to re-r… May 27, 2016
product.snk Add our mono runtimes to the build. Apr 24, 2016 [system-dependencies] Handle monos updateinfo (#1540) Jan 20, 2017
versions-check.csharp [Versions-ios.plist] watchOS started at 1.0 (#1328) Dec 13, 2016

Xamarin.iOS & Xamarin.Mac

master xamarin-macios-builds-master


This module is the main repository for both Xamarin.iOS and Xamarin.Mac.

These frameworks allow us to create native iOS, tvOS, watchOS and Mac applications using the same UI controls we would in Objective-C and Xcode, except with the flexibility and elegance of a modern language (C#), the power of the .NET Base Class Library (BCL), and two first-class IDEs—Xamarin Studio and Visual Studio—at our fingertips.

Continuous Builds

You can download continuous builds of our main development branches from our wiki page.

Build requirements

  • Autoconf, automake and libtool.

    You can use brew, or this script to get it directly from (you'll have to edit your PATH to include /opt/bin if you use the script)

    To install brew and all the tool dependencies:

    $ ruby -e "$(curl -fsSL"
    $ brew update
    $ brew install libtool autoconf automake bison flex
  • CMake

    You can use brew, or download manually from

    CMake must be in PATH, so if you install it somewhere else, you'll have to fix up your PATH accordingly (not necessary if installed using brew).

    To install using brew:

    $ brew install cmake
  • Xcode

    To build the Xamarin.iOS and Xamarin.Mac SDKs you need a certain version of Xcode. The build will tell you exactly which version you need.

    You can download the Xcode version you need from Apple's Developer Center (requires an Apple Developer account).

    To ease development with different versions of the SDK that require different versions of Xcode, we require Xcode to be in a non-standard location (based on the Xcode version).

    For example Xcode 7.0 must be installed in /Applications/

    The recommended procedure is to download the corresponding Xcode dmg from Apple's Developer Center, extract to your system, and rename it before launching it the first time. Renaming after having launched it once may confuse Xcode, and strange errors start occuring.

  • Mono MDK.

    The build will tell you if you need to update, and where to get it.

  • Xamarin Studio.

    The build will tell you if you need to update, and where to get it.

  • You can also provision some of the dependencies with an included script:

    $ ./ --provision-[xcode|xamarin-studio|mono|all]

 Quick build & install

Follow the following steps to build and install Xamarin.iOS and Xamarin.Mac:

  1. Clone this repository and its submodules

    $ git clone --recursive
    $ cd xamarin-macios
  2. Fetch dependencies and build everything

    $ make world
  3. Make sure permissions are OK to install into system directories (this will ask for your password)

    $ make fix-install-permissions
  4. Install into the system

    $ make install-system


There is a configure script that can optionally be used to configure the build. By default, everything required for both Xamarin.iOS and Xamarin.Mac will be built.

  • --disable-mac: Disable Mac-related parts.
  • --disable-ios: Disable iOS-related parts.

    In both cases the resulting build will contain both iOS and Mac bits because:

    • Parts of the iOS build depends on Mac parts (in particular mtouch uses Xamarin.Mac).

    • The class libraries builds can not be disabled because a very common error is to end up with code that only works/builds in either iOS or Mac.

  • --enable-ccache: Enables cached builds with ccache (default if ccache is found in the path).

  • --disable-ccache: Disables cached builds with ccache, even if it is present.
  • --disable-strip: If executables should be stripped or not. This makes it easier to debug native executables using lldb.
  • --help: Show the help.


Mailing Lists

To discuss this project, and participate in the design, we use the mailing list.


There is also a gitter chat room that can be used to discuss this project, and participate in the design: Gitter

Coding Guidelines

We use Mono's Coding Guidelines.

Reporting Bugs

We use Bugzilla to track issues.