在 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 目标。
这需要两件事:
正在向 运行 服务器添加必要的代码。我为此使用 C API,但 Objective-C 应该是完全相同的。我会添加到您的代码中,至少将委托设置为侦听器。
在 launch.plist 中声明您想要一些 mach 服务。看起来像:
<key>MachServices</key>
<dict>
<key>com.macho.scanner</key>
<true/>
</dict>
另请注意:您的守护程序 运行 在根命名空间下,命名空间就像堆栈一样,根在底部。用户应用程序可以看到您的守护程序 mach 端点并与其建立连接,但反之亦然。
我目前有来自类型命令行工具的目标,运行 作为守护进程使用 /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 目标。
这需要两件事:
正在向 运行 服务器添加必要的代码。我为此使用 C API,但 Objective-C 应该是完全相同的。我会添加到您的代码中,至少将委托设置为侦听器。
在 launch.plist 中声明您想要一些 mach 服务。看起来像:
<key>MachServices</key>
<dict>
<key>com.macho.scanner</key>
<true/>
</dict>
另请注意:您的守护程序 运行 在根命名空间下,命名空间就像堆栈一样,根在底部。用户应用程序可以看到您的守护程序 mach 端点并与其建立连接,但反之亦然。