2014-10-22 2 views
3

XPC 도우미를 종료하거나 재설정하는 방법을 아는 사람이 있습니까? Apple 설명서에 따르면, 충돌이 발생하면 launchd가 XPC 도우미를 돌 봅니다. 그러나 실행중인 도우미를 방해하거나 취소해야하는 경우 수행해야 할 사항이 없습니다.번들 XPC 도우미를 종료/재설정하는 방법은 무엇입니까?

예를 들어 32 비트 QuickTime 동영상을 렌더링하는 XPC 클라이언트가있는 경우 64 비트 "상위"응용 프로그램에서 XPC 도우미에게 작업 취소 및 정리를 알리려면 어떻게해야합니까?

XPC 도우미 응용 프로그램이 "종료"한 부모를 처리하는 올바른 방법은 무엇입니까?

현재 상위 응용 프로그램의 측면에 종료, 나는 (NSXPCConnection) 사용하고 있습니다 :

  • (무효)
  • (무효) 정지는

이 무효화 봉쇄 것처럼 보이는 연결. 그러나 도우미 응용 프로그램이 주목하고 있다는 어떠한 증거도보고 있지 않습니다.

미리 감사드립니다.

+0

헬퍼 앱이 일시 중지/무효화되면 메시지를 받습니까? 그것의'invalidationHandler'는 적어도 비동기 적으로 호출해야합니다. – ctietze

답변

0

귀하의 질문은 도우미의 충돌에 대한 적절한 처리를 요구하는 것 같지 않습니다. 대신, 도우미에게 자신을 종료 시키라고 알리는 방법이 필요합니다. 이것이 올바른 경우 해결책을 찾으십시오. 적어도 3 년 후에도 여전히 묻고 싶다면 ...

사용 언어를 지정하지 않았으므로 예제가 Swift로 작성되었습니다.

NSXPCConnection의 일부로 앱과 도우미 간의 정보 공유에 사용할 프로토콜을 정의해야했습니다.

terminateHelper(withReply reply: (String) -> Void) { 
    reply("Terminating BeKo Helper.") 
    exit(0) 
} 

이 기능은 다시 공급 폐쇄를 사용하여 주요 애플 리케이션에 메시지 문자열을보고하고 exit 시스템 호출을 사용 자체를 종료 :이 프로토콜에서는이 같은 서명과 내용으로 간단한 기능을 추가 할 수 있습니다.

메인 앱에서

,이 같은이 함수를 호출합니다 :

if let helper = helperConnection.remoteObjectProxyWithErrorHandler({ (error) in 
    let e = error as NSError 
    print("Helper communication failed. Remote proxy error \(e.code): \(e.localizedDescription) \(e.localizedRecoverySuggestion ?? "---")") 
}) as? HelperProtocol { 
    helper.terminateHelper(withReply: { (replyString) in 
     print(replyString) 
    }) 
} 


제발하지 즉시 추락하지 않았지만 정상적으로 대신에 종료되었다는 사실에도 불구하고 종료 도우미 응용 프로그램을 다시 시작 것 launchd . 그러나 이는 도우미가 이전의 모든 도우미 처리가 중지 된 초기화 상태로 돌아가도록 보장합니다.

질문에 넣는 방법을 일시 중지하거나 무효화하면 XPC 연결 만 취소됩니다. 그러나 연결을 무효화하지 않고 일시 중지하지 않으면 어떤 종류의 메시지도 도우미에게 보내지 않습니다. 도우미 자체는 이유에 대해 알지 못해도 연결이 일시 중단되거나 무효화되는 것을 보게됩니다.

희망 사항을 통해 문제 해결 방법을 알 수 있습니다.

관련 문제