Go to content Go to navigation

Using Sparkle Framework · 2019-10-12 00:53 by Black in

Sparkle is a very nice and popular framework for self-updating applications on Mac OS X. But using it in ZetaWatch turned out to be slightly problematic.

Code Signing / Notarization

Mac OS X is increasingly cautious with allowing code to run. Notarization is required to create binaries that can be run without without warning on the newest Mac OS X. Notarization is mostly supported by Skarkle itself, but apple’s validation doesn’t accept the original Sparkle.framework due to the unsigned helper binaries it contains.

The easiest way to code sign it seemed to simply build it myself in Xcode, and let it do all the work.

ZFS Binary Compatibility

Since ZetaWatch directly links to the zfs libraries, it only works if those are compatible. And while Sparkle has built-in support for OS compatibility checking, it doesn’t have the same for other dependencies. There is support for custom appcast filtering, to select a suitable version, but since the ZFS version and the ZetaWatch version are kind of orthogonal, this didn’t seem fitting.

The chosen solution was to have a ZFS version specific appcast URL, and make ZetaWatch query the appropriate appcast. This allows updating ZetaWatch when the used ZFS version changes, but also have several supported parallel builds. Currently, the only supported ZFS version is 1.9, so this is not an issue yet.


Sparkle supports dozens of languages, and all of them take up space. Combined, Sparkle.framework alone is already 3.5 MB. Since ZetaWatch itself is a very small program, and is currently not localized in any language other than English, this seems very wasteful. I decided therefore to strip it down, to English only and 1.4 MB.

  Textile help