Objective-C/Cocoa 或 C(尤其是使用Core Foundation)肯定会为您提供具有性能和操作系统集成优势的最本机实现。
Java 是合理的,将是内置的。你需要一些基本的脚本来引导它,但并不多。
Mono 也很合理,用户可以相对容易地安装。您需要将它们指向下载页面并指定它们只需要运行时,但它是可行的。根据许可,您可以将 Mono 运行时安装程序包包含在您自己的安装程序包中,以便与您的守护程序同时安装。
自然,脚本语言很可能会使您的代码暴露在外且可修改,因此如果您担心这一点,您可能希望避免使用该路线。
无论用于开发守护程序的语言是什么,您都需要考虑安装和管理。
对于安装,Mac 用户习惯于两种安装方法: 通过 Installer 安装.pkg
文件,用户双击然后通过安装过程或通过将应用程序拖到他们的应用程序文件夹并双击启动。作为开发人员,前者为您提供了很多控制权,包括 README/许可文本、运行飞行前和飞行后脚本、构建元包以安装一个或多个包(如上所述,可能在您的自己的安装程序),并且还使操作系统和用户能够查看将安装的文件、位置和时间(安装后),如果他们愿意的话。或者,许多守护进程将是实际的 Mac OS X 应用程序,它们会在首次启动时将自身安装为后台进程。前者将独立于您的语言选择,
这让我想到了管理。大多数守护进程都希望launched
作为 LaunchDaemon(对于所有用户,通常在启动时启动)或 LaunchAgent(对于特定用户,通常在登录时启动)运行。如果您与launched
每个人都很好地融合在一起,您会更快乐,并且应该可以使用您的任何语言选项。
那么问题就变成了用户是否需要管理守护进程?如果是这样,这通常作为 MenuExtra 或 Preference Pane 实现。在任何一种情况下,守护程序都可以用任何语言开发launched
并由 MenuExtra/Preference 窗格控制(尤其是通过),但在某些情况下,MenuExtra 实际上可以用作守护程序,因此您希望在 Objective-C 中开发/可可。
另请参阅:Apple 的Designing Daemons & Services文档。