Lanzar una aplicación de Mac con Objective-C / Cocoa

Al iniciar la aplicación Path Finder con línea de comando, uso open -a Path Finder.app /Users/ . Basado en esta idea, utilizo el siguiente código para iniciar Path Finder.

¿Puedo tener una aplicación de inicio sin usar open línea de comando open ?

 NSTask *task; task = [[NSTask alloc] init]; [task setLaunchPath: @"/usr/bin/open"]; NSArray *arguments; arguments = [NSArray arrayWithObjects: @"-a", @"Path Finder.app", @"/Users/", nil]; [task setArguments: arguments]; NSPipe *pipe; pipe = [NSPipe pipe]; [task setStandardOutput: pipe]; NSFileHandle *file; file = [pipe fileHandleForReading]; [task launch]; 

 if(![[NSWorkspace sharedWorkspace] launchApplication:@"Path Finder"]) NSLog(@"Path Finder failed to launch"); 

Con parámetros:

 NSWorkspace *workspace = [NSWorkspace sharedWorkspace]; NSURL *url = [NSURL fileURLWithPath:[workspace fullPathForApplication:@"Path Finder"]]; //Handle url==nil NSError *error = nil; NSArray *arguments = [NSArray arrayWithObjects:@"Argument1", @"Argument2", nil]; [workspace launchApplicationAtURL:url options:0 configuration:[NSDictionary dictionaryWithObject:arguments forKey:NSWorkspaceLaunchConfigurationArguments] error:&error]; //Handle error 

También puede usar NSTask para pasar argumentos:

 NSTask *task = [[NSTask alloc] init]; NSBundle *bundle = [NSBundle bundleWithPath:[[NSWorkspace sharedWorkspace] fullPathForApplication:@"Path Finder"]]]; [task setLaunchPath:[bundle executablePath]]; NSArray *arguments = [NSArray arrayWithObjects:@"Argument1", @"Argument2", nil]; [task setArguments:arguments]; [task launch]; 

En base a la respuesta de yuji en publicaciones diferentes , NSWorkspace es la herramienta a usar, y podría obtener el mismo resultado con solo dos líneas de código.

openFile se puede usar para pasar el parámetro a Path Finder , que normalmente es el directorio, no un archivo. Sin embargo, funciona bien.

 [[NSWorkspace sharedWorkspace] openFile:string2 withApplication:@"Path Finder"]; [[NSApplication sharedApplication] terminate:nil];