Запуск приложения Mac с Objective-C / Какао - PullRequest
8 голосов
/ 19 февраля 2011

При запуске приложения Path Finder из командной строки я использую open -a Path Finder.app /Users/. Исходя из этой идеи, я использую следующий код для запуска Path Finder.

Можно ли запустить приложение без использования 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];

Ответы [ 2 ]

26 голосов
/ 19 февраля 2011
if(![[NSWorkspace sharedWorkspace] launchApplication:@"Path Finder"])
    NSLog(@"Path Finder failed to launch");

С параметрами:

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

Вы также можете использовать NSTask для передачи аргументов:

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];
3 голосов
/ 19 февраля 2011

Основываясь на ответе Юджи в различных публикациях , NSWorkspace - это инструмент, который можно использовать, и я мог получить тот же результат только с двумя строками кода.

openFile можно использовать для передачи параметра в Path Finder, который обычно является каталогом, а не файлом. Тем не менее, это работает отлично.

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