我在 Xcode 11.4 中创建了一个新的 macOS 项目,其中语言为 Swift,用户界面为 SwiftUI。在不对项目中的代码进行任何更改的情况下,通过执行以下步骤,应用程序将从 Dock 中消失:
- 通过运行 Xcode 项目启动 Mac 应用
- 关闭 Mac 应用的主窗口
- 选择另一个正在运行的应用,例如 Safari
- 原始 Mac 应用程序从 Dock 中消失,无法访问它
如果 Mac 应用程序的窗口打开,则不会发生此行为。我可以选择其他正在运行的应用程序,然后毫无问题地返回到原始 Mac 应用程序。
最佳答案
此行为称为 Automatic Termination 。我发现它是一个错误功能,但苹果认为它是一个功能。
您的应用程序可能并未真正退出。它可能只是看起来已经退出了。再次“启动”它只会使其重新出现在 Dock 中。也有可能一些看起来仍在运行的应用程序实际上已被系统终止。理论上,如果您尝试切换到它们,它们将被启动并被告知恢复之前的状态,以维持它们一直在运行的错觉。在实践中,应用程序(甚至是苹果的)很少能正确地将事物恢复到原来的样子。
事件监视器中的进程列表真实反射(reflect)了实际运行和未运行的进程。查看此处以确定您的应用是否确实已终止。
开发人员应该必须选择自动终止,因为它需要对状态恢复进行显式编码。但是,Xcode 的应用程序项目/目标模板默认启用它。您可以从 Info.plist 中删除 NSSupportsAutomaticTermination
键来禁用它。
同样,如果您不准备支持突然终止,您可能也想禁用它。您将删除 NSSupportsSuddenTermination
键。
关于swift - 当窗口关闭然后选择另一个应用程序时,Mac 应用程序消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61272767/