views:

1380

answers:

3

MonoTouch seems like a great platform for iPhone development, but I'm concerned about deploying it to the Apple Store. Are there any examples of applications built with it that are currently available on iTunes?

We're starting a new project for the iPhone, and keeping the entire stack in C# would be great, but we don't want to incur the risk of being turned down from the Apple store because of MonoTouch.

I've read about several games that currently use mono (not MonoTouch) for 3D graphics, but couldn't find anything about MonoTouch.

+8  A: 

The MonoTouch community is maintaining a list of MonoTouch applications that are available today on the Apple Store and that have been written using MonoTouch.

Jb Evain
So two apps have been created so far - one that doesn't look like it's taking advantage of the iPhone hardware much at all and one that is probably going to be removed as soon as Hasbro catches wind of it. Yikes.
bpapa
@bpapa Two apps less than two months after the framework has been released, including AppStore approval. What's your point again?
Yann Schwartz
That there is very little evidence that MonoTouch is a viable platform for iPhone development. Y'know, addressing the question asked.
bpapa
Oh do you mean viable as "how dare they have not a million apps on the appstore one month after the release" or viable as "will Apple ban Monotouch apps?" as the question implied? Y'know, actually reading the question before addressing it.
Yann Schwartz
Thanks for the link Evain. I guess having only two apps in the appstore is a good and a bad thing: good because it shows that apple will indeed approve future applications using this framework; bad because shows that there's not a lot of people using the framework.Maybe somebody else is tracking a list of open source projects that are using monotouch, or number of downloads of the platform, which would give us a better idea that the platform is being accepted by the community ?
Eduardo Scoz
Just have a look at the web site the community put in place http://monotouch.info/ and have a look at the number of the articles that they create, and at their quality. It's pretty mind blowing considering how young MonoTouch is.
Jb Evain
@bpapa - Even just *one* app confirms that Apple *will* approve MonoTouch apps. That there's a second only makes the news twice as good. And the Hasbro issue you raised - that's clearly nothing to do with the technology. Yeah, the tennis one doesn't appear to make extensive use of the phone's capabilities, but ArtNotes, which looks to be just about ready for release, makes more use of the platform. Considering that the first 8,000 Objective-C iPhone apps were "flashlights", I don't think this is a bad start.
Rory Blyth
Actually Rory, no it doesn't confirm a thing, since Apple's App Review process can be characterized as inconsistent at best. The only confirmation would be Apple publicly stating that they have no problem with Mono Touch. The only thing I've seen that comes close to that was a similar product called PhoneGap, in which the creator claimed that a Dev Support member emailed him to tell him that apps will not be rejected for using that tool. It's not exactly as reassuring as Steve Jobs or Phil Schiller saying the same in a Wall Street Journal interview, or something.
bpapa
@bpapa - It *does* confirm that Apple *will* accept MonoTouch apps. They *have*, and that's confirmation. What you're arguing is that MT apps can be rejected, and that's true - like any other apps that "follow the rules", MT apps are candidates for rejection - along with every app created by every dev stack including (in fact, almost entirely) Apple's own. And based on your comparison to PhoneGap, which you call "a similar product," I can tell you don't understand how MT works. PhoneGap basically spits out glorified bookmarks (web apps wrapped in Xcode projects (in the case of the iPhone)).
Rory Blyth
@bpapa (continued from previous comment) - MonoTouch spits out native binaries - there's nothing weird going on behind the scenes. It creates real iPhone apps built against ThisKit and ThatKit... If you like, you can get MT to produce a native Xcode project from your MT project. You can build, sign, and submit that way if you want. The MT guys are *smart* - they aren't building a tool that'll kill apps in the approval proces. Even if they *did*, there's nothing to stop enterprise deployments, which is one area MT shines over Apple's dev stack. (Much easier to find a C# dev than an ObjC dev).
Rory Blyth
@bpapa (continued from previous comment) - In the end, you don't have an argument that applies specifically to MonoTouch, and what you're saying about the AppStore approval process isn't news. By misrepresenting MT, intentionally or otherwise (by making comments about it you aren't qualified to make (I've looked at your resume)), you're being dismissive about technology you don't understand and that people have put a lot of work into. Not cool. If we go by one *fact*, the truth is simple: Apple has accepted MT apps; it's reasonable to infer they will accept more.
Rory Blyth
@bpapa - Thinking more about this... already said it, but not as directly as I'd like: Whats your rationale for your stance aside from an argument that applies to *every app* submitted, regardless of the dev tools used? You're defending your point (which is valid: apps can be rejected), but you're implying, despite evidence to the contrary, that MT increases the likelihood of rejection. Care to explain *why* beyond your existing argument than can be summarized as: "All apps can be rejected"? What is it about MonoTouch *specifically* that heaps a bonus pile of not-gonna-happen on MT apps?
Rory Blyth
Yes, I know what Mono Touch does, and how it compares to PhoneGap, if you didn't think I did you should have linked to an explanation that didn't take up 4 StackOverflow comments. I also am glad to hear you looked at my resume that hasn't been updated in nearly 2 years. Maybe you can hire me to straighten things out over there. As for the topic at hand, Apple could simply decide they don't like MT apps (there are plenty of reasons already for them to come to this conclusion), and look for patterns that are present in all MT-built apps, and then reject them. Code at your own risk, basically.
bpapa
@bpapa - It was easy to conclude that you didn't understand MonoTouch (if you're curious, it's the total lack of substantive criticism that tipped me off (along with your having compared it to PhoneGap, which suggests you don't know much about MonoTouch (or, perhaps, PhoneGap (or both)))). If you said something other than (I'm paraphrasing), "Apps are sometimes rejected," then your argument might have... well, been an argument. And though I wasted a lot of intarwebs with my four comments, I wouldn't have made them had you not come along with your unhelpful non-answers.
Rory Blyth
@bpapa - As for the "plenty of reasons already" for Apple to "simply decide they don't like MT apps," I would love it if you took a moment to enlighten us. I'd especially appreciate it if you provided specifics. Not another version of "Apple rejects apps for various reasons," but something drawing on your understanding of, and experience with, MonoTouch. You seem so certain that it's doomed... I'm afraid I might be missing something obvious, and you could save me (and others) a lot of work by supplying us just one or two of these many reasons you're talking about.
Rory Blyth
MT enables you to develop iPhone apps without having to do it the Apple way. So does PhoneGap. You start with code that isn't the recommended dev path, you end up with an app in the app store. So yeah, for the sake of this argument, they're the same. As for the reasons why Apple might want to stop MT apps - MT is always going to be behind the official SDK (possibility of bugs), I'm sure there must be nuances that aren't possible in MT, the apps already built in MT are ugly, the binaries are big, wrapper implementations may be poor, and finally just for biz/competitive reasons.
bpapa
@bpapa - How does MT enable you to develop apps "without having to do it the Apple way"? Specifics here would really impress me. As for PhoneGap - it's actually closer to Apple's original vision. Apple wanted third-party apps to be web apps. PhoneGap let's you develop web apps that come packaged in a bundle. It also provides access to a few native APIs, but not many (cos they're trying to build a cross platform framework). But they're still just fancy web apps - what Apple wanted. But, back to MT - what "recommended dev path" are you talking about? What does that even mean?
Rory Blyth
@bpapa - And your dislike for the way MT apps look isn't an MT problem. There are tons of ugly apps built with Apple's dev tools. Then, the SDK - they've done a great job keeping up so far, and they've done the hardest part: laying the foundation. The binaries are getting smaller and are fine for OTA purchases (no wifi required). You're flat-out speculating about the "wrapper implementations" being "poor" - they've *improved* on the Cocoa bits. Your "biz/competitive reasons" argument doesn't even make sense - you still have to pay for an Apple dev account with MT. So... got any *facts*?
Rory Blyth
@bpapa - I'll take the silence as your having seen the light. Glad we had the chance to clear the air. For anybody else reading, while this exchange has been going on, MT 1.4 was released, and it's, as you'd hope/expect, even better - MUCH faster startup times, smaller binaries, more bindings, an improved binding tool... life is good for MT devs :)
Rory Blyth
Actually it was because you asked me to impress you. Since you are so awesome, I knew this would be an impossible task. So I just gave up.
bpapa
Oh and hey look at that, Apple upgrades the developer agreement. http://daringfireball.net/2010/04/iphone_agreement_bans_flash_compilerWHO COULD HAVE SEEN THIS COMING?
bpapa
+2  A: 

