NSTask

2014-09-06 4 views
1

Wi-Fi를 사용하지 않도록 설정하려는 osx 네트워크 구성을 변경하려면 socks proxy : ip, port, login : Wi-Fi를 전달한 다음 다시 활성화하십시오. 는 임NSTask

NSTask *task = [NSTask new]; 

[task setLaunchPath:@"/bin/sh"]; 

[task setArguments:@[@"-c", @"networksetup -setwebproxystate Wi-Fi off"]]; 

[task launch]; 

이것을 수행하려고하지만 메신저는 여러 인수를 전달하는 방법을 정확하게 알고 해달라고 - 양말 프록시 를 설정하고 난 비활성화 및 와이파이, dosent 작업 위의 코드를 사용하는 방법을 잘 모릅니다 마지막 문제는 이를 변경하기 위해 관리자 권한에 대해 묻지 않도록 시스템 암호를 설정하는 방법은 무엇입니까? NSTask에 여러 인수를 전달

https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/networksetup.8.html

답변

0

업 스케일링, 예를 들어, 실패, 시세 및 백 슬래시의 특수 문자를 이스케이프와 NSTask에 아래의 것입니다 통과 할 때 문제가된다.

networksetup -getsecurewebproxy Wi-Fi | awk -F ': ' '{ print $2 }' && networksetup -getwebproxy Wi-Fi | awk -F ': ' '{ print $2 } 

그러나 당신은 쉘 스크립트에 코드를 추가하고, 당신은 문제가되지 않습니다 NSTask로 쉘 스크립트를 실행합니다.

.h file 

@property (nonatomic, strong) __block NSTask *buildTask; 
@property (nonatomic, strong) NSPipe *outputPipe; 


.m file 

NSMutableArray *arguments = [[NSMutableArray alloc] init]; 
[arguments addObject:@"Wi-FI"]; 
[arguments addObject:@"off"]; 


//location of script to run 
NSString * locationOfScript = [[NSBundle mainBundle] pathForResource:@"wifi" ofType:@"sh"]; 

    self.buildTask   = [[NSTask alloc] init]; 
    self.buildTask.launchPath = locationOfScript;  //location of wifi script to run 
    self.buildTask.arguments = arguments; 

    // Output Handling 
    self.outputPipe    = [[NSPipe alloc] init]; 
    self.buildTask.standardOutput = self.outputPipe; 


    [[self.outputPipe fileHandleForReading] waitForDataInBackgroundAndNotify]; 
    [self.buildTask launch]; 
    [self.buildTask waitUntilExit]; 

    if ([self ->_buildTask terminationStatus] == 0) { 
    //Confirms NSTask completes correctly. 
    } 

xcode 프로젝트에서 새 파일을 만들면 다음과 같은 프로젝트가 추가됩니다.

#!/bin/sh 
networksetup -setwebproxystate Wi-Fi off 

당신이 그렇지 않으면 오류 (파일을 찾을 수 없습니다) 받게됩니다 +는 X wifi.sh chmod를 위해 터미널을 사용해야 할 것입니다있는 NSMutableArray의 인수를 위해 쉘 스크립트로 전달됩니다

및 위의 예에서 "$ {1}"이 @ "Wi-Fi"인 경우 액세스 할 수 있습니다.

다른 질문에 대해서는 관리자 암호 요구 사항을 무시할 수 없습니다. sudoers 파일에 명령을 추가 할 수 있지만 암호는 묻지 않습니다. 그러나이 방법은 프로덕션 응용 프로그램에서는 실용적이지 않습니다.

양말 질문에 가장 쉬운 방법은 프로젝트 이름 socks.sh에 새 파일을 작성하는 것입니다. [-setsocksfirewallproxy 네트워크 서비스 도메인 포트 번호 인증 된 사용자 이름 암호] [-setsocksfirewallproxystate networkservice on | 오프] networksetup 및 사용 가능한 옵션에 대한 자세한 정보를 들어

가 networksetup 사람 페이지 (아래 링크) [링크]

+0

https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/networksetup.8.html이 감사에서 찾을 수 있습니다,이를 확인합니다. 하지만 양말 프록시를 설정하는 방법? 나는 도서관에서 도움이되는 것을 찾지 못했습니다. – Daniel

+0

새 스크립트 socks.sh를 만들고 [- setsocksfirewallproxy networkservice domain portnumber authenticated username password] 또는 [-setsocksfirewallproxystate networkservice on | off] 더 많은 정보를 찾을 수 있습니다 [link] https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/networksetup.8.html [/ link] – LawrencePires

+0

여러 인수를 전달할 때 까다로운 점은 무엇입니까? 'NSTask'를 통해? 공백으로 분리 된 인수에 인수 배열을 설정하기 만하면됩니다. '/ bin/sh' 또는'-c' 옵션을 사용하지 마십시오. 셸이 관련 될 이유가 거의 없습니다. –