Monday, October 06, 2008

I've spent a lot of time over the past couple of months working on a couple of iPhone applications including TeeShot and PracticeTee. Until recently, though, we were not able to talk about what it was like to write these applications, or even talk in public about the APIs used due to an NDA from Apple that applied to all developers in the program. Fortunately, Apple dropped that NDA a few days ago, so we should start seeing lots more information on the web about how to write iPhone apps and how to work around some of the issues that we run into building on a platform that is new and growing.

With that out of the way, I figured now would be a good time to post a few thoughts about what it has been like to build and deploy several versions of applications for the iPhone.

The Good

Frameworks

Building an iPhone application is remarkably similar to building a Macintosh application. One of the best things that Apple did in the creation of the iPhone SDK was to start from the Cocoa framework and then tweak some of the UI layers to be more specific to the iPhone form factor. This means that in many places, I can copy and paste code between a Macintosh application like CourseBuilder and my iPhone application. Also, since Cocoa is such a mature environment by now, with very strong development tools, much of the underlying framework is very robust and secure. The graphics capabilities of the iPhone are outstanding, having a full networking stack and the cellular network at your disposal means applications are always connected and the fact that every iPhone comes with SQLite built in means that writing rich data applications is very simple. This is fantastic.

Tools

For the most part, the development tools are really great to work with and I don't just mean the XCode IDE. The performance monitoring tools are very strong, though sometimes a little quirky still and the iPhone emulator is really top notch. It is even useful for testing websites to see how they will look on the iPhone.

Distribution

Even with all of the complaints people have had about the iTunes App store (banning applications, slow to post updates, light reporting) it is a real game changer for there to be a distribution mechanism that automatically hits all potential customers for the application and provides both payment and download/update infrastructure as part of the deal. Services like this allow very small development shops - like just one developer - to deliver their applications to users much more simply. I worry about getting the application feature set right, making it simple and stable and Apple takes care of delivering it to customers and getting the money from them to me. This makes for two very fun days every month - reporting day and funds transfer day.

The Bad

Application Security

While the app signing features make it significantly harder for users to get your application without paying for it, they also make several parts of application development harder. Every time you build the application for a device, it must be signed before it will install or run. This process, though, is full of issues that pop up and when they do, they are extremely difficult to work through. I set up a new development machine after a hard drive failure and while I can build applications that are signed for distribution, my development certificate have never been the same since. The errors are vague in these cases and there is not much you can do to track it down.

Distribution

Yes, the iTunes Application Store is a godsend for many reasons, but waiting for weeks for an application to go from upload to release is frustrating for developers and customers. It looks like Apple has started working through the kinks in the system because my last update was much faster than the previous ones, but when developers are used to immediate updates for our websites and desktop applications (thanks Sparkle), waiting days or weeks for an application to be released is a drag.

Customer Access

The downside of Apple handling distribution is that we lose a direct connection with our customers. While they can and often do contact us with support or feature requests, we don't have a direct way to let our customers know about upcoming features, issues to be aware of, or special offers that are available for them. The only information we get from Apple is how many people from each country have purchased the application.

The Ugly

I think one of the biggest issues is how the iTunes Application store currently makes it difficult to market our products effectively. There is currently no way to offer discounts to repeat customers or customers of business partners. There is no way to charge for major upgrades to products without effectively releasing an entirely new product. There is no way to give out free copies to reviewers or influentials without using up a very limited ad hoc device key. My product is a very seasonal product and it would be nice to be able to have a bundle with another product or service, or offer it free to users who have purchased other products or services but currently the store is too limited for such promotions. The good news is that this is a very solve-able problem.

Assuming Apple doesn't change their mind, I hope to do several more posts about writing iPhone apps in the coming weeks. Hopefully, I will even be able to compare it with writing for other platforms and frameworks.