2017-08-10 21 views
3

埋め込みしようとしていますFinder同期拡張は、Electronで書かれた私のアプリでSwiftで書かれています。どうやって一緒に働かせ、お互いにコミュニケーションをとることができますか? Apple documentationを読んだことがありますが、ターゲットをネイティブアプリケーションに追加する方法についてのみ説明しています。私はまた、を使用して、アプリケーションPluginsフォルダに手動で.appexコンパイル済みファイル(XCode製)を挿入できることに気付きました。 XCodeでエクステンションを開発してテストし、それをカスタムElectronアプリケーションに正しく埋め込むにはどうすればよいですか? 提案がありますか?電子アプリにmacアプリ拡張を埋め込む方法は?

は、電子アプリでmacアプリの拡張子を埋め込む方法任意の提案

+1

エレクトーンアプリのプラグインフォルダにAppexをコピーして貼り付けてみましたか?拡張機能がドキュメントに従って設定されている場合は、メインアプリと一緒に拡張機能が起動されます(自動的に起動するには署名が必要な場合があります)。テストのために、拡張機能が表示され、システム環境設定 - >拡張機能で有効になっていることを確認してください。次に、デバッガをXCodeのFinder Syncプロセスにアタッチします。 – dejuknow

+0

はい!拡張子が正しく始まるときに '.plist'ファイルがそれに応じて書かれていれば、この方法はうまく動作します。残っている唯一の質問は、ドキュメンテーションがObjectiveC/Swiftで 'FIFinderSync'クラスを拡張することしか許されていないと指定した場合、メインアプリケーションが拡張機能と通信する方法です。 '.appex'拡張の中でJSイベントを発生させるにはどうすればいいですか? –

+0

何らかのプロセス間通信を使用する必要があります。私はElectron APIに精通していませんが、ソケットを使用してIPCを処理することができます:https://nodejs.org/api/net.html#net_class_net_socket – dejuknow

答えて

0

のためにありがとうございましたか!

私は独立したバイナリとしてそれをコンパイルし、EXECFILEでバイナリを実行するときは、引数を使用することができますchild_process.execFile

を用いた電子アプリから実行されるように、いくつかのディレクトリの中に含まれるであろう、ここで使用して(例ですあなたはその後、要求された操作の状態/結果を知るために標準出力を使用することができ

const util = require('util'); 
const execFile = util.promisify(require('child_process').execFile); 
async function FinderSyncExtPlugin(ARGUMENTS) { 
    const { stdout } = await execFile('YourBinary', ARGUMENTS); 
    console.log(stdout); 
} 
FinderSyncExtPlugin(['argument1','argument2','...']); 

約束)。

+0

Swiftに沿ってXcodeによって自動的に生成されるため、finder拡張子を独立したバイナリとしてコンパイルすることはできません/ ObjCプロジェクトを別のターゲットを使用して実行します。あなたのメソッドは正常なコマンドラインMacOSアプリケーションでは正常に動作しますが、私の特定の状況には適用されません。 –

1

Electronルートフォルダのプラグインフォルダを作成します。

.appexファイルをPlugInsフォルダにコピーします。

あなたは電子ビルダーを使用している場合は、package.jsonファイルを変更 - 追加:「MAC」で "extraFiles": ["PlugIns/"]を。

ビルド。あなたのアプリケーションパッケージの内容には、プラグインフォルダとappexファイルが含まれており、appexはアプリケーションのプロセスにロードされます。

+0

あなたは正しいです。私はこの数ヶ月前に実装することに成功しました。多分私はそれまでのやり方について完全な答えを投稿するだろう。 –

+0

基本的にあなたは入力が正しいです。実行時に、拡張機能をElectronアプリと通信させるために見つけた唯一の方法は、Socket.ioを使用してループバックインターフェイス上でIPCを実装することでした。実際には、私はSwiftで同期拡張を実装し、appexファイルで同期拡張を実装し、答えで述べた手順に従ってElectronにパッケージ化しました。今私はSocket.ioを介してその動作を制御しています。これは回避策かもしれませんが、現在のところ、これはかなりうまく動作しています。あなたがより良い解決策を見つけたら、私はすべての耳です! :) –

関連する問題