NSMachBootstrapServer устарел, как можно использовать NSXPCConnection для регистрации службы Маха? - PullRequest
0 голосов
/ 14 января 2019

Мне нужно написать службу Mach, с которой могут общаться и мое приложение, и системный плагин. Я использую API NSMachPort для создания нового порта, а затем регистрирую его с помощью 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

Как можно использовать NSXPCConnection для замены функциональности NSMachBootstrapServer при написании службы Mach не-XPC?

1 Ответ

0 голосов
/ 25 июля 2019

Это правда: класс NSMachBootstrapServer и большинство его сопутствующих классов устарели в macOS 10.13 High Sierra.

В macOS 10.14 Mojave и выше вы должны использовать NSXPCConnection API, который является частью модуля Foundation. Это описано в заголовочном файле NSXPCConnection.h. На данный момент он состоит из четырех основных классов:

Вот как выглядит процесс подключения XPC:

enter image description here

И как вы можете видеть на картинке, вы должны реализовать слушателя.

Вот как может выглядеть фрагмент кода 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 Connection .

и ...

Если вы посмотрите на В этом посте , вы также узнаете, как его можно использовать со службой Маха (есть GitHub ссылка ) .

...