As expected, Apple's iPhone OS 4.0 will add extra restrictions on what tools developers can use, which in turn means less choice for iPhone owners.
The latest limitation comes in the form of preventing developers from developing applications using cross-compilers such as Adobe's Flash-to-iPhone application that will ship in Adobe Flash Professional CS5 to tools such as MonoTouch.
John Gruber has posted the changes to the iPhone OS 4 SDK. Section 3.3.1 of the iPhone Developer Program License Agreement deals the bad news to developers. Here's how the section used to read:
3.3.1 — Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs.
Here's the updated section:
It might seem odd to many that Apple wants to limit how applications are developed. After all, isn't an app just an app?
Gruber believes that the reason for this restriction is that Apple is worried that these meta-platform could become popular and start defining the iPhone OS:
So what Apple does not want is for some other company to establish a de facto standard software platform on top of Cocoa Touch. Not Adobe’s Flash. Not .NET (through MonoTouch). If that were to happen, there’s no lock-in advantage. If, say, a mobile Flash software platform — which encompassed multiple lower-level platforms, running on iPhone, Android, Windows Phone 7, and BlackBerry — were established, that app market would not give people a reason to prefer the iPhone.
And, obviously, such a meta-platform would be out of Apple’s control. Consider a world where some other company’s cross-platform toolkit proved wildly popular. Then Apple releases major new features to iPhone OS, and that other company’s toolkit is slow to adopt them. At that point, it’s the other company that controls when third-party apps can make use of these features.
I don't buy this. All approved iPhone apps have to adhere to strict standards, in particular, they can only use documented, public APIs. This restriction alone is enough to keep meta-platforms in their place. Sure, Apple doesn't want to end up in a position where Adobe or Microsoft is calling the shots, but the fact is that the deck is already stacked in Apple's favor.
My take on this is that Apple has woken up to the fact that the iPhone, and the iPhone OS platform, is just part of a wider smartphone ecosystem. With Android already putting pressure on the iPhone, and Microsoft's Windows Phone 7 coming real soon (and let's not forget about Blackberry and the Symbian OS), Apple wants to make it difficult for developers to develop cross-platform apps. Apple doesn't want developers taking popular and successful apps to different platforms. By disallowing a "write once, compile for multiple platforms" ecosystem, Apple is enforcing developer faithfulness by forcing them to wear a chastity belt. If developers want to be unfaithful, they're going to have to put in the effort.
On top of that is Apple's ongoing war with Adobe. No one really knows that the real reason for this battle, but it's clear that this latest move throws a rather large spanner into Adobe's CS5 machine.
Remember, whether you're an iPhone owner or developer for the platform, Apple would like to remind you that it's their platform, not yours. That is all.