Blog

Unity3D, MonoTouch and Flash CS5 to be banned from iPhone/iPad’s Ecosystem

Up until now a few solutions existed if you wanted to avoid C/Objective C to code for the iPhone and specially to achieve some code portability/compatibility with other platforms. Examples of those solutions are Unity3D, Flash CS5, MonoTouch, HaXe and other static-compiters or trans-compilers like XMLVM.

As reported by several sources (e.g. this Engadget article) this is about to end due to the new iPhone’s 4.0 SDK agreement which states the following:

Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs. Applications must be originally written in Objective-C, C, C++, or JavaScript as executed by the iPhone OS WebKit engine, and only code written in C, C++, and Objective-C may compile and directly link against the Documented APIs (e.g., Applications that link to Documented APIs through an intermediary translation or compatibility layer or tool are prohibited).

I’m no lawyer but this seems pretty straightforward, you have to use Objective-C, C, C++ or Javascript to code anything that will run on an iPhone/iPad. The wording «originally written in» makes it perfectly clear that even if using a trans-compiler (e.g. translate Java to ObjC like XMLVM does) won’t be legal and might be cause for rejecting an application’s submission. The last piece also prohibits static compilation in any form or shape, which is probably the method covered by all the other solutions like Unity and MonoTouch, I don’t know the specifics of Flash CS5 but it has to be one or another.

Personally I’m not actively using any of those solutions for my coding needs, but I can imagine this will create a lot of havoc, pissed off customers as well as a possible uprising against Apple. The only question unanswered for me at this moment is whether this rules will only apply if you use the new 4.0 SDK or if they will make sure the agreement will be enforced via their program portal, making it impossible to submit any new applications or updates without the need to obey the new rules whichever SDK version you used.

The question of whether people will follow the rules or not is something time will tell, but it’s pretty much on Apple hands. Detecting if you used static or trans-compilation is a question of Apple engineers finding specific code symbols and patterns that are unique for each of the solutions around the market, similar to how anti-virus try to find virus signatures. However, this hasn’t worked so well for anti-virus companies so far, it’s a perpetual game of the cat & mice with a single vendor trying to neutralize an ever increasing numbers of smarter and smarter hackers.

While really enforcing this policy might be impossible with a 100% success rate, specially if the source for the compiler is available, making it possible to obfuscate those unique signatures, it surely will be a major FUD weapon towards the companies that provide this solutions as well as their customers. But what exactly does Apple win with this move? Is it a statement about the quality of current third-party solutions or is it something else?

I can’t imagine a company as large as Adobe not producing a decent compiler, specially if specifically designed for the iPhone/iPad platform, and while I don’t have hard numbers I also can’t imagine the huge numbers of Unity3D games suffering from some major lack of quality at the tool-set level. After all, most of the iPhone’s SDK is based on open source tools like gcc, llvm and the pretty much standards of C and C++. Sure, Apple’s Objective-C has many custom improvements, still we’re doing wrappers and new compilers everyday on almost every platform and I don’t think that could be the problem either.

To be honest, the only explanation I can think of to justify this move is very weak to say the least. Selling Macs for development purposes can’t really mean a decent revenue stream for Apple and truth be told, Unity3D as well as MonoTouch actually require a Mac to be able to test/debug on the simulator and/or device.

However strange this move seems, I’m sure that Apple has it’s reasons although I might not like or agree with them. Personally I believe this to be a very bad move, that can potentially hurt them more than the potential benefits and I hope/expect that the public’s pressure will force them to revise and go back on this decision sooner rather than later. I’m sure someone somewhere will already have started a petition to ask Apple to reverse those changes and those pesky letters addressed to Steve Jobs will surely start arriving soon. Time will tell.

Post to Twitter Post to Delicious Post to Digg Post to Facebook Post to Reddit Post to StumbleUpon

Tags: , , , ,

