The Mono team has created a binding for Cocoa API, one of the major application environments for Mac OS, facilitating developers the possibility to write C# applications for Apple’s operating system.
Based on their success with MonoTouch, the Mono team has started the process of creating bindings for Mac’s main application framework, Cocoa. According to Miguel de Icaza, father of Mono, MonoMac has two types of bindings:
- P/Invoke for C-based API found in frameworks like AudioToolbox, CoreGraphics, CoreFoundation and CoreText.
- MonoMac.ObjCRuntime – a new binding engine using the btouch binding generator developed for MonoTouch. btouch generates the desired binding starting from a C# interface expressing an API contract. The binding process is mostly automated requiring just some tweaking in the end.
MonoMac is partially done, Mono is looking for contributor’s help to finish the rest:
- CoreFoundation (the parts that are needed, see the design principles)
- CoreText (done)
- CoreGraphics (done)
- Foundation (the parts that are needed, and helper tools to support the rest)
- AppKit (About 30% left to be done)
Mono had a similar project called CocoaSharp that was started back in 2004 by Geoff Norton with its first release in 2005. Plans were undergoing to progress with it in 2008, but de Icaza announced Novell was no longer interested to invest in its development in May 2009. de Icaza says they have used the lessons learned from that attempt to create a C# binding for Cocoa.
Monobjc is yet another .NET to C-Objective bridge. At version 2.0, Monobjc is a mature binding that facilitates programming against Mac OS X frameworks like Cocoa, WebKit, QuickTime and DiskRecording. The developer can access more than 1,400 classes and 7,000 methods on Mac OS X 10.4, 10.5 and 10.6. The bridge is integrated with MonoDevelop IDE and comes with documentation and Tutorials.