在Sparkle更新框架中,Appcast元素pubDate的目的是否能够在某个期望的发布日期之前暂停更新?

时间:2014-01-28 04:28:03

标签: macos sparkle

我希望appcast pubDate xml元素允许我指定我的应用程序不能考虑更新,除非当前日期是发布日期(pubDate)或更晚。

这是一个示例appcast,其中包含item元素中的pubDate元素:

<item>
  <title>Version 2.0 (2 bugs fixed; 3 new features)</title>
  <sparkle:releaseNotesLink>http://you.com/app/2.0.html</sparkle:releaseNotesLink>
  <pubDate>Wed, 09 Jan 2006 19:20:11 +0000</pubDate>
  <enclosure url="http://you.com/app/Your Great App 2.0.zip" sparkle:version="2.0" length="1623481" type="application/octet-stream" sparkle:dsaSignature="BAFJW4B6B1K1JyW30nbkBwainOzrN6EQuAh" />
</item>

是从Sparkle网站复制的:https://github.com/sparkle-project/Sparkle/blob/0ed83cf9f2eeb425d4fdd141c01a29d843970c20/Sample%20Appcast.xml

所以序列是这样的:

  1. 我将更新的应用程序 - myapp v1.1 - 复制到我周一的更新网络服务器
  2. 在我的更新服务器上,我还将pubDate设置为星期三(采用适当的RFC 822格式)
  3. 周二,有人运行myapp v1.0并尝试使用myapp v1.0中捆绑的sparkle appcast将myapp更新为可用的任何内容
  4. 在那一点上,sparkle比较版本并看到更新应该发生,但它仍然只是周二如此闪耀不会提供更新选项,直到他再次尝试周三(或更晚)
  5. 周三到来,用户再次尝试更新myapp v1.0,这次它可以正常运行,因为版本可以更新,日期是星期三。
  6. 这是pubDate Sparkle元素的用途吗?

    除了版本号之外,Sparkle是否使用pubDate来帮助确定是否应该进行更新?

    将应用程序从更新中恢复到某个日期是我想要的,但我发现pubDate似乎并没有为我做到这一点。

    我无法在Sparkle文档中找到pubDate的用途:https://github.com/sparkle-project/Sparkle/wiki

1 个答案:

答案 0 :(得分:1)

如你所知,Sparkle使用RSS列出机箱标签内的应用程序更新(这就是他们所谓的“appcasting” - 请参阅:http://connectedflow.com/appcasting/

pubDate元素并不特定于Sparkle - 它只是RSS规范的一部分(参见http://www.w3schools.com/rss/rss_tag_pubdate.asp),并且可能/应该被通用rss读者用于按时间顺序显示项目/条目。

就我自己而言,Sparkle本身只对pubDate做了一件事 - 它正在订购更新候选者(https://github.com/sparkle-project/Sparkle/blob/master/SUAppcast.m#L218

现在,可以进一步自定义Sparkle通过子类化SUUpdater选择符合条件的更新的方式:请参阅https://github.com/sparkle-project/Sparkle/wiki/bundles#wiki-subclassing-suupdater,尤其是bestValidUpdateInAppcast方法:https://github.com/sparkle-project/Sparkle/wiki/customization

在那里,您应该能够进一步处理项目并实现您的行为。