首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将框架链接到QuickLook插件

将框架链接到QuickLook插件
EN

Stack Overflow用户
提问于 2011-04-21 21:35:35
回答 2查看 1K关注 0票数 6

我正在尝试编写一个QuickLook生成器。为此,我需要链接到我创建的框架。然而,一旦我链接到上述框架,qlmanage就拒绝加载我的插件,告诉我:

代码语言:javascript
复制
[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产生以下结果:

代码语言:javascript
复制
/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产生了以下结果:

代码语言:javascript
复制
@executable_path/../Frameworks/PESHandler.framework/Versions/A/PESHandler

该框架不需要垃圾收集。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-29 05:52:45

@executable_path针对进程的主要可执行映像进行解析。那将是快速外观守护进程,而不是你的插件。您应该使用@loader_path代替。

下面是一个博客帖子,介绍这一点。

票数 7
EN

Stack Overflow用户

发布于 2011-04-28 13:49:44

您没有说明使用框架的应用程序是否需要垃圾收集。你也不知道你的框架是否需要它。您可能正在尝试使用垃圾收集编译快速外观生成器。但是,根据尼古拉斯·赖利对这篇文章的答复的说法,“快速外观生成器不会在垃圾收集的情况下被编译”。这本身就可以解释为什么,正如您所说的,“整个连接过程的错误”,如果这确实是您正在尝试的。

由于不熟悉您的框架,我不知道如何处理这个过程将消除对垃圾收集的依赖(如果同样是这样的话),但是您的框架可能需要重新工作才能在Quick生成器中使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5750032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档