Bry*_*yan 8 appkit nsstatusitem nsapplication swift macos-sonoma
我有一个从状态栏运行的 Mac 应用程序。NSStatusItem单击an 时,我显示 anNSWindow而不是标准的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 图标和菜单栏),但问题仍然存在。
我遇到了类似的问题,它 NSApplication.shared.activate(ignoringOtherApps: true)不能始终有效,但似乎确实NSRunningApplication.current.activate(options: .activateIgnoringOtherApps)有效
| 归档时间: |
|
| 查看次数: |
512 次 |
| 最近记录: |