6

QuickLookジェネレーターを作成しようとしています。このために、私が作成したフレームワークに対してリンクする必要があります。ただし、上記のフレームワークにリンクするとすぐに、次のようにqlmanage言ってプラグインの読み込みを拒否します。

[ERROR] Can't load plug-in at /path/to/my-ql.qlgenerator: The bundle “my-ql” couldn’t be loaded because it is damaged or missing necessary resources.

リンク、フレームワーク、QuickLookに関連するすべてのチュートリアルを読みましたが、答えが見つかりませんでした。

私がこれまでに見つけた/除外したもの

  • アーキテクチャ:フレームワークを32ビットバイナリとして含めると、リンクプロセス全体に障害が発生するため、これは問題ではないようです。
  • フレームワークがプラグインのバンドルにコピーされることを確認しましたContents/Frameworks
  • フレームワークのインストールパスはに設定されています@executable_path/../Frameworks

また、別のアプリケーションでフレームワークを使用する場合、すべてがうまくいきます。私が理解できる唯一の可能な説明は次のとおりです。実行するqlmanageと、@executable_path実際にはそのバイナリを指しているため、フレームワークが見つかりません。この場合、プラグインに相対的な場所を許可するようにインストールパスを設定するにはどうすればよいですか?フレームワークをグローバルにインストールしたくありません。

編集

otool -L構築されたQuickLookプラグインでは、次のようになります。

/System/Library/Frameworks/QuickLook.framework/Versions/A/QuickLook (compatibility version 1.0.0, current version 327.4.0)
/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 38.0.0)
/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 44.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 550.29.0)
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 15.0.0)
@executable_path/../Frameworks/PESHandler.framework/Versions/A/PESHandler (compatibility version 1.0.0, current version 1.0.0) <== *this is my framework*
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)

otool -D私のフレームワークではこれが得られます:

@executable_path/../Frameworks/PESHandler.framework/Versions/A/PESHandler

フレームワークはガベージコレクションを必要としません。

4

2 に答える 2

7

@executable_path は、プロセスのメインの実行可能イメージに対して解決されます。それはプラグインではなく、quicklook デーモンです。代わりに @loader_path を使用してください。

これをカバーするブログ記事を次に示します。

于 2011-04-29T05:52:45.223 に答える
1

フレームワークを使用したアプリケーションでガベージ コレクションが必要かどうかはわかりません。フレームワークがそれを必要とするかどうかも言いません。ガベージ コレクションを使用して Quick Look ジェネレーターをコンパイルしようとしている可能性があります。しかし、この投稿に対する Nicholas Riley の返信によると、「Quick Look ジェネレーターはガベージ コレクションをオンにしてコンパイルされません」。これだけでも、あなたが言うように、「リンクプロセス全体が失敗する」理由を説明できます。

あなたのフレームワークに精通していないので、ガベージ コレクションへの依存を排除​​するプロセスがどの程度複雑になるかはわかりません (その場合も同様です)。

于 2011-04-28T13:49:44.833 に答える