If your goal is just to run a command and wait for it to exit (for example to grab information from a shell command in a CLI application), you can use the following (ARC enabled):
// Start the task with path and arguments.
NSTask* task = [NSTask new];
[task setExecutableURL:[NSURL fileURLWithPath:@"/path/to/task"]];
[task setArguments:@[@"your", @"arguments", @"here"]];
// Intercept the standard output of the process.
NSPipe* output = [NSPipe pipe];
[task setStandardOutput:output];
// Launch and wait until finished.
[task launch];
[task waitUntilExit];
// Read all data from standard output as NSData.
NSData* resultData = [[output fileHandleForReading] readDataToEndOfFile];
// Convert NSData to string (could be combined with above when ARC used).
NSString* result = [[NSString alloc] initWithData:resultData encoding:NSUTF8StringEncoding];
This doesn't seem unreasonable in length (and could probably be shortened, though I left this in for readability), and if you're using this often you could abstract it into a function.
I also noticed that, as you don't redirect the output in your code, it would also print the output to the console, which might be unintended.