由于未加载库,MacOSX屏幕保护程序未加载:@ rpath / libswiftAppKit.dylib

时间:2015-03-10 09:47:31

标签: xcode macos cocoa screensaver

我们有一个可用的Mac OS X屏幕保护程序作为一个独立的Xcode项目,但我们需要将它作为另一个Xcode项目中的目标,该项目还包含一个相关的应用程序。

我为屏幕保护程序添加了一个目标,复制了代码,添加到该目标等等。代码与在另一个屏幕保护程序中工作的代码相同,但在这个代码上,它会生成以下错误:

2015-03-10 09:43:24.766 System Preferences[32495]: Error loading /Users/pupeno/Library/Screen Savers/Ninja.saver/Contents/MacOS/Ninja:  dlopen(/Users/pupeno/Library/Screen Savers/Ninja.saver/Contents/MacOS/Ninja, 265): Library not loaded: @rpath/libswiftAppKit.dylib
  Referenced from: /Users/pupeno/Library/Screen Savers/Ninja.saver/Contents/MacOS/Ninja
  Reason: image not found
2015-03-10 09:43:24.766 System Preferences[32495]: ScreenSaverModules: can't get principalClass for /Users/pupeno/Library/Screen Savers/Ninja.saver

有问题的图书馆绝对存在:

$ ls -w1 Library/Screen\ Savers/Ninja.saver/Contents/Frameworks/
libswiftAppKit.dylib
libswiftCore.dylib
libswiftCoreGraphics.dylib
libswiftDarwin.dylib
libswiftDispatch.dylib
libswiftFoundation.dylib
libswiftObjectiveC.dylib
libswiftQuartzCore.dylib
libswiftSecurity.dylib

任何可能导致此问题的想法?

2 个答案:

答案 0 :(得分:9)

问题是由于某种原因,在这个新目标中,Runpath搜索路径是空白的。我通过添加以下内容解决了这个问题:

@executable_path/../Frameworks @loader_path/../Frameworks

到它(我从工作的屏幕保护程序配置中获取)。这就是它的样子:

enter image description here

答案 1 :(得分:3)

就像Pablo所说,你需要以下作为运行时搜索路径

@executable_path/../Frameworks @loader_path/../Frameworks

这应该是默认值。确保它在那里。 如果您使用的是Swift,还需要将嵌入式内容包含Swift代码设置为YES 。我花了一段时间才弄明白。

(Xcode应该完全推断出来。哦,好吧。我已经提交了一段雷达了。)