Use NSTask
instead (reference).
Untested:
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *sourceFile = [docDir stringByAppendingPathComponent:@"main.c"];
NSString *outFile = [docDir stringByAppendingPathComponent:@"main"];
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:@"/Developer/usr/bin/gcc"];
[task setArguments:[NSArray arrayWithObjects: @"-o", outFile, sourceFile, nil]];
NSPipe *pipe = [NSPipe pipe];
[task setStandardOutput:pipe];
NSFileHandle *file = [pipe fileHandleForReading];
[task launch];
NSData *data = [file readDataToEndOfFile];
NSString *output = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
NSLog (@"gcc output:\n%@", output);
[output release];
[task release];