// // AppDelegate.swift // IceGlass // // Copyright 2026 Rouslan Zenetl. All Rights Reserved. // import UserNotifications import AppKit import CoreServices class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDelegate { private let logger = IceGlassLogger( subsystem: Bundle.main.bundleIdentifier ?? "dev.rzen.indie.IceGlass", category: "AppDelegate" ) private var mainService = MainService.shared func applicationDidFinishLaunching(_ notification: Notification) { logger.info("applicationDidFinishLaunching") UNUserNotificationCenter.current().delegate = self // Force re-register with Launch Services to refresh cached icon LSRegisterURL(Bundle.main.bundleURL as CFURL, true) // Set app icon explicitly from .icns (NSImage(named:) doesn't work for App Icon assets) if let icnsPath = Bundle.main.path(forResource: "AppIcon", ofType: "icns"), let icon = NSImage(contentsOfFile: icnsPath) { NSApp.applicationIconImage = icon } } func applicationWillTerminate(_ notification: Notification) { // nothing to deinit } // Notification click handler — opens URLs func userNotificationCenter( _ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void ) { if let urlString = response.notification.request.content.userInfo["url"] as? String, let url = URL(string: urlString) { NSWorkspace.shared.open(url) } completionHandler() } }