The latest developer agreement from Apple on iPhone OS 4.0 explicitly states that iPhone programs must be written on Objective C, C or C++ to legally link with the documented Apple APIs. This means that any sort of cross compiler which creates final iPhone machine code from other technologies are illegal. This change in developer agreement is a direct hit on Adobe’s idea to create a cross compiler for iPhone in its latest release of Flash Professional CS5. Any code generated using this Flash cross compiler is illegal on iPhone OS 4.0.
Apple is refusing to allow flash in its devices claiming that its implementation is buggy and it is not suitable for its devices. So the only option to develop software for iPhone, iPod Touch and iPad was to use the Xcode and iPhone SDK on Mac machines. It also meant that developers need to learn Objective C to build iPhone apps. Adobe thought that they can work around these limitations by providing a cross compiler which will convert Flash programs directly into iPhone’s ARM binary code. Till now Apple approved any app submitted to App store provided it met all its guidelines and hence a number of apps built with a preview release of Flash CS5 got into app store.
With iPhone OS 4.0 onwards this whole cross compiler process becomes illegal. Adobe may probably release iPhone cross compiler as part of Flash Processional CS5. But any developer building an iPhone/iPad application on it will be taking a huge risk since Apple may reject it during App Store submission. Technically there is nothing that can differentiate between the ARM code generated by Xcode and Flash Professional. Apple can insert a unique signature to code, but the same can be easily inserted by Flash professional. But even releasing the cross compiler may be illegal.
Now I think Adobe deserves what it got. They could have directly contacted Apple before going ahead and developing a cross compiler. Things like these should teach giant companies like Adobe that they can’t be arrogant all the time. One day Apple may also get a taste of its own medicine.
Obviously what Apple did makes a lot of business sense. They want people to use their own platform to build apps. Proliferation of cross compilers is not a good thing in long run. It can lead to inefficient code(?) as well. But the real reason seems to be that Apple wants complete control over its platform. They don’t want somebody to create a better development platform for building apps in iPhone and iPad. It also shows how easy it is to decimate the competition when you put restrictions on a platform. I now wonder why Microsoft was harassed by various governments all these years. Compared to Apple, they are angels
There is one more interesting aspect to the Apple/Adobe tussle. There are a lot of Flash game developers out there. It is not easy to compete with them if you are a pure Objective C developer building games for iPhone. So this is a good news for all the Objective C developers out there!