Almost a year ago we started building a set of Mono bindings for building native MacOS X applications.
Our original goals were modest: bind enough of AppKit that you could build native desktop applications for OSX using C# or your favorite .NET language. We leveraged a lot of the code that we built for MonoTouch our binding to the CocoaTouch APIs.
During the year, the project picked up steam, we got plenty of contributions to MonoMac and grew beyond the original conservative goals.
In a year we:
- Created a beautiful library that blends the worlds of C# and MacOS X APIs.
- Created a MonoDevelop add-in that helps developers get started with Mac development in minutes.
- Integrated the MonoDoc system into MonoDevelop, to provide developers with documentation on the flight as they type their code. Detailed method information, parameter use and type information is available as you type your code in unobtrusive windows.
- Created a packager that turns your programs into self-contained OSX Packages with no external dependencies on Mono and can be deployed to the Apple App Store.
- Created a linker that lets you strip out any functionality your application might not need to reduce your executable size.
- Created a great community of developers that love C#, .NET and MacOS. For some of us, this is a step closer to heaven.
- Created a big pool of samples for developers to learn from, and for us to exercise the API and ensure that the resulting library was a delight to use.
- Created various tutorials on how to build applications with C# on the Mac.
- Built an online documentation mash-up between our API and Apple's web documentation
Some statistics about the MonoMac binding:
- 1,155 C# classes and 31 C# structures
- 376 enumerations
- 123 C# delegate data types
- 16,556 methods, properties and events exposed
In addition to that, MonoMac bundles a modified version of the amazing OpenTK 1.0. We took the liberty (and by "we" I mean, the amazing Kenneth Pouncey) of fine-tuning the implementation for MonoMac use.
Getting MonoMac 1.0
If you already have MonoDevelop installed, just update your MonoMac Add-In. If you do not have MonoDevelop installed, follow our friendly instructions.
Contributors
MonoMac would not have been possible without the help of our great contributors, this is the team:
Main bindings:
- Geoff Norton
- Miguel de Icaza
- Jonathan Pryor
- Michael Hutchinson
Contributors:
- Alexander Shulgin (WebKit DOM)
- James Clancey (AppKit contributions)
- Kenneth Pouncey (API, samples)
- Maxi Combina (WebKit events, sample)
- Regan Sarwas (PdfKit, ImageKit, NSColor, NSGradient, NSBezierPath, samples)
- Ashok Gelal (CoreWlan)
Next Steps
What is great about doing a 1.0 release is that you know that there will be a 1.1 release, and a 1.2 release and a 2.0 release.
This is our way of saying "thank you for waiting" and giving our users a chance to start building applications, knowing that we have battle tested MonoMac and it is being used in our own products now [1].
We obviously will continue improving the API, adding more frameworks as time goes by, but we will also be working with other communities to expand MonoDevelop's language support, create more templates for languages like F#, IronRuby, IronPython and UnityScript.
Although we have a great start for documentation, we hope that contributors will take advantage of a new web-based wiki and collaboration tool that we are building to improve the docs and help us make MonoMac's documentation the best.
Hopefully, we will also get more samples contributed to MonoMac and we will see a new wave of tutorials and we will see fascinating discussions on how to build better software while enjoying every second of it.
[1] (MonoDevelop 2.6 will be using MonoMac for its native dialog boxes).