使用XPC创建守护进程/ UI连接

时间:2017-12-28 07:12:07

标签: ios objective-c xpc

我的平台包含基于混合c ++ / objective-c代码的系统范围守护程序,该代码由launchd根据plist文件操作,其正确配置位于/Library/LaunchDaemons/

另一方面,它包含使用故事板构建的基于UI的应用程序,该应用程序从后台运行并定义为LaunchAgent(意味着它也由launchd使用plist文件在{ {1}})

现在我希望在它们之间建立单向连接,以便守护进程可以发送要由UI应用程序显示的消息。消息可以包含字符串/数字或任何其他可显示的数据。

我已使用XPC连接检查了该选项,并将/Library/LaunchAgents/添加到我的守护程序中,该守护程序与使用NSXPCConnection在UI端实现的服务器共享专用协议。

我很乐意收到有关我的设计的评论和建议,特别是在以下方面

NSXPCListener

1. Should I implement the UI as launchAgent 
(I need to support multi-users, meaning that the daemon can send
different messages to each UI instance per user) 

2. should I consider using dedicated `XPC service`. 
Seems like Xcode has option to create XPC service, 
but I don't know how should I "attach" the UI code inside ... 

谢谢

2 个答案:

答案 0 :(得分:1)

  1. 将UI应用程序实现为常规应用程序或启动代理程序并不重要。选择更合适的选择。
  2. 您是否正在考虑使用UI应用和XPC服务?这应该有用。
  3. 适用于Swift,Objective-C和混合语言项目。
  4.   

    现在我希望在它们之间建立单向连接,以便守护进程可以发送消息由UI应用程序显示。

    它对我不起作用。根进程无法初始化与用户进程的通信。但反之亦然:如果连接是由UI启动的(你在UI中实例化NSXPCConnection,在守护进程中实例化一个监听器)。

答案 1 :(得分:0)

我认为你应该阅读Apple的守护进程和服务编程指南:https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/Introduction.html#//apple_ref/doc/uid/10000172i-SW1-SW1

  1. UI可能应该作为与您的守护进程通信的常规应用程序完成。

  2. 我不认为XPC服务会满足您的需求,因为您说您需要支持多个用户。

  3.   

    XPC服务是私有的,只能用于包含它的主应用程序。

    1. 是。 NSXPCConnection类是您可能会使用的类,它可以在Foundation中找到,它与Swift和Objective-C兼容。