I don't know why this method returns a blank string:
- (NSString *)installedGitLocation {
NSString *launchPath = @"/usr/bin/which";
// Set up the task
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:launchPath];
NSArray *args = [NSArray arrayWithObject:@"git"];
[task setArguments:args];
// Set the output pipe.
NSPipe *outPipe = [[NSPipe alloc] init];
[task setStandardOutput:outPipe];
[task launch];
NSData *data = [[outPipe fileHandleForReading] readDataToEndOfFile];
NSString *path = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
return path;
}
If instead of passing @"git"
as the argument, I pass @"which"
I get /usr/bin/which
returned as expected. So at least the principle works.
from the terminal
$ which which
$ /usr/bin/which
$
$ which git
$ /usr/local/git/bin/git
So it works there.
The only thing I can think of is that which
isn't searching through all the paths in my environment.
This is driving me crazy! Does anyone have any ideas?
EDIT: It looks like this is about setting up either NSTask or the user's shell (e.g., ~/.bashrc) so that the correct environment ($PATH) is seen by NSTask.
NSTask
sees the$PATH
when you run your program from the CLI. Unfortunately, you must compile and run on the command line as well, because testing the program in Xcode brings us to this situation. – Compony