SwiftUI に SceneDelegate がない場合

swift

今までの Swift コードには以下のような SceneDelegate がありました。

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
  // ユーザーのアクティビティオブジェクトの情報を受信したときに呼ばれる
  func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {

  }
}

しかし、SwiftUI で開発したプロジェクトには SceneDelegate がない場合が多いです。

以下のように、メールリンクのクリックからアプリで何か反応したい場合、
SceneDelegate があればよいですが、ない場合はどうしたらよいでしょうか?

[iOS] Firebaseメールリンク認証を実装してみた – 2021年9月5日
https://qiita.com/mtkmr/items/078b715d9965fea1bd04

iOS 14 から始まった、
onContinueUserActivity() modifier
を使います。

How to continue an NSUserActivity in SwiftUI – Feb 9, 2021
https://www.hackingwithswift.com/quick-start/swiftui/how-to-continue-an-nsuseractivity-in-swiftui

以下のように使えばよいっぽいです。

func handleSpotlight(_ userActivity: NSUserActivity) {
    if let id = userActivity.userInfo?[CSSearchableItemActivityIdentifier] as? String {
        print("Found identifier \(id)")
    }
}

WindowGroup {
    ContentView()
        .onContinueUserActivity(CSSearchableItemActionType, perform: handleSpotlight)
}

または

WindowGroup {
   ContentView
      .onContinueUserActivity("com.company.app.activityIdentifier") { userActivity in 
         handleShortcut(with: userActivity)
      }
}

onContinueUserActivity(_:perform:) – Apple Developer
https://developer.apple.com/documentation/swiftui/view/oncontinueuseractivity(_:perform:)

SwiftUIを学ぶのにおすすめの本

SwiftUI開発レシピ iOS 14 対応

SwiftUI iPhoneアプリ開発入門ノート[2020] iOS 14 対応

SwiftUI 徹底入門

SwiftUIではじめるiPhoneアプリプログラミング入門

iOS/macOS UIフレームワーク SwiftUIプログラミング

コメント

タイトルとURLをコピーしました