O'Reilly logo

Beginning Mac OS® X Programming by Drew McCormack, Michael Trent

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

13.2. Running Scripts with Cocoa

Cocoa provides a number of classes that can be used to help run subprocesses and communicate with them. The most important of these classes is NSTask, which allows you to run scripts and other executables, and provides fine control over program arguments, environment variables, and access to standard input and output. NSTask runs subprocesses asynchronously, but provides a method for waiting until the subprocess completes, which is equivalent to running the subprocess synchronously. NSTask also provides methods for suspending, resuming, and terminating a subprocess. In short, NSTask gives you much more control over external scripts than the C system function.

13.2.1. Introducing NSTask

In its simplest form, NSTask can be almost as easy to use as system. Take this example of using a script to list the contents of two directories:

#import <Foundation/Foundation.h>
int main() {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    NSArray *args = [NSArray arrayWithObjects:@"/bin", @"/sbin", nil];
    NSTask *task = [NSTask launchedTaskWithLaunchPath:@"./list.sh" arguments:args];
    [task waitUntilExit];
    int exitStatus = [task terminationStatus];

    [pool release];
    return exitStatus;
}

This program creates an NSTask with the convenience constructor launchedTaskWithLaunchPath:arguments:. The launch path of an NSTask is the path to the script or other executable that will be run. The arguments are passed to the script when it is run. They are equivalent ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required