iPhone

Having spent the past 8 years working with mobile application development (beginning with the book Core J2ME that I wrote in 2000), it’s odd that its taken me so long to dive into developing for the iPhone. The good news is, I’m now fully engaged and plan to spend a fair amount of time writing about this new endeavor…

This is the first in what I anticipate to be a long series of posts as I ramp up on all things iPhone. The intention is to share how I am going about learning to develop iPhone applications, in the hopes it can help you.

To begin, my plan is to learn the following, in the order shown below (with Xcode, Apple’s development environment, thrown in as needed):

  • Objective-C
  • Cocoa
  • iPhone SDK (API’s)

So let me begin by pointing you to a few resources:

As you’ll see once you download a few of the docs, there is huge amount of information here. To keep things in perspective, my intention is not to revisit all the material in the documents, as much as point out the nuances that I think will be important in becoming a proficient iPhone developer.

A good example is the next post in this series where I’ll point out how to work around one of the sore spots for many who come to Objective-C from an object-oriented language, lack of support for private methods. With Objective-C there are a few tricks to "hide" methods, however, it’s really just a slight-of-hand, so to speak. I’ll explain more later.

There is a fair amount of information to digest above (assuming you are new to Objective-C, Cocoa and/or Xcode). Once you are ready for more, here is a list of additional documents to further immerse yourself:

I hope you’ll join me as learn the ropes for developing iPhone applications.

I’ve been spending some time with the iPhone SDK to get a perspective on the architecture, tools and overall landscape. In addition, I’ve started to develop a few applications with Xcode (Cocoa/Objective-C) to exercise the tools for building iPhone applications. More on application development next week…

So far, I’m impressed. Here’s how I see things…

The Platform:
The iPhone architecture consists of the Core OS (kernel level resources), Core Services (system services), Media (audio, video and graphics) and Cocoa Touch (classes for managing graphics and event-driven applications).

From my perspective, there are two key areas that are exposed. First, the system services in Core OS, accessible through a C library (LibSystem) where one can work with wrappers for low-level features such as threading, networking, file system, Bonjour, among others.

Second, and even more compelling from a user interaction perspective, is the Media layer. Quartz is a 2-D drawing engine. Through the C-based API one can work with vector graphics, lines and shapes, etc. Core Animation is an Objective-C API providing animation and is also part-and-parcel to providing dynamic feedback from the UI. Many of the standard animations that make the iPhone so compelling (screens sliding, flipping over, etc) are included in View classes in the UIKit. OpenGL ES is a mobile version of the OpenGL standard and is the engine behind 3-D graphics. When high-frame rates are in order (think games), OpenGL is the answer.

From what I can tell, the iPhone SDK looks quite comprehensive, providing access across all areas of the device.

Distribution:
One of the challenges since day one for mobile developers has been getting their applications in front of potential users. With the iPhone, applications will be available through Apple’s App Store, which is accessible on the phone as well as through a desktop/laptop system. My understanding is that Apple will offer developers 70% of the revenue. Not unreasonable given Apple will provide the store front and manage all that goes with it.

Overall, an impressive start to what I think could be a significant, and welcome change, to the mobile development landscape.