Есть ли способ убить уведомление OSX в swift4 при выходе из процесса - PullRequest
0 голосов
/ 07 февраля 2019

Я искал несколько часов, пытаясь найти ответы, но не могу найти какую-либо полезную информацию по этому вопросу.

В основном у меня есть супер базовое приложение командной строки, которое просто создает уведомление.Это работает, но когда процесс CLI завершается, уведомление OSX все еще существует.При щелчке оно ничего не делает.

Это приложение является приложением коки Swift 4, оно использует класс AppDelegate и расширяет NSObject, NSApplicationDelegate, NSUserNotificationCenterDelegate

В applicationWillTerminate () , я думаю, эта функция будет вызываться при существующем процессе.

Мне было интересно, можно ли запустить команду, когда процесс завершается через SIGTERM / SIGINT, и / или закрыть уведомлениекогда процесс выхода?

Любая помощь приветствуется!Я в новинку для Свифта, это дает мне быстрый удар в попу :)

1 Ответ

0 голосов
/ 08 февраля 2019

applicationWillTerminate вызывается в ответ на вызов NSApplication.terminate(_:).Какао вызывает это в ответ на действия пользовательского интерфейса, такие как File -> Quit, но не регистрирует обработчики сигналов.Одним простым способом зарегистрировать такие обработчики сигналов для приложения командной строки может быть использование DispatchSource.makeSignalSource:

signal(SIGINT, SIG_IGN)
let sigint = DispatchSource.makeSignalSource(signal: SIGINT, queue: DispatchQueue.main)
sigint.setEventHandler {
    NSApp.terminate(nil)
}
sigint.resume()

Вы можете сделать то же самое для любого другого сигнала, который может быть обработан, например SIGQUITили SIGTERM (хотя я думаю, что было бы справедливо оставить SIGTERM в покое).

Я предлагаю оставить sigint в качестве переменной экземпляра, чтобы гарантировать, что объект не исчезнет.Однако я не уверен, что это необходимо.

Функции, которые вы вызываете в обработчике событий источника диспетчеризации сигналов, не обязательно должны быть асинхронно-безопасными, поскольку их обработка отложена.Подробнее см. Источники отправки: Мониторинг сигналов (документ использует C API, но семантика та же).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...