/ / Come includere e chiamare un eseguibile in un'app Cocoa? - oggettivo-c, cacao, app-bundle

Come includere e chiamare un eseguibile in un'app Cocoa? - oggettivo-c, cacao, app-bundle

Posso eseguire un eseguibile da una directory locale conosciuta all'interno di un'app Cocoa in questo modo:

// Run the server.

NSTask *task = [[NSTask alloc] init];
NSPipe *pipe = [NSPipe pipe];
NSString* scriptPath = @"/Users/example/Server/runServerExecutable.sh";
[task setLaunchPath: @"/bin/sh"];
[task setArguments: [NSArray arrayWithObjects: scriptPath, nil]];
[task setStandardOutput: pipe];
[task launch];

Qualcuno potrebbe aiutarmi su queste domande?

  • Dove dovrei includere i file eseguibili / di script / di testo nel pacchetto di app?
  • Come modificare scriptPath eseguire lo script al livello di programmazione?

Molte grazie!

risposte:

0 per risposta № 1

Trascina e rilascia i file di script / di testo sul tuo xcodeproject -> Project Navigator, in modo che venga aggiunto al tuo progetto. Costruisci il progetto. Apri il pacchetto, sarai in grado di vedere il file aggiunto nella directory delle risorse.

Ora, il codice riportato di seguito ti aiuterà a ottenere il file dalle risorse. Per fare un esempio, ho aggiunto uno script con il nome "OpenSafari.sh"

NSTask *temp = [[NSTask alloc] init];
[temp setLaunchPath:@"/bin/sh"];

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"OpenSafari" ofType:@"sh"];
NSArray *tempargs = [NSArray arrayWithObjects:filePath,nil];
[temp setArguments:tempargs];

NSPipe *temppipe = [NSPipe pipe];
[temp setStandardOutput:temppipe];
NSPipe *errorPipe = [NSPipe pipe];
[temp setStandardError:errorPipe];

[temp launch];

NSData *data = [[temppipe fileHandleForReading] readDataToEndOfFile];
NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

NSData *dataErr = [[errorPipe fileHandleForReading] readDataToEndOfFile];
NSString *resultErr = [[NSString alloc] initWithData:dataErr encoding:NSUTF8StringEncoding];

Spero che questo ti aiuti!