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:
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.