在 Xcode 中添加命令行目标作为 XPC 服务器的功能

Add commandline target in Xcode the ability to function as XPC server

我目前有来自类型命令行工具的目标,运行 作为守护进程使用 /Library/LaunchDaemons 下的 plist 文件。

现在我需要给它添加从我拥有的另一个进程接收 XPC 消息的功能。这个 Macho 文件是独立的,运行 位于 Resources 子文件夹中的应用程序包下。

我添加并实现了以下接口,并从 main 方法中调用它,但这就足够了吗?

@interface ServiceDelegate : NSObject <NSXPCListenerDelegate>
ServiceDelegate *delegate = [ServiceDelegate new];
    
NSXPCListener *listener = [[NSXPCListener alloc] initWithMachServiceName:@"com.macho.scanner"];
    
[listener resume];
    
[[NSRunLoop mainRunLoop] run];

问题是我是否可以修改我的命令行目标并添加一个 XPC 服务器,或者我是否需要从类型 XPC 服务创建新目标,并且 运行 它作为守护进程?

谢谢

您应该能够将 XPC 服务器添加到您的 cmd 目标。

这需要两件事:

  1. 正在向 运行 服务器添加必要的代码。我为此使用 C API,但 Objective-C 应该是完全相同的。我会添加到您的代码中,至少将委托设置为侦听器。

  2. 在 launch.plist 中声明您想要一些 mach 服务。看起来像:

<key>MachServices</key>
    <dict>
        <key>com.macho.scanner</key>
        <true/>
    </dict>

另请注意:您的守护程序 运行 在根命名空间下,命名空间就像堆栈一样,根在底部。用户应用程序可以看到您的守护程序 mach 端点并与其建立连接,但反之亦然。