当窗口关闭然后选择另一个应用程序时,Mac 应用程序消失

wig*_*ing 2 macos swift swiftui

我在 Xcode 11.4 中创建了一个新的 macOS 项目,其中语言是 Swift,用户界面是 SwiftUI。在不对项目中的代码进行任何更改的情况下,通过执行以下步骤,应用程序将从 Dock 中消失:

  1. 通过运行 Xcode 项目启动 Mac 应用程序
  2. 关闭 Mac 应用程序的主窗口
  3. 选择另一个正在运行的应用程序,例如 Safari
  4. 原始 Mac 应用程序从 Dock 中消失,无法访问它

如果 Mac 应用程序的窗口打开,则不会发生此行为。我可以选择其他正在运行的应用程序,然后毫无问题地返回到原始 Mac 应用程序。

Ken*_*ses 5

这种行为称为自动终止。我发现这是一个错误功能,但苹果认为这是一个功能。

您的应用程序可能尚未真正退出。它可能只是看起来已经退出了。再次“启动”它只会使其重新出现在 Dock 中。也有可能一些看起来仍在运行的应用程序实际上已被系统终止。理论上,如果您尝试切换到它们,它们将被启动并被告知恢复之前的状态,以维持它们一直在运行的错觉。在实践中,应用程序(甚至是苹果的)很少能正确地将事物恢复到原来的样子。

活动监视器中的进程列表真实反映了实际运行和未运行的进程。查看此处以确定您的应用程序是否确实已终止。

开发人员应该必须选择自动终止,因为它需要对状态恢复进行显式编码。但是,Xcode 的应用程序项目/目标模板默认启用它。您可以NSSupportsAutomaticTermination从 Info.plist 中删除该密钥以禁用它。

同样,如果您不准备支持突然终止,您可能也想禁用它。你会删除NSSupportsSuddenTermination钥匙。