Settings

Theme

Your C# App on 66 Million Macs: Announcing Xamarin.Mac

blog.xamarin.com

192 points by evanw 13 years ago · 148 comments

Reader

georgemcbay 13 years ago

Looks nice, but as with MonoTouch the pricing kills it for me.

While I'm sure it pays for itself in overall value if you actually ship a product with it, attaching a price that high to a development tool causes (IMO) all sorts of secondary effects like balkanized user community, inability to realistically use it for writing open source software that anyone will collaborate on, etc.

If the product cost more like $99 it might be able to overcome the inertia a bit better. I know I'd be willing to buy it for that even if I wasn't sure I'd ship a product on it, but $399 is Real Money, so as hypothetically interested as I've been in MonoTouch, etc, I've never really looked at it beyond the press releases.

  • yawn 13 years ago

    I used MonoTouch at work (where price was not an issue) to convert an existing project to iOS. Aside from some minor complaints about the editor, the experience was amazing. I had previously written a couple of iOS apps using the "native" toolset, and I would not go back if I had the choice. While I understand your pain (I would gladly fork over $100 as a lone developer/hobbyist for personal development, but can't hand over $400), I think the price tag is completely justified.

    • eropple 13 years ago

      I've been playing with it on my own, and I tend to agree. MonoDevelop is still pretty rough--I'm doing game stuff, so I'm kicking any actual OS X development down the road as far as humanly possible--but once you get your code deploying, it's a very nice setup.

      I'd really like a way to build in VS (maybe against dummy assemblies or something) and kick it over to my MBP for real compilation and deployment, though. I respect their desire to funnel users through MonoDevelop, but it doesn't step to VS+R#.

      • ConstantineXVI 13 years ago

        I'd personally love for JetBrains to do a C# variant of IDEA (+ R#) for us OSX/*nix folk. I have serious doubts such a beast would be commercially viable, though.

        (Maybe R# for MonoDevelop? One can dream...)

        • skrebbel 13 years ago

          Why not? Visual Studio costs thousands of dollars a license. They could even compete on price, not only features. Windows is a market for such a product just as much as *X is.

          • jimbobimbo 13 years ago

            VS Professional is only $500, not "thousands of dollars". It used to be $300 for 2008 Pro, but even now it is still OK for an indie at $500.

          • ConstantineXVI 13 years ago

            MSVS is free-$500; and has the significant advantage of both a direct connection to the .NET team and not being that bad of an IDE on it's own merits (not to mention being bundled in a MSDN subscription, which a MS-heavy shop is going to have anyway). It's far more viable on Windows for JetBrains to augment MSVS via R# rather than attempt to compete head-on when the deck is so stacked against them.

      • cdmckay 13 years ago

        I don't think they're trying to funnel users to MonoDevelop, I think they're using it because the iOS SDK is for Mac.

        Take a look at Mono for Android, for example. It uses a VS plugin instead of MonoDevelop.

        • shadowmint 13 years ago

          I might be in the minority here, but I use MonoDevelop in preference to visual studio.

          It's got a couple of irritating issues (the plugin support is rubbish even now, and it's ridiculously complicated to roll your own), but its just so fast.

          My morning at work is: git pull, go get coffee while VS spazzes out for 5 minutes and resharper reindexes everything.

          • eropple 13 years ago

            IMO, that sounds like an issue with your hardware. I use a three-year-old desktop with a Nehalem i7 and 16GB of RAM (or my rMBP with Parallels, which may be faster) and VS/R# is pretty happen even with 50+ projects and about 1600 source files.

            Older machine? Overactive anti-virus or something causing file I/O pain?

          • dbattaglia 13 years ago

            What version of VS are you using? I found 2010 to be painful when opening large solutions (and Resharper does not help I agree). But if you can get past the new UI changes, 2012 overall seems a lot quicker to load up and (for me at least) provides a much smoother experience. My favorite thing: the "Reload All Projects" option, for times when you do a Get Latest on your root folder outside of VS and now 35 projects need to reload at once. This was just brutal in 2010 and older versions.

          • wired8 13 years ago

            Nothing a bit of RAM and a fast CPU can't fix... Alt if you have a very large solution with multiple projects you could split it up...

        • eropple 13 years ago

          I built a remote deployment/testing gizmo for Mono in college (admittedly crap, but I was a Summer of Code student, I was as terrible as advertised!). While not nearly as complex as remote building, I'm pretty sure it can be done.

          I'd pay for MonoTouch like-right-now, even though the project I really want it for isn't near ready for it, if I could write in VS, press a button, and have it build and deploy on my Mac.

    • dested 13 years ago

      Can you go into some issues with the editor?

      • eropple 13 years ago

        -As mentioned in the sibling comment, stability is a problem.

        -Refactoring support isn't great. It's about on par with stock Visual Studio, but stock Visual Studio isn't good compared to VS+R# or IntelliJ. If you're writing "just" an iOS application, I can see this not being a huge deal, but my own use case is bringing over projects for OS X and iOS where I tend to have a lot of code and I'm very used to being able to do massive, contextual refactorings when needed. Can't do that in MonoDevelop.

        -It's GTK#, so you have to accept that some stuff just doesn't feel native on a Mac. My mental map of keyboard behaviors no longer properly applies and it's jarring going between it and XCode or IDEA. It's gotten a lot better since I started using it on a Mac, to be sure, but it's not there yet. I compare it here to IDEA, which is also not Mac-native, but manages to feel a lot closer.

        Now, one huge, huge plus, that I have to give them a ton of credit for: unlike Visual Studio, MonoDevelop is non-destructive toward project files. This is a power-user beef but a really important one once you get there; if you've hand-edited a csproj, Visual Studio will happily destroy all of your changes (it loads the csproj into an in-memory object model and writes it back out on save). This is infuriating when you have custom stuff in it - something as simple as a wildcard path in a file reference (which is totally fine as per MSBuild rules) will be mashed into a static list of all files at time of invocation. It is super bad, and if MonoDevelop improves some more I might switch to it, even on Windows, solely because of that lack of misfeature.

      • Itaxpica 13 years ago

        Not the original commenter, but as someone who's done a lot of work with it: it lacks a lot of the features that I've come to expect from basically any modern IDE, but yet manages to crash twice as much as any other IDE I've ever used (and that includes Xcode).

  • edwinnathaniel 13 years ago

    Yes for $99 for individual developer. PLEASE.

    • starik36 13 years ago

      Same, here. I'd eat it up at $99.

    • rymith 13 years ago

      Absolutely, as we see from the numbers, most iPhone apps aren't making a lot of money, so $400 + $100 for the app store access is simply dumb for an indie dev.

      Miguel is a very smart man and completely clueless at the same time.

      • statictype 13 years ago

        Consider the possibility that

        a) Miguel De Icaza doesn't set the pricing on the product

        b) Even if he did, that indie developers who are unable to fork over the $500-$2000 for a license are not part of their target demographic.

        Monotouch seems to be popular enough with their existing pricing that they don't need to address anything smaller (and FWIW, their products are too expensive for me too, as much as I would love to be writing Mac/iOS apps in C#, I'm not forking over that money for it)

  • simonh 13 years ago

    I'd have thought something more like the old Qt license tiering would make sense - a GPL version that can only be used to develop GPL apps and a commercially licensed version if you want to sell anything.

  • untog 13 years ago

    so as hypothetically interested as I've been in MonoTouch, etc, I've never really looked at it beyond the press releases.

    Try downloading the evaluation version. It allows you to test with the simulator, and at least gives you a clue as to whether you might want to spend $399 on it. Of course, if there's no chance of that ever being the case it won't be a productive use of time.

  • teyc 13 years ago

    As a hobbyist, you could always use MonoMac. It is still free and you may have to wrap the StoreKit APIs yourself.

  • jstedfast 13 years ago

    Just an FYI, but the MonoMac project (which is what Xamarin.Mac is based on) will be remaining as Open Source for that situation.

