未加载OS X Framework库:“未找到图像”


279

我正在尝试创建一个基本的OS X框架,现在我只创建了一个测试框架:TestMacFramework.framework并且正在尝试将其导入一个全新的OS X Application项目中。

我已经构建了.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我的容器应用程序构建阶段中添加一个部分,因此我已经完成了此工作并像这样进行设置...

在此处输入图片说明

但是,我仍然遇到运行时错误。我显然在这里做错了,但是此的Apple开发人员库资源引用了Xcode 2,所以不是很有帮助!

我错过了什么?

更新:

我可以在构建日志中看到将我TestMacFramework.framework复制到.app contents / frameworks目录中,但未将其安装到HD上的Library / Frameworks目录中

在此处输入图片说明

更新2:

如果我手动将构建复制TestMacFramework.frameworkLibrary/Frameworks目录中,则构建链接正确


1
什么otool -L告诉您应用程序期望在哪里找到框架?
trojanfoe 2014年

好的,我知道了如何运行...这是我为我的库获得的输出(我已经排除了其他依赖项,例如Foundation等)/Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework (compatibility version 1.0.0, current version 1.0.0)
Sammio2 2014年

我的解决方法是将所需的库作为二进制文件嵌入(Alamofire)。这可以接受吗?
Cmag

2
令人困惑的是,这个问题显然被标记为OS X,并且所有答案(包括已接受的答案)都针对iOS。我有同样的错误,无法使用任何答案。
RenniePet '16

@RenniePet由于Xcode 7.3的过程与iOS和macOS框架相同,因此可接受的答案是正确的方法。如果您仍然遇到问题,可能是无关的问题吗?
Sammio2 '16

Answers:


553

[Xcode 11+]

唯一要做的就是将框架添加到应用目标标签中的General->Frameworks, Libraries And Embedded Content部分General

确保选择“嵌入并签名”选项。

在此处输入图片说明

[Xcode v6-> Xcode v10]

唯一要做的就是将框架添加到应用目标标签中的Embedded binaries部分General

Xcode的屏幕截图


32
这是iOS唯一必要的步骤。
nikolovski

7
谢谢!在iOS上为我解决了。
user1244109

6
谢谢!它为iOS提供了帮助
Alexander Khitev 2015年

4
我在Storyboard中使用了导入框架中的类,并且出现此错误。除了在Storyboard中设置Custom CLASS之外,您还需要设置MODULE字段。
鲁宾·马丁内斯(Ruben Martinez Jr.)

8
@ZevsVU Embedded binaries我的macOS项目中没有此部分。怎么了?
fnc12

56

因此,我设法使其正常工作,如果您有正确的说明,这非常简单。我在寻找的是一个“私有”框架,该框架存在于App捆绑包中,而不是写入系统库文件夹中。

建立框架

  1. 添加目标以创建可可框架
  2. 在该目标的“构建设置”中,将“安装目录”配置为“ @executable_path /../ Frameworks”
  3. 构建库,然后从存档或产品目录访问.framework

包括框架

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

1
这也适用于iOS框架。将自定义框架添加到工作空间以与其一起构建时。您必须添加此解决方案的“包含框架”部分,才能在设备上调试时解决此错误!
cynistersix 2014年

1
谢谢,为iOS工作。我没有遵循您的第一步,因为框架已经构建在我的派生数据文件夹中
Gmeister4

太棒了!拯救了我的怪胎日!2017-Xcode 8.3.2谢谢!
格伦

出于某些奇怪的原因,您不能将框架从默认的“使用库链接二进制文件”部分拖动到“嵌入式框架”部分,但是可以将框架从左侧的“项目”列表中拖动。您仍然必须使用“-”按钮从“使用库链接二进制文件”部分中手动删除该框架。
William Cerniuk '18

18

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


15

上面没有我可能包括的选项。我通过指定运行路径搜索路径解决了它

这是在“ 构建设置 ”标签上。在“ 链接 ”部分。将“ 运行路径搜索路径 ” 更改为$(inherited) @executable_path/Frameworks


