如何在 MacOS/X 程序中重命名 program-name menu-label?

How to rename the program-name menu-label in a MacOS/X program?

我有一个 Qt-based GUI 程序 运行 在 MacOS/X 下,我希望能够更改该程序第一个 menu-header 的标签,即这张截图中红圈圈出的标签:

是否有程序化的方式来做到这一点? objective-C/"native" 解决方案就足够了,假设不存在 Qt-based 解决方案。

一些背景信息(对于那些正确地怀疑这里有 X/Y 问题的人):我的 MacOS/X 软件分发包括几个不同的 Qt-based 程序,为了避免不得不分发他们都使用的共享库的多个冗余副本,避免必须编写自定义安装程序,所有可执行文件都放在同一 .app 包的 Contents/MacOS 子文件夹中,如屏幕截图所示:

对于 运行 软件,用户单击 .app-folder 的图标以启动“主”应用程序,然后在该 GUI 中有各种 buttons/menus可以根据需要将“其他”应用程序作为 child 进程启动;并且一切正常,除了 child 进程的第一个菜单标签始终显示为“主”应用程序的名称(如捆绑包 Info.plist 文件中的 CFBundleExecutable 标记中所列) 而不是 child-program 自己的名字,我希望能够更改它,以便它显示自己的 program-name。

以下代码(Swift,对于移植到 ObjC 应该很简单)更改菜单的名称:

NSApp.mainMenu?.item(at: 0)?.submenu?.title = "child-program-name"

但是,使用这种方法,一旦名称更改,菜单将不再以粗体显示,因为它与应用程序的名称不匹配。事实上,即使改回应用程序的名称,菜单标题也不再是粗体。这似乎是一个 long-standing 问题;参见 set titles of items in my app's main menu?。不幸的是 NSMenu 没有像 NSMenuItem.

这样的 attributedTitle 属性