上のサードパーティのホスト アプリケーションによってロードされる SIMBL プラグインに取り組んでいますmacOS
。ほぼ完全に記述されてC++
おり、目的の c コンポーネントは最小限しかありません。(UI の大部分は、ホスト アプリへの API 呼び出しによって提供されます。) 要件の 1 つは、プラグイン バンドルを異なるサブディレクトリから複数回ロードできることです。これは Lua インタープリターであり、ホスト アプリケーションの個別のメニューに表示される Lua スクリプトの異なる構成を各インスタンスでホストすることが目標です。サード パーティは、このプラグインをスクリプトのカスタム構成にバンドルすることができ、アプリのプラグイン メニューに個別の項目として表示されます。
私が抱えているこの問題は次のとおりです。プラグインが実行されているディレクトリを見つける必要があります。次の名前の特別なクラスを作成してMY_BUNDLE_ID_CLASS
使用できます。
[NSBundle bundleForClass:[MY_BUNDLE_ID_CLASS class]];
正しい を取得したらNSBundle
、ファイル パスを取得するのは簡単です。
問題は、バンドルの複数のインスタンスが (異なるフォルダーから) ロードされた場合、クラスMY_BUNDLE_ID_CLASS
が複数の場所で定義されていると Cocoa が文句を言い、どの場所が使用されたかを保証しないことです。他の同様のクラスの場合、これは私のプラグインには問題ありません。私の固有のクラス名は、バージョン番号を含むマングル名と同等のマクロであるためですが、この場合は問題ありません。同じバージョンの複数のインスタンスである可能性があります。プラグイン コードが実行されているフォルダを見つける他の方法はありますか? 単純な要求のように思えますが、私は空っぽです。提案を歓迎します。