运行最新版本时没有“最新”消息?

Posted

技术标签:

【中文标题】运行最新版本时没有“最新”消息?【英文标题】:No "up to date" message when running the latest version? 【发布时间】:2018-12-11 04:26:00 【问题描述】:

我正在尝试将 Sparkle 与 Qt (binding for Go) 应用程序一起使用。

sparkle.m:

#import <Headers/SUUpdater.h>

static SUUpdater* updater = nil;

void sparkle_checkUpdates()

    if (!updater) 
        updater = [[SUUpdater sharedUpdater] retain];
    

    [updater setUpdateCheckInterval:3600];
    [updater checkForUpdatesInBackground];

sparke.go:

// +build darwin windows

package main

/*
#cgo CFLAGS: -I $SRCDIR/Sparkle.framework
#cgo LDFLAGS: -F $SRCDIR -framework Sparkle

void sparkle_checkUpdates();
*/
import "C"

func sparkle_checkUpdates() 
    C.sparkle_checkUpdates()

main.go 中,我添加了一个菜单来调用该函数:

package main

import (
    "github.com/therecipe/qt/widgets"
)

func main() 
    action := widgets.NewQMenuBar(nil).AddMenu2("").AddAction("Check for Updates...")
    // http://doc.qt.io/qt-5/qaction.html#MenuRole-enum
    action.SetMenuRole(widgets.QAction__ApplicationSpecificRole)
    action.ConnectTriggered(func(bool)  sparkle_checkUpdates() )

当有更新时它工作正常:下载、解压、安装、重新启动,... 但是在运行最新版本时,单击“检查更新...”菜单并没有任何反应。没有弹出窗口说我们是最新的,如下所示: 在控制台中,我只看到这个:

[3 <private> stream, pid: 90977, url: https://example.com/appcast.xml, traffic class: 200, tls] cancelled
    [3.1 70A1F65B-7E7A-4ED2-AB8B-A21621ED7658 <private>.58040<-><private>]
    Connected Path: satisfied (Path is satisfied), interface: en0, ipv4, dns
    Duration: 0.497s, DNS @0.000s took 0.001s, TCP @0.003s took 0.051s, TLS took 0.113s
    bytes in/out: 4481/675, packets in/out: 6/3, rtt: 0.053s, retransmitted packets: 0, out-of-order packets: 0

appcast.xml:

<?xml version="1.0" standalone="yes"?>
<rss xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle" version="2.0">
  <channel>
    <title>Premium ***</title>
    <item>
      <title>1.0.0.2905</title>
      <pubDate>Tue, 11 Dec 2018 11:09:10 +0800</pubDate>
      <sparkle:minimumSystemVersion>10.7</sparkle:minimumSystemVersion>
      <enclosure url="https://example.com/x.zip" sparkle:version="1.0.0.2905" sparkle:shortVersionString="1.0.0.2905" sparkle:edSignature="x" length="104408678" type="application/octet-stream"/>
    </item>
  </channel>
</rss>

Info.plist:

    <key>SUFeedURL</key>
    <string>https://example.com/appcast.xml</string>
    <key>SUPublicEDKey</key>
    <string>x</string>

我错过了什么吗?

【问题讨论】:

原因是NSAlert 需要运行循环才能工作。我又问了一个问题:***.com/questions/53772889/… 【参考方案1】:

仔细看checkForUpdatesInBackground

/*!
 Checks for updates, but does not display any UI unless an update is found.

 This is meant for programmatically initating a check for updates. That is,
 it will display no UI unless it actually finds an update, in which case it
 proceeds as usual.

 If automatic downloading of updates it turned on and allowed, however,
 this will invoke that behavior, and if an update is found, it will be downloaded
 in the background silently and will be prepped for installation.

 This will not find updates that the user has opted into skipping.
 */
- (void)checkForUpdatesInBackground;

因此,使用此方法,只有在找到更新时才会显示 UI。

我要的是checkForUpdates:

/*!
 Explicitly checks for updates and displays a progress dialog while doing so.

 This method is meant for a main menu item.
 Connect any menu item to this action in Interface Builder,
 and Sparkle will check for updates and report back its findings verbosely
 when it is invoked.

 This will find updates that the user has opted into skipping.
 */
 - (IBAction)checkForUpdates:(id)sender;

【讨论】:

以上是关于运行最新版本时没有“最新”消息?的主要内容,如果未能解决你的问题,请参考以下文章

升级到最新版本时 Spring Boot 国际化不起作用

如何在最新的 macOS 服务器上运行旧版本的 Xcode?

Eclipse没有将最新版本导出为可运行的JAR

为啥 Miniconda 没有运行最新版本的 Spyder?

pod update 没有得到 pod 的最新版本

将 Node.js 升级到最新版本