chimey

Leopard adoption passes 50%

According to numbers sent in by Sparkle, Leopard usage among people using my software has just passed 50%, just over 7 weeks after Leopard's release. The most recent numbers show 51.9% on 10.5 (49.7% on 10.5.1 and the rest still inexplicably sticking with 10.5). The plot below also shows a solid 40% sticking with 10.4.11 for now.

I'm waiting to see what sudden changes might occur after Christmas, or possibly after MacWorld next month. Either could mean a lot of new Macs replacing or supplementing old ones.

The latest numbers from Sparkle can always be found on the Sparkle Stats page, which is automatically updated every night.

MacSanta Update

MacSanta
Yesterday Atomic Bird was one of the featured developers at MacSanta. It went well. It was the first day of MacSanta and I was concerned that not many people would have heard about it yet. As it turned out, well, I don't release specific sales numbers but yesterday's MacSanta customers here at Atomic Bird came to more than 90% of the number of MacSanta customers last year. Last year of course MacSanta ran for about a week, with all developers listed every day. So I'd call MacSanta a smash success already, and it's still just December 2.

And it's still going

Although Atomic Bird isn't the daily featured developer, MacSanta deals continue for the rest of the month. You can find Atomic Bird on the participants list where everyone who's participated in MacSanta so far will be offering discounts all month. Just use coupon code MACSANTA07TEN. And of course there are new featured developers on the main MacSanta page every day in December.


MacSanta Returns!

MacSanta
The MacSanta promotion is back for a second year!

For the month of December, independent Mac software developers will be offering special deals on their software through the MacSanta web site at MacSantaDeals.com. Every day new developers will be featured, offering 20% off of their software for that day, using coupon code MACSANTA07 when purchasing. After their featured day they will continue to offer 10% off through the end of the month using coupon code MACSANTA07TEN.

Atomic Bird is featured December 1

We drew the very first day, so on Saturday December 1, all of our software will be 20% off with coupon code MACSANTA07. That code can be used in our web store, but be sure and visit the MacSantaDeals.com web site to see what else is available. After December 1 the coupon code MACSANTA07TEN can be used for the rest of the month.

Thanks

The MacSanta promotion is run by Paul Kafasis of Rogue Amoeba, who does all the work on a volunteer basis. Most of the participants also volunteer to buy Paul a beer if we ever meet in person.


Don't Sign that Framework

Yesterday I was working on a forthcoming update to Chimey and I noticed something odd. Chimey of course makes use of SparklePlus for automatic updates, and after a test run of my build-for-release script, Sparkle was looking a little odd.

Normally a framework has one or more binaries, with a symbolic link pointing to the current version. From the command line you'd expect something like this:

$ find Sparkle.framework/ -name Sparkle -exec ls -l {} \;
lrwxr-xr-x  1 tph  wheel  24 Nov 21 11:20 Sparkle.framework/
    /Sparkle -> Versions/Current/Sparkle
-rwxr-xr-x  1 tph  wheel  233088 Nov 21 11:20 Sparkle.framework/
    /Versions/A/Sparkle

Instead I was seeing this:

find Sparkle.framework/ -name Sparkle -exec ls -l {} \;
-rwxr-xr-x  1 tph  wheel  242928 Nov 21 11:20 Sparkle.framework/
    /Sparkle
-rwxr-xr-x  1 tph  wheel  233088 Nov 21 11:20 Sparkle.framework/
    /Versions/A/Sparkle

Yow, how the hell did that happen? I thought it might have something to do with copying the framework, either when compiling or when building the disk image, but that wouldn't account for the different file sizes. A quick check on the current version of Chimey showed that this was something new, not something I'd been doing all along without realizing it.

So what was different? My build-for-release script now signs my code using Leopard code signing.

Apple's documentation on code signing indicates that "You should sign every program in your product, including applications, tools, hidden helper tools, utilities and so forth." Chimey's main bundle includes a preference pane and two helper tools, so I was making sure to sign all of them. The main documentation doesn't mention frameworks specifically, but the Code Signing Release notes indicate that "You may also sign any libraries, frameworks, plugins, and scripts you ship, whether they are delivered with an application or separately." Framework signatures don't get checked yet but might be in the future. I had made my script as future-proof as possible by signing the Sparkle framework now.

But if you sign a framework, the codesign tool modifies the structure of the framework, as I found with Sparkle. Just for sanity's sake I made sure that this affects any Mac OS X framework and is not some kind of Sparkle-specific behavior.

And the file sizes? I can guess what's going on, but I made sure:

$ codesign -vvv Sparkle.framework/Sparkle 
Sparkle.framework/Sparkle: valid on disk
$ codesign -vvv Sparkle.framework/Versions/A/Sparkle
Sparkle.framework/Versions/A/Sparkle: code object is not signed

Not only is codesign changing the framework structure, it's also leaving the framework in an inconsistent state with regard to whether it's signed. Instead of one binary I've got two, and even though I signed the framework, one of those two is still unsigned.

At the same time, checking on the framework bundle still returns a valid signature, despite the presence of unsigned code in there:

$ codesign -vvv Sparkle.framework
Sparkle.framework: valid on disk

It's a good thing that Leopard doesn't currently check on framework signatures. For now it seems it's probably best not to bother signing a framework. Although codesign leaves you with something that should work, it's not clear that it's actually doing anything useful, and it's bloating the framework size in the process.

This has been filed as bug #5609522 with Apple, in case anyone from Apple reads this.


Daily SparklePlus Stats Updates

Last week I posted my first public SparklePlus data. Starting today, SparklePlus charts can be found on my Sparkle Stats page, updated nightly.

I've improved the charting system over the past couple of days to provide more detail than the charts in my previous blog post. Instead of just gathering up each week's data into a single value, the new plots include daily totals for the previous 60 days. Each day's numbers are a running average of the previous seven days, to smooth out daily variations into more comprehensible trends. I'm not sure that a seven-day running total is the best window, so I may experiment with longer or shorter windows and see what happens.

As of today Leopard has reached 45.6% of users, not quite a majority yet but closing in fast.


Atomic Bird, LLC