macOS:打开状态栏菜单并点击菜单项生成警告

macOS: Opening statusbar menu and tapping menu item generate warnings

提问人:Lucas van Dongen 提问时间:11/11/2023 最后编辑:Lucas van Dongen 更新时间:11/13/2023 访问量:49

问:

这与从菜单栏(SwiftUI、MacOS)打开窗口的问题相同,只是解决方案不起作用(不再?

首先,当我按下图标时:

警告:窗口 NSMenuWindowManagerWindow 0x7fa7fa823570从非活动应用程序的前面排序,并且可以在活动应用程序的窗口下方排序。这个现在已经消失了

当我点击菜单项时,我收到以下警告:

CGSWindowShmemCreateWithPort 在端口 0 上失败

CGSWindowShmemCreateWithPort 在端口 0 上失败

CGSWindowShmemCreateWithPort 在端口 0 上失败

CGSWindowShmemCreateWithPort 在端口 0 上失败

CGSWindowShmemCreateWithPort 在端口 0 上失败 // 这个现在已经消失了

警告:窗口 NSWindow 0x7fa7fa829d20从非活动应用程序订购的 front,并且可能 在活动应用程序的窗口下排序。

在 上运行 Window 逻辑后,激活应用程序后,Window 警告消失了:mainasync

@main
class AppDelegate: NSObject, NSApplicationDelegate {
    //...
    @IBAction
    func showPreferences(_ sender: Any) {
        guard let windowController = storyboard.instantiateController(withIdentifier: "DataWindowController") as? NSWindowController else {
            return
        }

        guard let window = windowController.window else {
            return
        }

        if #available(macOS 14.0, *) {
            NSApp.activate()
        } else {
            NSApp.activate(ignoringOtherApps: true)
        }

        DispatchQueue.main.async {
            windowController.showWindow(self)
            window.orderFrontRegardless()
        }
    }
}

因此,显然您不能在显示窗口时以相同的运行循环“勾号”运行应用程序,但之后可以立即执行此操作。activate

但是我该如何摆脱警告呢?这一切都由应用程序本身通过 .NSMenuWindowManagerWindowMain.storyboard


我设法通过更改以下行来摆脱一个:CGSWindowShmemCreateWithPort failed on port 0

-        window!.addTabbedWindow(newWindow, ordered: .above) // old way of adding a tab
+        window!.tabGroup?.addWindow(newWindow) // new way

这是通过在调试控制台中使用找到的b libsystem_trace.dylib`_os_log_error_impl

当我添加那个标志时,我得到了,所以在那之后我没有发现任何新的东西。error: Driver threw unknown argument: '-Wdeprecated-declarations' without emitting errors.

Swift macOS Appkit XCode-Storyboard

评论

0赞 soundflix 11/11/2023
您所指的问题是 SwiftUI 生命周期 App(不带 Storyboard)。请添加一个代码示例来显示您正在谈论的问题。
0赞 Lucas van Dongen 11/13/2023
@soundflix OK 更新了示例

答:

1赞 soundflix 11/12/2023 #1

activate(ignoringOtherApps:) 从 macOS 14 开始被弃用。如果以 macOS 14 为目标,请尝试使用较新的 activate()。

苹果开发人员的这个线程提供了一些线索,如何摆脱类似的警告或决定忽略警告,即将其视为“日志噪音”。

评论

0赞 Lucas van Dongen 11/13/2023
我正在尝试一个接一个地提出建议。发现我应该使用其中一个端口 0 错误消失。现在正在试验tabGroup.addWindow-Wdeprecated-declarations