SwiftUI向けの対応

SDKの初期化コードを追加する

SwiftUI を使用している場合は、プロジェクト作成時には UIApplicationDelegate を継承した AppDelegate クラスがないため、AppDelegate を作成し UIApplicationDelegateAdaptor 等を利用して App 構造体に接続する必要があります。

@main
struct MyApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
}

この際、AppDelegate クラスは App 構造体よりも後に初期化されるため、現状のSDKでは App.init() 内等で直接KARTEのイベントを発行することはできません。 AppDelegate.application(_:didFinishLaunchingWithOptions:) の後にイベントを発行するようにしてください。

作成したAppDelegateにおいてapplication(_:didFinishLaunchingWithOptions:) メソッド内に初期化コードを追加します。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  KarteApp.setup()
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  [KRTApp setupWithConfiguration:KRTConfiguration.default_];
  ...
}

ディープリンクによってアプリが起動した際にdeep_link_app_openイベントを発生させる

対応が必要な場合

SwiftUIでディープリンクを介してURLを受け取った際に適切なイベントを発火させたい場合は、下記の対応が必要になります。

推奨される実装

SwiftUIで推奨される実装方法は、onOpenURL modifierを使ってアプリケーション全体でディープリンクを捕捉する方法です。このmodifier内で KarteApp.application(_:open:) メソッドを呼び出し、外部からのURL schemeを適切に処理します。

ステップ1: AppDelegateの準備

UIApplicationDelegateAdaptor 属性を使用して、AppDelegate クラスをSwiftUIライフサイクルに統合します。

@main
struct SampleApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    // ...
}

ステップ2: onOpenURL modifier の使用

WindowGroup の直下で onOpenURL modifierを使用し、URLが開かれたときの処理を定義します。

var body: some Scene {
    WindowGroup {
        NavigationView {
            ContentView()
            // 他のView
        }
        .onOpenURL { url in
            // URLを受け取ったときの処理
            KarteApp.application(UIApplication.shared, open: url)
            // その他の必要な処理
        }
    }
}