【问题标题】:Sparkle Freezes on "Installing update..."Sparkle 冻结在“正在安装更新...”
【发布时间】:2014-03-06 18:59:29
【问题描述】:

我正在尝试在括号外壳应用程序中实现 Sparkle。我相信我已经正确设置了一切,但似乎失败了。

它将运行更新,找到更新,准备好它,然后当我点击“安装并重新启动”按钮时,它将无限期地停留在“正在安装更新...”屏幕上。

我认为可能是括号壳不想关闭它的最后一个孩子,所以我尝试实现 updaterWillRelaunchApplication 委托方法。我尝试在调用检查更新的函数之前添加它,如下所示:

@implementation NSObject (SUUpdaterDelegateInformalProtocol)
- (void)updaterWillRelaunchApplication:(SUUpdater *)updater {
    NSLog(@"Closing properly");
    // code to close properly
}
@end

但是,我从来没有看到调用的日志消息,我假设这意味着我的委托没有被调用。

所以,我基本上有两个问题:

  • 我是否正确实施了委托?我是一个完整的 XCode 新手,所以我只知道它看起来像我在网上看到的示例,并且它可以编译。我在哪里声明代表重要吗?
  • 知道为什么 Sparkle 可能会冻结,如果不是因为退出不正确吗?

谢谢。

更新

我发现了一个非常奇怪和有趣的行为。如果我在完成更新时没有任何窗口(我的应用程序窗口或 Sparkle 窗口)聚焦,它将完全正常工作。如果我集中注意力,我的主窗口将关闭(就像它试图重新启动一样),但 Sparkle 窗口保持打开状态。然后我必须右键单击并关闭应用程序。

但是,如果在我点击“安装并重新启动”按钮后立即切换到另一个应用程序(如 Chrome),它会在后台正常运行。如果 Sparkle 有焦点,它似乎不会自行关闭。很奇怪。

作为一种解决方法,我手动将“启用自动更新”设置为 true,这样它就可以在没有最终窗口的情况下完成所有操作,这可以工作...但并不理想。

【问题讨论】:

  • 您能检查您的控制台是否在 Sparkle 上出现任何崩溃吗?我的应用上有 Sparkle,它开始像你描述的那样冻结。
  • 你在开发沙盒应用吗?
  • 我没有在沙盒应用上工作,我的控制台没有显示任何崩溃。我发现了一些非常有趣的东西,我已经更新了我的帖子。
  • 我的应用 FWIW 出现了同样的行为。

标签: xcode delegates sparkle brackets-shell


【解决方案1】:

我遇到了和你一样的问题。经过一些挠头后,我发现在 sparkle.framework -->Resources-->Autoupdate 内部。当我看到内容时,它没有将自动更新作为可执行文件(内容--> MacOS--> 自动更新)。使其成为可执行文件后,它完美地重新启动。

【讨论】:

    【解决方案2】:

    您是否通过应用商店分发您的应用?有同样的问题 - 通过 HockeyApp 分发应用程序。

    事实证明,我的功能中打开了 App Sandbox,这导致了所描述的行为。

    Sparkle 使用 NSTask 启动任务WithLaunchPath:arguments: 将旧应用替换为新应用。如果是 Sandbox 授权且未通过 Apple App Store 分发应用程序,则 NSTask 由于缺少访问权限而永远不会完成。

    附加信息: https://developer.apple.com/documentation/foundation/nstask/1414375-launchedtaskwithlaunchpath

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-15
      • 2021-10-05
      • 1970-01-01
      相关资源
      最近更新 更多