Playing with MonoMac

Yesterday I played a bit with MonoMac, a new framework for Mono that you can use in order to create .NET applications that have a native look and feel in Mac OS X. I have never done any Mac related development in the past so I had to read up on how Apple builts its UIs. My experiments made their way to ResxTranslator‘s code base, so I intend that ResxTranslator will have three separate UIs: WinForms, GTK# and now Cocoa via MonoMac!

In order to play with MonoMac you’ll have to do the following things:

  • Get and compile the code from modules maccore and monomac. They should end up in directories on the same level, so there should be a parent folder containing folders maccore and monomac. Then, from the folder monomac simply run make. In a terminal you could type something like this:
    git clone
    git clone
    cd monomac
  • Add a repository in MonoDevelop:
  • A new add-in will be available: MonoMac development under category Mac Developmentaddin

MonoMac is not done yet, so I had some problems:

  • The Info.plist file specifies the minimum OS version to 10.6, but I still use Leopard so my app wouldn’t run. I had to manually change the number to 10.5.
  • MonoDevelop cannot launch the application, complaining that there’s no Info.plist file: “No Info.plist file in application bundle or no NSPrincipalClass in the Info.plist file, exiting”. The only workaround I found by experimenting was to switch to the folder “bin/Debug/” and from there launch the executable. Then the application will launch.
  • Sometimes, the application would crash with this message: “Non-aligned pointer being freed”. Pretty scary for somebody who’s been coding without worrying about memory management and pointers for a very long time! I guess it’s something the MonoMac team is working on?

It’s very nice to see that you can code a Mac OS X app without needing to learn Objective C. I hope that MonoMac will soon be a standard add-in in MonoDevelop.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s