2017-03-16 1 views
0

저는 Swift-Keylogger을 명령 줄 프로그램으로 사용했습니다.코코아에서 백그라운드로 코드를 계속 실행하십시오.

저는 최근에 Mac 개발을 시작 했으므로 UI를 만들려고했습니다.

명령 줄 프로그램이므로 작성자는 키로거를 계속 실행하기 위해 RunLoop.current.run()을 사용했습니다.

이제는 UI를 차단하기 때문에 RunLoop.current.run()을 사용할 수 없다는 문제가 있습니다.

나는 GCD을 조사했으며 코드 조각 만 실행합니다. 그러나 나는 그것을 계속해서 실행하고 싶다. 계속적으로 실행하는 것에 대한 몇 가지 추가 기사를 보았지만 Timer을 사용하여 지정된 시간마다 코드를 계속 실행하는 것으로 나타났습니다.

따라서 UI를 차단하지 않고 동일한 동작을 수행하는 RunLoop.current.run()을 어떻게 바꿀 수 있습니까?

답변

1

는 UPDATE : 18/01/2018

어떤 남자가 당신 같은 요구 사항을 나에게 접근. 토론과 시행 착오를 거친 후 그는 해결책을 찾았습니다.

1) 키로거 코드에서 RunLoop.main.run() 행을 주석 처리하면됩니다.

2) 이제 앱 샌드 박스를 사용 중지하십시오. 앱 샌드 박스를 사용하려면이 자격을 com.apple.security.device.usb = YES에 추가하십시오. 원래


: 나는 내 키로거를 쓰고있을 때 18/03/2017

나는 또한 그것을 위해 처음에 많이 검색. 하루가 지나면 나는 포기했다.

내 UI에서 키로거를 신속하게 실행하기 위해 Process을 사용합니다.

내가 할 방법은 다음과 같습니다

파일/폴더의 경로와 같은 키로거 소스에 필요한 수정 작업을 수행합니다.

키로거 소스를 컴파일하십시오.

키로거를 Xcode에서 프로젝트로 드래그하고 copy if needed을 확인하십시오.

실행 파일은 .app 내의 리소스 폴더에 있습니다.

Process 클래스와 launch()을 사용하여 실행 파일을 실행하여 실행 파일/키로거를 시작하십시오.

생성 된 프로세스를 종료해야합니다. 그렇지 않으면 키로거가 백그라운드에서 실행됩니다. 키로거를 중지하려면 Process 변수에 terminate()을 사용하십시오.

코드 :

let pathToKeylogger = Bundle.main.resourcePath! + "/Keylogger" // path to keylogger executable 
keylogger = Process() // You need to declare this variable at class-level because you need to have the variable later to terminate it. 
keylogger.launchPath = pathToKeylogger 
keylogger.launch() 

이 종료 :

keylogger.terminate() 

편집 : 귀하의 응용 프로그램을 종료합니다 18/03/2017

시도 일반적으로 Xcode에서 중지 버튼을 누르지 않고 메뉴 막대에서 종료하거나 도킹에서 클릭합니다. 나는 당신이 Xcode에서 멈추고 있다고 생각한다.

+0

다시 만납니다! 코드를 사용해 보겠습니다. – ssh

+0

작은 문제가 있습니다. 나는'keylogger.terminate()'를'applicationWillTerminate (_ aNotification : Notification)'에 넣었지만 절대로 호출하지 않았습니다. 내가 인쇄 문을 배치하여 검사하고 터미널에 체크인했을 때 키로거가 백그라운드에 있습니다. – ssh

+0

그것은 작동합니다! 다시 한번 감사드립니다. – ssh

관련 문제