10.7.3 以降 (および 10.8 未満) で動作がおかしくなっていることに気付きました。
私のアプリは、デフォルトで NSStatusItem とドック アイコンを持つ小さなヘルパー アプリです。ユーザーは、StatusItem のみ、Dock アイコン、またはその両方を表示するかどうかを構成できます。これを再現するために、私はLSUIElement=YES
Info.plist に持っています。ユーザーがDock-Iconを表示するように構成した場合、私はやっています
TransformProcessType(& (ProcessSerialNumber){ 0, kCurrentProcess }, kProcessTransformToForegroundApplication);
アプリケーションでDidFinishLaunching.
これは 10.7.3 までは問題なく機能していました。10.7.3 以降、ドック アイコンが 2 回表示されることがあります (アプリのインスタンスは 1 つしか実行されていません)。この場合、アプリは正常に終了できますが、ドックの 2 番目のアイコンは応答しません。ドックを再起動すると、アイコンが消えます。これは主に、アプリが LoginItem であり、ログイン時に自動的に開始される場合に発生します。TransformProcessType(& (ProcessSerialNumber){ 0, kCurrentProcess }, kProcessTransformToForegroundApplication);
1秒以上遅らせて実行すると問題が解決するようです。ただし、アプリケーションが開始されたという即時のフィードバックがユーザーに得られないため、これは良い方法ではありません。
この問題と可能な回避策/解決策について何か知っている人はいますか? 一部のグーグル検索では、10.7.3 以降、Growl にもこの問題が発生しているように見えますが、解決策はありません。注:アプリが10.5および10.6と互換性がある必要があるため、ユーザーがドックアイコンを表示しないことを選択した場合、を設定LSUIElement=NO
して使用kProcessTransformToUIElementApplication
しても機能しません。