귀하의 질문은 도우미의 충돌에 대한 적절한 처리를 요구하는 것 같지 않습니다. 대신, 도우미에게 자신을 종료 시키라고 알리는 방법이 필요합니다. 이것이 올바른 경우 해결책을 찾으십시오. 적어도 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 연결 만 취소됩니다. 그러나 연결을 무효화하지 않고 일시 중지하지 않으면 어떤 종류의 메시지도 도우미에게 보내지 않습니다. 도우미 자체는 이유에 대해 알지 못해도 연결이 일시 중단되거나 무효화되는 것을 보게됩니다.
희망 사항을 통해 문제 해결 방법을 알 수 있습니다.
헬퍼 앱이 일시 중지/무효화되면 메시지를 받습니까? 그것의'invalidationHandler'는 적어도 비동기 적으로 호출해야합니다. – ctietze