ひとしれずひっそり

主にソフトに関することをメモしていきます。過程をそのまま書いていたりするので間違いが含まれます。鵜呑みしない様に。

ファイルのインポートやURL Schemeの処理は onOpenURL を使用する

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)
        }
    }
}

参照

developer.apple.com