调试出现'bundle is damaged'错误的快速查看插件



我们正在向我们的项目添加Quicklook插件。

一切都很好,直到MacOS试图调用我们的插件为止,这时我们将获得心爱的无法加载捆绑包,因为它已损坏或缺少必要的资源错误。<<<<<<<<<<<<<</p>

我们已经在插件的二进制文件上使用otool -L检查了所有依赖项,但是,一旦OS向我们支持的文件类型提出插件的预览,我们就会得到:

22/04/17 12:03:05,716 quicklookd[55323]: 
[QL] Can't load plug-in at file:///Users/myname/Library/Developer/Xcode/DerivedData/The_Project-gpihzjouhxvifqcslmywktktizer/Build/Products/Debug/MyApp.app/Contents/Library/QuickLook/SomeQuickLookPlugIn.qlgenerator/: 
The bundle “SomeQuickLookPlugIn” couldn’t be loaded because it is damaged or missing necessary resources.

我们不太确定的一件事是对我们内部框架的依赖。

我们已经设置了类似于我们的主应用程序的插件,即私人框架依赖项解决至:

@executable_path/../Frameworks/MyFW.framework/Versions/A/MyFW (compatibility version 1.0.0, current version 1.0.0)

..如果@executable_path是主应用程序的二进制文件,则可以正常运行,或者在捆绑包中的两个位置复制框架时。

有什么想法吗?

理想情况下,我们希望操作系统告诉我们哪种依赖性无法解决 -
是否可以设置任何调试标志。?

按https://www.mikeash.com/pyblog/friday-qa-2009-11-06-linking-and-install-names.html和http://http://http://wwww wwww.dribin.org/dave/blog/Archives/2009/11/15/rpath/您应该

  • 为您的参考框架设置安装目录 @rpath
  • 在应用程序集中运行时搜索路径 to @loader_path/../Frameworks
  • 和在Quicklook插件集中运行时搜索路径 to @loader_path/../../../../../Frameworks,如 catlan -
    所建议的这样,您就不需要在Quicklook插件中复制引用的框架

编译,运行,如果正确设置其他所有内容,则一切都应该工作。

此外,您可能需要检查插件中的代码签名设置,以确保那里没有问题。

您可以做的一件事是从应用程序中删除(或关闭(代码签名,然后查看它是否会加载插件…

要检查代码签名是否是问题,您可以使用codesign --remove-signature YourApp.app的终端暂时将其关闭,并查看它是否有效。

运行搜索路径应为 @loader_path/../../../../../Frameworks,因为它已安装到Main.app/Contents/Library/QuickLook/QuickLookPlugin.qlgenerator/Contents/Mac/QuickLookPlugin中,因此我们需要从@loader_path向下五个文件夹以查找Frameworks文件夹。

最新更新