Răsfoiți Sursa

Enforce a single macOS window and terminate duplicate app instances on launch.

Co-authored-by: Cursor <cursoragent@cursor.com>
faiz ali 17 ore în urmă
părinte
comite
188dba76c1
1 a modificat fișierele cu 20 adăugiri și 1 ștergeri
  1. 20 1
      indeed_ai_job_search/App/indeed_ai_job_searchApp.swift

+ 20 - 1
indeed_ai_job_search/App/indeed_ai_job_searchApp.swift

@@ -3,14 +3,17 @@
 //  indeed_ai_job_search
 //  indeed_ai_job_search
 //
 //
 
 
+import AppKit
 import SwiftUI
 import SwiftUI
 
 
 @main
 @main
 struct indeed_ai_job_searchApp: App {
 struct indeed_ai_job_searchApp: App {
+    @NSApplicationDelegateAdaptor(AppDelegate.self) private var appDelegate
     @State private var dependencies = AppDependencies.live
     @State private var dependencies = AppDependencies.live
 
 
     var body: some Scene {
     var body: some Scene {
-        WindowGroup {
+        // Single unique window — WindowGroup would spawn multiple instances on macOS.
+        Window("indeed_ai_job_search", id: "main") {
             RootShellView(dependencies: dependencies)
             RootShellView(dependencies: dependencies)
                 .ignoresSafeArea()
                 .ignoresSafeArea()
                 .frame(minWidth: AppSpacing.minWindowWidth, minHeight: 520)
                 .frame(minWidth: AppSpacing.minWindowWidth, minHeight: 520)
@@ -22,3 +25,19 @@ struct indeed_ai_job_searchApp: App {
         }
         }
     }
     }
 }
 }
+
+/// Keeps exactly one running process of this app; terminates older duplicates on launch.
+final class AppDelegate: NSObject, NSApplicationDelegate {
+    func applicationWillFinishLaunching(_ notification: Notification) {
+        guard let bundleID = Bundle.main.bundleIdentifier else { return }
+        let current = NSRunningApplication.current
+        for app in NSRunningApplication.runningApplications(withBundleIdentifier: bundleID)
+        where app != current {
+            app.terminate()
+        }
+    }
+
+    func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
+        true
+    }
+}