Monday, May 22, 2023

Setting Up Sparkle

Sarah Reichelt:

Sparkle is an open-source update framework for macOS. It’s very popular and I’m sure you will have seen it used, even if you didn’t recognise it. But setting it up isn’t totally straight-forward, at least I didn’t find it so, which I why I’m using this post to document the process.

[…]

The Sparkle documentation is excellent and contains everything you need to know, but they allow for a wide range of use cases and configurations, which makes it difficult to follow at times.

[…]

Adding Sparkle to a sandboxed app requires some more steps[…]

[…]

Drag the image file into your disk image. Don’t worry about positioning it - you’re about to make the file invisible.

DropDMG is an easier way to create a disk image with a background picture, and it will code sign the .dmg file, too.

Previously:

Update (2025-07-17): Peter Steinberger :

If you’ve ever tried to implement automatic updates in a sandboxed macOS app using Sparkle, you know it can feel like trying to solve a Rubik’s cube while wearing oven mitts. After creating way too many beta releases and spending countless hours debugging cryptic authorization errors, I finally cracked the code. Here’s my step-by-step guide to code signing, notarization, and Sparkle auto-updates in sandboxed macOS apps.

2 Comments RSS · Twitter · Mastodon


Astonished that placing a background image into the view of a disk image to advise on how to install software is still considered appropriate or hip. Apple need package management.


I've been using Sparkle in my apps for about two decades, and recently set it up in a new project (imported from SPM now, rather than CocoaPods or hand-building like in the old days). I was bracing for a bunch of hassle to deal with sandboxing, but was pleasantly surprised to find how much they've managed to streamline the setup in 2.x.

One downside of using SPM is that the `generate_appcast` binary ends up in an inscrutable location (in my case, at this moment, it's ` /Users/ben/Library/Developer/Xcode/DerivedData/Tradesy-dnleqmiieejruiawzcazrtmcdsmz/SourcePackages/artifacts/sparkle/bin/generate_appcast`. This makes it impossible to cleanly integrate into a script. For now I'm building/notarizing/packaging releases by hand, but I'd sure like to automate it. There must be something trivial I'm not thinking of.

And as for packaging, I'm with Sebby: the disk image background has always puzzled me, even as a user. In fact, I don't understand the enduring appeal of disk images at all—they're just a hassle to deal with, both as a user and a developer. I gave up on them long ago (again: decades) in favour of plain old zip files. Simple.

Leave a Comment