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

标签 swift macos swiftui

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

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

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

最佳答案

此行为称为 Automatic Termination 。我发现它是一个错误功能,但苹果认为它是一个功能。

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

事件监视器中的进程列表真实反射(reflect)了实际运行和未运行的进程。查看此处以确定您的应用是否确实已终止。

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

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

关于swift - 当窗口关闭然后选择另一个应用程序时,Mac 应用程序消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61272767/

相关文章:

swift osx webview 输入类型 = 文本不起作用

ios - 关于状态更改问题的 SwiftUI 刷新列表

ios - 使用 Swift 在 IOS 上的 Twitter 单点登录

ios - 本地化 siri 捐赠的快捷方式

macos - a2enmod 在 Mac OS X 上不起作用 - Mountain Lion

swiftui - Xcode 11 未在 SwiftUI 中显示对象库

swiftui - 属性定义已推断类型 'some View',涉及另一个声明的 'some'返回类型

Swift - Xcode 9.4.1 - AnyObject 不是 NSArray 的子类型

swift - 存储无序数据文件中的值

c++ - MacOS std::chrono::clock_cast 未找到