20111221

Developments

Since my previous post, I have changed employers twice. First to SMSI, but I didn't feel like I was doing meaningful work there. I now work for Amazon on the Kindle Team. I find that I prefer C++ and Objective-C to Java, but I am willing to admit that it could be due to lack of understanding of the inheritance model.

20110616

Unbundled Info.plist on 10.5 Leopard

We recently added a non-privileged, unbundled (stand-alone) helper tool to our main application bundle. At first it showed up in the Dock, but then we added LSUIElement to that application's Info.plist. Naturally, we embed that plist with -sectcreate __TEXT __info_plist Info_plist_file.
However, 10.5 did not respect this setting. It insisted on displaying a duplicate Dock tile for the main app -- same name and icon. We tried several variations, but the only thing we found that works on 10.5 is to make the helper application a Cocoa app bundle and include its Info.plist there. Only then is the LSUIElement preference respected.

20110103

App Distribution

Everyone wants to have users download a small .dmg file from their website. Opening the dmg pops up a window showing a pretty background, the application's icon, and an alias file to the /Applications directory.

Finder in 10.6 creates non-backward compatible .DS_Store files, so to get the positioning and background image, you need to create a dummy dmg by hand on 10.5, copy its .DS_Store, and save it for copying into your production dmg.

No-one wants their dmg to have a .Trashes directory, and no-one wants the mounted image to have free space -- it's just wasteful, and it feels unprofessional. The key to creating just such a dmg is to populate a local directory with everything you want in your dmg, use hdituil to makehybrid from it, and then convert to the desired format (probably UDBZ format with -imagekey bzip2-level=9 for maximum compression).

If you have an SLA that you want to display, you can unflatten, add the rtf SLAs using Rainer Brockerhoff's AddLicense tool, and then flatten the dmg again.