2011-01-05 7 views
1

У меня есть приложение, которое может импортировать файл XML с помощью этой команды терминала:NSTask Launch причиной аварии

открытый/путь/к/главная \ app.app --args myXML.xml

Это отлично работает без проблем. И я использовал Applescript для запуска этой команды через оболочку, и она работает так же хорошо. Тем не менее, когда пытаешься использовать какао в NSTask Launcher с помощью этого кода:

NSTask *task = [[NSTask alloc] init]; 

[task setLaunchPath:@"/usr/bin/open"]; 

[task setCurrentDirectoryPath:@"/Applications/MainApp/InstallData/App/"]; 

[task setArguments:[NSArray arrayWithObjects:[(NSURL *)foundApplicationURL path], @"--args", @"ImportP.xml", nil]]; 

[task launch]; 

приложение запускается на начальный экран, а затем аварии, когда либо следующая кнопка нажата или при попытке закрыть окно. Ive пытался использовать NSAppleScript с этим:

NSAppleScript *script = [[NSAppleScript alloc] initWithSource:@"tell application \"Terminal\" do script \"open /Applications/MainApp/InstallData/App/Main\\\\ App.app\" end tell"]; 

NSDictionary *errorInfo; 

[script executeAndReturnError:&errorInfo]; 

Это запустит программу, и она будет врезаться, а также и я получаю эту ошибку в моем Xcode окна отладки:

12011-01-04 17:41:28.296 LaunchAppFile[4453:a0f] 
Error loading /Library/ScriptingAdditions/Adobe Unit Types.osax/Contents/MacOS/Adobe Unit Types: dlopen(/Library/ScriptingAdditions/Adobe Unit Types.osax/Contents/MacOS/Adobe Unit Types, 262): no suitable image found. 
Did find: /Library/ScriptingAdditions/Adobe Unit Types.osax/Contents/MacOS/Adobe Unit Types: no matching architecture in universal wrapper 
LaunchAppFile: OpenScripting.framework - scripting addition "/Library/ScriptingAdditions/Adobe Unit Types.osax" declares no loadable handlers. 

Так с исследованием я придумал это:

NSAppleScript *script = [[NSAppleScript alloc] initWithSource:@"do shell script \"arch -i386 osascript /Applications/MainApp/InstallData/App/test.scpt\""]; 

NSDictionary *errorInfo; 

[script executeAndReturnError:&errorInfo]; 

Но это приводит к тем же результатам, что и последняя команда. Любые идеи о том, что вызывает этот крах?

ответ

0

Отметьте here, чтобы исправить ошибки Adobe. Хотя я не уверен, что это проблема. На самом деле я не мог заставить команду open передавать аргументы ни на что, поэтому я не мог заглянуть в вашу проблему.

+0

достаточно точно. Adobe выплевывала материал, который застрял/разбирался. Я не разработчик C, но это то, что мне сказали. – tripskeet

0

Дайте NSTask еще одну попытку только с полными путями:

NSTask *task = [[NSTask alloc] init]; 

[task setLaunchPath:@"/usr/bin/open"]; 

[task setArguments:[NSArray arrayWithObjects:[ @"'/path/to/main app.app'", @"--args", @"/path/to/ImportP.xml", nil]]; 

[task launch]; 

Другой подход был бы дать NSTask следующую командную строку:

sh -c '/usr/bin/open "/path/to/main app.app" --args /path/to/myXML.xml' 

... 

NSTask *task = [[NSTask alloc] init]; 

[task setLaunchPath:@"/bin/sh"]; 

NSString *cmd = [NSString stringWithFormat: 
     @"%@ %@ %@ %@", 
     @"/usr/bin/open", 
     @"'/path/to/main app.app'", 
     @"--args", 
     @"/path/to/myXML.xml" 
]; 

[task setArguments:[NSArray arrayWithObjects:[ @"-c", cmd, nil]]; 

[task launch];