У меня есть настольное приложение Swift с одной службой XPC, которая перестала работать. Мне удалось заставить его работать с тех пор, но он снова разбился. Я попытался уменьшить код до простейшего случая, но похоже, что есть фактор, который я не понимаю.macOS XPC Сервис не начат
Init Код:
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. Есть идеи?
Привет, я имею дело с аналогичной ситуацией, когда и мой клиент, и сервер являются быстрыми (сервер запускается как агент при запуске, а клиент - это просто исполняемый файл командной строки), и соединение не может быть установлено - я видел это, поскольку i реализовал 'invalidationHandler' в' NSXPCConnection' на стороне клиента. Возможно, вы можете предложить мне, как отладить эту проблему? Я не подписал ни одной из сторон, как вы думаете, это может быть проблема? есть ли какие-нибудь идентификаторы ошибок и понять причину проблемы? благодаря – Zohar81