2

我正在编写一个 OS X 启动代理(它会监视 FSEvents);因此,它没有 UI,也不是从捆绑包启动的——它只是一个程序。相关文档和示例代码 说明了在调用之间保持 FS 事件 ID,并使用 NSUserDefaults. 这显然是 Right Thing To Do(TM)。

Preferences and Settings Programming GuideNSUserDefaults中 的文档 似乎是适合阅读的内容。这仅显示 Application 和 Global 域是持久的,但(很明显)只有 Application 域对应用程序是可写的。但是,应用程序域中的首选项是在 ApplicationBundleIdentifier 上键入的,而启动代理则没有。所以我不知道这样的代理应该如何保持状态。

我能想到的只是工作中的Labelinlaunchd可以充当 ApplicationBundleIdentifier ——它至少具有正确的形式。但是我在文档中看不到任何正确的提示。

显而易见的(unix-normal)事情是写入一个点文件 in $HOME,但这可能不是 Cocoa 方式。谷歌搜索'osx daemon preferences'之类的,没有显示任何有用的东西,否则我的google-fu今天很遗憾缺乏。谷歌搜索“设置应用程序包标识符”也不太可能出现。 NSUserDefaults:persistentDomainForName看起来它应该是相关的,但我无法从它的方法文档中弄清楚它的意图。

我在这里发现了一个似乎相关的问题,但是虽然它非常接近,但它并没有说明守护程序从哪里获取其标识符。

我在 Objective-C 和 Cocoa 方面的经验有限,这意味着我现在相当怀疑自己找错了树,但真的不知道下一步该往哪里看。

4

1 回答 1

1

即使在单文件可执行文件中,您也可以(并且 imo 应该)拥有 Info.plist。(请参阅http://www.red-sweater.com/blog/2083/the-power-of-plist

然而, NSUserDefaults 更值得怀疑。从概念上讲,它适用于用户设置,而不是内部状态。但是,没有真正的理由不适合这个,所以我可能会继续这样做。

于 2013-04-16T23:18:13.487 回答