如何使用Xcode在Mac上编写“系统进程”(启动过程)?

时间:2011-09-08 22:30:40

标签: objective-c xcode cocoa

我需要编写一个将在后台运行或作为Mac上的系统进程运行的应用程序。它需要在启动时运行,即使没有用户登录也需要运行。

我有Xcode 3.2.6(在这里使用Xcode 4不是我的选择) - 我应该使用哪种类型的项目?当我准备好部署它时,如何“安装”它以便在计算机启动时自动启动?

修改

我最大的问题是使用什么类型的项目。我需要一个能够保持运行的进程,它将监视服务器并每隔几分钟发送一次更新的信息。

我最初为此创建了一个命令行工具。主线程运行并立即存在,所以我将它放在一个无限循环中,它会休眠线程并通过NSTimer执行任何所需的处理。这是错误的方法吗?还有更好的吗?这就是我追求的目标。

1 个答案:

答案 0 :(得分:9)

您所描述的内容在Mac上称为守护程序。您想阅读Daemons and Services Programming Guide以获取有关如何构建它们的说明。

最常见的形式是在launchd下运行的启动守护程序,如Launch Daemons and Agents文档中所述。这些适用于Mac OS X 10.4及更高版本。

在10.4之前,有“启动项目”。除非您需要在10.4之前的系统上运行,否则不要使用它们。

Technical Note TN2083 (Daemons and Agents)是另一个值得阅读的文件。

修改

是的,命令行模板是最好的起点。

大多数守护进程都应该“按需”。这意味着当发生“有趣的事情”时,他们应该让launchd运行它们,然后他们应该继续运行以处理其他事件,最后他们应该让launchd在没有事件进入一段时间时杀死它们。什么“有趣的事件”看起来取决于你的问题。常见事件是套接字上的流量,文件更改或队列目录中存在的文件。在任何一种情况下,Launchd都可以自动运行你。