У Apple есть хороший пример кода, который показывает, как сделать большую часть этого ...
http://developer.apple.com/mac/library/samplecode/Moriarity/
TaskWrapper.m содержит все умные вещи, но, так как вы хотите иметь возможность отправлять данные в задачу, вам нужно немного ее расширить, например:
[task setStandardInput: [NSPipe pipe]];
Чтобы отправить входные данные для задачи, вы можете сделать:
[[[task standardInput] fileHandleForWriting] writeData: ...];
Чтобы преобразовать значение NSTextField в данные, вы можете сделать что-то вроде этого:
NSData *data = [[inputTextField stringValue] dataUsingEncoding:NSUTF8StringEncoding];
... и для установки текущего рабочего каталога для вашей подзадачи используйте [NSTask setCurrentDirectoryPath:]
, например
[task setCurrentDirectoryPath:@"/blah/blah"];
[task setLaunchPath:@"/blah/blah/server.sh"];
.... (other setup code)
[task launch];