Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is MonoMac deprecated?

The page for MonoMac seems to be abandoned. It seems to be last-updated a few years ago, because it says "Mountain Lion" is the "new" operating system.

New Lion and Mountain Lion APIs for AppKit

And MonoMac is under "Unsupported" in the Xamarin Studio (I wanted to download Mono Develop, but the page automatically was redirected to Xamarin Studio).

So is MonoMac deprecated or is it still actively being developed along with Xamarin.Mac?

like image 656
Damn Vegetables Avatar asked Jan 25 '15 17:01

Damn Vegetables


3 Answers

The difference is not well communicated; they don't even do a great job themselves on the forums. And MonoMac wasn't particularly active last year.

But the quick answer is that MonoMac lives. "Unsupported" just means you haven't purchased a Xamarin license, so don't expect Xamarin customer support to help out when something breaks. But you were already in that boat before Xamarin.Mac showed up.

Note that Mono qua open source runtime is still very much in active development. You can also still download MonoDevelop for Linux, for example, which sort of mimics where MonoMac was before Xamarin starting selling licenses. MonoDevelop itself is still pretty active, with checkins as recently as 13 days ago as of this writing. So Mono is still alive, and is, in fact, a subset of all of Xamarin's programming products.

The two differences of Mono-on-Mac is that you can use use MonoMac's AppKit, etc, assemblies and the active version of Xamarin Studio to develop on Mac rather than be stuck with, say, Gtk# and MonoDevelop. Those are Very Good Things.

MonoMac is sort of the equivalent of a Xamarin "Starter" version for Xamarin.Mac.

But it's better. The "Starter Version" of Xamarin's other two supported platforms -- Xamarin.iOS and Xamarin.Android -- have "build limits", which limit how big an app (including linking) you can build before you're required to buy a license. Not so with MonoMac. So MonoMac-via-Xamarin Studio is a sort of "Starter Version on steroids". On MonoMac, you can make just as large an app as you want and release it into the wild.

The problem? MonoMac projects essentially assume that your user has the Mono runtime installed on their Mac, and will be opening your assembly via the mono command on the command line -- just like you had to do with "old" MonoMac. That's not real smooth if you wanted to target conventional end users. You could use BockBuild to help do something similar to Xamarin.Mac's app bundling without a license (that's how BockBuild is used by Banshee, anyhow) to make self-contained app bundles, but I'm not sure how general purpose BockBuild is yet.

However... In the other two "Starter" versions, you do get a nice, ready-to-deploy app bundle. That is, if you've paid your $99 to Apple to be an Apple Developer and make a small Xamarin.iOS app on Starter, you can deploy that app to the iOS App Store immediately without paying for a Xamarin.iOS license. So, in this sense, MonoMac is worse than a Starter version elsewhere.

Historical speculation (my mind's a little fuzzy on this): It was right about the time that the MonoMac Packager showed up that Xamarin.Mac was released and MonoMac via MonoDevelop "died". Folks did release MonoMac apps onto the Mac App Store (iirc), but Xamarin would rather you buy a license to do that today, and the open source (?) MonoMac Packager's support did die, swallowed by Xamarin.Mac. I believe the gist is that Xamarin understands that they got their start with the open source MonoMac, and if they stopped supporting Mac development (that is, if they reduced its usefulness from our pre-Xamarin expectations), there'd be some pushback.

EDIT: A few more historical links. Cocoa#, which was released in 2004 and continued development until 2008, predated and, Miguel says, informed the creation of MonoMac. CocoaSharp was also released with Mono for a while. I know I've conflated MonoMac & Cocoa# in my head at times. MonoMac seems to have been born around 2010, after MonoTouch.

It's awfully nice of Xamarin to let us keep MonoMac-ing in their newest Xamarin Studio, and to continue benefitting from the upgrades they perform to the core Mac featureset.

So Xamarin.Mac is built on top of MonoMac, and it can't help but be supported in a sense. The only question is how long Xamarin lets us use the "unsupported" MonoMac project to build as large an app as we want, and not replace MonoMac with a "Starter" version that's similar to X.iOS and X.Android. I hope they'll continue to do the right thing and not take away the ability that the original open source Mono community gave us: For anyone to build full-featured apps with native Mac UIs with C#.

This feels a little rambling, but I hope it's helped. MonoMac exists, and Xamarin.Mac is a superset of it. Again, the big advantage of buying Xamarin.Mac is the app bundling, but there also a few extra assemblies (James lists some below: "GameKit, StoreKit etc..") and, as James also points out, 64-bit support. Xamarin doesn't do a great job marketing these benefits.

The bottom line for your question is, however, that you shouldn't feel like MonoMac is a second-class citizen. You're actually in a pretty good spot right now to build as complex a Mac-native[ish] app as you'd like.

like image 64
ruffin Avatar answered Nov 18 '22 13:11

ruffin


As @Lex says:

On Mar 31, 2016, Microsoft/Xamarin announced the open source plan of Xamarin SDK, and on April 27, 2016 the code was published at GitHub, http://open.xamarin.com. So now you should completely give up MonoMac and embrace Xamarin.Mac.

MonoMac is then obsolete (in favour of Xamarin.Mac/iOS, which is also opensource and free). This has been confirmed by Miguel in the mailing list.

like image 4
user1623521 Avatar answered Nov 18 '22 14:11

user1623521


Update:

Microsoft has acquired Xamarin and made Xamarin.Mac OSS. If you're looking to build Mac apps using C# then you should use Xamarin.Mac. MonoMac wont be actively developed given that Xam.Mac is available to everyone for free.

I think there’s really 3 things to compare with C# Mac development. We’ve got MonoMac, Xamarin.Mac Classic and Xamarin.Mac Unified. They’re all different but the Classic vs Unified is probably the biggest difference for developers.

MonoMac started as an open-source project created at a weekend hackathon. A little while later Xamarin offered a superset of MonoMac called Xamarin.Mac. It contained a broader range of APIs (GameKit, StoreKit etc..) which are not available in MonoMac. Xamarin.Mac also gives you a commercial license to Mono and allows you to publish to the Mac AppStore. If you’re interested in MonoMac you can grab the repository off GitHub and get started on contributing the project.

Over the last 18months we’ve been working on unifying our iOS and Mac product cores whilst fixing some issues (spelling mistakes with Methods and properties etc…) and adding 64bit support. This new version of Xamarin.Mac also contains a new garbage collector and some new data types. The reason we’ve done this is both to allow for more code sharing between Xamarin.iOS and Xamarin.Mac projects but also to support the latest APIs that Apple has released which are 64bit only.

To give you an example, if you wish to use MapKit on Mac, you’ll need to be using the Unified API as this is a 64bit only API.

If you develop your app today using MonoMac, you’ll have an easy upgrade process to the Unified API if you want to ship your app on the Mac App Store. You should also look at what APIs you’ll think you’ll need. As a general rule of thumb, any new APIs in 10.10 will likely require the new Unified API and thus require Xamarin.Mac.

like image 2
Mike James Avatar answered Nov 18 '22 13:11

Mike James