我正在尝试在括号外壳应用程序中实现 Sparkle。我相信我已经正确设置了一切,但似乎失败了。
它将运行更新,找到更新,准备好,然后当我点击“安装并重新启动”按钮时,它将无限期地停留在“安装更新...”屏幕上。
我想也许是括号壳不想关闭它的最后一个孩子,所以我尝试实现updaterWillRelaunchApplication
委托方法。我尝试在调用检查更新的函数之前添加它,如下所示:
@implementation NSObject (SUUpdaterDelegateInformalProtocol)
- (void)updaterWillRelaunchApplication:(SUUpdater *)updater {
NSLog(@"Closing properly");
// code to close properly
}
@end
但是,我从来没有看到调用的日志消息,我假设这意味着我的委托没有被调用。
所以,我基本上有两个问题:
- 我是否正确实施了委托?我是一个完整的 XCode 新手,所以我只知道它看起来像我在网上看到的示例,并且它可以编译。我在哪里声明代表重要吗?
- 如果不是因为退出不正确,为什么 Sparkle 可能会冻结?
谢谢。
更新
我发现了一个非常奇怪和有趣的行为。如果在完成更新时我没有任何窗口(我的应用程序窗口或 Sparkle 窗口)聚焦,它将完全正常工作。如果我集中注意力,我的主窗口将关闭(就像它试图重新启动一样),但 Sparkle 窗口保持打开状态。然后我必须右键单击并关闭应用程序。
但是,如果在我点击“安装并重新启动”按钮后立即切换到另一个应用程序(如 Chrome),它会在后台正常运行。如果 Sparkle 有焦点,它似乎不会自行关闭。很奇怪。
作为一种解决方法,我手动将“启用自动更新”设置为 true,这样它就可以在没有最终窗口的情况下完成所有操作,这可以工作......但并不是很理想。