The unity game developement platform is using the same mono touch code base for C# support (and have contributed to the project).

Oded
Exactly, that's what I meant by "games in mono". I forgot the name of the platform.I guess that kind of proves that Apple has no problem with the mono compiler, but it doesn't say anything about the bindings to the touch UI.
Eduardo Scoz
They don't compile to CL, as this is not allowed by Apple, and according to the monotouch documentation, they do bind to all of the iPhone APIs.
Oded
@Oded - The bindings are pretty thorough, and you can easily create new bindings (that includes bindings to your own libraries, which is pretty cool and shows MT's flexibility). One thing they *don't* bind (yet) is CoreData, but that's a challenge that goes beyond simple bindings. To do CoreData *well*, you'd also need to play happy with Apple's CoreData tools. One general issue is the mixing of .Net and ObjC types. I have some ideas there, but it's still quite the task. Otherwise, yep: MT ships with bindings aplenty and means (by hand or with a tool) to create your own :)
Rory Blyth
+16  A: 

Tapping this out on my phone, so going to be a little terse - apologies for that. 

Anyway:

 - As said in a previous answer, there have been MonoTouch apps released to the App Store. Whether it's two or a bajillion doesn't matter so much. The difference between one and zero is infinite - the answer is unequivocally: Yes, Apple will approve MonoTouch apps.

 - MonoTouch plays by Apple's rules. It spits out native bits. There's no interpretation of code going on, nor is there any JITting. Your MonoTouch app is a bundle like any other, and it contains a native binary like any other.

 - MonoTouch apps are larger than they would be if they were written with Apple's stack. This is because your MonoTouch app relies on a subset of the Mono/.Net framework. In that respect, though, once you get down to what ships, there's nothing especially different about a MonoTouch app. I worked at a company where we built our apps (developed with Apple's stack) against our custom framework. It increased the size of our apps, but it also cut way down on production time (and that's always the trade-off, right?). Plus, the size of the app bundle just after compilation can be deceptive. Because bundles are zipped for the App Store, the size decreases dramatically - you can easily write a MonoTouch app that falls well within the acceptable size limit for apps delivered OTA (I bring this up because it's a question MT n0obs (rightly) tend to ask). So, Apple doesn't have any real reason to reject based on size.

 - Whether it's MonoTouch or a custom in-house framework like the one I used to work on/with, the MonoTouch stuff, when shipped with your app, is just another framework that could've been written in Objective-C.

 - If you're concerned about configuring your app for distribution using the entire MonoTouch stack and how that might affect your chances of approval, you can tell MonoDevelop (or the mtouch utility from the command-line) to output an Xcode project. You'll see that your code has been transformed - you'll be looking at native assembly (not some flavor of an IL). You can build and run your MonoTouch produced app from right within Xcode, by which time MonoTouch is basically out of the picture (except as a framework you're building against (like MapKit, for example)).

