Я не знаю, почему этот метод возвращает пустую строку:
- (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;
}
Если вместо передачи @"git"
в качестве аргумента, я передам @"which"
, я получу /usr/bin/which
, как и ожидалось. Так что, по крайней мере, принцип работает.
с терминала
$ which which
$ /usr/bin/which
$
$ which git
$ /usr/local/git/bin/git
Так оно и есть.
Единственное, о чем я могу думать, это то, что which
не ищет все пути в моей среде.
Это сводит меня с ума! У кого-нибудь есть идеи?
РЕДАКТИРОВАТЬ: Похоже, что это о настройке NSTask или оболочки пользователя (например, ~ / .bashrc), чтобы NSTask видел правильную среду ($ PATH).