我有一个桌面Swift应用程序,其中一个XPC服务已停止工作。我已经成功地让它工作了一次,但它又恢复了。我已经尝试将代码缩减到最简单的情况,但感觉有一个我不理解的因素。
初始代码:
connection = NSXPCConnection(serviceName: XPCBundleID)
connection.remoteObjectInterface = NSXPCInterface(withProtocol:UploadServiceProtocol.self)
connection.resume()
测试功能:
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.")
}
}
如果我打印uploaderRemoteObject
我得到<_NSXPCDistantObjectWithError: 0x618000083980>
这可能是正常的,但实际的XPC过程永远不会被启动(当然也不会调用远程方法)。
服务协议是:
@objc(UploadServiceProtocol) protocol UploadServiceProtocol {
optional func initService(action:String?, withReply: (NSData?)->Void )
}
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()
请注意,我确信XPCBundleID
是正确的,我正在为Mac App Store签名。有什么想法吗?
答案 0 :(得分:3)
解决了它:显然你不能在XPC远程协议中拥有可选功能。从optional
中移除UploadServiceProtocol
修复了它。