使用sparkle更新(可悲已经分布的)沙盒OSX应用程序

Dav*_*ece 7 macos sandbox sparkle

在一阵非思维的热情中,我沙盒,然后闪耀更新我的应用程序.由于应用程序只对用户选择的文件(和音乐目录)具有读/写访问权限,因此我现在无法更新自己的二进制文件.哎呀.

在过去一年左右的时间里,Andy Matuschak对此进行了广泛的讨论(https://github.com/sparkle-project/Sparkle/pull/165)但是虽然建议的解决方案"已经足够好"了,但是没有发光关于已经分发非沙盒应用程序的问题.

哦,似乎我一直在使用闪存分布的'磁盘映像'方法.

我能想到的唯一解决方案就是发布一个闪亮的更新,它只是向用户提供一条消息,告诉他们手动下载.有没有人有更好的想法?

戴夫

cha*_*les 2

Andy Matuschak 似乎表明 Sparkle 实际上可以为您优雅地处理“仅下载”。用他自己的话说,只需将 the 排除<enclosure>在 your 之外<item>并添加一个<sparkle:version>2.0</sparkle:version>元素作为 the 的子元素<item>即可。

在这里阅读他的评论:https://github.com/sparkle-project/Sparkle/issues/227#issuecomment-13192723

就像他之前的费马一样,他遗漏了一条信息。但与定理不同的是,我们可以访问 Sparkle 源代码,特别是SUAppcastItem.m. 多亏了代码,我才发现缺少的部分是一个<link>标签。这是一个应用广播示例:

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle"  xmlns:dc="http://purl.org/dc/elements/1.1/">
   <channel>
      <title>FooBar</title>
      <link>http://foobar.com/appcast.xml</link>
      <description>Most recent changes with links to updates.</description>
      <language>en</language>
        <item>
            <title>FooBar 2.0</title>
            <sparkle:releaseNotesLink>http://foobar.com/release-notes-special.html</sparkle:releaseNotesLink>
            <sparkle:minimumSystemVersion>10.9.0</sparkle:minimumSystemVersion>
            <pubDate>2014-04-14T18:40:44+02:00</pubDate>
            <sparkle:version>2013</sparkle:version>
            <sparkle:shortVersionString>2.0</sparkle:shortVersionString>
            <link>http://foobar.com/release-notes-special.html</link>
        </item>
   </channel>
</rss>
Run Code Online (Sandbox Code Playgroud)

在接收该 appcast 且无法更新的沙箱应用程序中,“安装更新”消失了,取而代之的是“了解更多”按钮,该按钮会将用户带到该<link>. 这是一个提供下载说明的好地方。

在应用程序的下一个版本中,您可以为 appcast 使用不同的 URL,以便上述 appcast 仅适用于旧版本(假设您修复了一些问题,现在使用 Sparkle 的非官方 XPC 技巧)。