Back to Codexbar

Sparkle integration

docs/sparkle.md

0.241.7 KB
Original Source

Sparkle integration

  • Framework: Sparkle 2.8.1 via SwiftPM.
  • Updater: SPUStandardUpdaterController owned by AppDelegate (see Sources/CodexBar/CodexbarApp.swift:1).
  • Feed: SUFeedURL in Info.plist points to GitHub Releases appcast (appcast.xml).
  • Key: SUPublicEDKey set to AGCY8w5vHirVfGGDGc8Szc5iuOqupZSh9pMj/Qs67XI=. Keep the Ed25519 private key safe; use it when generating the appcast.
  • UI: auto-check toggle (About) enables auto-downloads; menu only shows “Update ready, restart now?” once an update is downloaded.
  • LSUIElement: works; updater window will show when checking. App is non-sandboxed.
  • Channels: stable vs beta are served from the same appcast. Beta items are tagged with sparkle:channel="beta"; About → Update Channel controls allowedChannels.

Release flow

  1. Build & notarize as usual (./Scripts/sign-and-notarize.sh), producing notarized CodexBar-<ver>.zip.
  2. Generate appcast entry with Sparkle generate_appcast using the Ed25519 private key; HTML release notes come from CHANGELOG.md via Scripts/changelog-to-html.sh. For beta releases: set SPARKLE_CHANNEL=beta to tag the entry.
  3. Upload appcast.xml + zip to GitHub Releases (feed URL stays stable).
  4. Tag/release.

Notes

  • HTML release notes are embedded in the appcast entry; the Sparkle update dialog should show formatted bullets (not raw tags).
  • If you change the feed host or key, update Info.plist (SUFeedURL, SUPublicEDKey) and bump the app.
  • Auto-check toggle is persisted via Sparkle; manual “Check for Updates…” remains in About.
  • CodexBar disables Sparkle in Homebrew and unsigned builds; those installs should be updated via brew or reinstalling from Releases.