macOS Sonoma:出现 UI 时激活仅菜单栏的应用程序

问题描述 投票:0回答:1

背景

我有一个从状态栏运行的 Mac 应用程序。单击

NSStatusItem
时,我会显示
NSWindow
而不是标准的
NSMenu

问题

在 Sonoma 之前,当单击

NSStatusItem
时,我使用了
activate(ignoringOtherApps: true)
API(现已弃用)以确保我的应用程序成为活动应用程序。这非常有效,所以苹果决定用核武器攻击它。

在 Sonoma 上,macOS 现在显示我的窗口,但不激活应用程序,这意味着用户必须单击

NSStatusItem
,然后再次单击窗口,然后才能与我的 UI 交互。当用户“点击”窗口时,它还会产生非常不和谐的体验,因为活动应用程序最终会切换,但不是在用户期望的时候切换。我的窗口和之前活动的应用程序突然以不同的状态重绘。真丑。 最糟糕的是,该问题仅在大约 85% 的时间内发生。 15% 的情况下,系统会在显示 UI 时激活我的应用程序。我还无法确定它的模式,但这与 AppKit 发行说明相吻合,表明系统“可能”激活我的应用程序。 (毫无疑问,如果一些愚蠢的、过度设计的、机器学习的官样文章认为这是值得做的。)

问题

如何告诉系统我的应用程序

需要

在单击我的 NSStatusItem 时变为活动状态,因为 (A) 这是用户所期望的,(B) 替代方案看起来 macOS 已损坏? 尝试

我尝试使用

NSApplication.shared.setActivationPolicy()

甚至

.accessory
设置
.regular
(即使这会添加 Dock 图标和菜单栏),但问题仍然存在。
    

swift appkit nsstatusitem nsapplication macos-sonoma
1个回答
0
投票
NSApplication.shared.activate(ignoringOtherApps: true)

不能始终如一地工作,但似乎

NSRunningApplication.current.activate(options: .activateIgnoringOtherApps)
可以
    

© www.soinside.com 2019 - 2024. All rights reserved.