我需要这两个步骤,并且需要在此框架之前添加一个新的“复制文件构建阶段”。
23年

我有一个旧的Xcode项目,该项目已进行了增量更新,这些设置对我来说是丢失的。已添加,现在可以按预期工作。
Mattio '19

在所有这些解决方案中,这个解决方案奏效了,真是令人讨厌,问题的处理方式就像“好吧,让我从所有这些stackoverflow帖子列表中删除,因为根本原因尚不清楚” APPLEEEEE
Ryan

9

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

原始帖子中的错误是:

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 

通过此更改,我不再收到错误



7

这些问题都没有为我解决这个问题。最后的问题很简单。看来它是一个非常严重的Xcode错误,我已记录了该问题并已在Apple Bug下修复:29820370。如果您在挣扎(似乎有几页与此类似的问题),那么可以在错误报告者上提出错误:https : //bugreport.apple.com/并引用我提出的错误以获取可见性。我想让Xcode回到以前的乐趣-这是我确定Xcode应该已经修复的东西。

解决方法如下:1.打开钥匙串-转到Apple Worldwide Developer Cert。2.双击它。3.将权限级别从“始终信任”更改为使用系统默认值。4.保存并关闭它。5.重新启动Xcode,清理并构建您的项目,它应该消失了。

正确设置的以下屏幕截图:钥匙串访问已修复 希望这会有所 帮助!


2
“使用系统默认值”似乎是标准设置。
拉斐尔

并非总是如此-似乎有所改变,导致了这种错误
UKDataGeek

谢谢,这也解决了我的问题!不幸的是,我无法在错误跟踪器上看到您的票证以提供其他可见性。我不确定为什么,尽管那里没有任何错误。
吉姆(Jim)

7

Xcode 11:

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

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

在此处输入图片说明


2
如果执行此操作,则您将无法在应用程序商店上载您的应用程序
Mahendra,

@Mahendra,在这种情况下您可以使用什么替代方法?我有一个类似的问题。
Derryl Thomas

@DerrylThomas,该应用程序仍处于开发模式,因此未测试此案例
Mahendra

1
@Mahendra,如果您有其他选择,请在这里分享。我将不胜感激。
Derryl Thomas

@DerrylThomas在创建存档时,还原到“不嵌入”选项,并创建可执行文件以上传到应用商店。
BlackPearl12

6

当您将自定义框架拖到Xcode 10.1下的项目中时,它将假定该框架是系统框架,并将该框架放入目标下“构建阶段”的“将二进制文件与库链接”部分中。

系统框架已在设备上,因此不会被复制到设备上,因此无法在运行时执行,因此会发生KABOOM (__ abort_with_payload崩溃,并提示错误:“原因:找不到图像”)。这是因为框架代码未复制到设备上。

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

要将自定义框架添加到项目中并避免Apple崩溃:

  1. 将自定义框架拖到您的iOS项目文件列表中
  2. 单击导航器中的ProjectName-> TargetName->“ Build Phases”-> Link Binary With Libraries公开三角形
  3. 将自定义框架上下拖动到下面的“复制捆绑资源”部分(Xcode现在移动框架引用,已在Xcode 10中修复)
  4. 在模拟器或设备中运行

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

在此处输入图片说明

[编辑:您会认为 Xcode足够聪明,可以找出不需要复制到设备的系统框架之一与项目根目录层次结构中的自定义框架(哦,我不知道)之间的区别。 ...🙄]


5

在“构建阶段”中应该有一个“运行脚本”,其内容为:“ / usr / local / bin / carthage copy-frameworks”

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

构建阶段运行脚本



4

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


但是,当您分发到App Store时,这将给ITMS-90206无效的Swift支持错误。它仅适用于开发。
猛禽

2

有什么解决它,我是不断变化的abstract_target,以target在我Podfile的主要目标。我之前将其设置为abstract_target,这导致了所描述的错误。现在它就像一个魅力


1

对于Xcode 8,一些过时的产品将从派生数据文件夹中删除,请参考此解决方案

