I\'m very new to a cocoa programming and I can\'t find the way to do the following:
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];
NSRunningApplication is available on Mac OS X 10.6 or later.
If you have to support earlier systems, this can be done with APIs such as GetCurrentProcess() and SetFrontProcess() and the old ProcessSerialNumber structure.
Did you look into NSRunningApplication?
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;
}