A Review of Programming Mac OS X: A guide for UNIX Developers.

by James R. Williams Zavada, 27 May 2003

The book was written by Kevin O'Malley, and published by Manning Publications Co. Publication, purchasing and other information can be found on the publisher's website at http://www.manning.com/omalley/index.html.

In all, this book was well-written, well-edited, and is a welcome addition to my bookshelf. In the preface, O'Malley tells us that the book is "intended to introduce UNIX developers to the world of Mac OS X development environments, frameworks, and technologies." In my opinion, he lives up to his intentions. The book is divided into three main sections. The first very clearly explains the Apple implementation of UNIX and how it affects development therein. The author's explanations of how MacOS X works under the hood made it easy for me, an accomplished Linux and UNIX hacker, to begin working comfortably with this new environment.

The second section amply covers the use of development tools that are native to MacOS X as well as the traditional UNIX tools that are available. I am impressed with how O'Malley integrates the use of the traditional command-line with which UNIX developers are familiar, and the new GUI program development tools. He makes it easy to get up to speed in Apple's new environment, and use the system to the programmer's greatest advantage.

The third section is comprised of tutorials covering the various types of programming that can be done using MacOS X. This section is the meat and potatoes of the book, and very definitely sated my hunger for MacOS X programming knowledge. My only disappointment with this sections was that because he only gives bare-minimum coverage of the Objective-C programming language, O'Malley really should have recommended some further resources. He already went to the trouble of creating such a wonderful resources chapter at the end of the book, but he unfortunately neglected to include Objective-C resources. However, what he does describe of the language is very well done, and his examples are clear and easy to follow.

The several appendices are similarly well-written, cover a selection of informative topics, and appear to be ordered by likely usefulness. The first explains how to acquire and install the MacOS X development tools, without which development is virtually impossible. The second appendix maps UNIX to MacOS X commands and vice versa, which I found to be quite useful. The third describes the MacOS 9 environment, is good background information, and helps one to understand the MacOS interface mindset. The final appendix is a brief history of UNIX, which should already be familiar territory to many UNIX developers.

My only complaint about O'Malley's book has to do with the source code necessary to use and understand some of the tutorials in the book. In the preface chapter "About this book", there is a section labeled "Source Code". Therein, the source code is said to be available for download from an archive on the publisher's website, and lists the URL. Unfortunately, the URL doesn't actually send you directly to an archive, it sends you to a web page about the book. And although the web page does contain a link called "Source Code", which does bring you to a web page that allows you to download the source code, it's not explained very clearly in the book.

This lack of clarity regarding the source continues throughout the book. Near the beginning of chapter 3, we are told to start the ProjectBuilder, and to create a new Project folder and name it DisplayCat, in order to build a sample program. Then, we are to move an image file from a folder which, according to O'Malley, is on the "source code distribution disk". However, there is no such disk, and if the reader hasn't already read the "About This Book" in the preface chapters, he'll be left wondering where this disk is (as it wasn't included with the book)! Later on, in chapter 4, we're again directed to the source code, but this time it's mentioned as being in "the book's source code distribution". In chapter 6, we're asked to use a project located in a folder called "source_code/chapter06/CocoaWget", with nary a mention of how this folder came to be. Again in chapter 7 we're referred to a folder, and even if by now the reader has figured out how to get the source, the book splits the folder name with a hyphen so it continues on the next line, which leads to a bit of confusion while searching for a folder called "source_code/chapter07/Memory-Tracker" rather than the correct name of "source_code/chapter07/MemoryTracker".

In addition, the source code's gzipped tarball is a good six megabytes, so it takes significant while to download for us folks who still use dial-up access to the Internet (and recent statistics show that we're still in the majority). It would have been great if a CD had been included with the book, and I think the author or publisher maybe even originally planned to do so. Adding footnotes referring back to the blurb about downloading source, every time the source is mentioned, should have been made a part of the book by the time it was printed. Unfortunately, this didn't happen, and because you really do need the source code, it becomes the one notable drawback of this book.

In spite of this, I still found the book very useful and informative, and would strongly recommend it to any UNIX coder interested in developing for MacOS X. It has found a prominent place on my bookshelf while I learn to program Apple's version of UNIX development.

Copyright © 2003 by James R. Williams Zavada.