首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不推荐NSMachBootstrapServer,如何使用NSXPCConnection注册Mach服务?

不推荐NSMachBootstrapServer,如何使用NSXPCConnection注册Mach服务?
EN

Stack Overflow用户
提问于 2019-01-14 19:56:03
回答 1查看 764关注 0票数 4

我需要编写我的应用程序和系统插件都可以使用的Mach服务,我使用NSMachPort API创建一个新端口,然后将它注册到NSMachBootstrapServer

代码语言:javascript
复制
- (void) run
{
    NSMachPort *serverPort = (NSMachPort *)[NSMachPort port];
    [serverPort setDelegate:self];
    [serverPort scheduleInRunLoop:NSRunLoop.currentRunLoop forMode:NSDefaultRunLoopMode];
    [NSMachBootstrapServer.sharedInstance registerPort:serverPort name:@"com.example.MyApp"];

    [NSRunLoop.currentRunLoop run];
}

Clang抱怨说,NSMachBootstrapServer已被废弃:

代码语言:javascript
复制
warning: 'NSMachBootstrapServer' is deprecated: first deprecated in macOS 10.13 - Use NSXPCConnection instead

在编写非XPC服务时,如何使用NSXPCConnection替换NSMachBootstrapServer的功能?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-25 17:48:52

没错:NSMachBootstrapServer类和它的大多数伴生类都是已弃用在macOS 10.13高级塞拉利昂。

在macOS 10.14 Mojave和更高版本中,您必须使用NSXPCConnection API,这是Foundation模块的一部分。它在头文件NSXPCConnection.h中进行了描述。目前,它由以下四个主要类组成:

以下是XPC连接过程的样子:

正如您在图片中所看到的,您必须实现一个侦听器。

下面是使用监听器的Swift代码片段的外观:

代码语言:javascript
复制
let listener = NSXPCListener(machServiceName: "Name-of-Sample.Helper")
listener.delegate = delegate
listener.resume()
RunLoop.current.run()

下面是带有监听器的Obj代码片段的外观:

代码语言:javascript
复制
self.listener = [[NSXPCListener alloc] initWithMachServiceName:@"Name-of-Sample.Helper"];
self.listener.delegate = self;
[self.listener resume];
[[NSRunLoop currentRunLoop] run];

--如果您查看 这篇文章 ,您将了解如何正确实现所有必要的XPC连接对象

还有..。

如果您查看链接). 这篇文章 ,您还将了解如何将其与Mach服务一起使用( GitHub )

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54188295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档