Sparkle appcast 检查器
粘贴你的应用从 SUFeedURL 读取的 appcast。它只在本页读取,不会获取或发送任何内容。
试试示例:
功能
Sparkle 是大多数在 Mac App Store 之外销售的 Mac 应用所使用的更新框架。你的应用会读取一个很小的 RSS 文件,也就是 appcast,其中每个 <item> 就是一个版本。这个工具会读取你粘贴的 appcast,并对照 Sparkle 自己的发布文档检查每个版本:有没有 Sparkle 可以比较的版本号,下载地址是否为 https 且带有大小和 EdDSA 签名,有没有最低 macOS 版本和日期。它还能发现会让整个更新源失效的错误,比如缺少 Sparkle 命名空间,或下载地址里出现单独的 &。
一个好的版本是什么样的
<item>
<title>Version 2.1</title>
<pubDate>Sat, 07 Nov 2026 09:30:00 +0000</pubDate>
<sparkle:version>210</sparkle:version>
<sparkle:shortVersionString>2.1</sparkle:shortVersionString>
<sparkle:minimumSystemVersion>14.0.0</sparkle:minimumSystemVersion>
<enclosure url="https://yourapp.com/YourApp-2.1.zip" length="8412337"
type="application/octet-stream" sparkle:edSignature="..."/>
</item>顶部的 <rss> 标签需要 xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle"。Sparkle 的 generate_appcast 工具会替你写好其中大部分,包括签名和 length。
每种结果的含义
| 标记 | 含义 |
|---|---|
| 修复 | Sparkle 读不了这个更新源、没法比较这个版本,或者不会安装它。 |
| 外观 | 能用,但这个版本可能会推给运行不了的 Mac,或者缺少 Sparkle 文档要求的内容。 |
| 正常 | 按 Sparkle 文档描述的方式设置。 |
| 注意 | 值得了解的设置,比如渠道或关键更新。 |
来源:Sparkle,发布更新、Sparkle 文档和 Sparkle,EdDSA 迁移,均于 2026年11月8日阅读。
运作方式
这是在本页运行的几条简单文本规则。它不会下载你的更新,所以无法检查签名是否与你的密钥匹配,也无法检查 length 是否与文件一致:这两项由 Sparkle 在安装时检查。它也不会获取你的更新源,所以请粘贴文本,而不是地址。sparkle:hardwareRequirements 要求用户手里已有的应用副本带有 Sparkle 2.9 或更高版本,更早的副本会忽略它。你粘贴的内容不会被保存或发送。
问题
什么是 Sparkle appcast?
放在你服务器上的一个 RSS 文件,列出你的 Mac 应用的各个版本。应用里的 Sparkle 会从 Info.plist 里的 SUFeedURL 读取它,并提示比已安装版本更新的任何版本。
每个 Sparkle 更新都需要 EdDSA 签名吗?
Sparkle 的文档说你必须给更新签名,而 generate_appcast 会替你签名。Info.plist 里有 SUPublicEDKey 的应用会在安装任何东西之前检查签名。
怎样避免更新被推给运行不了的 Mac?
在版本里添加 sparkle:minimumSystemVersion,写成三段,例如 14.0.0。从 Sparkle 2.9 开始,对只能在 Apple silicon 上运行的构建,还可以添加值为 arm64 的 sparkle:hardwareRequirements。
Sparkle 比较的是哪个版本号?
sparkle:version,会与用户手里应用的 CFBundleVersion 比较。sparkle:shortVersionString 只是给人看的。
我粘贴的内容会被发送到别处吗?
不会。文本只在本页读取,不会被获取、发送或保存。