首页 文章

在运行时更改Cocoa应用程序图标, Headers 和菜单标签

提问于
浏览
0

我有一个应用程序应该有两种不同的操作模式:让我们称它们为模式1和模式2 .

我只能评估应用程序启动后应用程序应使用的模式(检查许可证详细信息) . 最简单的选择是提供2个二进制文件并决定应用程序在编译时使用的模式 . 但这不是我想要做的,因为应用程序的代码差别很小 . 我宁愿做一些运行时魔法 .

根据要使用的模式,让应用更改其 Headers ,应用图标和菜单标签的最佳方法是什么?

我尝试了菜单栏中显示的应用程序名称,虽然我可以修改 Headers 但它不使用粗体字体而是常规字体 . [NSMenu Headers ]只是一个常规(非属性)字符串,所以我认为AppKit在启动应用程序并从Info.plist(CFBundleName)中提取名称时正在做一些魔术 .

我还考虑过更改应用程序的Info.plist文件,但这会有两个问题:

  • 应用程序需要重新启动(不是那么糟糕)

  • 应用程序需要重新签名(非常糟糕)

期待您的建议!

2 回答

  • 1

    通过“ Headers ”,我假设你的意思是当你将鼠标悬停在它上面时显示的Dock图标的 Headers .

    在app图标,Dock图标 Headers 和应用程序菜单 Headers 中,唯一可以正确更改的是应用程序图标 . 做 [NSApp setApplicationIconImage:someNSImage] .

    Dock图标的 Headers 来自应用程序包的显示名称 . Dock选择这个 Headers ,你基本上无法控制它(除了重命名你的应用程序包) .

    应用程序菜单的 Headers 来自Info.plist文件中的包名称 . 它在框架中以非常低的级别读取,没有机会对其进行自定义 .

  • 6

    我认为通过解决main.m中调用的 NSApplicationMain 函数,然后替换它在App Delegate中 applicationDidFinishLaunching 中所执行的操作,您可以轻松地执行您想要的操作 . 或者也许是在main.m.

    There is a how-to of sorts here.

    我认为您可以检查您的许可证,然后根据它为不同的主菜单启动不同的笔尖 .

    研究如何更改类NSDockTile的OSX App 's icon programmatically, I think you have to grab the NSApplication' s dockTile 属性并设置它的contentView . 在SO上提到NSDockTile的人很少见,但它有......

    在任何情况下,忘记plist,但你 can 这样做 . 从根本上说,你想超越 NSApplicationDelegate 协议进入 NSApplication ,看看你可以用什么来实现你想要的东西,这是以编程方式确定了很多被烘焙到 Info.plistNSApplicationMain() 的内容 . 我已经为NSMainNib做了这个,但你还需要做更多 . 它有可能,我希望这能让你到达那里 . 祝好运!

相关问题