Friday, April 9, 2010

Updated: iPhone OS 4 SDK section 3.3.1 Changes

The brouhaha over the change in the iPhone Dev Program License Agreement should not come as a surprise to anyone. Yes, it proves Apple really wants to lock developers and users into their own extremely high-walled garden. But no, it will not kill any iPhone Cross Compiler platforms.

If you haven't heard about it yet, the iPhone OS 4 Dev kit became available this week. John Gruber found an interesting change in the Developer License Agreement. Essentially Apple is prohibiting the use of cross-compilers like Adobe's upcoming CS5 and Novell's MonoTouch that allow developers to create applications in other programming environments and still compile iPhone applications. Thus people who make a Flash game and then use CS5 to compile to iPhone or someone writing a mobile game in C# who uses MonoTouch to build an iPhone release will be violating the new License Agreement.

Many observers see this change as Apple's way of preventing CS5 from being a viable iPhone development platform (examples: 1; 2; 3) The question is why on earth would a company want to limit the avenues for development on their platform -- don't more developers mean more apps, mean more customers? Isn't this one of the reasons why Macs have such a small share of the PC market? One answer (that favoured by Apple fanboys -- see the Gruber links above) is that by forcing developers to build applications natively for iPhone (and iPad) with XCode and InterfaceBuilder, these application will take advantadge of the unique features that make the platforms compelling. This in turn will make for much better user experiences and thus Apple is just ensuring quality for the users. This is hogwash, Apple is a profit-oriented company that is deliberately trying to create as high-walled a garden as possible around the iPhone. By generating this lock-in they hope to lock-in all the profits for them. This is what the point of the company is: to make money for it's shareholders. If consumers don't like this behaviour they can buy other products. If you want to develop applications for a platform provider that treats developers well, then don't build for iPhone.

More importantly, I don't think this change will really stop cross-compiler platforms either. It will force some changes. As Gruber pointed out, tools like the Unity 3D package are likely unaffected by the new license since they generate an XCode project that the developer still has to compile into an application for the iPhone. While it is annoying to the developer, platforms like CS5 and MonoTouch can do the same -- re-engineer their products to generate a XCode projects and require that the developer compile the applications themselves. Apple might argue that this is prohibited as well but it will be much harder for them to discover the app is built this way. It will be interesting to see how Adobe and other cross-compiler developers respond.

Update:
As the tweets roll in it appears many commentators are interpreting the license language as impacting even tools that generate XCode projects (such as Unity 3D) -- including the reaction so far from Flash people. I'm not so sure it does. To go that far I think Apple would also be ruling out developers own configuration management tools or any third party tools that generate, package or build code. Even if this is true, how can they tell if the tools generate Objective C in an XCode project? Don't get me wrong: Apple deserves scorn from developers but their ambivalence verging on hostility towards developers is nothing new.

Another Update:
Apple Insider argues that the license change bans cross-compilers and is also reportingthat Flash Apps are disallowed because of multi-tasking and that this extends to all other cross-compilers: "It can't do this if apps are running within a runtime or are cross compiled with a foreign structure that doesn't behave identically to a native C/C++/Obj-C app."

Now this is a crock. I don't know about CS5 but tools like MonoTouch and other cross-compilers do not rely on a foreign structure -- the only way to get apps built with them on the iPhone currently is to bloody well compile them with Apple's SDK. It's just that some cross-compilers may automatically invoke said compilation so that the developer does not have to manually do it. Adding the language about requiring original code in Apple's languages and interpreting that as banning porting has nothing to do with multi-tasking. Apple is simply screwing over developers because they think they can.


Read more »