I have a use case in which I have a launch daemon (as the XPC service) than needs to communicate with two XPC clients. Each of these clients has different functional cases for communication that do not overlap. Therefore, the NSXPCInterface for client A would be configured with a different protocol than the NSXPCInterface that would be configured for client B. Client A and Client B do not need to talk to each other; they each just need to communicate with the daemon.
I am confused how to appropriately set up the NSXPCListener and NSXPCListenerDelegate on the daemon to support NSXPCConnections with proxy objects that adhere to varying interfaces to support these two clients.
- Is there a way for a single
NSXPCListener(and associated delegate) to listen for connections requiring theexportedInterfaceto be different? - Is there a way to send data through the
NSXPCConnectionthat will allow theNSXPCListenerDelegateto conditionally determine which exported interface and object to configure?
One idea I had was to have the daemon contain two NSXPCListeners. Each listener would be responsible for connections coming from the respective clients.
- Will this option work? If so, it is the advisable approach?
- Is there a way for a single
NSXPCListener(and associated delegate) to listen for connections requiring theexportedInterfaceto be different?
No.
Is there a way to send data through the
NSXPCConnectionthat will allow theNSXPCListenerDelegateto conditionally determine which exported interface and object to configure?
Probably, but it’s probably not worth it.
At a minimum, you could use multiple anonymous listeners and send the appropriate endpoint over the connection for the client to set up a new connection of the right type.
Having said that, given that you’re creating a launchd daemon, which can advertise multiple named listeners, that’s by far the easiest approach, and it’s what I’d do in this case.
Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"