Skip to content
RunicGet Runic

Runic Docs Reference

Sparkle integration

  • Framework: Sparkle 2.8.1 via SwiftPM.
  • Updater: SPUStandardUpdaterController owned by AppDelegate (see Sources/Runic/RunicApp.swift:1).
  • Feed: SUFeedURL in Info.plist points to the committed appcast.xml on main.
  • Key: SUPublicEDKey set to 1Ay3r9lgXQtyOjzVSCjlT5dvQuRlJghNKa8Goqvhfz4=. 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.

Release flow

  1. Build & notarize as usual (./Scripts/sign-and-notarize.sh), producing notarized Runic-<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.
  3. Upload the zip + dSYM zip to GitHub Releases.
  4. Commit and push the generated appcast.xml to main so the raw feed URL updates.

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.
  • Runic disables Sparkle in Homebrew and unsigned builds; those installs should be updated via brew or reinstalling from Releases.

Read the source ↗ Checked against Runic 2.13.5 · 9730f91