For some reason, all of this bothers a very small, but vocal, subset of iPhone devs who, for whatever reason, can't stand the idea of people they don't know using a different tool to build apps. But their hateage doesn't change the simple fact that Apple has accepted MonoTouch apps (and Unity apps long before that).

The biggest reason you're going to see for MT apps being rejected is that MT devs, in my experience (I've been talking to quite a few - after giving some talks, posting to forums, mailing lists, here...), is they they haven't yet learned how to develop an iPhone app. That's something iPhone devs must do regarldess of how they write their apps. MonoTouch isn't the obstacle - it's knowing, for example, that Apple wants your app to look a certain way and to work in a certain way - it should look and feel and behave like other (good) iPhone apps, and shouldn't be among the examples of attempts to write desktop apps for a phone (which is where your average dev makes his first mistake when transitioning to mobile development).

Ultimately, your tool of choice isn't going to matter as long as it creates bits that play by Apple's rules (like MonoTouch). The real obstacle is learning the iPhone Way of app design.

.Net application devs, whether on Windows, Windows Mobile, or wherever Mono (not MonoTouch) runs, are accustomed to developing apps according to their own tastes. That doesn't fly in the iPhone world.

You can safely go with MonoTouch. As has been shown, Apple will approve MT apps.

The thing you really need to do (again, regardless of which dev stack you choose) is read Apple's docs on iPhone app design and their guidelines. There's a huge crowd of devs out their attributing their app rejections to Apple being evil (or whatever - uninformed excuses, basically), when the truth is that their apps are garbage and it's clear the devs didn't play by the rules (or even bother to read the rules).