danabramov 13 years ago

My experience with MonoTouch has generally been very positive. Why I love MonoTouch:

- C# goodness, especially event handlers instead of overly verbose ObjC delegates

- It's fun to port ObjC loops to oneliners using LINQ and lambdas

- I prefer somewhat ugly MonoDevelop to pretty-but-very-odd Xcode

- I can reuse both C# and ObjC code, and ObjC code is straightforward to port, if needed

- Xamarin support is friendly and helpful

There are some things that annoyed me:

- Some generic-heavy C# code will crash the device due to AOT limitations—learned it the hard way

- MonoDevelop hangs for a few seconds after you switch from Xcode, even if you didn't change anything

- You need to make sure you _understand_ how MonoTouch GC works together with ObjC reference counting, or you'll get memory leaks

- You'll need to learn to use Instruments to find those memory leaks

- Debugger often freezes (should've reported this)

- Binaries can get heavy, but not too heavy

- Compilation is impossibly slow on Air, barely tolerable on Pro

- Lack of tooling for binding ObjC code—I wish I could just drop ObjC files and headers into a MonoTouch binding project instead of compiling it to fat binary first

But still, I'm glad we went with MonoTouch.

  • jbigelow76 13 years ago

        - You need to make sure you _understand_ how MonoTouch GC works together with ObjC reference counting, or you'll get memory leaks
        - You'll need to learn to use Instruments to find those memory leaks
    
    Interesting, reading that makes it sound like a C# developer that wants to work with MonoTouch will have to verge off to learning at least some Objective C if they want to have shippable code. The coder side of me is always up for learning a new language but if shipping was my utmost concern I'd want to get right to coding in C# and let MonoTouch take care of the rest. That doesn't appear possible.

    How much time do you think a C# developer with several years of experience would need to put into learning the ins and outs of ObjC memory management before their code could be considered close to production level?

    • danabramov 13 years ago

          Interesting, reading that makes it sound like a C# developer that wants to work with MonoTouch will have to verge off to learning at least some Objective C if they want to have shippable code.
      
      Yes, you'll definitely need to learn some things about Objective C. This isn't really about learning the language itself though. It's more about understanding iOS and ObjC runtime.

      The closest analogy to C# develop would be COM and P/Invoke. C# provides tools to interface with COM and native libraries, but you still need to learn some marshalling fundamentals so you can ensure GC doesn't collect objects while they are being used by native code, you need to implement IDisposable and not forget to free unmanaged resources, etc.

      It's similar with MonoTouch: you need to understand that MonoTouch classes “wrap” native objects, that disposing of wrappers doesn't necessarily kill native objects because other native objects may still link to it, and that sometimes GC can't know for sure if an object is eligible for killing, and will never collect it.

      In general, this comes down to: don't rely on .NET GC to kill native objects, do it yourself. My life got so much better after I started doing so.

      Things that confused me most (and which are all you really need to know about ObjC memory management):

      http://stackoverflow.com/questions/13058521/is-this-a-bug-in...

      http://stackoverflow.com/questions/13064669/why-cant-monotou...

      This is a great screencast I wish I saw before I started coding in MonoTouch:

      http://forums.xamarin.com/discussion/33/finding-memory-leaks...

      It explains how to find native memory leaks.

      How much time does it take to learn this? No more than a week. But it takes more to find memory leaks in existing app so it's better to get some understanding and learn to profile early. For me, “fixing” a two-month-old codebase took about week and a half.

      • danabramov 13 years ago

        If I could give advice to myself when I started writing production code in MonoTouch without any experience with it, it would be: “Don't Guess. Profile.”

        For example, I spent a lot of time making sure I don't load heavy .NET objects, but most memory crashes went away when I started using JPG instead of PNG pictures in a picture-heavy app.

        Then it got a lot better when I took time to learn about best iOS practices such as keeping a pool of about ten reusable views and re-filling them with new content as they go offscreen when the user is scrolling, instead of creating hundreds of views at once. What is really nice, iOS6 UICollectionView class enforces this memory usage pattern by providing a neat API with view pool. Use it instead of rolling out your own collection view.

        Another hard lesson was to never block UI thread and do any computational intensive stuff such as parsing JSON in .NET Tasks on another thread. This is obvious in retrospect, but I thought parsing JSON wasn't intensive. It was.

        Finally, if your app crashes randomly, it's most probably your fault! I really need to stress it because I fell into this trap, thinking MonoTouch is buggy when my app crashed every minute. Turned out, it had insane memory leaks and aggressively allocated large amounts of memory at once—but I didn't bother to learn about “right” techniques until it was too late. Learn to profile early so you don't panic later.

        • jbigelow76 13 years ago

          Thank you for taking the time to provide these tips and links. Lots of good info here that I'm sure I'll be referring back to in the not too distant future.

lucian1900 13 years ago

Xamarin's stuff looks really nice, but I really wish they had a non-profit free tier. I can't even make opensource Android apps without paying a lot.

The other problem is the lack of linux support for their SDK. Seems rather odd, considering Mono's roots.

  • natfriedman 13 years ago

    It personally pains me not to support Linux, but we get such a tiny fraction of our customer base coming from Linux that it isn't worth it. Not to mention that there is effectively no "Linux" platform and you have to select a subset of distro versions.

    • jevinskie 13 years ago

      Yes we support Linux at our shop and testing/packaging is difficult. Doubly so for embedded customers that frequently want to use old/obscure distros (probably due to a cross tool chain requirement).

    • lucian1900 13 years ago

      I'm sure most people would be ok with an Ubuntu version.

      Perhaps more of your customers would use Linux for Xamarin stuff if it was available?

  • untog 13 years ago

    The other problem is the lack of linux support for their SDK. Seems rather odd, considering Mono's roots.

    I suspect that they make the vast majority of their profit on MonoTouch (Mono for Android is great, but Java and C# are similar enough that there is a lower barrier). With that in mind, there isn't much point in focusing on Linux- you can't develop for Mac or iOS on it.

    • natfriedman 13 years ago

      Actually Android and iOS make an equal amount of money for us. This was not true a year ago, when iOS sales were about 65% of our volume, but today it is almost exactly 50-50.

      • untog 13 years ago

        Interesting. I'll admit, my draw to the platform is a 50/50 split between disliking Objective C (/XCode) and the possibility of sharing code between Android and iOS versions of an app. I guess more people are with you for the latter than the former these days.

      • shadowmint 13 years ago

        I have to say it definitely feels like you guys are paying more attention to the MonoDroid things these days. Great work on the recent release BTW~

  • cooldeal 13 years ago

    >The other problem is the lack of linux support for their SDK. Seems rather odd, considering Mono's roots.

    Didn't Mono get a lot of hate and vitriol from the Linux crowd over their support for C# and .NET on Linux and then was pulled from Ubuntu's default install because of it? I can understand why they would be shy about support if all they got were brickbats and hate mail.

    http://np237.livejournal.com/24065.html

    http://techrights.org/2008/03/24/mono-danger-to-linux/

    http://techrights.org/2011/11/04/uds-on-mono/

    http://www.itworld.com/it-managementstrategy/222227/bansheeg...

    http://linux.slashdot.org/story/09/06/15/1251228/Mono-Squeez...

    The first link is a very entertaining read.

    • koenigdavidmj 13 years ago

      I thought that their removal from Ubuntu's default installation was simply that it's a large set of libraries that kept made it hard to keep the image under the size of a CD. And once Tomboy got ported to C++ (Gnote is almost exactly the same thing), it wasn't really necessary anymore.

      • reidrac 13 years ago

        Besides the "Mono wave" on Gnome seems gone. Now there are some guys pushing Vala, and it reminds me the time when Mono was the future of Gnome.

        https://live.gnome.org/Vala

        Several Gnome applications have been rewritten in Vala and, having contributed a patch to Déjà Dup, I find it's a language easy to hack coming from a C/Java/C# background.

        I always found interesting that Mono could have been a good thing for Gnome and because of the Microsoft influence in the language (or .NET platform, I'm no expert) it never happened.

        EDIT: ate a word

bronxbomber92 13 years ago

Where does this leave MonoMac? http://www.mono-project.com/MonoMac states that Xamarin.Mac has broader API coverage; does this mean MonoMac will continue to be developed, but just remain as a (free) subset with LGPL portions?

  • jstedfast 13 years ago

    The plan is to continue to contribute to MonoMac and it will remain free/open source.

jbigelow76 13 years ago

Xamarin does some impressive work. They are becoming to C# what PhoneGap is to Javascript/HTML (license fee not withstanding).

lubos 13 years ago

I'm huge fan of Xamarin but somehow missing how is this different from MonoMac?

For anyone who is thinking to start development of cross-platform GUI app in .NET, I encourage to check Eto project - https://github.com/picoe/eto

  • natfriedman 13 years ago

    A few diferences:

    1. Xamarin.Mac comes with a commercial license, so you can ship to the Mac App Store (not allowed under MonoMac's LGPL license).

    2. Xamarin.Mac comes with commercial support.

    3. Xamarin.Mac includes bindings for several new APIs, including CoreBluetooth, GameKit, StoreKit, SceneKit, and the new Mountain Lion AppKit classes.

    You can see a full list of differences here: http://docs.xamarin.com/mac/guides

    • eropple 13 years ago

      MonoMac appears to be ASL/X11. MacCore too. https://github.com/mono/monomac

      The code is licensed under the terms of the open source Apache License version 2 or the MIT X11 license, at your own choice.

      Also, the Mono wiki indicates you can already deploy to the App Store (which I've been looking at doing for a project): http://www.mono-project.com/MonoMacPackager

      With the new release of the MonoMac add-in for MonoDevelop, you can easily turn your Mono application into a full Mac bundle, and you can also get a Mac installer for your application with all of the Mono dependencies bundled with it as well as creating Mac applications for distribution on the Apple Mac AppStore.

      Is there something I'm missing?

      • migueldeicaza 13 years ago

        The MonoMacPackager no longer exists, and has not existed for a few months. We basically granted a license for appstore distribution to anyone that requested the license for AppStore distribution, since we did not originally have plans to build a product.

        Now that we are launching a product, we offer the license as part of Xamarin.Mac.

        I will update the page accordingly.

        • eropple 13 years ago

          OK, that makes sense. I mean, for an independent developer, that sucks, because it's honestly not worth $399 to me (I'd be happy to pay for it in a corporate setting like we do for MonoTouch, because of the support stuff, but for personal-project stuff I just can't rationalize it), but I get the reasoning.

          Is the licensing for MonoMac/MacCore remaining as-is?

          • migueldeicaza 13 years ago

            Yes, MonoMac/MacCore will continue to be MIT X11.

            We will also continue to maintain it, as it shares most of the code for Xamarin.Mac

  • WayneDB 13 years ago

    Eto looks interesting, thank you.

    How do you feel about Mono Xwt? - https://github.com/mono/xwt

mapgrep 13 years ago

Interesting that Apple allows this, not just on Macs but on iOS devices. When Adobe wanted to cross-compile Flash for iOS, here is what Steve Jobs wrote:

"We know from painful experience that letting a third party layer of software come between the platform and the developer ultimately results in sub-standard apps and hinders the enhancement and progress of the platform. If developers grow dependent on third party development libraries and tools, they can only take advantage of platform enhancements if and when the third party chooses to adopt the new features. We cannot be at the mercy of a third party deciding if and when they will make our enhancements available to our developers.

"This becomes even worse if the third party is supplying a cross platform development tool. The third party may not adopt enhancements from one platform unless they are available on all of their supported platforms. Hence developers only have access to the lowest common denominator set of features. Again, we cannot accept an outcome where developers are blocked from using our innovations and enhancements because they are not available on our competitor’s platforms."

http://www.apple.com/hotnews/thoughts-on-flash/

FWIW, I've always thought this was an overly broad generalization.

LaSombra 13 years ago

This might be the final blow to Java on the desktop.

  • untog 13 years ago

    It costs $399 for an individual license, so there is a cost barrier. I balked at the cost of MonoTouch, but since playing around with it, I've got to say- I think it'll be worth the money. I just wish it was a little more affordable to hobbyist developers like myself.

    EDIT: I just noticed that they had a 25% Black Friday offer. Damn.

    • natfriedman 13 years ago

      Thanks for the feedback. We definitely have two classes of customers - businesses and professional developers who can't believe how cheap our products are relative to the value they're receiving, and hobbyists who are more price-sensitive. It's tricky to balance these two.

      • swalsh 13 years ago

        That makes sense, here's another idea. At my day job the price of your product is perfect. Its an enterprise app that we want to support on all 3 mobile platforms, which we sell for $5k a pop (and another $200k * N in hardware). $600 is actually cheap (though so is my company, so we probably wouldn't pay more than $1k).

        On the other hand, at home I couldn't afford more then $200. When I make an app at home, its for my own fun.

        Instead of trying to satisfy both situations in one model, have you considered licensing per app? Every computer I develop on has an internet connection, so i'd be okay having to connect to your server to compile. I'd even be okay with having subsets of the framework licensed separately if it means I can get it cheaper at home.

        • natfriedman 13 years ago

          Some of our competitors have done this and we've received very negative feedback from their customers about per-app, per-user, and royalty-based pricing.

          Also not sure it makes sense to create a price incentive to bundle a bunch of functionality into a single app.

          We like having simple, fair, obvious pricing. Even if it means leaving some money on the table.

      • untog 13 years ago

        Oh, I understand entirely. To a large company a $999 license is practically a rounding error given expenditures on other products out there.

        I don't have any great suggestions on how you can fix it, just a lament :)

      • jmcqk6 13 years ago

        What about a pricing model similar to what [ncunch](http://www.ncrunch.net/) is doing?

      • WayneDB 13 years ago

        I'd love to see Xamarin grow enough to offer the dev-tools for free. Obviously that'd mean making money off of something other than dev-tool sales. I can think of lots of ways you could use Mono to break out of that market. Any plans to move in this direction?

    • pretoriusB 13 years ago

      >It costs $399 for an individual license, so there is a cost barrier.

      Well, being free never made Java on the Desktop go anywhere, anyway.

  • TheEskimo 13 years ago

    Not at all. This offers a completely different solution than java. With java, you write once and run on everything. This lets you write C# on OS X, but it won't compile and run on Windows or Linux. Windows software can't be as easily ported to OS X either, the entire GUI, at the least, will have to be rewritten.

    I would argue that Python would make more sense as a java-killer. It has the write once, run everywhere thing down much better (though still not good enough) than this.

    Java is not going anywhere, sadly, and the linked product does not offer a compelling reason to believe that it will kill anything. All I see happening is that people who use mono now will potentially switch to this; honestly this isn't really ground breaking.

    • natfriedman 13 years ago

      Yes, but write-once-run-anywhere solutions deliver mediocre user experiences on every platform. You don't want your Mac app to look anything like your Windows 8 app. With Xamarin you separate the presentation layer of your app from the rest of the app, and the only thing you're rewriting from platform to platform is the UI. Typically this is only about 25% of the code (though of course it can vary). This is how our customers do it on Android, iOS and Windows, and now they can extend their apps to Mac and still deliver an amazing Mac app.

      • edwinnathaniel 13 years ago

        Not every app has to be beautiful and super-usable though (most business/productivity apps).

        If an app can achieve 80% of the usability cross-platform without doing much tweak, I'd say that's a good investment from the publisher perspective.

        • migueldeicaza 13 years ago

          Agreed, not every app has to be done in that way, and for that there are plenty of alternative solutions.

          From HTML to Java, to Gtk# and a dozen more.

          This is a set of tools for developers that need to take advantage of native APIs, either for the UI, accessing the advanced audio features in OSX, accessing Darwin features, integrating with StoreKit, iCloud, Apple's OpenGL extensions, SceneKit, Bluetooth and those sorts of things from C#.

      • SiVal 13 years ago

        I agree with you, but for native development, I think I'd rather use a native language---something compiled like Go or D. I do love C# and Python for my own home projects, but for apps that I distribute to others, I don't want to have to ship half of my computer with my app. I'd like to separate logic from UI, write the shared logic, add a platform-specific UI (calling native OS APIs), add a few platform-specific features (provided by the native OS) so no platform-exclusive competitor has any advantage over me, compile and statically-link (only what I need, not a massive runtime) and ship. Like language localization, this process would be repeated for each attractive platform---small, fast, fully native on each platform but with most of the code shared across platforms.

        You can do this today with C, but I'd sure rather work in something more modern but which didn't require dragging around half an OS worth of runtime infrastructure. Something more like Go or D, I imagine, if they ever get any traction as client ("desktop") languages.

        • pjmlp 13 years ago

          Just to be a bit pedantic, you can also get native compilers for Java and C#.

          The dynamic library runtimes for other languages can also be relatively big. Just my PC has around 10 versions of the C++ runtime.

          Maybe you are more looking into distribution of statically compiled code?

      • pron 13 years ago

        Well, if you really want to have a native looking experience (even though it seems like apps look more and more different from one another, and increasingly less consistent), you can do that in Java, too, and with probably less work, and for free with world-class tools. I run NetBeans on my mac and it looks and behaves quite natively. Far from mediocre, I'd say.

    • profquail 13 years ago

      IKVM.NET is a suite of Java-to-CIL conversion tools, and it used primarily with Mono: http://www.ikvm.net/

      • natfriedman 13 years ago

        We've been surprised to discover some customers running Java code on iOS devices uses iKVM and Xamarin. So it seems to work.

        • eropple 13 years ago

          libgdx is going that way, and is looking really promising. I haven't yet tried it on iOS, though.

    • danek 13 years ago

      Lately I've been using embedded chromium to solve the write once/run anywhere/look great everywhere problem. While java isn't going away anytime soon, it's nice to see it incrementally lose applicability.

  • jbigelow76 13 years ago

    While I wouldn't shed any tears to see Java disappear from the desktop, it has a massive presence in the Enterprise and that is not due to large deployments of Macs.

  • snuze 13 years ago

    As much as I loathe Java, this is just wishful thinking.

  • colkassad 13 years ago

    At a $1,000 a license? I don't think so.

    • akmiller 13 years ago

      $1,000 seems pretty meager to me. If I can share well over 50% of my code across multiple platforms then that is code that I don't have to rewrite in another language. If that 50% takes more than 10 hours to reproduce (allocating my time at $100.00/hr) then it is well worth the expense. That doesn't even factor in the time saved in maintaining the application going forward.

      Granted, if you are just building a small application that you don't plan to support multiple platforms then that price would seem steep.

    • profquail 13 years ago

      That's for an enterprise-level license -- the 'professional' license is $399: https://store.xamarin.com/

  • flogic 13 years ago

    Personally, I think computing power has hit the point where Java desktop apps and applets aren't that big a deal. I've got one running on my desktop right now. It runs for day's on end without being a significant burden to the rest of the system.

    • pjmlp 13 years ago

      That and the quality of the developers also matter.

      Many still write code without thinking one second about performance.

      Java isn't C, but if you code thinking about performance it is possible to write quite usable applications for many use cases.

    • CodeCube 13 years ago

      I know, Minecraft rocks!

    • pretoriusB 13 years ago

      It's the quality of the experience, GUI, not just the resource-hoging of Java Desktop app.

      And even for that "It runs for day's on end without being a significant burden to the rest of the system" is hardly something to write home about.

      • pron 13 years ago

        I don't know. I spend most of my time working with NetBeans on a mac, and it's just as pretty as Keynote, while more responsive and stable. So, yeah, NetBeans, a huge Java Swing application, provides a better experience on a mac than Keynote.

        • pretoriusB 13 years ago

          >I spend most of my time working with NetBeans on a mac, and it's just as pretty as Keynote, while more responsive and stable.

          Just as pretty as Keynote? I beg to differ. NetBeans (and Eclipse, IDEA) always hit the "uncanny valley" for me (and Eclipse is even using Cocoa!). Not looking right at all for the platform, and with BS divergent behaviour on lots of UI controls. On top of it, all three are quite laggy (gotten a little better with huge memory these days and SSDs, but still, if you need 4GB and solid state to get something to run fast, well...).

          In no way I would say NetBeans provides a better experience on a Mac than Keynote.

      • edwinnathaniel 13 years ago

        That depends on the app-developer experience building GUI. Maybe most Java developers aren't that sensitive when it comes to GUI (or maybe it's a culture thing).

        Having said that, not all apps have to be excellent 100% in terms of usability and beautiful-UI. Once I step out from the HN-bubble a bit I'm starting to see people using ugly but usable and solved business problems type of app written in anything from Tcl/TK, Java, Qt, Pascal, etc.

      • flogic 13 years ago

        In this case the experience looks slightly different but works pretty much as expected. In other terms, the Java apps tend not to be the ones that piss me off on a regular basis.

  • QuantumGuy 13 years ago

    If Java is a terrible language and horribly designed then why do people still use it?

    • rat87 13 years ago

      Java isn't a horrible language it's a somewhat mediocre language.

      It's a lowest common denominator.

      It has a couple of very good free cross-platform ide's.

      It's write once -run everywhere to a certain extent. While java gui's may be a bit ugly they let you run self contained apps with no dependencies except for the jvm(installed on more the 1/2 of all pcs).

      The vm (at least the main sun/oracle hotspot / openjdk) has a world class jit and gc.

    • cgh 13 years ago

      Speaking purely from the server-side of things, Java (the ecosystem) has great libraries and frameworks for webapps and middleware. It also has OSGi, which solves a unique set of problems that aren't addressed by any other language ecosystem that I know of.

      This is all in spite of Java the language, which is kind of a lame duck. Java 8 should improve things if it ever gets released.

    • edwinnathaniel 13 years ago

      Every single thing that the other people have replied plus 2 things:

      1) Tons of experienced and battle-tested people in the ecosystems

      2) Standards that keep improving

      It's a dual-edge sword thingie, on one hand standards are good for stability but bad because sometimes it slow innovation down. Having said that, the Java ecosystems typically have one strong alternative outside the standard so your choices, in most cases, come down to 2: use what comes from SUN/Oracle or use the leading open source alternative solution. Simple.

    • pron 13 years ago

      Because it really isn't. I think that most Java haters are very young web developers with but a few years of experience. Having said that, there are quite a few languages that are much more productive than Java, and are a better fit for, say, run-of-the-mill web development. But very few languages can beat Java's performance and tooling (especially when it comes to runtime monitoring and profiling). More productive JVM languages make the best of both worlds, though.

    • rsynnott 13 years ago

      Modern HotSpot is probably one of the best VMs out there; while you could certainly argue that the language isn't wonderful, the VM is superb, and a lot of the tools are excellent.

    • pretoriusB 13 years ago

      1) Great built-in library

      2) great third party libraries,

      3) decent documentation and tons of books and instructional material,

      4) best-in-class virtual machine, good GC, as speedy as you get with managed code,

      5) tons of profilers and development tools

      6) several industry leading tools written in it (Hadoop, Lucene/Solr, Hbase, etc) and for it (IDEA, Eclipse),

      7) Enterprise support from big companies (Sun, now Oracle) and IBM, and several smaller ones

      8) Keeps improving (closures added in current 8 beta for example)

      9) A large ecosystem of interoperating JVM languages, from Ruby/Python like (Groovy) to Haskell like (Scala), to Lisps (Clojure)

      10) 15 year history, and at some point it fixed a lot of C++ pain points for enterprise programers

      • elteto 13 years ago

        With all of these pluses, it can't be that terrible right? ;)

        Java is not anymore terrible than anything else when you remember to use the right tool for the right job. I have developed in Java, libraries (JDK's and third party) are just incredibly good, you will not find the same variety and quality anywhere else, period. The language is verbose and also /insert favorite Java complaints here/. So what? Get over it and use the right tool for the right job. We are programmers, not damsels.

      • vorg 13 years ago

        Should be...

        9) A large ecosystem of interoperating JVM languages, from Java-like (Kotlin, Ceylon, Fantom), Ruby/Python like (JRuby, Jython, Groovy), to Haskell like (Scala), to Lisps (Clojure).

      • gurkendoktor 13 years ago

        11) A huge supply of cheap, replaceable programmers.

