我正在尝试编写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.
我已阅读有关Linking,Frameworks和QuickLook的所有相关教程,但未找到答案。
到目前为止我发现/排除的事情
Contents/Frameworks
下的插件包中。@executable_path/../Frameworks
此外,在其他应用程序中使用该框架时,一切顺利。我可以理解的唯一可能的解释如下:执行qlmanage
时,@executable_path
实际上指向该二进制文件,因此我的框架永远找不到。如果是这种情况,我如何设置安装路径仍然允许相对于插件的位置?我不想在全球范围内安装我的框架。
修改
构建的QuickLook插件上的 otool -L
产生以下内容:
/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
Framework 不需要垃圾回收。
答案 0 :(得分:7)
@executable_path解析进程的主可执行映像。那就是quicklook守护进程,而不是你的插件。你应该使用@loader_path。
这是blog post的内容。
答案 1 :(得分:1)
您没有说明您使用框架的应用程序是否需要垃圾回收。你也不是说你的框架是否需要它。您可能正在尝试使用垃圾回收编译Quick Look生成器。但是,根据Nicholas Riley's reply to this post,“Quick Look生成器不会使用垃圾收集进行编译”。仅这一点可以解释为什么,正如你所说的那样,“整个链接过程都会出错”,如果确实这就是你正在尝试的那样。
由于缺乏对框架的熟悉,我不知道该过程将如何参与消除对垃圾收集的依赖(如果是这种情况),但您的框架可能需要重新加工才能用于快速查看发生器。