SwiftUIの前は、ファイルのインポートやURL Schemeで呼び出される際にAppDelegateやSceneDelegateでコールバックが行われていた。
SwiftUIでもUIApplicationDelegateAdaptorでAppDelegateと同じ様なことができる。
struct MyApp: App { @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate var body: some Scene { WindowGroup { ContentView() } } } class AppDelegate: NSObject, UIApplicationDelegate { func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { return true } func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { debugPrint(url) return true } }
しかし、application (_:url:options:)が呼び出されない。
onOpenURL()を使用すると呼び出される。
struct MyApp: App { @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate var body: some Scene { WindowGroup { ContentView() .onOpenURL { (url) in debugPrint(url) } } }
参照