我注意到在 10.7.3 及更高版本(也在 10.8 下)有一些奇怪的行为。
我的应用程序是一个小助手应用程序,默认情况下有一个 NSStatusItem 和一个停靠图标。用户可以配置,如果他只想显示 StatusItem、Dock 图标或两者。为了实现这一点,我LSUIElement=YES
在 Info.plist 中有。如果用户已配置要显示的 Dock-Icon 我正在做
TransformProcessType(& (ProcessSerialNumber){ 0, kCurrentProcess }, kProcessTransformToForegroundApplication);
在 applicationDidFinishLaunching 中。
这在 10.7.3 之前工作正常。从 10.7.3 开始,停靠图标有时会显示两次(尽管只有一个应用程序实例正在运行)。在这种情况下,应用程序可以正常终止,但第二个图标在 Dock 中仍然没有响应。重新启动扩展坞会使图标消失。这主要发生在应用程序是 LoginItem 并在登录时自动启动的情况下。延迟 1 秒或更长时间执行TransformProcessType(& (ProcessSerialNumber){ 0, kCurrentProcess }, kProcessTransformToForegroundApplication);
似乎可以解决问题。然而,这不是一个好方法,因为用户没有得到即时反馈,表明应用程序已经启动。
有谁知道这个问题和可能的解决方法/解决方案?一些谷歌搜索显示 Growl 似乎从 10.7.3 开始也有这个问题,但没有任何解决方案。注意:设置LSUIElement=NO
和使用kProcessTransformToUIElementApplication
,如果用户选择不显示停靠图标对我不起作用,因为应用程序需要与 10.5 和 10.6 兼容。