Como iniciar o aplicativo e trazê-lo para frente usando o Cocoa api?

Eu sou muito novo em uma programação de cacau e não consigo encontrar o caminho para fazer o seguinte:

  • Inicie um aplicativo específico pelo nome
  • Faça algum trabalho
  • Mais tarde, trazer esse aplicativo eu comecei a ser o processo frente

Pelo que eu encontrei na Carbon API, parece que as chamadas que eu deveria usar são launchApplication () e setFrontProcess ().

Mas como fazer isso em cacau? Ou seja, lançá-lo, obter PID, definir esse PID para ser um processo frente. Eu tentei google por exemplos e não encontrei nada …

Se algum de vocês pode fornecer uma amostra minimalista que seria incrível 🙂

Desde já, obrigado.

Para iniciar um aplicativo:

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

Para ativar um aplicativo:

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

Para iniciar um aplicativo, use a class NSWorkspace : Referência do NSWorkspace

Especificamente, a function launchApplication:

Eu não sei a resposta da parte de ativação da minha cabeça. Você pode ativar seu próprio aplicativo com -[NSApplication activateIgnoringOtherApps:] , mas não sei como fazer isso para outros aplicativos.

Você olhou para NSRunningApplication ?

O NSRunningApplication está disponível no Mac OS X 10.6 ou posterior.

Se você tiver que oferecer suporte a sistemas anteriores, isso pode ser feito com APIs como GetCurrentProcess () e SetFrontProcess () e a antiga estrutura ProcessSerialNumber.

Para a versão Swift2

Lançamento do Aplicativo:

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

Para obter o aplicativo usando o Identificador do pacote:

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

Eu ainda estou tentando encontrar o caminho para saber “ativo”, “ocultar” etc estado do app, mas não ter sucesso até agora.

No swift 4, você pode usar o NSWorkspace.shared.launchApplication(appName:) para abrir um aplicativo. Também faz o aplicativo lançado na frente no meu caso.

Você também pode tentar:

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

Opção andHideOthers : andHideOthers todos os aplicativos, exceto o recém-lançado.