我试图在括号shell应用程序中实现Sparkle。我相信我已经正确设置了一切,但似乎失败了。
它将运行更新,找到更新,准备就绪,然后当我点击"安装并重新启动"按钮,它将位于"安装更新..."屏幕无限期。
我认为也许是括号shell不想关闭它的最后一个孩子,所以我尝试实现updaterWillRelaunchApplication
委托方法。我尝试在函数之前添加它,我打电话来检查我的更新,如下所示:
@implementation NSObject (SUUpdaterDelegateInformalProtocol)
- (void)updaterWillRelaunchApplication:(SUUpdater *)updater {
NSLog(@"Closing properly");
// code to close properly
}
@end
但是,我从未看到调用过的日志消息,我假设这意味着我的代表没有被调用。
所以,我基本上有两个问题:
感谢。
我发现了一种奇怪而有趣的行为。如果我在完成更新后没有任何窗口(我的应用程序窗口或Sparkle窗口)聚焦,它将完全正常工作。如果我要么专注,那么我的主窗口会关闭(就像它试图重启一样),但Sparkle窗口保持打开状态。然后我必须右键单击并关闭应用程序。
然而,如果我在点击"安装并重新启动后立即#34;按钮我翻转到另一个应用程序(如Chrome),它将在后台运行得很好。如果有焦点,Sparkle似乎不会自我关闭。很奇怪。
作为一种解决方法,我手动设置"启用自动更新"如果它没有那个最后一个窗口就可以做到这一点,它起作用......但并不是很理想。
答案 0 :(得分:1)
我遇到了和你一样的问题。经过一番头疼,我发现里面有 sparkle.framework - >资源 - > Autoupdate 。当我看到内容时,它没有Autoupdate作为可执行文件(内容 - > MacOS - > Autoupdate)。在将其作为可执行文件后,它重新完成了。
答案 1 :(得分:0)
您是否通过应用商店分发您的应用?有同样的问题 - 通过HockeyApp分发应用程序。
事实证明我在我的功能中打开了App Sandbox,这导致了所描述的行为。
Sparkle使用NSTask launchTaskWithLaunchPath:arguments:用新的应用程序替换旧应用程序。如果是Sandbox权利而不是通过Apple App Store分发应用程序,则由于缺少访问权限,NSTask永远不会完成。
其他信息: https://developer.apple.com/documentation/foundation/nstask/1414375-launchedtaskwithlaunchpath