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

时间:2013-03-02 03:38:55

标签: macos sandbox sparkle

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

在过去一年左右的时间里,Andy Matuschak对此进行了广泛的争论(https://github.com/sparkle-project/Sparkle/pull/165)但是虽然提议的解决方案“已经足够好了”,但对于已经分发非解决方案的问题一无所知。 -sandboxed app。

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

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

-Dave

1 个答案:

答案 0 :(得分:1)

Andy Matuschak似乎表明Sparkle实际上只能处理&#39;仅下载&#39;优雅地为你。用他自己的话说,只需将<enclosure><item>中删除,然后添加<sparkle:version>2.0</sparkle:version>元素作为<item>的子元素。

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

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

<?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>

在接收该appcast但无法更新的沙盒应用中,“安装更新”&#39;已经消失了,取而代之的是“了解更多”。将用户带到<link>中的网址的按钮。这是一个有下载说明的好地方。

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