Как определить схемы 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
но я понятия не имею, как реализовать обе функции одновременно. Жду вашего совета!