Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 火花冻结在“上”;“正在安装更新…”;_Xcode_Delegates_Sparkle_Brackets Shell - Fatal编程技术网

Xcode 火花冻结在“上”;“正在安装更新…”;

Xcode 火花冻结在“上”;“正在安装更新…”;,xcode,delegates,sparkle,brackets-shell,Xcode,Delegates,Sparkle,Brackets Shell,我正在尝试在一个括号shell应用程序中实现Sparkle。我相信我把一切都安排妥当了,但似乎失败了 它将运行更新,找到更新,准备好,然后当我点击“安装并重新启动”按钮时,它将无限期地出现在“安装更新…”屏幕上 我认为可能是shell不想关闭它的最后一个孩子,所以我尝试实现updaterWillRelaunchApplicationdelegate方法。我尝试将其添加到我调用以检查更新的函数之前,如下所示: @implementation NSObject (SUUpdaterDelegateI

我正在尝试在一个括号shell应用程序中实现Sparkle。我相信我把一切都安排妥当了,但似乎失败了

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

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

@implementation NSObject (SUUpdaterDelegateInformalProtocol)
- (void)updaterWillRelaunchApplication:(SUUpdater *)updater {
    NSLog(@"Closing properly");
    // code to close properly
}
@end
但是,我从未看到调用的日志消息,我假设这意味着没有调用我的委托

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

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

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

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


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

我和你有一个相同的问题。经过一段令人挠头的时间后,我发现在sparkle.framework-->资源-->自动更新中。当我看到内容时,它没有将自动更新作为可执行文件(内容-->MacOS-->自动更新)。在使其成为可执行文件后,它会完美地重新启动。

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

事实证明,我在我的功能中打开了应用程序沙盒,这导致了所描述的行为

Sparkle使用NSTask launchedTaskWithLaunchPath:arguments:将旧应用替换为新应用。如果沙箱授权和未通过Apple app Store分发应用程序,由于缺少访问权限,NSTask永远不会完成

其他信息:

您能检查一下您的控制台上是否有任何Sparkle崩溃的情况吗?我的应用程序上有Sparkle,它开始冻结,正如你所描述的。你正在使用沙盒应用程序吗?我没有使用沙盒应用程序,我的控制台也没有显示任何崩溃。我发现了一些非常有趣的东西,我更新了我的帖子。我在我的应用程序FWIW中看到了同样的行为。