// // AppDelegate.swift // suixinkan // // Created by Codex on 2026/6/26. // import UIKit /// AppDelegate 承接 APNs 与微信 SDK 系统回调,SwiftUI App 入口通过 adaptor 注入。 final class AppDelegate: NSObject, UIApplicationDelegate { func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil ) -> Bool { Task { @MainActor in WeChatManager.shared.registerIfNeeded() } return true } func application( _ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:] ) -> Bool { MainActor.assumeIsolated { WeChatManager.shared.handleOpenURL(url) } } func application( _ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void ) -> Bool { MainActor.assumeIsolated { WeChatManager.shared.handleContinueUserActivity(userActivity) } } func application( _ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data ) { Task { @MainActor in PushNotificationManager.shared.handleDeviceToken(deviceToken) } } func application( _ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error ) { Task { @MainActor in PushNotificationManager.shared.handleRegistrationError(error) } } func application( _ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void ) { let payload = PushPayload(userInfo: userInfo) Task { @MainActor in PushNotificationManager.shared.handleRemoteNotification(payload) completionHandler(.newData) } } func applicationWillTerminate(_ application: UIApplication) { let semaphore = DispatchSemaphore(value: 0) Task { @MainActor in await CameraTetheringSession.shutdown() semaphore.signal() } _ = semaphore.wait(timeout: .now() + 2) } }