Я работаю над приложением iPados swiftui, поддерживающего несколько сцен, каждая сцена отвечает на определенный способ запуска приложения. Если приложение было запущено путем нажатия соответствующего файла или глубокой ссылки (пользовательский URL), то используется urlhandlerscene . Если приложение было запущено QuickAction (Long Tap on Appcecon), то другая сцена вызывается и т. Д. Каждая сцена имеет цель и отвечает на конкретный запуск.
Но после определения Handlesexternlevents (Matching

модификатор сцены, Urlhhandlerscene запускается, когда пользователь Taps Taps Assired File -файл. />
Код: Выделить всё
@main
struct IOSSwiftUIScenesApp: App {
var body: some Scene {
DefaultScene()
URLHandlerScene()
.handlesExternalEvents(matching: ["file://"]) // Launched by an associated file
.handlesExternalEvents(matching: ["Companion://"]) // Launched by Deeplink.
// Other scenes
}
}
struct URLHandlerScene: Scene {
@State private var inputURL: URL // Store the incoming URL
init() {
self.inputURL = URL(string: "Temp://")!
}
var body: some Scene {
WindowGroup {
URLhandlerView(inputURL: $inputURL)
.onOpenURL(perform: { (fileURL: URL) in
log(String(format: "URLhandlerView().onOpenURL | Thread.current = %@", String(describing: Thread.current)))
log("fileURL = " + String(describing: fileURL))
inputURL = fileURL
})
}
}
}
Как показано выше, я прикрепил handlesexternalevents (matching

модификатор с «file: //» для запуска ассоциированного файла, а «Companion» - моя пользовательская схема URL. Согласно правилам сопоставления сцены, документированных здесь, Urlhandlerscene должен быть запущен, но каждый раз, когда я запускаю приложение, используя связанный файл или «открыть» Deeplink, Defaultscene всегда запущен.>
Подробнее здесь:
https://stackoverflow.com/questions/795 ... rnal-event