OS X框架库未加载:'图像未找到'

我正在尝试创建一个基本的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

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

enter image description here

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

我错过了什么?

更新:

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

enter image description here

更新2:

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

277813 次浏览

所以我设法让它工作了,只要你有正确的指令,这很简单。我所寻找的是一个“私有”框架,它存在于App包中,而不是被写入系统库文件夹。

构建框架

  1. 添加目标以创建Cocoa Framework
  2. 在目标“构建设置”中将“安装目录”配置为“@executable_path/../Frameworks”
  3. 构建库,并从存档或产品目录中访问.framework

包括框架

  1. 将创建的。framework文件拖到Xcode项目中,确保勾选“复制文件到目录”
  2. 在包含应用程序的目标中,添加一个新的“Copy File Build Phase”
  3. 将“目标”设置为“框架”
  4. 拖入已创建的.framework

这对我来说很简单,我只是把我的框架添加到我的app目标下的嵌入式二进制文件中

(Xcode 11 +)

唯一要做的是将框架添加到你的应用目标的General选项卡的General->Frameworks, Libraries And Embedded Content部分。

确保你选择了Embed &符号”选项。

enter image description here

[Xcode v6 ->]

唯一要做的是将框架添加到你的应用目标的General选项卡的Embedded binaries部分。

截图from Xcode

删除派生数据为我保存了它

如果你不小心重置了你的钥匙链,这可能是由于在钥匙链中丢失了苹果证书。我遵循来解决我的问题。

我也遇到了同样的问题,并通过重新下载WWDR(苹果全球开发者关系认证机构)来解决。 从这里下载:http://developer.apple.com/certificationauthority/AppleWWDRCA.cer

以上的选项,我不可能包括。 我通过指定Runpath Search Path

来解决这个问题

这是在'建立设置'标签上。 在` 链接 `部分中。 将'跑道搜寻路径'更改为$(inherited) @executable_path/Frameworks

应该有一个“运行脚本”到“构建阶段”:'/usr/local/bin/carthage copy-frameworks'

在“运行脚本”的“输入文件”中,您应该将路径添加到库中。是这样的:

Build Phases Run Script

这些问题都没有解决我的问题。最后这个问题相当简单。这看起来像是一个相当大的Xcode错误,我已经记录了这个问题,并在Apple bug: 29820370下进行了修复。如果你正在挣扎(似乎有几页类似的问题),那么如果你能在bug reporter: https://bugreport.apple.com/上提出一个bug,并引用我提出的bug以获得可见性,那就太好了。我想让Xcode回到它以前的快乐——这是我确信Xcode应该自己解决的问题。

以下是解决方案: 1. 打开钥匙串-去苹果全球开发者证书。 2. 双击它 3.将权限级别从“始终信任”更改为使用“系统默认” 4. 保存并关闭 5. 重新启动Xcode,清理并构建项目,它应该消失了。< / p > 下面是正确设置的截图: Keychain access fixed 希望这能有所帮助!< / p >

我发现这个问题只与代码签名和证书有关,而与代码本身无关。为了验证这一点,创建基本的单视图应用程序,并尝试在不对设备进行任何更改的情况下运行它。如果您看到相同的错误类型,这表明您的代码是正常的。和我一样,你会发现你的证书是无效的。重新下载并修复任何过期的文件。然后,当你得到基本的应用程序不报告错误后,退出Xcode重新尝试你的应用程序,也许重新启动你的mac。这场噩梦终于结束了。这很可能与您的代码无关,特别是当您试图运行它时,您会得到构建成功的消息。仅供参考

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

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

原帖子中的错误是:

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

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

otool -D MyFramework.framework/MyFramework

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

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

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

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

我有同样的问题,但原因不同。 我已经创建了一个新的配置调试和发布(在项目->信息选项卡->配置)。 我不得不改变我的pod框架shell脚本(Pods-"appName"-frameworks.sh,在目标支持文件下)使其工作

Xcode [9]

对我来说,这就是解决方案,经过许多小时的搜索!!

出于某种原因,在Swift 2.3自定义框架的开发过程中,Xcode 8从project.pbxproj文件中删除了DYLIB_INSTALL_NAME_BASE设置。走进Build Settings / Dynamic Library Install Name Base设置回到@rpath修复了它。

