4

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

- (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已被弃用:

warning: 'NSMachBootstrapServer' is deprecated: first deprecated in macOS 10.13 - Use NSXPCConnection instead

编写非 XPC mach 服务时如何使用NSXPCConnection来替换功能?NSMachBootstrapServer

4

1 回答 1

3

确实如此:在 macOS 10.13 High Sierra 中NSMachBootstrapServer,class 及其大部分配套类已被弃用。

在 macOS 10.14 Mojave 及更高版本中,您必须使用NSXPCConnectionAPI,这是Foundation模块的一部分。它在头文件中描述NSXPCConnection.h。目前它包括四个主要类:

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

在此处输入图像描述

正如你在图片上看到的,你必须实现一个监听器。

下面是带有监听器的 Swift 代码片段的样子:

let listener = NSXPCListener(machServiceName: "Name-of-Sample.Helper")
listener.delegate = delegate
listener.resume()
RunLoop.current.run()

下面是带有监听器的 Obj-C 代码片段的样子:

self.listener = [[NSXPCListener alloc] initWithMachServiceName:@"Name-of-Sample.Helper"];
self.listener.delegate = self;
[self.listener resume];
[[NSRunLoop currentRunLoop] run];

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

和...

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

于 2019-07-25T17:48:52.190 回答