macOS: Sparkle beta update channel and release plumbing#34
Conversation
- Resolve appcast URL via SPUUpdaterDelegate and UserDefaults; embed stable/beta feed URLs in Info.plist from build-all.sh (env overrides). - Add menu item Beta Update Channel; reset Sparkle cycle and re-check when toggled. - release-mac: git_ref + sparkle_channel inputs; update appcast.xml or appcast-beta.xml; seed beta skeleton on first publish; beta releases marked prerelease on GitHub. - release.sh: --beta and --git-ref/--sparkle-channel for long-lived beta. - Document feeds and workflow in CI-SETUP. Made-with: Cursor
| shift 2 | ||
| ;; | ||
| --beta-mac) | ||
| SPARKLE_INFO_DEFAULT_FEED="$SPARKLE_FEED_BETA" |
There was a problem hiding this comment.
--beta-mac is effectively a no-op at runtime.
resolvedFeedURLString() in SparkleUpdateChannel.swift reads ClipRelaySparkleFeedStable first, falling back to SUFeedURL only when that key is absent:
let stable = Bundle.main.object(forInfoDictionaryKey: "ClipRelaySparkleFeedStable") as? String
?? Bundle.main.object(forInfoDictionaryKey: "SUFeedURL") as? StringSince build_mac() always writes ClipRelaySparkleFeedStable (line 169), SUFeedURL is never used for the stable URL, so changing SPARKLE_INFO_DEFAULT_FEED here has no effect on which feed the app actually checks at runtime.
To make --beta-mac work as documented, it should also override SPARKLE_FEED_STABLE so the ClipRelaySparkleFeedStable plist key points at the beta feed — or the flag should be removed (the comment already notes "use menu toggle at runtime").
|
Review summary Overall the approach is clean: using One bug found (inline): Everything else looks good: the |
Adds a menu toggle for the beta Sparkle feed, embeds stable/beta appcast URLs in Info.plist, extends
release-mac.yml(git_ref,sparkle_channel) andrelease.sh(--beta) for a long-livedbetabranch, and documents hostingappcast-beta.xml.Made with Cursor