(从https://forums.developer.apple.com/thread/4687)

唯一对我有用的是:

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

我尝试了许多修复,但对我有效的是删除构建方案的构建选项卡中列出的缺失目标。您可以通过打开当前方案的编辑窗口来访问它。

编辑:我的UI测试目标不能正常工作,我找到的解决方案是删除它并重新生成它。

打开xcode ->通用->嵌入式二进制文件->添加QBImagepicker.framework和RSKImageCropper ->清洁项目

只要在嵌入式二进制文件中添加QBImagePicker.framework和RSKImageCropper.framework就可以了

为我解决这个问题的是将Podfile中的主要目标abstract_target更改为target。我之前已经将其设置为abstract_target,这导致了所描述的错误。现在它就像一个魔法

当你在Xcode 10.1下将一个自定义框架拖到一个项目中,它假设表明该框架是一个系统框架,并将该框架放入目标下“Build Phases”的“Link Binary With Libraries”部分。

系统框架已经在设备上,所以它没有复制到设备上,因此不能在运行时执行,所以KABOOM(在__abort_with_payload中崩溃,并提示错误:"Reason: image not found")。这是因为框架代码没有复制到设备…

实际上,要让Xcode链接自定义框架,并确保它与你的代码一起复制到iOS设备(真实或模拟器),自定义框架需要移动到“复制捆绑资源”。这最终将框架与可执行代码一起打包,以便在设备上可用。

为项目添加自定义框架并避免Apple崩溃:

  1. 拖自定义框架到你的iOS项目文件列表
  2. 在Navigator -> TargetName -> "Build Phases" -> .单击ProjectName 链接二进制与库披露三角
  3. 拖出自定义框架并向下到下面的“复制Bundle资源”部分(Xcode现在移动框架引用,在Xcode 10中固定)
  4. 在模拟器或设备中运行

因此,自定义框架将与您的代码一起复制到目标设备,并在运行时可用。

enter image description here

[编辑:你会认为 Xcode会足够聪明,找出它的一个系统框架,不需要复制到设备和自定义框架之间的区别,哦,我不知道,在项目根目录层次结构中……🙄]

我认为没有固定的方法来解决这个问题,因为它可能是由不同的原因引起的。我上周也有这个问题,我不知道什么时候以及究竟是什么原因导致了这个问题,只有当我用Xcode在模拟器上运行它或试图将它安装到手机上时,它才会报告这种错误,但当我用react-native run-ios与终端运行它时,没有问题。

我检查了网上发布的所有方法,比如更新证书,更改Xcode中的设置(上面提到的所有方法),实际上Xcode中的所有设置都已经按照要求设置了,没有一种方法适合我。直到今天早上,当我删除吊舱并重新安装时,错误终于在一周后出现。如果你也在使用cocoapod,然后错误就出现了,没有任何特定的原因,也许你可以试试我的方法。

  1. 看看我的cocoapods版本。
  2. 如果有可用的新版本,请更新它。
  3. 转到项目文件夹,删除Podfile。锁,Pods文件,项目xcworkspace。
  4. 运行pod安装

如果您正在使用Xcode 11,请确保在目标设置-常规下的框架、库和嵌入内容中添加了该框架。将嵌入状态从- “不要嵌入”更改为的嵌入,标志的

Xcode 11:

在Xcode 11中添加框架到General->Frameworks, Libraries And Embedded Content

添加后确保选择Embed & Sign选项

enter image description here

我只在真正的设备(iPhone SE)上运行时遇到过这个问题。在模拟器项目工作如预期。

我确实尝试了这个线程和在这里中的所有修复。

对我来说,重启iPhone后问题就解决了。

我做了:

  • 清洁构建文件夹,
  • 干净的衍生数据,
  • 从设备上删除app
  • 重新启动设备

最终成功了。:)

如果其他解决方案都失败了,不要忘记尝试一下。

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

enter image description here

这可能发生在Pod Frameworks。 我在AnswerBotProvidersSDK.framework中也面临同样的问题,我的错误是,我在目标构建阶段设置了运行脚本检查只安装版本

不正确的设置:

enter image description here

正确设置:

enter image description here

对我来说,由于某种原因xCode(到目前为止12.5)决定我的通知服务扩展目标不应该有正确的框架路径。我怀疑这发生在我从xCode 12.1更新到12.5之后。

所以我得到了与我的一个内部框架相关的相同错误。要解决这个问题,请执行以下操作:

  1. 进入项目的General选项卡

  2. 选择你的目标(在我的例子中是通知服务扩展目标)

  3. 确保Framework and Libraries部分包含你缺少的框架。我在我的NSE目标中留下了Embed Without Signing,但它也与Embed & Sign一起添加到我的主要应用程序目标

  4. 保持目标选中并切换到Build Settings选项卡

  5. 在搜索栏中输入LD_RUNPATH_SEARCH_PATHS(确保将显示All可能的设置,而不仅仅是Basic)

  6. 你会看到Runpath Search Paths,它是空的。

  7. 在这里添加3个以下值:

    • $(继承)
    • @executable_path /框架
    • @executable_path / . . / . . /框架

这对我很有帮助。

我在Xcode 13 beta版中使用uniformtypeidentifier .framework遇到了这个问题。该应用程序无法在低于13的iOS版本上运行。 下面的方法解决了这个问题:

去目标->构建阶段用库链接二进制文件添加框架→添加状态为"可选" 添加有问题的框架 以上方法对我来说非常有效!希望这能有所帮助!< / p >