Lancio di nstask causando un incidente
-
25-09-2019 - |
Domanda
Ho un'applicazione che può importare un file XML tramite questo comando terminale:
Open/Path/to/main app.app --args myxml.xml
Funziona alla grande senza problemi. E ho usato AppleScript per avviare questo comando tramite Shell e funziona altrettanto bene. Eppure, quando prova a utilizzare il lanciatore NSTASK di Cocoa usando questo codice:
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];
Le applicazioni si avvieranno sulla schermata iniziale e quindi si crogheranno quando si fa clic sul pulsante successivo o quando si tenta di chiudere la finestra. Ho provato a usare nSapplescript con questo:
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];
Questo lancerà il programma e anche questo si bloccherà e riceverò questo errore nella mia finestra di debug 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.
Quindi, con la ricerca, mi è venuta in mente questo:
NSAppleScript *script = [[NSAppleScript alloc] initWithSource:@"do shell script \"arch -i386 osascript /Applications/MainApp/InstallData/App/test.scpt\""];
NSDictionary *errorInfo;
[script executeAndReturnError:&errorInfo];
Ma questo provoca gli stessi risultati dell'ultimo comando. Qualche idea su cosa causa questo incidente?
Soluzione
Dai un'occhiata qui Per correggere gli errori di Adobe. Non sono sicuro che sia il problema però. In realtà non riuscivo a convincere il comando aperto per passare argomenti a nulla in modo da non poter esaminare il tuo problema.
Altri suggerimenti
Dai un altro tentativo a Nstask solo con percorsi completi:
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];
Un altro approccio sarebbe quello di dare a Nstask la seguente riga di comando:
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];