Скрываем и показываем иконку приложения в Dock на macOS


Думаю всем очевиден факт, что когда приложение в macOS запущено, оно отображает иконку в доке. Иногда нам это не требуется, к примеру, если подразумевается, что приложение будет работать в фоне, и нет нужды лишний раз напоминать пользователю о его существовании.

В общем случае для этого даже не требуется писать код: достаточно выставить соотвествующий флаг в Info.plist.

 <key>LSUIElement</key>
 <true/>

По-человечески этот ключ называется “Application is agent (UIElement)” и собственно он переведет приложение в режим агента, в котором иконка в доке показываться не будет.

Если же поведение твоего приложения ещё более специфично и есть желание управлять отображением иконки в доке в процессе работы, то можно воспользоваться методом setActivationPolicy класса NSApplication.

Чтобы скрыть иконку (по сути этот метод аналогичен выставлению флага в Info.plist):

 NSApp.setActivationPolicy(.accessory)

Вернуть назад приложение в нормальный режим:

 NSApp.setActivationPolicy(.regular)