Kluny 13 years ago

I used Xamarin's Stripe library a few weeks ago. Super nice stuff.

  • natfriedman 13 years ago

    Cool! We were an early user of stripe, launching with it on our store in July of 2011. Stripe is great.

sev 13 years ago

I downloaded the trial and tried to create a Xmarin.Mac.Project and I got an error that I need to buy the software.

Did I choose the wrong option? If so, which one should I be testing? Why can't I test out all features of the tool?

Also, I agree with everyone else that the price point being $399 is way too high for personal development. Would it be possible to get something cheaper for personal development to see if it's actually useful for my needs?

  • picklefish 13 years ago

    What did you try in? MonoDevelop? I downloaded MonoDevelop and the trail for ANDROID this weekend and was able to make an android app with no issues for free. The limit basically being that I could only use the emulator and not test on a real device. I'm not sure how they limit the mac version though. If you want to check it out maybe try out the iOS or android trial which definitely lets you build.

    Also you could try MonoMac which is almost the same thing, and is OpenSource. The Xamarin version is supposed to have Wider API coverage and do a bit more (for the cost).

j_s 13 years ago

So MonoMac is going pro? Glad to see it will be supported.

http://www.mono-project.com/MonoMac

  > the result of weekend hacking as our day to day work 
  > revolves around Mono's efforts on Linux servers, Linux 
  > desktops, Visual Studio integration and our mobile 
  > efforts. Luckily, it shares some components with MonoTouch.
