6

我创建了一个应用程序,通过在我的应用程序 info.plist 中添加一个 NSService 条目来为某些文件公开 OSX 服务(如http://www.macosxautomation.com/services/learn/),但我发现在安装我的新机器上的应用程序该服务不会在查找器右键单击上下文菜单中快速显示。

我知道这是因为粘贴板服务没有重新索引 /Applications 文件夹并“发现”新安装的服务。

我也知道我可以通过手动运行 /System/Library/CoreServices/pbs 来强制重新索引和发现。

这里的问题是,对于第一次安装我的应用程序的用户来说,确保我的服务尽快出现的最佳方式是什么。

我可以在我的应用程序启动时对“/System/Library/CoreServices/pbs”执行系统调用——如果用户立即启动我的应用程序——但这只能部分解决问题(此外我想知道是否有更好的基于 Cocoa API 的方法)。

如果我的应用程序通常只能通过上下文菜单访问,那么用户一开始就不会想到出去启动应用程序。当上下文菜单不存在时,他们只会认为它已损坏。

我没有使用安装程序分发我的应用程序。我只是提供一个可以拖放到 /Applications 的捆绑包(我相信苹果通常会建议这样做)。

以这种方式进行安装时,有没有办法加快服务发现的过程,这样用户就没有任何时间没有新安装的服务?

附带说明一下,该问题似乎在 10.8 中可能不存在(或至少不那么明显)。Apple 可能在其最新版本中更快地实现了这种索引。

4

1 回答 1

3

我实际上最终使用了

system("killall pbs;/System/Library/CoreServices/pbs -flush");

正如您所描述的,在我的一个应用程序中,尽管这是很久以前的事了,当时 10.5 也是有问题的。

但是,您可能想尝试此功能:

void NSUpdateDynamicServices(void)

根据文档,它的作用就像冲洗 pbs,但它是一种更清洁的解决方案。

此外,如果(根据您的描述)该应用程序只不过是一项服务,请考虑使其成为一项真正的服务 - 请参阅(安装服务)

To build a standalone service, use the extension .service and store it in Library/Services.
于 2012-11-20T23:10:05.227 回答