如何为不是应用程序主 CFBundleExecutable 的可执行文件设置图标?

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

我有一些 MacOS 客户端/服务器软件,最初安装为包含两个单独的

.app
文件夹的文件夹;一个用于客户端,一个用于服务器。

效果很好,只不过这意味着我必须在每个

*.app/Contents/Frameworks
子文件夹中包含每个捆绑共享库的单独副本;考虑到这两个应用程序都有基于 Qt 的 GUI,这是很大的开销。

有人建议,我不要将这两个程序作为单独的

.app
文件夹传送,而只需将服务器的可执行文件 (
TheServer.app/Contents/MacOS/TheServer
) 移动到客户端的资源文件夹 (
TheClient.app/Contents/Resources/
) 中,然后将“启动服务器”按钮添加到单击时将
TheClient.app/Contents/Resources/TheServer
作为子进程启动的客户端 GUI。

我这样做了,效果也很好,并将我的应用程序的

.pkg
大小减少了约 25 MB。

唯一的缺点是,现在当

TheServer
运行时,它在 Dock 中的图标是通用终端图标(请参阅随附的屏幕截图),而不是其预期的自定义图标;大概这是因为
TheServer
不再具有关联的
Info.plist
文件来声明其
CFBundleIconFile
属性,指定其
.icns
文件所在位置。

我的问题是,有什么方法可以解决这种情况并允许

TheServer
的 GUI 再次拥有其自定义的 Dock 图标吗? 还是我只是运气不好?

generic Terminal icon

c++ macos icons dock
1个回答
0
投票

在没有捆绑包的情况下使用原始二进制文件的一种可能性是在程序启动时以编程方式简单地替换 Dock 图标:

[NSApp setApplicationIconImage:nsImage];

这样,您甚至根本不需要图标文件,因为如果您愿意,您可以通过编程方式创建 NSImage。

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