For someone with .Net experience and wanting to develop for iPhone/iPod/iPad, is it worth learning Objective-C? Is MonoTouch a good alternative? What are some of the trade-offs when using MonoTouch vs coding in Objective-C?
MonoTouch is a fantastic alternative. I've been using it for pretty much one year now, and I can't ever imagine going back to objective-c. Highlights: LINQ, LINQ to XML, LINQ, C#, LINQ, Garbage collector, LINQ, MonoTouch.Dialog, and a lot of other things.
Seriously, though.. nowadays most apps are always downloading data from the web, and you'll need to be converting that to objects, keeping them in lists, sorting and filtering them, and pushing them to databases. That stuff is so simple to do with C# and LINQ that I can't imagine people doing that in other languages.
The $400 dollar cost is not low, but you can probably make that money back in 1 month or so with no advertisement. And the amount of time MT will save you will offset that easily. Also remember, you don't have to pay until the app is ready for testing in a device, so its free for learning.
With that said, yes, its still totally worthy to learn Objective-C. It'll make you a better developer for the platform, you'll understand why some things are the way they are, and so on. You'll also be able to read Obj-C examples in the web and translate them to C#.
Finally, here's my suggestion: if you're thinking of getting in iOS development, go to MonoTouch. Spend a few weeks using it, and then make the decision of jumping to Obj-C. The hardest part of going to iOS development is not the Obj-C language, is all the new frameworks you'll have to learn. Being able to learn them in C# is a HUGE deal, you'll be a lot more productive from the start up. Just after you know those things look into Obj-C: everything will be already familiar, so it'll be easy to understand everything.
I'm a seasoned C, C++, Delphi & .NET developer and I recently needed to tackle an iOS application development project with a .NET back-end. I initially got very excited about MonoTouch and climbed into it only to find that the learning curve was not really the language but rather the design patterns.
I also noted that the community support out there for MonoTouch was far less than that for Xcode and Objective-C.
My advice, take the time and learn Objective-C. Read the Apple developer guidelines and learn how to do it right.
If you just want to get something out the door quickly, I believe monotouch would be the way to go.
The Bad: Remember that MonoTouch is $399 for a single developer. That means if your app is priced at $0.99, then you essentially need to sell over 400 apps to even make money. That's not taking into account that you won't get the full $0.99 for each app purchase. Another thing to think about is that if you want other developers to join your project, the vast majority of iPhone devs still use Objective-C, so it will likely be harder to find partners.
The Good: Development time will be a lot faster. Being early to market is typically a great advantage.
The Neutral: You still have to learn the iPhone libraries, application lifecycle, and all the other little nuances of the iPhone. So even though you don't have to learn Objective-C, you still have to learn the framework. So, either way, your app can be equally awesome as it's still the iOS framework at the end of the day.
I'm starting to develop an application using MonoTouch and I am finding it a good experience. With a tendency towards being productive rather than learning new tech, MonoTouch scratches the itch. The general feeling is that Novell have done a great job of making iOS functionality available to .NET developers and now with Apple's recent relaxations of the licensing (they now allow iPhone/iPad apps developed by 3rd party tools) MonoTouch is only going to gain ground. If you watch the #monotouch twitter tag you'll even see some developers / devshops PORTING their Obj-C apps over to .Net because it'll be easier/quicker to maintain/evolve in the long run. Oh, and all the Apple guidelines still apply even though you're working in .NET - in fact I find them pretty helpful.
With MonoDroid on the way too, you'll likely be able to re-use core libraries of your own application across an iPhone AND Android application - how cool is that??
Here's a pretty upbeat interview with Wallace Mclure that captures a little of what I'm talking about:
I'd say go for it!
There's an article about one .NET devs experience in moving his skill set to iOS.
This blog post describes my experience of learning how to write iOS software, after having spent many years exclusively in the world of .NET development. It provides warnings, suggestions, and tips for others who are interested in learning iOS development. The post ends with a qualitative comparison of programming in WPF and iOS.