Skip to content

Instantly share code, notes, and snippets.

Last active August 6, 2022 05:33
What would you like to do?
Components of XPC service.
import Foundation
let delegate = MyServiceDelegate()
let listener = NSXPCListener.service()
listener.delegate = delegate
import Foundation
class MyService: NSObject, MyServiceProtocol {
func upperCaseString(_ string: String, withReply reply: @escaping (String) -> Void) {
let response = string.uppercased()
import Foundation
class MyServiceDelegate: NSObject, NSXPCListenerDelegate {
func listener(_ listener: NSXPCListener, shouldAcceptNewConnection newConnection: NSXPCConnection) -> Bool {
let exportedObject = MyService()
newConnection.exportedInterface = NSXPCInterface(with: MyServiceProtocol.self)
newConnection.exportedObject = exportedObject
return true
import Foundation
@objc public protocol MyServiceProtocol {
func upperCaseString(_ string: String, withReply reply: @escaping (String) -> Void)
import MyService
let connection = NSXPCConnection(serviceName: "com.matthewminer.MyService")
connection.remoteObjectInterface = NSXPCInterface(with: MyServiceProtocol.self)
let service = connection.remoteObjectProxyWithErrorHandler { error in
print("Received error:", error)
} as? MyServiceProtocol
service?.upperCaseString("Hello XPC") { response in
print("Response from XPC service:", response)
Copy link

mminer commented Jul 31, 2019

@tt-embodied: Glad it's helpful!

Copy link

antelle commented Feb 20, 2020

If anyone like me tried it in a command-line tool and got “The connection to service named ... was invalidated.”, it’s because it doesn’t seem to work in command-line tools at all, the same code in an app will work.

Copy link

rsalesas commented Mar 10, 2020

I've tried this in a SwiftUI app and I'm getting the error "The connection to service named ... was invalidated". Any ideas?

UPDATE: My problem was that the XPS Service was not copied to Contents/XPCServices. If you don't properly place the XPC Service within the app bundle, this doesn't work (also why you cannot call the XPC Service from a command line that is expecting it in it's bundle - haven't figure out how to do this yet)

Copy link

mminer commented Mar 11, 2020

@rsalesas Good to know, that’s an easy mistake to make. Thanks for the extra info.

Copy link

ben-z commented Apr 14, 2020

I also just ran into this error:

Domain=NSCocoaErrorDomain Code=4099 "The connection to service on pid 0 named <service-name> was invalidated."

It turns out I just misspelled the service name when initializing the NSXPCConnection. Hope this saves someone a few hours of debugging lol.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment