NSMachBootstrapServer已过时,如何使用NSXPCConnection注册Mach服务?

时间:2019-01-14 19:56:04

标签: ipc xpc mach nsxpcconnection

我需要编写一个Mach Service,我的应用程序和系统插件都可以与之通信,我使用NSMachPort API创建一个新端口,然后向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的功能?

1 个答案:

答案 0 :(得分:1)

是的:在MacOS 10.13 High Sierra中,var para = "I code code code Javascript" var keywords = ['code',"I"]; var arr = []; for(let i = 0; i < keywords.length; i++){ var reg = new RegExp(keywords[i],'g') arr[i] = (para.match(reg) || []).length; console.log(arr[i]) }类及其大多数伴随类是deprecated

  

在macOS 10.14 Mojave及更高版本中,您必须使用NSMachBootstrapServer API,这是NSXPCConnection模块的组成部分。头文件Foundation中对此进行了描述。目前,它包含四个主要类:

XPC连接过程如下:

enter image description here

就像在图片上看到的那样,您必须实现一个侦听器。

这是带有侦听器的Swift代码段的样子:

NSXPCConnection.h

这是带有侦听器的Obj-C代码段的样子:

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

如果您查看This Post,将会发现如何正确实现所有必要的XPC Connection对象

和...

  

如果您查看This Post,还将发现如何将其与Mach Service(存在GitHub link)一起使用