In the end, in many cases, you'll write far less code when using MonoTouch, and the cost for that is a larger app bundle (which, as I said, will come out very reasonably sized after it's been zipped for distribution).

That's not much of an issue. With 3g, users don't sweat downloading 2-3MB sized apps. If it's small enough to send OTA, everything's fine. And in cases where your app goes over the limit, it's likely embedded resources (media - images, videos, etc. - that's how bundles typically swell to wifi-only sizes), and that's something Objective-C devs have to deal with, too, so that's not a MonoTouch problem.

So, ignore the haters (who haven't even tried MonoTouch or bothered to learn how it works), and rest assured that, as long as your app conforms to Apple's guidelines, there's no reason for them to reject it. It doesn't mean your app is guaranteed acceptance as long as you design it correctly (plenty of apps get rejected for no apparent reason), but you can consider yourself, more or less, to be on equal footing with devs using Apple's tools. 

Hope this helps :)

Rory Blyth
Rory, thanks so much for the answer! That's perfect for me: a good analysis of the current facts around monotouch, and the tradeoffs regarding the platform.
Eduardo Scoz
Glad to be of help :)
Rory Blyth
Just to jump on your comment about building a *good* iPhone app - I think there's just as many horrible Obj-c iPhone apps as there would be for Monotouch. Just they are often forgotten when a beautiful app is created. And so far - no beautiful example of a Monotouch has been created so people are calling it foul and blaming .Net guys for not understanding the platform (whether this is true or not). I'm sure as soon as people take more time with Monotouch developing beautiful apps, that's when Monotouch will take more people's interests.
chrisntr
Chirsntr, totally agree with your comment. One concern is that monotouch would not allow the type of customization that can be done with obj-c (without having to jump to obj-c), but from what I've seen so far, that doesn't seem to be the case.If you have more experience on that, I would love to know.
Eduardo Scoz
As I said in the other comment, it doesn't mean Apple WILL approve Mono Touch apps - it means they HAVE approved some. And since the app store approval process is inconsistent, it doesn't mean anything going forward. It's still anybody's guess how this will play out.
bpapa
@eduardo - There *are* some limitations to what you can (currently) do with MT. The biggest one, to me, is CoreData. There are similar tools being worked on for MT, but CoreData is still CoreData. I prefer to keep things in AppleLand as much as possible. But, for most APIs (whether CF or Cocoa or your own libraries), if there's something you want to be able to do with MT that it doesn't already do, it's easy to create (or generate - depending on how much control you want) the bindings. And there are things with MT that you can't easily do without it, so there's a trade-off..
Rory Blyth
@bpapa - And I've responded to your other comment. While I'm here, though, thought to suggest that you actually learn about MonoTouch and how it works before stating your opinion. Nothing wrong with BSing - talking shop is fun, and geeks are notorious armchair experts (I include myself in that group). However, you clearly have a bias, And it's uninformed. If the point of StackOverflow is to *answer* questions, comments like yours are counterproductive and muddy the waters. If you have a personal dislike for MT (which seems to be the case), you should at least learn about it before opining.
Rory Blyth