目标:让 FluxMarkdown 使用 Sparkle 实现应用内自动更新。
结论:不需要启用 GitHub Pages。推荐直接使用
raw.githubusercontent.com托管appcast.xml。
Sparkle 需要访问 appcast.xml 来检查更新。
在 Sources/Markdown/Info.plist 中设置:
<key>SUFeedURL</key>
<string>https://raw.githubusercontent.com/xykong/flux-markdown/master/appcast.xml</string>优点:
- 无需 GitHub Pages
- 链路简单,稳定可控
注意:
- 必须使用 raw URL(返回 XML 原文),不要用 GitHub 的
blob页面 URL(会返回 HTML)。
如果你想用 Pages(例如希望 github.io 域名更“产品化”):
- 在 GitHub 仓库设置中启用 Pages
- 选择
master分支的根目录(或你指定的目录) - 确保
appcast.xml在该目录下 - 设置:
<key>SUFeedURL</key>
<string>https://YOUR_USERNAME.github.io/YOUR_REPO/appcast.xml</string>./scripts/generate-appcast.sh build/artifacts/FluxMarkdown.dmg脚本会:
- 对 DMG 生成
sparkle:edSignature - 更新/插入
appcast.xml条目
git add appcast.xml
git commit -m "chore(sparkle): update appcast for v<VERSION>"
git push.gitignore 应包含:
.sparkle-keys/推荐存储方式:
- 1Password / Bitwarden 等
- 加密的离线存储
如果你在 CI 里生成签名:
- 使用 GitHub Secrets 存储私钥
- 运行时写入临时文件,用完即删
现象:更新检查失败,日志里出现 XML 解析错误。
原因:SUFeedURL 指向了 GitHub 的 blob 页面。
修复:改成 raw:
https://raw.githubusercontent.com/xykong/flux-markdown/master/appcast.xml
原因:
sparkle:edSignature与实际 DMG 不匹配
修复:
./scripts/generate-appcast.sh build/artifacts/FluxMarkdown.dmg