Upgrading to Sparkle 2.x Branch

TL;DR: The Sparkle 2.x release branch is working fine for production when you switch from the ui-separation-and-xpc branch and enable DSA signing of updates.

While updating TableFlip for macOS Big Sur, I figured I might just as well update my dependency on Sparkle to whatever they came up with in the past 18 months or so.

I’m all for the XPC-based approach. In summer of 2019, I wrote a couple of posts about how to migrate to the XPC branch. I am still using the same setup, with custom XPC service bundle identifiers. That change is the only commit on top of the actual code from the Sparkle branch.

Changing the dependency from the ui-separation-and-xpc to the 2.x tracking branch produced problems when I tried to test the updates, though.

Which reminds me that I don’t have a very robust testing approach for updates. It’s all very manual and involved building a version of the app with the build set to something far back in the past to trigger an update download and installation.

During this step, I found that Sparkle couldn’t even download the update, though, and exited like this:

com.apple.xpc.launchd[1] (com.apple.xpc.launchd.user.domain.502.100006.Aqua): de.christiantietze.TableFlip-sparkle-updater (lint): Assuming EnablePressuredExit=false given EnableTransactions=false.
com.apple.xpc.launchd[1] (com.apple.xpc.launchd.user.domain.502.100006.Aqua): de.christiantietze.TableFlip-sparkle-progress (lint): Assuming EnablePressuredExit=false given EnableTransactions=false.
com.apple.xpc.launchd[1] (de.christiantietze.TableFlip-sparkle-updater[96616]): Service exited with abnormal code: 1
com.apple.xpc.launchd[1] (de.christiantietze.TableFlip-sparkle-progress[96617]): Service exited with abnormal code: 1

The error “Service exited with abnormal code: 1” is the least helpful that Sparkle ever produced for me.

Reverting the Sparkle settings and switching branches for a while to figure out what might be going on – I found out I had a typo in the file name. A . was missing to separate file extension from file name:

   <enclosure url=".../MyApp-v1.2.3zip">

Aye, and that’s how you get a Service exited with abnormal code: 1.

On the bright side, I can confirm that the Sparkle 2.x branch works as a drop-in for the ui-separation-and-xpc branch, provided you are DSA-signing your updates. It’s now a hard requirement.