When Apple launched the iPhone last year, it made me mad for two reasons:
- By demonstrating what could be done on a mobile platform it made me aware of what mediocrity had passed for progress in the mobile phone industry for the past several years, and
- It was a closed platform that only provided those applications that Apple, in its infinite wisdom, chose to include.
Now it appears that substantial progress has been made on both fronts. I'll save #1 for another post and concentrate here on the opening up of the platform.
Steve Jobs tried to downplay the closed nature of the iPhone by pointing out what could be done with Web-based applications, but there are a lot of things that can not be done in a browser, especially on a mobile platform which by its nature is not always connected to the network. Indeed, Apple admitted as much when it built Google maps into the device rather than running it as a Web application.
Now Apple has announced a developer program which includes the same SDK used by Apple's internal developers. The SDK is available today as a free download, although actually loading the application into an iPhone requires paying $99 and is only available "to a limited number of developers" for now. Apps can only be offered through Apple's App Store for which Apple will take a 30% cut of the sale price and will only sell apps that make it through an approval process. (There is a separate $299 program for in-house enterprise developers.) There are some restrictions on the apps that can be built, most notably a ban on "objectionable" content (e.g. porn) or doing VoIP over the cellular network. These and other policies are significantly more restrictive than those on other mobile platforms, and it remains to be seen how cumbersome is the approval process, but otherwise the SDK is full-featured and should enable a wide range of interesting applications.
The iPhone SDK provides access to most the facilities of the phone, including the multi-touch interface, a built-in 3-D accelerometer, and cell-tower-based location. Applications run in a "sandbox" with restricted access to memory and low-numbered network ports. There is no direct access to the phone features themselves. To dial a number the application must create a URI link for the user to click. The programming environment is based on OS X but with the optimizations you would expect in a mobile device, such as no windowing, simplified memory management (no swapping or garbage collection) and no apps running in the background. The OS provides built-in support for the animation that is one of the iPhone's signature features.
The SDK includes the Xcode IDE, Objective-C, Interface Builder (coming soon), and an iPhone simulator and debugger. This being Apple, it also includes a comprehensive set of human interface guidelines and an extensive set of sample applications.
Apple has gone to considerable effort to offer developers a way to build applications that are compatible with its conception of the iPhone experience and don't offend Apple's carrier partners. This will allow creating apps that integrate seamlessly with the existing functionality provided by Apple, but will not include some of the more wild-and-wooly programs such as Fring's voice over IP or Twitter running continuously in the background. It's more than I expected but doesn't leave Apple as the only game in town.