我们正在为我们的项目添加一个QuickLook插件。
一切都很好,直到macOS试图调用我们的插件,此时我们得到了心爱的捆绑无法加载,因为它已损坏或缺少必要的资源错误。< / p>
我们在插件的二进制文件中使用otool -L
检查了所有依赖项是否到位,但是只要操作系统要求我们的插件预览我们支持的文件类型,我们就会得到:
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
是主要应用程序的二进制文件或插件的主要二进制文件,我们可以正常工作,因为我们在包中的两个位置都复制了框架。
有什么想法吗?
理想情况下,我们希望操作系统告诉我们它无法解决的依赖关系 -
是否有可以设置的调试标志..?
答案 0 :(得分:2)
根据https://www.mikeash.com/pyblog/friday-qa-2009-11-06-linking-and-install-names.html和http://www.dribin.org/dave/blog/archives/2009/11/15/rpath/,你应该
@rpath
@loader_path/../Frameworks
@loader_path/../../../../../Frameworks
- 编译,运行,如果其他一切设置正确,一切都应该正常工作。
此外,您可能需要检查插件中的代码签名设置,以确保其中没有任何问题。
您可以做的一件事是从您的应用中删除(或关闭)代码签名,然后查看它是否会加载插件......
要检查代码签名是否有问题,您可以使用终端暂时将其关闭至codesign --remove-signature YourApp.app
并查看其是否有效..
答案 1 :(得分:0)
运行搜索路径应为@loader_path/../../../../../Frameworks
,因为它已安装到Main.app/Contents/Library/QuickLook/QuickLookPlugin.qlgenerator/Contents/Mac/QuickLookPlugin
中,因此我们需要从@loader_path中删除五个文件夹以找到frameworks文件夹。