15 Responses to “Unity3D, MonoTouch and Flash CS5 to be banned from iPhone/iPad’s Ecosystem”

  1. I doubt that this will affect Unity (all Unity iPhone projects are compiled in XCode), and we’ve received no indication from Apple that Unity will be affected. Unity has actively complied to previous versions of the TOS and will continue to do so with future versions.

  2. alexmipego says:

    However, from my understanding of the new rules, Unity will be in violation because the scripting code in Unity isn’t C or ObjC. Since that isn’t the original language of the project actually compiled in XCode by Unity, technically it wouldn’t be legal.

  3. JulesLt says:

    Ironically, Apple have probably given Adobe a lot of what they needed with the clang/LLVM project.

    My guess is that what Apple are trying to achieve is the maximum number of iPhone exclusive applications, and to deter developers from opting to use an x-platform toolkit to gain maximum coverage (I suspect similar logic is behind the No Java/No Flash moves). Otherwise it’s just a straight hardware race.

    Of course I think the right thing to do is to give developers a good reason to want to write iPhone only – and the biggest category (games using primarily C++/OpenGL) are probably the easiest to port while still staying within the ToC.

    And it will be weeks before someone works out a solution that uses C macros to spit out legitimate direct linking code for different platforms.

  4. Peterdk says:

    Yes, I definitely think it’s just Apple wanting to keep Iphone exclusives. They don’t want cross-platform apps, they want you to be an Iphone dev.

    However, given the future rise op WP7 and Android, most developers do have the need to go cross-platform, since it’s just not viable to only sell your app for the Iphone.

    I must say this is the first time I am really angry with Apple. Seeing how much other people share that resentment, I do hope we can get apple to revert this. However, I think Apple won’t change a thing.

  5. ar says:

    it’s nonsense to say it’s necessary to be cross-platform. Just drop Android and Windows. No big deal. Some of us iphone developers never intended on releasing our apps on anything but Apple hardware.

  6. turtlewax says:

    I actually considered buying an iPhone. Glad I went with droid. No way I’ll ever buy any apple product.

  7. Max Battcher says:

    It’s interesting that for a company so obsessed with hardware innovation they’ve decided to ignore some 20 years of software development innovation. (With the exception of JavaScript, which you’ll notice is only allowed in browser with no direct API interaction. Why?) I don’t care if it’s to spite competitors, increase lock-in, or discourage cross-platform development: this is one of the craziest things I’ve heard in some time. As a developer, though, the increasing lack of cross-platform development strategies makes me angry that Apple doesn’t respect my time or investment and are sending a clear message to stay away from their stupidly walled garden, because I’m modern language loving riff-raff…

  8. JulesLt says:

    It’s a good question – is it viable to write for the iPhone alone, or not?? I mean back in the 80s we had a lively software scene, when there were 8 or 9 major home computers, and the whole market was only a fraction of the current one.

    To be fair, the typical price of a game in 1981 was more like $5 – before we add on 30 years inflation, but what seemed to happen was, if something was a hit, it got ported, or copied, for other platforms. It was only later, once things consolidated into bigger studios, that all of a sudden they couldn’t ‘afford’ to write for minority platforms. As with books and the music industry, the focus was on increasing the profitability of fewer products, rather than ‘will this make some money? lets do it then’.

    Equally, there are people today who make a living writing Mac only software, despite the small size of that market – and I am glad that market exists, rather than one based wholly on a lowest common denominator Java toolkit like Swing or SWT, or even something like Qt. It turns out the problem is cross-platform design, rather than coding.

    The iPhone market is also a lot more lucrative than the cross-platform Java app market (despite the 1 billion mobiles with J2ME support) – which failed to really deliver the kind of apps people wanted, or the real cross-platform that developers wanted.

    Android is also showing signs of the same problems, although I think it has the momentum to carry it through the teething problems.

    If you look at the console market, what the console manufacturers do to ensure exclusives is offer additional terms (funding, marketing, rates, etc) to developers who promise exclusivity. (The console market is also a good example of how many developers are content to work inside closed gardens, compared to the people who think, because they’re written a popular web application, they define the software industry).

    From my point of view, I’d like the iPhone to preserve it’s strengths as a platform, much as I got a Mac because I preferred what I’d seen of the native software – and I can understand how Apple’s development frameworks aid that. But I’d like the iPhone to preserve it’s strength in the same way – by making it easier for developers to produce the best apps.

  9. Stephan says:

    Just bought an IPad to make game for it with Unity. If Apple sticks with this I will return it. As an Indie developer Unity is the greatest. If I have to make the choice we will support all other platforms except Apple. Duh.

  10. […] problem is that the changes, covered in my previous blog post, didn’t change one detail that was already in the rules for a long time, this specific detail […]

  11. Simon L says:

    Interestingly Unity3d is written in C++ itself, and the scripting language (default) is Javascript so it looks like it will not be affected by this.

  12. alexmipego says:

    Not true, Unity for the iPhone uses .Net and even if it used Javascript the rules clearly state Javascript is only allowed inside WebKit/browser. Just look at the Opera Mini application, it’s ridiculous calling it a browser when JS/Ajax isn’t supported because Apple also disallows another Javascript implementation to run there.

  13. Carl says:

    We have also heard many positive updates from middleware vendors within the iPhone ecosystem. Some have already reported direct approval of their platforms, and Unity (a Mono licensee on iPhone) have reported that they will be meeting with Apple this week to discuss the matter.

    source: http://www.mono-project.com/newstouch/archive/2010/Apr-19.html

  14. Robert says:

    I won’t be buying an iPad afterall and will likely buy an android based phone when my ATT contract expires. Not supporting flash hurt but not supporting Unity is a deal breaker for me. These actions always seem to come back and bite a company in the #w@. It will take years but just watch the tide build and boost it gives Apple’s competitors.They just left the door wide open in my opinion.

  15. BerggreenDK says:

    Regarding Unity3D/MonoTouch
    Unity3D supports 3 languages. C#, Javascript and Boo.

    Using C# does NOT use .NET, but the OpenSource version of the same called MONO.

    MonoTouch is another framework that uses MONO framework with C#. They are both COMPILED languages that goes into Objective-C and then compiles through Xcode projects.

    In Unity3D you can choose what platform to compile for. Android, Mac, PC, Webplayer – even Xbox, Playstation and Wii is supported by extra licenses. But if Apple choose to ban this, I think the amount of cool 3D games will degrade fast.

    As a crossplatform developer I want to use a tool where my customers can gain the best cost/benefit per project.

    If we have to spend 100% time with Objective-C for each App developed for both iOS, Android and Windows Phone etc. I think Apple will start to loose quite a lot of professional developers.

    I dont use Java for Android, I use C# and compile into Java or whatever they want. I dont use Objective-C, i Use C# and compile into Xcode. Ban this and I leave Apple/iOS alone.

    Perhaps we should turn this around and start making the web closed for everyone using Mac hardware or Apple Safari browser. Sorry, this website is not viewable by an Apple computer, as its saved from a Linux/Php server or a Microsoft IIS ASP.NET webserver.

    Apple… wake up! you will benefit from an open system. Dont be Evil.

Leave a Reply

For spam filtering purposes, please copy the number 8127 to the field below: