如何让我的应用程序的触摸栏在 macOS 上始终可见?

How can I make my application's touch bar always visible on macOS?

我正在制作 a macOS menu bar application 显示全屏覆盖。用户可以通过菜单栏中的滑块控制该叠加层的不透明度。我希望将这些控件移动到触摸条上,因为该应用程序用于屏幕录制,并且会记录主屏幕上的干扰。我的应用程序中的滑块应该像默认情况下触摸栏上的亮度和音量滑块一样工作。

我通过子类化 NSApplication 和实现 makeTouchBar 添加了我的 NSTouchBar。该栏会在应用程序首次启动时出现。但是,当聚焦任何其他应用程序时,触摸条就会消失,而且似乎没有办法再次带上我的应用程序的触摸条。我认为问题在于我的应用程序是一个没有 windows.

的纯菜单栏应用程序

以下是让我的应用程序的触摸栏可见的方法,从最优选到最不优选:

  1. 将我的应用程序图标添加到控制条中,位于亮度和音量图标旁边。这会让用户点击我的图标来调整不透明度,即使其他应用程序被聚焦。然而,奇怪的是,.

  2. 以某种方式为我的用户提供一种将我的应用程序手动添加到控制条的方法。可以通过 System Preferences > Keyboard > Customize Control Strip ... 自定义控制条,它显示了可以拖放到控制条中的各种内容。我想将我的应用程序注册为要包含在此处的项目。但是,我找不到任何方法来做到这一点。

  3. 将我的应用程序注册为音乐应用程序。我机器上的 Spotify 以某种方式使用了控制条中的 "music" 图标(与 iTunes 使用的图标相同)。我不知道 Spotify 是如何做到这一点的——还有其他人知道吗?显然,这将是一个 hack,因为我的应用程序不播放音频,但总比没有好。

  4. 以某种方式覆盖应用程序区域,以便我的应用程序的触摸栏始终可见,从而破坏所有其他应用程序对触摸栏的使用。这显然不理想,因为它不能很好地与其他应用程序配合使用。

这些解决方案是否可行?还有其他可能的解决方案吗?如何让我的应用程序的触控栏始终可以通过触控栏访问?

也许有一些 hacky 解决方案,但根据官方文档你不能这样做: https://developer.apple.com/reference/appkit/nstouchbar

On supported MacBook Pro models, the Touch Bar, above the keyboard, shows instances of the NSTouch​Bar class from the front-most app.

如果您可以将您的应用程序放入控制条区域(音量控制和朋友所在的位置),那么用户可以在那里触摸它以调出您的触摸条。请参阅 hazeover 的 TouchSwitcher 以了解想法。