首页 文章

Sparkle冻结“安装更新......”

提问于
浏览
1

我正在尝试在括号shell应用程序中实现Sparkle . 我相信我已经准备好了一切,但似乎失败了 .

它将运行更新,找到更新,准备就绪,然后当我点击“安装并重新启动”按钮时,它将无限期地位于“安装更新...”屏幕上 .

我想也许是括号shell不想关闭它的最后一个孩子,所以我试图实现 updaterWillRelaunchApplication 委托方法 . 我尝试在函数之前添加它,我调用它来检查我的更新,如下所示:

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

但是,我从未看到调用过的日志消息,我假设这意味着我的代理没有被调用 .

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

  • 我是否正确实施了委托?我是一个完整的XCode新手,所以我只知道它看起来像我在网上看到的例子,它编译 . 我在哪里申报代表是否重要?

  • 任何想法为什么Sparkle可能会冻结,如果不是因为它不正常退出?

谢谢 .

更新

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

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

作为一种变通方法,我手动将“启用自动更新”设置为true,因此它可以在没有最终窗口的情况下完成所有操作,但这不是很理想 .

2 回答

  • 0

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

  • 0

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

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

    Sparkle使用NSTask launchTaskWithLaunchPath:arguments:用新的app替换旧的app . 如果是沙盒权利而不是通过Apple App Store分发应用程序,则由于缺少访问权限,NSTask永远不会完成 .

    其他信息:https://developer.apple.com/documentation/foundation/nstask/1414375-launchedtaskwithlaunchpath

相关问题