import ApplicationLibrary import Foundation import Libbox import Library import Network import UIKit import UserNotifications class ApplicationDelegate: NSObject, UIApplicationDelegate, UNUserNotificationCenterDelegate { private var profileServer: ProfileServer? func application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool { NSLog("Here I stand") let options = LibboxSetupOptions() options.basePath = FilePath.sharedDirectory.relativePath options.workingPath = FilePath.workingDirectory.relativePath options.tempPath = FilePath.cacheDirectory.relativePath var error: NSError? LibboxSetup(options, &error) LibboxSetLocale(Locale.current.identifier) let notificationCenter = UNUserNotificationCenter.current() notificationCenter.setNotificationCategories([ UNNotificationCategory( identifier: "OPEN_URL", actions: [ UNNotificationAction(identifier: "COPY_URL", title: "Copy URL", options: .foreground, icon: UNNotificationActionIcon(systemImageName: "clipboard.fill")), UNNotificationAction(identifier: "OPEN_URL", title: "Open", options: .foreground, icon: UNNotificationActionIcon(systemImageName: "safari.fill")), ], intentIdentifiers: [] ), ] ) notificationCenter.delegate = self setup() return true } func userNotificationCenter(_: UNUserNotificationCenter, willPresent _: UNNotification) async -> UNNotificationPresentationOptions { .banner } func userNotificationCenter(_: UNUserNotificationCenter, didReceive response: UNNotificationResponse) async { if let url = response.notification.request.content.userInfo["OPEN_URL"] as? String { switch response.actionIdentifier { case "COPY_URL": UIPasteboard.general.string = url default: await UIApplication.shared.open(URL(string: url)!) } } } private func setup() { do { try UIProfileUpdateTask.configure() NSLog("setup background task success") } catch { NSLog("setup background task error: \(error.localizedDescription)") } Task { if UIDevice.current.userInterfaceIdiom == .phone { await requestNetworkPermission() } await setupBackground() } } private nonisolated func setupBackground() async { if #available(iOS 16.0, *) { do { let profileServer = try ProfileServer() profileServer.start() await MainActor.run { self.profileServer = profileServer } NSLog("started profile server") } catch { NSLog("setup profile server error: \(error.localizedDescription)") } } } private nonisolated func requestNetworkPermission() async { if await SharedPreferences.networkPermissionRequested.get() { return } if !DeviceCensorship.isChinaDevice() { await SharedPreferences.networkPermissionRequested.set(true) return } URLSession.shared.dataTask(with: URL(string: "http://captive.apple.com")!) { _, response, _ in if let response = response as? HTTPURLResponse { if response.statusCode == 200 { Task { await SharedPreferences.networkPermissionRequested.set(true) } } } }.resume() } }