启动应用程序时出错"库未加载"

sim*_*nbs 5 macos cocoa frameworks

我创建了一个使用RMSharedPreferences框架的Mac应用程序.打开应用程序时,它立即崩溃,我收到以下错误:

Dyld Error Message:
  Library not loaded: @rpath/RMSharedPreferences.framework/Versions/A/RMSharedPreferences
  Referenced from: /Users/USER/Desktop/MyApp.app/Contents/MacOS/MyApp
  Reason: image not found
Run Code Online (Sandbox Code Playgroud)

似乎找不到框架.我已经尝试将复制文件阶段添加到目标,该目标应该复制框架,当在Finder中浏览应用程序的内容时,它似乎被正确复制.

有谁知道什么可能导致这个错误?

编辑:将框架设置为可选确实使应用程序启动没有任何错误,应用程序不能完全工作.任何与RMSharedPreferences相关的调用都将被忽略.

复制框架. 应用程序的内容.

ser*_*gio 10

由于您将框架与应用程序捆绑在一起,因此应设置框架的安装位置.您可以在框架目标构建设置"安装位置"中设置它.使用类似的东西:

@executable_path
Run Code Online (Sandbox Code Playgroud)

您还可以为框架使用单独的文件夹,然后您将使用:

@executable_path/../Frameworks/
Run Code Online (Sandbox Code Playgroud)

如果您无法重建框架(这不是您的,但我一般说),您可以修改预构建的框架安装路径,如下所示:

install_name_tool -id @executable_path/../Frameworks/<framework_name> <your_framework>
Run Code Online (Sandbox Code Playgroud)

在这里你可以找到这方面的参考.

如果要将框架捆绑到另一个框架中,则可以使用@loader_path而不是@executable_path.


Nat*_*las 5

@rpath是更灵活的关键字,建议使用它。

更好的方法是在Xcode中设置“运行路径搜索路径”构建设置。

这避免了需要额外的构建阶段脚本来修改框架。

例如,根据您的情况,您可以将“运行路径搜索路径”设置为

@executable_path/../Frameworks
Run Code Online (Sandbox Code Playgroud)

要么

@loader_path/../Frameworks
Run Code Online (Sandbox Code Playgroud)

如果您尝试从框架内加载框架。