我试图创建一个基本的OS X框架,现在我刚刚创建了一个测试框架:TestMacFramework.framework,我试图将它导入到一个全新的OS X应用程序项目。

我已经构建了.framework文件并将其导入到新项目中,框架链接正常,我可以引用我添加到框架构建阶段部分的公共头文件。

然而,当我尝试运行容器应用程序时,我得到以下错误:

dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework
  Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer
  Reason: image not found

在谷歌了一下之后,我意识到我需要在我的容器应用程序构建阶段添加一个复制文件部分,所以我已经这样做了,并像这样设置它…

然而,我仍然得到运行时错误。显然我在这里做错了什么,但是苹果开发者库的资源引用了Xcode 2,所以不是很有帮助!

我错过了什么?

更新:

我可以在构建日志中看到我的TestMacFramework.framework被复制到.app contents/frameworks目录中,但它没有被安装到HD上的Library/ frameworks目录中

更新2:

如果我手动将TestMacFramework.framework复制到Library/Frameworks目录中,构建链接是正确的


当前回答

当尝试Xcode 9测试版并返回到Xcode 8时,出现了问题。对目标进行简单的Clean就解决了这个问题。

其他回答

上面的选项对我来说不可能包括。 我通过指定Runpath搜索路径来解决这个问题

这是在“构建设置”选项卡上。 在“链接”部分。 将“Runpath Search Paths”更改为$(inherited) @executable_path/Frameworks

我遇到了同样的问题,但公认的解决方案并不适合我。相反,解决方案是修改框架的安装名称。

原帖子中的错误是:

dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework
  Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer
  Reason: image not found

注意Library未加载后的第一个路径。框架是从绝对路径加载的。这个路径来自框架的安装名(有时称为rpath),可以使用以下方法检查:

otool -D MyFramework.framework/MyFramework

当一个框架被嵌入到一个应用程序中时,这个路径应该是相对的,并且是这样的形式:@rpath/MyFramework.framework/MyFramework。如果你的框架的安装名称是一个绝对路径,它可能不会在运行时被加载,并且会产生类似上面的错误。

解决方案是修改安装名称:

install_name_tool -id "@rpath/MyFramework.framework/MyFramework" MyFramework.framework/MyFramework 

有了这个更改,我不再得到错误

唯一对我有用的是:

目标>构建阶段> [CP]嵌入Pods框架 取消勾选“在生成日志中显示环境变量”和“仅在安装时运行脚本”

Xcode 11: 构建阶段->嵌入框架

Xcode 11:

在Xcode 11中将框架添加到通用->框架,库和嵌入式内容

添加后,确保你选择嵌入和签名选项