NSTask Launch вызывает сбой - PullRequest
       17

NSTask Launch вызывает сбой

1 голос
/ 05 января 2011

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

open / path / to / main \ app.app --args myXML.xml

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

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];

, приложения будут запускаться до начального экрана, а затем аварийно завершать работу при нажатии следующей кнопки или при попытке закрыть окно.Я попытался использовать 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];

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

Ответы [ 2 ]

0 голосов
/ 19 января 2011

Дайте 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];
0 голосов
/ 07 января 2011

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

...