6

アプリケーションの info.plist に NSService エントリを追加して、特定のファイルの OSX サービスを公開するアプリケーションを作成しました ( http://www.macosxautomation.com/services/learn/のように)。新しいマシンでアプリケーションを実行すると、ファインダーの右クリック コンテキスト メニューにサービスがすぐに表示されません。

これは、ペーストボード サービスが /Applications フォルダのインデックスを再作成しておらず、新しくインストールされたサービスを「発見」していないためだとわかっています。

/System/Library/CoreServices/pbs.

ここでの質問は、私のアプリケーションを初めてインストールするユーザーに私のサービスができるだけ早く表示されるようにする最善の方法は何かということです。

アプリケーションの起動時に「/System/Library/CoreServices/pbs」へのシステム コールを実行できますが (ユーザーがアプリケーションをすぐに起動した場合)、問題は部分的にしか解決しません (さらに、これを行うためのより良い Cocoa API ベースの方法)。

私のアプリケーションが通常、コンテキスト メニューからのみアクセスされる場合、ユーザーは外出してアプリケーションを起動しようとは考えません。コンテキスト メニューが表示されない場合にのみ、壊れていると考えるでしょう。

インストーラーを使用してアプリケーションを配布していません。/Applications にドラッグ アンド ドロップできるバンドルを提供しているだけです (Apple が通常示唆しているように)。

この方法でインストールを行うときに、サービス検出のプロセスを促進する方法はありますか?

補足として、この問題は 10.8 には存在しない可能性があります (少なくともそれほど顕著ではありません)。Apple は、最新のリリースでこのインデックス作成をより迅速に行うようにした可能性があります。

4

1 に答える 1

3

私は実際に使用することになりました

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

私のアプリの1つでは、あなたが説明しているように、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 に答える