問題タブ [launch-services]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
99 参照

objective-c - 別のアプリケーションをカプセル化して生成し、パラメーターを注入する

私の問題は、.appいくつかのパラメーターを注入した後に実行したい子がいるということです。やりたいことは、アプリを親アプリとして実行することです (アプリを起動して、フォーカス/アクティブ化イベントを子アプリに同期させて伝達します)。

私の目標は、たとえば、別のアプリを起動する「親アプリ」を作成することですOtherApp.app。「親アプリ」のように表示されます OtherApp.app(つまり、ドックに別のアプリケーションとして表示されませんが、ウィンドウはOtherApp.app「親アプリ」に含まれている必要があります)。これを行う理由は、それ自体OtherApp.appを変更せずにいくつかの初期化変数を渡すことができるようにするため.appです。


私が取ったアプローチ

  1. 最初のアプローチは最も単純です。を使用するだけsystem(@"VAR=VALUE /Applications/OtherApp.app")です。ただし、これに関する問題は、「親アプリ」が即座に終了OtherApp.appし、Dock で別のアプリケーションとして開くことです。

  2. 2番目のアプローチ:私がやろうとしたのは、同期ではない使用ですがNSWorkspaceNSRunningApplicationこれに関する問題は、「親アプリ」が再び即座に停止することです:

    /li>
  3. 3 番目のアプローチは、Launch Services を使用することです。ただし、これが私の質問の内容です。環境変数または「Launch Services Keys」(LSUIElement など) を渡すことができる非推奨の API が見つかりません。また、環境変数を渡す方法も見つかりません。これもすぐに終了します (私は Launch Services の内部構造に詳しくありません。おそらく誰かが私を啓発してくれますか?)

    /li>

可能な解決策

  1. 「親アプリ」がすぐに終了しないように、NSApplicationと通信する を作成します。OtherApp.appここでの問題は、繰り返しになりますが、ドック内の 2 つのアプリであり、フォーカスを同期させることは、より複雑なタスクになるように思われることです。
  2. 環境変数を (Launch Services) A​​PI に渡す方法とLS、生成されたアプリのフォーカスを何らかの形で制御できる方法を理解してください。
  3. 何らかの方法でバンドルにアクセスし、のを動的にロードしますNSApplicationMainが、OtherApp.app通常はNSBundle実行可能ファイルでは使用できません (そうするとエラーがスローされます)。

現在、#2 が最善の策のように感じられますが、代替ソリューションに関する支援があれば大歓迎です。