Host an executable within an XPC service

What's New


  • move to using a dispatch queue for process synchronization

Build Status License Platforms Documentation


System to host an executable within an XPC service.


Swift Package Manager

dependencies: [
    .package(url: "", branch: "main")

XPC Service

To be useful, you also need an actual XPC service that hosts the process server. Distributing an XPC service using SPM requires a workaround: bundling a pre-built binary in an xcframework. This comes with two disadvantages. It requires that you both link and embed the framework, which incurs size and potential launch-time impact. And, second, it requires a bootstrapping step to ensure the service can be found at runtime anywhere within the running process.

This is all optional and provided for convenience. You can just build your own service if you want.

import ProcessServiceContainer


let userEnv = try await HostedProcess.userEnvironment(with:


To interact with the service:

import ProcessServiceClient

let userEnv = try await HostedProcess.userEnvironment(with: "com.myxpcservice")

let process = HostedProcess(named: "com.myxpcservice", parameters: params)
let data = try await process.runAndReadStdout()

Here's now to make an XPC service. Make sure to match up the service bundle id with the name you use.

// main.swift

import Foundation

final class ServiceDelegate: NSObject, NSXPCListenerDelegate {
    func listener(_ listener: NSXPCListener, shouldAcceptNewConnection newConnection: NSXPCConnection) -> Bool {
        do {
            try newConnection.configureProcessServiceServer()
        } catch {
            return false

        return true

let delegate = ServiceDelegate()
let listener = NSXPCListener.service()

listener.delegate = delegate

Suggestions or Feedback

We'd love to hear from you! Get in touch via twitter, an issue, or a pull request.

Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.


  • Swift Tools 5.5.0
View More Packages from this Author


Last updated: Mon Mar 18 2024 09:55:37 GMT-0900 (Hawaii-Aleutian Daylight Time)