苹果:在macOS 10.12及更高版本中,Xcode会清除过时的派生数据,预编译的标头和模块缓存。(23282174)

Xcode构建系统支持旧文件的旧文件删除,这些文件是在先前的构建中生成的,但此后已从项目中删除。

基于作者的想法,我从我的案例中找到了这个构建日志。

Remove stale build products

/bin/rm -rf /Users/usename/Library/Developer/Xcode/DerivedData/myapp-esvvhwwwwngijeemhatmklwzoxnb/Build/Products/Debug-iphonesimulator/myapp.app/Frameworks/AliyunVodPlayerSDK.framework
/bin/rmdir /Users/usename/Library/Developer/Xcode/DerivedData/myapp-esvvhwwwwngijeemhatmklwzoxnb/Build/Products/Debug-iphonesimulator/myapp.app/Frameworks

创建新的复制文件阶段并将目标陈旧框架复制到Frameworks目标后,以上删除日志将在重建后消失。

请澄清我的情况和原因,希望对您有所帮助。


1

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

出于某种原因,在开发Swift 2.3自定义框架时,Xcode 8已从文件中删除了该DYLIB_INSTALL_NAME_BASE设置project.pbxproj。稍微Build Settings / Dynamic Library Install Name Base走回设置@rpath固定。

(来自https://forums.developer.apple.com/thread/4687


0

我发现此问题仅与代码签名和证书有关,而与代码本身无关。要验证这一点,请创建基本的单视图应用,然后尝试在不对设备进行任何更改的情况下运行它。如果看到相同的错误类型,则表明您的代码正常。像我一样,您会发现您的证书无效。重新下载所有文件并修复所有过期的文件。然后,当您使基本应用程序不报告错误时,请在退出Xcode并可能重新启动Mac后再试一次,以防万一。终于结束了这场噩梦。这很可能与您的代码无关,尤其是当您尝试运行它时,如果收到“ Build Success”消息。费耶


0

在尝试Xcode 9 beta并返回Xcode 8时遇到了问题。对目标进行简单的Clean解决了该问题。


0

我因不同的原因遇到了同样的问题。我已经创建了一个新的调试和发布配置(在PROJECT-> Info选项卡-> Configuration下)。而且我必须更改我的pod框架外壳脚本(在Targets Support Files下的Pods-“ appName” -frameworks.sh)才能正常工作。

[Xcode 9]


0

唯一对我有用的东西:

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


0

我尝试了许多修复程序,但是对我有用的是删除构建方案的“构建”选项卡中列出的丢失的目标。您可以通过打开当前方案的编辑窗口来获得它。

编辑:我的UI测试目标无法正常工作,我发现的解决方案是删除它并再次生成它。


0

打开xcode->常规->嵌入式二进制文件->添加QBImagepicker.framework和RSKImageCropper->清理项目

只需在嵌入式二进制文件中添加QBImagePicker.framework和RSKImageCropper.framework对我有用


0

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

我检查了所有发布在Internet上的方法,例如续订证书,更改Xcode中的设置(上述所有方法),实际上Xcode中的所有设置都已经按照之前的要求进行了设置,但对我而言,没有任何一种方法有效。直到今天早上,当我删除吊舱并重新安装时,一个星期后,错误终于出现了。如果您还使用cocoapod,而错误只是在没有任何特定原因的情况下出现,也许您可​​以尝试我的方法。

  1. 检查我的cocoapods版本。
  2. 如果有可用的新版本,请对其进行更新。
  3. 转到项目文件夹,删除Podfile.lock,Pods文件,项目xcworkspace。
  4. 运行Pod安装

0

我只有在真实设备(iPhone SE)上运行时才遇到该问题。在模拟器上的项目按预期工作。

我确实从这个线程以及从这里尝试了所有修复程序。这些都不对我有用。

对我来说,重新启动iPhone后就解决了问题(原文如此!)。

我做了:

  • 清理构建文件夹,
  • 清理派生数据,
  • 从设备删除应用程序,
  • 重启设备

终于成功了。:)

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.