3

私は MacOS X を使用していますが、アプリ バンドル タイプのことはまったく初めてです。コマンド ライン ツールではなく、ウィンドウを開いてマウス入力を登録するプログラムを作成しています。コード (重要な場合は C で記述) を実行可能ファイル (「unix 実行可能ファイル」) にコンパイルし、そのファイルを直接 (たとえば、ダブルクリックして) 実行すると、ターミナル ウィンドウがポップアップし、次に、プログラムのウィンドウがポップアップします。同様に、実行可能ファイルのディレクトリに移動してコマンド ラインから開くと、/another/ ターミナル ウィンドウが開き、次にプログラムのウィンドウが開きます。

ただし、実行可能ファイルをバンドルにラップすると (したがって、それを適切な「アプリ」に変換すると思います)、ダブルクリックまたはコマンドラインからアプリを実行すると、プログラムのウィンドウが開き、新しいターミナルウィンドウが作成されます。これは単に「アプリ バンドル」のアーキテクチャのプロパティですか? または、別の端末ウィンドウを発生させずに生の実行可能ファイルを実行できる方法はありますか? 何か基本的なことを誤解していると思います。前もって感謝します!

4

2 に答える 2

4

あなたが見ているものは正しいと思います。別のウィンドウがポップアップしないようにするには、それをバンドルにカプセル化する必要があります。

バンドルをダブルクリックするか、ターミナルから「open」コマンドを使用して起動すると、既知の (登録済みの) アプリケーションのリストを維持するApple のLaunch Servicesが使用されます。アプリケーション (バンドル) がシステムに導入されると、Launch Services に登録され、バンドルの Info.plist にある URI (com.apple.calculator など) に関連付けられます。

Info.plist の他の項目は、起動サービスに、OS の最小または最大バージョンを超えているかどうかの確認や、ドック項目を表示するかどうかなど、アプリケーションの処理方法を指示します。

単独のバイナリには Info.plist マニフェストが関連付けられていないため、その動作を変更することはできず、ターミナル ウィンドウが開かれます。

于 2015-06-08T16:09:41.593 に答える
2

open裸の実行可能ファイルは、本質的に Launch Services (何かを開くときにFinder、Dock、およびコマンドが使用するフレームワーク) によってドキュメントとして扱われます。そのようなドキュメントを扱うアプリケーションがターミナルです。そのため、この方法で実行可能ファイルを開くと、ターミナルがまだ実行されていなければ起動し、ドキュメントを開くように指示します。ターミナルは、新しいシェル ウィンドウを開き、「ドキュメント」へのパスをコマンド ラインとして自動入力することでこれを行います。

Launch Services は、アプリと同様に、バンドルされたアプリを処理します。アプリが既に実行されている場合は、アプリがアクティブ化され、新しい無題のウィンドウが開かれる可能性があります。それ以外の場合は、起動します。

Rob Napier がコメントで指摘しているように、実行可能ファイルをコマンド ラインから直接実行した場合 (または、既に実行中のアプリがNSTaskork+exec を使用して実行可能ファイルを起動した場合)、単純に実行されます。Launch Services は関与しないため、Terminal は実行可能ファイルをドキュメントとして開くよう求められません。

于 2015-06-08T16:53:22.450 に答える