7

Cocoaドキュメントベースのアプリケーション(テキストエディタ)があり、コマンドラインから操作できるようにしたいと考えています。

たとえば、コマンドラインでgit /svncommitメッセージを入力するためのエディターとして設定したいと思います。

Foundationを使用してコマンドラインツールを作成すると仮定すると、コマンドラインツールがGUIアプリケーションと通信するための最良の方法は何ですか?

もちろん、標準のopenイベントを使用して、アプリに特定のファイルを開かせることができますが、コマンドラインアプリでGUIアプリがドキュメントを終了するまで(ユーザーがエディターウィンドウを閉じるまで)待機してから終了する必要があります(mate -w file.txtTextMateのコマンドと同様)。ラインツール、または他のさまざまなMacテキストエディタの同等のもの)。

TextMate2はソケットファイルを使用します。これが最善のアプローチですか?可能であれば、もっと高いレベルのものを使用したいと思いますNSDistributedNotificationCenter

4

3 に答える 3

2

NSDistributedNotificationCenterそれがあなたが好む抽象化レベルであれば、おそらくうまくいくでしょう。そのインターフェイスは に似ていNSNotificationCenterます。についてNSDistributedNotificationCenter

  • plistタイプに限定されています
  • ドロップ通知は許可されています
  • それは「高価」です
  • 待ち時間は予測できない場合があります
  • サンドボックス アプリはuserInfo:パラメーターを使用できません

多くの情報を転送したい場合、またはより堅牢で予測可能なものが必要な場合は、ソケットが好ましいと思うかもしれません。

于 2012-10-18T22:08:54.433 に答える
2

iTerm のソース コードを見ると、次のようになります。

svn co https://iterm.svn.sourceforge.net/svnroot/iterm iterm

彼らがどのようにそれをしたかを見ることができます。彼らはGrowl通知を使用しました。Growl は、何が起こっているのかを実際に制御し、すべてに正しく対応できるようにする包括的な通知フレームワークです。Growl の詳細については、次を参照してください。

http://grow.info/

于 2012-10-25T20:30:04.230 に答える
0

プロジェクト情報ペインでアプリにURLスキームを追加できます。

誰かがURLにアクセスしようとするyourscheme://info/for/your/appと、起動されていない場合はアプリが起動され、引数が渡されます。

URLを処理するためのアプリのコードは次のとおりです

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{

// ...

    [[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(handleAppleEvent:withReplyEvent:)
                                                     forEventClass:kInternetEventClass andEventID:kAEGetURL];
}

- (void)handleAppleEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent
{
    NSString *urlString = [[event paramDescriptorForKeyword:keyDirectObject] stringValue];
// .. process your url
}
于 2012-10-20T11:39:12.230 に答える