2013-06-27 3 views
7

확인. 이것에 대한 스택 오버 플로우에 대한 몇 가지 질문이 있습니다. This question was the only question은 광산과 가장 비슷하지만 알림을 사용합니다.NSTask 시작 경로에 액세스 할 수 없습니다. Xcode에서 작동합니다. Xcode로 표시된 오류

코드는 매우 간단합니다. 새로운 빈 Mac OSX 프로젝트를 만들고 applicationDidFinishLaunching: 메소드에 다음 코드를 붙여 넣으십시오. 실행 파일 (이 경우에는 GIT)의 경로를 가져 오기로되어 있습니다.

이 코드는 두 개의 판독 파이프를 설정하고 하나의 명령 : which git을 실행합니다.

내가 엑스 코드에서 이것을 실행하면 내가이 corretly 결과를 얻을 :

Error value: "" 
Output Value: /usr/bin/git 

난 내 빌드/제품/디버그 폴더로 이동하고 실행 파일을 더블 클릭하면, 나는이 메시지가 콘솔 응용 프로그램에서 인쇄되는 :

enter image description here

질문 : 그래서, 여기에 정말 문제가 무엇인가? 제발 그냥 대안 솔루션을 만들지 말아라 ... 나는 또한 문제가 .. 감사하고 싶다.

답변

13

OK는 스택 오버플로가 아니라 다른 질문에 퍼져있는 답변입니다. 여기>Commands with NSTask와 - -

문제는 여기에 요청했다 NSTask launch path not accessible뿐만 아니라

그러나이 날짜를 기준으로 답

문제가 무엇인지를 명확이 arent>. NSTask not picking up $PATH from the user's environment (질문의 제목이 오도 된 것임)에서 질문을 읽은 다음에이 두 가지 대답을 사용하여 NSTask not picking up $PATH from the user's environmentFind out location of an executable file in Cocoa을 해결했습니다. 그것은 다음과 같습니다

는 NS 작업 또는 사용자의 셸을 설정하는 방법에 대한 것입니다 (예를 들어, ~/.bashrc에) 올바른 환경 ($ 경로) NSTask로 볼 수 있도록.

솔루션 :

[task setLaunchPath:@"/bin/bash"]; 
NSArray *args = [NSArray arrayWithObjects:@"-l", 
       @"-c", 
       @"which git", //Assuming git is the launch path you want to run 
       nil]; 
[task setArguments: args]; 

그러나이 사용자의 쉘이 항상 배쉬이며 다른 실패합니다 가정합니다. 쉘을 결정하여이를 해결하십시오.

NSDictionary *environmentDict = [[NSProcessInfo processInfo] environment]; 
NSString *shellString = [environmentDict objectForKey:@"SHELL"];