objective-c - 带有捆绑自定义框架的 Cocoa 屏幕保护程序插件

标签 objective-c macos cocoa frameworks screensaver

我的应用程序分为多个框架。
每个框架都将其安装目录 设置为@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/

相关文章:

ios - 调用插页式 iAd 只工作一次

macos - Mac OS X : Print directly from file/URL?

macos - 在 Automator 中将图像调整为特定的像素宽度和高度

cocoa - 从 `NSStatusItem` 创建的 `main()` 未显示在系统状态栏上

ios - 可调整大小图像的便捷方法

ios - SKLabelNode 多行

ios - 是否有一种 API 可以让人们通过 USB 将 iOS 应用程序与其 OSX 应用程序同步?

cocoa - 如何让 NSView 移动到所有 NSView 的前面

objective-c - iPhone : Unable to understand the following coding

ios - Firebase signInWithEmail 函数是否在主线程中运行?