2016-11-19 4 views
8

Swiftのプラグインアーキテクチャで実装する方法を探しています。Swiftプラグインのアーキテクチャ

ユースケース

アプリケーション、FX。 CLIは、プラグインを配置できる場所で実行され、アプリケーションの起動時にロードされるフォルダを持っています。

要件プロトコルや、プラグイン 必須のまたはに接着することができるプロトコルのセットを定義することができること

  • 純粋なスイフト。
  • 与えられたプラグインがどのプロトコルを実装しているかを調べる。
  • アプリケーションの起動時に動的に読み込まれます。
  • デリゲートパターンと通信します。
  • プラグイン開発者は、プロトコルをインポートし、実装し、コンパイルし、プラグインフォルダに配置することができます。私は、私はまた、引数を追加することができます実行ファイルを起動するためにProcessを使用しました

    を試してみた何

。 しかし、それは私の要件を満たしていません。

私はこれをどのように行うことができるのかを見つけましたが、それにはNSBundleとObjective-Cの使用が必要です。

私はこれについてどうやって行くのか分かりません。適切な方向への助けや指導をいただければ幸いです。

+0

Linuxでこの作業を計画していますか? App Storeはどうですか? – Kametrixom

+0

@Kametrixom Linuxは目標です。 App Storeは必須条件ではありません。 –

+0

こんにちは。 Swiftでこのプラグインアーキテクチャを実現できますか?これは私が今作業する必要があるものです。あなたが私のために持っている提案はありますか? – Subi

答えて

1

Swiftには現在、安定したABIがないため、ネイティブインターフェイスにまだ頼ることはできません。 (これはSwift 4で解決される予定です)

私は今のところ2つのオプションを考えることができますが、どちらもホストとプラグインの間の何らかの通信プロトコルの定義に依存しています。また、Objective-Cを使用できない場合は、自分で要件(イントロスペクションなど)を実装する必要があります。

  1. C ABIを下回る。必要なすべての機能については、@convention(c)アノテーションを使用してSwiftの呼び出された側で実装し、呼び出し側で外部リンケージのヘッダーに宣言します。関数を2回実装することはできないため、プラグインが登録されるコールバックベースのAPIを定義する必要があります。

  2. (ソケットベースの)通信プロトコルを定義し、すべてのプラグインにインポートするSwiftソースファイルを作成します。プラグインを実行可能にして、ホストアプリケーションが起動すると通信を開始します。

それはリンカーなどとの付き合いを必要としない、あなたはプラグインの使用のためにスウィフト型と関数を定義するの追加ボーナスを得るので、私は個人的にオプション2を好みます。また、プラグインは分岐した子であるため、ホストに影響を与えることなくクラッシュする可能性があります。

関連する問題