In an iPadOS SwiftUI app supporting multiple scenes, each Scene responds to a particular way in which the app was launched. If app was launched by tapping an associated file or a deep link (custom URL), then, the URLHandlerScene is invoked. If app was launched by QuickAction (long tap on the app icon), then another Scene is invoked etc. Each Scene has a purpose and responds to a particular launch.
But after defining handlesExternlEvents(matching:) scene modifier, the scene was not getting launched when user taps the associated file or the app's Deeplinks was invoked.
@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
})
}
}
}
As shown above, I've attached handlesExternalEvents(matching:) modifier with "file://" for the associate file and "Companion" is my custom URL scheme. As per the scene matching rules documented here, my URLHandlerScene should get launched, but every time I launch the app using associated file or 'open' a Deeplink, the DefaultScene is always launched.
What is missing here? Can someone please help?
1
0
162