我需要编写一个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
的功能?
答案 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连接过程如下:
就像在图片上看到的那样,您必须实现一个侦听器。
这是带有侦听器的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对象。
和...