Lançamento de um Mac App com Objective-C / Cocoa

Ao iniciar o aplicativo Path Finder com a linha de comando, uso open -a Path Finder.app /Users/ . Com base nessa idéia, uso o código a seguir para iniciar o Path Finder.

Posso lançar o aplicativo sem usar open linha 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"); 

Com 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 

Você também pode usar o NSTask para passar 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]; 

Com base na resposta do yuji em postagens diferentes , o NSWorkspace é a ferramenta a ser usada, e eu poderia obter o mesmo resultado com apenas duas linhas de código.

O openFile pode ser usado para passar o parâmetro para o Path Finder , que normalmente é o diretório, não um arquivo. No entanto, funciona bem.

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