¿Cómo iniciar la aplicación y llevarla al frente usando la API de Cocoa?

Soy muy nuevo en una progtwigción de cocoa y no puedo encontrar la manera de hacer lo siguiente:

  • Comience una aplicación particular por nombre
  • Haz algo de trabajo
  • Más tarde traer esa aplicación que he comenzado a ser el proceso frontal

Según lo que he encontrado en Carbon API, parece que las llamadas que debo usar son launchApplication () y setFrontProcess ().

¿Pero cómo hacer esto en Cocoa? Es decir, iniciarlo, obtener PID, configurar ese PID como un proceso inicial. Intenté buscar ejemplos en Google y no encontré nada …

Si alguno de ustedes puede proporcionar una muestra minimalista que sería increíble 🙂

Gracias por adelantado.

Para iniciar una aplicación:

[[NSWorkspace sharedWorkspace] launchApplication:@"/Applications/Safari.app"]; 

Para activar una aplicación:

 NSRunningApplication* app = [NSRunningApplication runningApplicationWithProcessIdentifier: PID]; [app activateWithOptions: NSApplicationActivateAllWindows]; // or NSArray* apps = [NSRunningApplication runningApplicationsWithBundleIdentifier:@"com.bla.blah"]; [(NSRunningApplication*)[apps objectAtIndex:0] activateWithOptions: NSApplicationActivateAllWindows]; 

Para iniciar una aplicación, use la clase NSWorkspace : NSWorkspace Reference

Específicamente, la función launchApplication:

No sé la respuesta de la parte de activación de mi cabeza. Puede activar su propia aplicación con -[NSApplication activateIgnoringOtherApps:] , pero no sé cómo hacerlo para otras aplicaciones.

¿ Miraste a NSRunningApplication ?

NSRunningApplication está disponible en Mac OS X 10.6 o posterior.

Si tiene que admitir sistemas anteriores, esto se puede hacer con API como GetCurrentProcess () y SetFrontProcess () y la antigua estructura de ProcessSerialNumber.

Para la versión Swift2

Ejecutar aplicación:

 let task = NSTask() task.launchPath = "/usr/bin/env" task.arguments = ["/Applications/TextEdit.app/Contents/MacOS/TextEdit"] task.launch() 

Para obtener la aplicación utilizando el identificador de paquete:

  var apps: [AnyObject] = NSRunningApplication.runningApplicationsWithBundleIdentifier("com.apple.TextEdit") var MyApp: [NSRunningApplication] = apps as! [NSRunningApplication] for app in MyApp { } 

Todavía estoy tratando de encontrar la manera de conocer el estado de la aplicación “activo”, “oculto”, etc., pero no hasta ahora.

En swift 4, puede usar NSWorkspace.shared.launchApplication(appName:) para abrir una aplicación. También hace que la aplicación lanzada al frente en mi caso.

También puedes probar:

 do { try NSWorkspace.shared.launchApplication(at: yourAppURL, options: .andHideOthers, configuration: [:]) } catch { printError("Failed to launch the app.") } 

Option andHideOthers : andHideOthers todas las aplicaciones excepto la recién lanzada.