| summary | read_when | |||
|---|---|---|---|---|
Sparkle integration details for CodexBar: updater config, keys, and release flow. |
|
- Framework: Sparkle 2.8.1 via SwiftPM.
- Updater:
SPUStandardUpdaterControllerowned byAppDelegate(seeSources/CodexBar/CodexbarApp.swift:1). - Feed:
SUFeedURLin Info.plist points to GitHub Releases appcast (appcast.xml). - Key:
SUPublicEDKeyset toAGCY8w5vHirVfGGDGc8Szc5iuOqupZSh9pMj/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 controlsallowedChannels.
- Build & notarize as usual (
./Scripts/sign-and-notarize.sh), producing notarizedCodexBar-<ver>.zip. - Generate appcast entry with Sparkle
generate_appcastusing the Ed25519 private key; HTML release notes come fromCHANGELOG.mdviaScripts/changelog-to-html.sh. For beta releases: setSPARKLE_CHANNEL=betato tag the entry. - Upload
appcast.xml+ zip to GitHub Releases (feed URL stays stable). - Tag/release.
- 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
brewor reinstalling from Releases.