我们有一个可用的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
任何可能导致此问题的想法?
答案 0 :(得分:9)
问题是由于某种原因,在这个新目标中,Runpath搜索路径是空白的。我通过添加以下内容解决了这个问题:
@executable_path/../Frameworks @loader_path/../Frameworks
到它(我从工作的屏幕保护程序配置中获取)。这就是它的样子:
答案 1 :(得分:3)
就像Pablo所说,你需要以下作为运行时搜索路径:
@executable_path/../Frameworks @loader_path/../Frameworks
这应该是默认值。确保它在那里。 如果您使用的是Swift,还需要将嵌入式内容包含Swift代码设置为YES 。我花了一段时间才弄明白。
(Xcode应该完全推断出来。哦,好吧。我已经提交了一段雷达了。)