SandboxedFetch
샘플 코드와 함께 Daemons and Service Guide - Creating XPC Services 자습서를 성공적으로 따라 갔으며 새로운 NSXPCConnection
클래스를 사용하는 작동중인 클라이언트/서비스 설정이 있습니다.MacOS XPC 서비스를 자체 종료하는 올바른 방법은 무엇입니까?
서비스 응용 프로그램이 끝나면 서비스 응용 프로그램을 올바르게 종료하는 방법이 아직 완전히 명확하지 않은 것입니다. 나는 많은 경우에 서비스가 살아남을 것으로 예상되지만 유스 케이스에서 유의할 점은 서비스가 메인 애플리케이션에서 달리 수행하지 않는 일부 처리에만 사용된다는 점입니다. 처리가 끝나면 서비스 응용 프로그램을 계속 사용할 이유가 없습니다. 클라이언트가 나중에 다른 서비스를 필요로하면, 새로운 서비스를 다시 만들 수 있습니다.
서비스가이 NSApplication
, 내가하려고했던, 비 nibbed, 경량 applicationWillTerminate
내부에서 invalidate
를 호출하여 스스로 종료 할 것입니다,하지만이 EXC_BAD_ACCESS 예외 거의 모든 시간을 트리거입니다. 서비스 [NSXPCListener serviceListener]
에서 invalidate
을 호출하면 안정적인 충돌이 약간 발생하지만 여전히 충돌합니다.
NSXPCConnection
에서 클라이언트 응용 프로그램 내에서 invalidate
을 호출하면 거의 항상 EXC_BAD_ACCESS 예외가 생성됩니다.
XPC 서비스를 완전히 종료 한 다음 서비스 응용 프로그램을 종료하는 것이 올바른 순서인지 궁금합니다. 이상적으로는 서비스가 클라이언트에 대한 마지막 XPC 호출을 한 후에 자체 종료됩니다.
첨부 된 작은 스택 샷은 예외 스택 트레이스의 모습입니다. (예, 서비스에로드되는 웹보기입니다. 웹보기가로드가 완료되면, 나는-종료 자체에 대한 서비스를 원하는)
XPC 서비스를 시작 에이전트로 모델링 했습니까? 정규 XPC 서비스는 필요할 때 자동으로'launchd '를 사용하여 시작하고 중지해야합니다. – ctietze
내가 사용하고 있던 XPC 서비스는 NSXPCConnection을 사용하여 시작된 인앱 XPC 서비스였습니다. 나는 궁극적으로 그 서비스조차도 명시 적으로 종결되는 것을 의미하지 않는다는 것을 깨달았다. 시스템은 유휴 상태 일 때 필요에 따라 종료합니다. – kennyc
그래서 일생 일대의 관리에 대해 걱정하기를 멈췄으니 이제는 효과가 있습니까? – ctietze