Build Status License Platforms Documentation

ProcessService

在 XPC 服务中托管可执行文件的系统。

集成

Swift Package Manager

dependencies: [
    .package(url: "https://github.com/ChimeHQ/ProcessService", branch: "main")
]

XPC 服务

要使其发挥作用,您还需要一个实际托管进程服务器的 XPC 服务。 使用 SPM 分发 XPC 服务需要一种变通方法:将预构建的二进制文件捆绑到 xcframework 中。 这带来了两个缺点。 它要求您链接并嵌入框架,这会产生大小和潜在的启动时间影响。 其次,它需要一个引导步骤,以确保服务可以在运行时在运行进程中的任何位置找到。

这都是可选的,并且为了方便起见而提供。 如果您愿意,您可以构建自己的服务。

import ProcessServiceContainer

ServiceContainer.bootstrap()

let userEnv = try await HostedProcess.userEnvironment(with: ServiceContainer.name)

用法

与服务交互

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()

以下是如何创建 XPC 服务。 确保将服务包 ID 与您使用的名称匹配。

// main.swift

import Foundation

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

        return true
    }
}

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

listener.delegate = delegate
listener.resume()

建议或反馈

我们很乐意听取您的意见! 通过 issue 或 pull request 联系我们。

请注意,本项目根据贡献者行为准则发布。 参与本项目即表示您同意遵守其条款。