How to launch application and bring it to front using Cocoa api?

Viewed 21897

I'm very new to a cocoa programming and I can't find the way to do the following:

  • Start a particular application by name
  • Do some work
  • Later bring that application I've started to be the front process

From what I've found in Carbon API it looks like the calls i should use are launchApplication() and setFrontProcess().

But how to do this in Cocoa? I.e. launch it, get PID, set that PID to be a front process. I tried to google for examples and find nothing...

If any of you can provide a minimalistic sample that would be awesome :)

Thanks in advance.

7 Answers

To launch an application :

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

To activate an app :

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

To start an application, use the NSWorkspace class: NSWorkspace Reference

Specifically, the launchApplication: function.

I don't know the answer of the activation part off my head. You can activate your own application with -[NSApplication activateIgnoringOtherApps:], but I don't know how to do it for other apps.

In swift 4, you can use NSWorkspace.shared.launchApplication(appName:) to open an app. It also makes the launched app at front in my case.

You also can try:

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

Option andHideOthers: Hide all apps except the newly launched one.

Open App in Mac in Objective C

#import <Cocoa/Cocoa.h>

int main(int argc, const char * argv[]) {

    @autoreleasepool {
        // insert code here...
        [[NSWorkspace sharedWorkspace] launchApplication:@"/Applications/Books.app"];
    }
    return 0;
}
Related