In an shocking, although not entirely unexpected move, Apple has updated their new AppStore SDK terms such that applications compiled using the new Adobe Flash to iPhone compiler coming with Adobe CS5 will no longer be accepted.Section 3.3.1 which has now become the topic of discussion on the internet. This section originally went as follows:
3.3.1 — Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs.
Since these words were not enough for Apple to describe their hatred for all developers for their mobile platforms, they have revised their terms to the following:
What this means is that any toolkits which allow developers to save time and effort by reusing their old code in Apple iPhone OS apps. One obvious target of this malice is Adobe Flash CS5 which will include the widely praised feature which allows one to create application in Flash which can run on the iPhone.
Other frameworks such as MonoTouch, a version of Mono for the iPhone also fall victim to this new condition. Mono is an implementation of Microsoft's .NET to non-Windows platforms such as Linux.
In true Apple fashion, the new terms continue to hold to Apple SDK's ambiguous standards. It is unclear whether one would now be allowed to use tools which generate C / C or Objective-C code for other languages.
John Gruber argues that this is to maintain control of the platform and ensure that other frameworks fo not get to dictate terms. He claims that this will encourage high quality of the applications on the iPhone and encouraging developers to use native device features since these are many times sacrificed by cross-platform tools. Yeah, we all know how important it is to use the accelerometer while making a "fart" application. The App store will contain junk and poorly designed applications regardless, and an application should be allowed speak for itself.
While the reasoning that this is to maintain control of the platform makes a lot of sense, it falls short of accomplishing its goal. Toolkits such as Qt, which is written in C will allow for cross-platform content to be written for Windows, Mac OS, Linux, Maemo, and Symbian. People are hard at work to get it working for the iPhone as well. This would allow cross platform code to be written for the iPhone using C .
However these frameworks are more than just about reusing code, but also reusing skill. A Flash or .NET developer need not only use the Flash to iPhone packager or MonoTouch to port existing applications which but also create new applicaitons using their existing skills.
With the Adobe CS5 launch just few days away, and the iPhone export feature one of the central features of Flash CS5, we can now only hope that Adobe had prepared for such a scenario.
Apple has a history of malicious behavior just like this. Earlier they has removed support for syncing the Palm Pre with iTunes for no apparent reason. Palm had gone out of their way to make Plam Pre compatible with iTunes by portraying itself as an iPod.
At that time Apple spokeswoman Natalie Kerris had this to say about he update, “It also disables devices falsely pretending to be iPods, including the Palm Pre. As we’ve said before, newer versions of Apple’s iTunes software may no longer provide syncing functionality with unsupported digital media players.”
So let us put that in perspective, a popular media player went out of its way to remove support for synchronizing with a device. What possible reason could they have? Were they going to support the Pre in iTunes without emulation? No. While Palm went out of their way to improve the utility of Apple's software, they merely tried to further close in their own platform.
Adobe now went out of their way to ensure that Flash developers could continue to develop content for the iPhone even though Apple refused to cooperate with Adobe in bringing the Flash Player to the iPhone.
Apple has once again shown that they are not dependable at all. After much investment in the platform, raised hopes and expectations, chances are you will find your application rejected or terms changed.