xcode9 - NSXPCConnection 调试中断/失效

标签 xcode9 nsxpcconnection

我使用的是 XCode 9,OSX 而不是 iOS,Objective-C。

我有一个 XPC 服务可以与其他应用程序通信。
XPC 服务对我来说是全新的。我已经阅读了我找到的文档和文章 - 我仍然需要一些帮助。

// NSXPC Connection stored as ivar
self.bridgeagent = [[NSXPCConnection alloc] initWithServiceName:@"com.myid.myapp.bridgeagent"];
self.bridgeagent.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(bridgeagentProtocol)];
self.bridgeagent.exportedInterface = [NSXPCInterface interfaceWithProtocol:@protocol(bridgeagentProxyProtocol)];
self.bridgeagent.exportedObject = self;

[self.bridgeagent setInvalidationHandler:^{
    NSLog(@"Bridgeagent invalidation handler!");
}];

[self.bridgeagent setInterruptionHandler:^{
    NSLog(@"Bridgeagent interruption handler!");
}];

[self.bridgeagent resume];

该服务是这样调用的:
// openFile method is listed in corresponding protocol
[[self.bridgeagent remoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) {
NSLog(@"bridgeagent.openFile errorHandler: %@",error);
}] openFile:parameters withReply:^(NSDictionary *returnParameters) { // do something with result }];

调用有效,服务完成其工作。但是 - 现在该服务有效,我想深入研究使其更稳定(即使我现在没有遇到任何问题)。

谁能给我解释一下
  • 中断和失效的区别(一时搞定)
  • 如果有处理这两种情况的最佳实践
  • 如何强制两种情况(用于调试)

  • 谢谢你的帮助

    最佳答案

    问题 1 的答案:

    [self.xpcConnection setInterruptionHandler:^{
        // Connection interrupted. Backend (service) may have crashed.
        // connection used to work but suddenly terminated
    }];
    
    [self.xpcConnection setInvalidationHandler:^{
        // No one is listening. Is the backend running?
        // connection cannot be established
    }];
    

    问题 3 的答案:

    中断:使后端在事务中间退出(就在发送回复之前)

    失效:根本不启动后端(服务)

    问题 2 的答案:

    我听说如果“中断”,您应该尝试重新建立连接。当您的服务是一个启动代理时,这会很有用,如果它崩溃了,它会被 launchd 重新启动。

    实际上,在我的程序中,我不会对这些情况采取行动,而只是向命令行发出警告消息。我的前端是一个 cli 程序。
    或者,您可以将此警告记录在日志文件中,例如使用 syslog。请参阅“人 3 系统日志”。在我的应用程序中,我使用自己的日志文件和可配置的详细程度和系统日志。

    亲切的问候,

    罗伯特

    关于xcode9 - NSXPCConnection 调试中断/失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47418944/

    相关文章:

    xcode - 如何在 Xcode 6/7/8 中的“调试”和“发布”版本之间切换?

    objective-c - 使用 NSXPCConnection 时如何同步等待回复 block

    cocoa - 自终止 MacOS XPC 服务的正确方法是什么?

    ios - 表达式太复杂而无法在 Xcode 9 中解决问题?

    ionic2 - iOS 11,Xcode 9 错误 : NSURLConnection finished with error - code -1100

    ios - 在 reloadData() 之后,collectionView 单元格会随机突出显示

    html - 如何在 webview 中设置 html 字符串 (swift 4.0)

    swift - 如何在 Swift 中将 XPC 自定义类列入白名单?

    objective-c - SMJobBless 和 NSXPCConnection

    macos - XPC 在工作区中的两个 cocoa 应用程序之间,NSXPCConnection 立即失效