nanijoe 13 years ago

Does this allow you to develop Windows Apps using a Mac? Or is this mobile app specific?

danabramov 13 years ago

By the way, our MonoTouch app just got approved by Apple an hour ago. Sweet.

azakai 13 years ago

Cool stuff. Now how about running C# apps on the web? :)

  • CodeCube 13 years ago

    Not sure if kidding, or serious :P http://asp.net/mvc

  • eatsleepdrink 13 years ago

    You can also do javascript with it. I can't speak to it personally but friends have used Script# (http://scriptsharp.com/) for client-side javascript with good results. Never heard of anyone attempting node.js with it... yet.

    • azakai 13 years ago

      There are some C# to JS compilers, script# and JSIL for example, yeah. But none are officially supported by Xamarin. I was just curious why they focus on all possible platforms but the web.

    • danek 13 years ago

      scriptsharp: I saw it used/had to help maintain for a rather big project...never again... :(

  • account_taken 13 years ago

    Used to be silverlight, moonlight? Didn't catch on.

chrisringrose 13 years ago

C#'s okay and all... But what's wrong with Objective C?

  • migueldeicaza 13 years ago

    Managed languages are designed with a different set of goals than unmanaged languages. C#'s design goals were in general to reduce the number of bugs, help developers write better code, and maintain the code over the long term.

    It has evolved over the years to also adopt new programming techniques that have proved to be useful (generics, iterators, functional constructs, delayed-execution frameworks, Async programming features and dynamic features).

    But the idea is that you start with a safe environment that is relatively fast, close to C, but where the goal is not maximum speed, but increased productivity, fewer bugs.

    Then you try to optimize things to get closer to the performance of a native C compiler. For some things, you can get there, for some others you can not do it.

    So it leads to a different style of programming, you spend less time thinking about book-keeping, about making sure that you did not free the same buffer twice, ownership rules and so on, and you can focus more on the problem at hand. In day-to-day life, you spend less time tracking down production bugs.

    It is not a silver bullet, and wont fix every problem, and you still need to do careful bookkeeping of other things (like, did you load too many images?) but at least you can ignore the grueling minutiae and focus on what matters most.

    It is a little bit like the difference between using raw OpenGL and loading your vertices manually every time or using a toolkit that loads meshes and textures for you.

    • danabramov 13 years ago

      Can't wait to use C# 5 async in MonoTouch. I heard it's coming soon.

      • migueldeicaza 13 years ago

        It is!

        We are hard at work in upgrading both MonoTouch and MonoDroid to use Mono 3.0's compilers and class libraries. That is why you have seen a flurry of commits to Mono's master tree.

        We are hoping to have a preview in late January.

  • bratsche 13 years ago

    Nothing's wrong with Objective-C. But if you're interested in sharing some code to do cross-platform apps Xamarin makes it easier to do so with C#. You might write a layer to do API and data management/storage and general business logic and then share that code between Mac, Windows, iPhone, Android, Windows Phone, and Linux.

    It would still be a lot of work because they don't try to abstract any of the UI or other things for you (and imo, they shouldn't). But if your app fits into this kind of design, and if you like C#, then it could be very valuable.

mjs 13 years ago

Does this use "native" OS X components?

  • CodeCube 13 years ago

    Yeah, they just bind to the existing libraries, so you end up using all of the native tools.

kevin_rubyhouse 13 years ago

How is something like this done?

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection