macOS XPC 服务未启动

Mik*_*dar 1 macos cocoa xpc swift

我有一个桌面 Swift 应用程序,其中一个 XPC 服务已停止工作。从那以后我曾设法让它工作过一次,但它又又坏了。我尝试将代码简化为最简单的情况,但感觉有一个我不明白的因素。

参赛代码:

connection = NSXPCConnection(serviceName: XPCBundleID)
connection.remoteObjectInterface = NSXPCInterface(withProtocol:UploadServiceProtocol.self)
connection.resume()
Run Code Online (Sandbox Code Playgroud)

测试功能:

func initService(){
    let uploaderRemoteObject = connection.remoteObjectProxyWithErrorHandler() {
    (error) in NSLog("UploadServiceClient - remote proxy error: %@", error)
    } as! UploadServiceProtocol
    uploaderRemoteObject.initService?(nil) { (data) in
        NSLog("UploadServiceClient - initService - Got \(data?.length) bytes.")
    }

}
Run Code Online (Sandbox Code Playgroud)

如果我打印出来,uploaderRemoteObject我得到<_NSXPCDistantObjectWithError: 0x618000083980>Which may be normal,但实际的 XPC 进程永远不会启动(当然也不会调用远程方法)。

服务协议是:

@objc(UploadServiceProtocol) protocol UploadServiceProtocol {
optional func initService(action:String?, withReply: (NSData?)->Void )
}
Run Code Online (Sandbox Code Playgroud)

XPC main.swift 的内容是:

class ServiceDelegate: NSObject, NSXPCListenerDelegate {
    func listener(listener: NSXPCListener, shouldAcceptNewConnection newConnection: NSXPCConnection) -> Bool {
        newConnection.exportedInterface = NSXPCInterface(withProtocol: UploadServiceProtocol.self)
        newConnection.exportedObject = ImageUploader()
        newConnection.resume()
        return true
    }
}
let delegate = ServiceDelegate()
let listener = NSXPCListener.serviceListener()
listener.delegate = delegate;
listener.resume()
Run Code Online (Sandbox Code Playgroud)

请注意,我确信这XPCBundleID是正确的,并且我正在签署 Mac App Store 的所有内容。有任何想法吗?

Mik*_*dar 5

解决了:显然XPC远程协议中不能有可选功能。删除optional固定UploadServiceProtocol它。