import Sybil import SwiftUI import UIKit @main struct SybilApp: App { @UIApplicationDelegateAdaptor(SybilAppDelegate.self) private var appDelegate var body: some Scene { WindowGroup { SplitView() } .commands { SybilCommands() } } } @MainActor final class SybilAppDelegate: NSObject, UIApplicationDelegate { func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil ) -> Bool { SybilHomeScreenQuickActionHandler.configureQuickActions() return true } func application( _ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions ) -> UISceneConfiguration { let configuration = UISceneConfiguration( name: "Default Configuration", sessionRole: connectingSceneSession.role ) configuration.delegateClass = SybilSceneDelegate.self return configuration } func application( _ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void ) { completionHandler(SybilHomeScreenQuickActionHandler.handle(shortcutItem)) } } @MainActor final class SybilSceneDelegate: NSObject, UIWindowSceneDelegate { func scene( _ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions ) { if let shortcutItem = connectionOptions.shortcutItem { _ = SybilHomeScreenQuickActionHandler.handle(shortcutItem) } } func windowScene( _ windowScene: UIWindowScene, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void ) { completionHandler(SybilHomeScreenQuickActionHandler.handle(shortcutItem)) } func sceneWillResignActive(_ scene: UIScene) { SybilHomeScreenQuickActionHandler.configureQuickActions() } } @MainActor private enum SybilHomeScreenQuickActionHandler { static func configureQuickActions() { // The quick question action is static in Info.plist so it is available before first launch. UIApplication.shared.shortcutItems = [] } static func handle(_ shortcutItem: UIApplicationShortcutItem) -> Bool { guard shortcutItem.type == SybilHomeScreenQuickAction.quickQuestionType else { return false } Task { @MainActor in SybilQuickActionRouter.shared.requestQuickQuestionPresentation() } return true } }