我的应用程序分为多个框架。
每个框架都将其安装目录 设置为@executable_path/../Frameworks
,链接并复制到主可执行文件Frameworks 文件夹。一切正常。
现在,一些相同的框架被用于单独的屏幕保护程序可执行文件中。
框架被链接、复制、存在于实际的二进制文件中 -
但是屏幕保护程序模块将无法加载并出现以下错误:
Error loading /Users/someuser/Library/Screen Savers/MyScreenSaver.saver/Contents/MacOS/MyScreenSaver: dlopen(/Users/someuser/Library/Screen Savers/MyScreenSaver.saver/Contents/MacOS/MyScreenSaver, 265): Library not loaded: @executable_path/../Frameworks/BusinessBase.framework/Versions/A/BusinessBase
Referenced from: /Users/someuser/Library/Screen Savers/MyScreenSaver.saver/Contents/MacOS/MyScreenSaver
Reason: image not found
看起来屏幕保护程序(作为插件加载)找不到自己引用的框架。
我尝试将屏幕保护程序 Framework Search Path 设置为 @loader_path/../Frameworks
和 @executable_path/../Frameworks
.
运气不好。
还有什么想法可以尝试吗?
最佳答案
FWIW 我已经设法在后期构建脚本中使用一些 install_name_tool
魔法解决了这个问题:
关键是将 executable_path
更改为 loader_path
并为二进制调用使用正确的相对路径各自的框架。
关于objective-c - 带有捆绑自定义框架的 Cocoa 屏幕保护程序插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24716405/