Is MonoMac deprecated?

2019-04-07 08:44发布

问题:

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?

回答1:

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.



回答2:

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.



回答3:

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.



回答4:

I don't think the two answers covered all the history of MonoMac and Xamarin.Mac, so as the author of Timeline of .NET/Mono/Xamarin I would like to propose another answer.

MonoMac was born after Mono guys finished major development on MonoTouch, and would like to bring the same kind of technology to desktop. Miguel blogged about its 1.0 release. Thus, it was released as open source, as part of Mono.

The launch of Xamarin significantly changed the way how the projects ran. Obviously MonoTouch and Mono for Android became the flagship products, and MonoMac was another potential one. Thus, on Dec 12, 2012, Xamarin.Mac was built to join Xamarin.iOS and Xamarin.Android. The commercial Xamarin branding marks a clear border line from the open source Mono branding. And since then MonoMac development slowed down, and more resources moved to Xamarin.Mac.

A more historical event happened in 2014, when Apple set up a requirement for 64 bit applications, that both iOS and Mac application tool vendors must meet. Xamarin clearly announced Xamarin.iOS and Xamarin.Mac supports full 64 bit using the Unified API on their team blog. As MonoMac is always 32 bit, that blog post is an indication of the death of MonoMac from my view, but I see no other answer here mentioned this important announcement.

If you follow the documentation, you can see many significant changes in data types and API set,

https://developer.xamarin.com/guides/cross-platform/macios/unified/updating-mac-apps/

So if initially Xamarin.Mac was more of a tool chain based on MonoMac, from then on it became a completely different beast with new powers to conquer more challenges.

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 with Xamarin Studio. I am not sure what are the limitation in its community edition though.