Как определить схемы URL-адресов с помощью .handlesExternalEvents и NSAppleEventManager одновременно

У меня есть приложение Mac на основе SwiftUI с несколькими.

1. Открытие другого SwiftUI с использованием схем URL-адресов.

Чтобы открыть эти окна, я использую схемы URL ( как описано здесь):

      WindowGroup {
    // ...
}
.handlesExternalEvents(matching: Set(arrayLiteral: "primaryWindow"))

... а затем позвонить:

      NSWorkspace.shared.open(URL(string: "myapp://primaryWindow")!)

☑️ Это прекрасно работает!

2. Обнаружение URL-адресов, вызываемых из-за пределов приложения.

Мне также нужно уметь распознавать и обрабатывать схемы URL-адресов, вызываемые извне приложения, например myapp://somePath?someParameter=1. Я нашел это решение и установил обработчик событий в моем AppDelegate:

      func applicationWillFinishLaunching(_ notification: Notification) {
    NSAppleEventManager.shared().setEventHandler(self, andSelector: #selector(self.handleGetURL(event:reply:)), forEventClass: AEEventClass(kInternetEventClass), andEventID: AEEventID(kAEGetURL)) )
}

☑️ Это тоже отлично работает, и мой #selector метод вызывается, как и следовало ожидать.

3. Проблема: как использовать .handlesExternalEvents и одновременно?

🛑 Вот где начинается проблема: после звонка .setEventHandler мой WindowGroups больше не реагирую на вызываемые URL-адреса, и я по-прежнему не могу открывать новые окна.

Это как-то имеет смысл, поскольку я зарегистрировал обработчик событий в AppDelegate специально для kAEGetURLно я понятия не имею, как реализовать обе функции одновременно. Жду вашего совета!

0 ответов

Другие вопросы по тегам