Over at www.knowing.net Larry O’Brien discusses the craziness of of Steve Jobs’ latest edict – namely the changes to the iPhone developers licence that says:
3.3.1 — Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs.
and only code written in C, C++, and Objective-C may compile and directly link against the Documented APIs (e.g., Applications that link
to Documented APIs through an intermediary translation or compatibility layer or tool are prohibited).
Larry’s article is a good read and I wholeheartedly agree with what he has to say. In a funny kind of way I feel a sense of relief at this latest ridiculous declaration from Apple. I wanted so much to develop for the Apple platform that I purchased a book on Cocoa programming with a view to progressing to iPhone development. I started to read the Objective C tutorial but the stench of the 1980s was so overwhelmingly strong that, try as I might, I couldn’t complete the chapter. No one voluntarily writes code like that these days do they?
So my next thought was to investigate ways of using F# or C# to sidestep the inevitable insanity that would have resulted from Spaghetti-C Objective-C but now Steve Jobs has put a stop to all of that. A number of interesting products exist. The two that jumped out at me were – MonoTouch and Unity. But both of these break the new commandment and so have, as things currently stand, been removed from my list of options.
For those developers who have already made the commitment to prostitute themselves for the financial gain that comes from writing for the iPhone platform this is probably no big deal. But, for every other developer out there who was considering investing in the platform the message is a very negative one, and one that I think Apple will pay for in 12 or 18 months time when they no longer have such a perceived lead in the mobile application market.
Developers are used to working to an API. We view it as the dividing line between the bits that we have to write and the bits that the system will do for us – a contract of sorts. Most platforms are keen to expose their APIs in as many languages as possible and the choice of language and supporting toolset is usually left to the developer – after all a good craftsman knows which is the best tool for a job. In general, as long as we satisfy the requirements of the API we can use whatever steps we like to get there. But not with Apple. in his post on the subject Greg Slepak likens Steve Jobs to “the ignorant boss” who knows nothing about programming but still insists that you use a particular tool and that is exactly how it feels.
There is a good reason why few, if any, other big platforms are using Objective-C as the application development language of choice and that is because things have moved on in the last twenty years. There are now much more reliable ways to write applications and all good developers know that. Not only do Apple insist on choosing the language for us but they also restrict our freedom to choose our own tools and these two things together really are a step to far.
So the decision has been made for me – I now feel like a great weight has been lifted from my shoulders and I look forward to the freedom I’m going to have with the Android and the forthcoming Microsoft Windows 7 mobile platforms.
Perhaps I won’t upgrade my iPhone when they announce the new models this year but instead look further afield. After all, Apple are still fretting about multitasking when Microsoft are applying themselves to addressing the problems of multithreading in F# – and let’s face it Microsoft will be the good guys soon.