John Gruber broke the news 1 today that Apple made a subtle but significant change to their developer agreement, which forbids so-called “cross-compiling” apps for the iPhone OS that runs on the iPhone, iPod touch and iPad. The basic theory behind cross-compiling is that you could write an app in a language like C# or Actionscript and publish it as a native iPhone application that, at least on some level, worked like an app built in the Apple sanctioned XCode. This is now considered a violation of the SDK agreement and an almost certain way to have your app rejected from the App Store.
I must admit, on an academic level, I’ve been intrigued, if not necessarily impressed, by these attempts to backdoor the App Store. Foremost, it’s a non-trivial task to write a compiler that takes code meant for one platform and have it work on another. That projects like Adobe’s Flash Packager for iPhone or Novell’s Monotouch work at all is impressive. I’ve also been curious to see how the non-technical battles would play out between corporations and it’s now obvious that Apple is taking a scorched earth approach.
Beyond just geeky personal intrigue, though, I’ve got a fair amount of professional interest in this topic as someone who:
- Works for a media company 2
- Has a background in multimedia web development, including Flash
- Manages a team of talented developers with an great deal of Actionscript (2 and 3) experience
- Works with other smart developers who code in C# and .NET
Given all of that, you may be surprised to know that I’ve never liked any of the various cross compiling projects I’ve come across and I’ve seen just about every one of them. Projects that promise to compile JavaScript into iPhone apps, C# into iPad apps or convert your favorite Flash game into your new favorite iPod touch game. They all look terrible, are generally not performant and rely on a little too much hope and magic for my tastes.
The most promising of any of these appears to be Monotouch, from the unfairly bright and insanely talented Miguel de Icaza and his band of hackers, but they route around the biggest problem – ugly, non-native interfaces – by implementing native Cocoa interface elements. Which means you’d need to rewrite the interface code for non-iPhone OS platforms.
As much as I admire a clever hack, these cross compiling schemes have always struck me as, well, Doing It Wrong. I even tend to shy away from platforms like AIR and Java on my desktop because the reality of “write once run anywhere” has never lived up to the hype. Performance on mobile devices is vastly more important than it is on desktops that have power and cycles and memory to spare. The mobile interface metaphors are still being figured out underneath the aluminum and glass, consistency and expectation are vital to these still larval platforms.
Despite that, there’s still an undeniable attraction to being able to quickly recompile a Flash app to target the iPhone or get a full team of C# developers up to speed on iPad development in a day. Ultimately, though, I’m much more interested in a superior final product than a quick hack.
John not only broke the story but also wrote a smart follow-up about Apple’s motivation for the changes ↩︎
“Which media company did you say you worked for?” “A major one." ↩︎