ChatGPT解决这个技术问题 Extra ChatGPT

未加载 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 部分,所以我已经完成了这个并像这样设置它......

https://i.stack.imgur.com/CmGGY.png

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

我错过了什么?

更新:

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

https://i.stack.imgur.com/KuVbd.png

更新 2:

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

otool -L 告诉您应用程序希望在哪里找到框架?
好的,我想出了如何运行它...这是我为我的库获得的输出(我已经排除了其他依赖项,如 Foundation 等)/Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework (compatibility version 1.0.0, current version 1.0.0)
我的解决方法是将我需要的库(Alamofire)嵌入为二进制文件。这可以接受吗?
令人困惑的是,这个问题被明确标记为针对 OS X,并且所有答案,包括接受的答案,都是针对 iOS 的。我有同样的错误,不能使用任何答案。
@RenniePet 由于 Xcode 7.3 的过程对于 iOS 和 macOS 框架是相同的,因此接受的答案是正确的方法。如果您仍然遇到问题,这可能是一个无关的问题?

K
Kappe

[Xcode 11+]

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

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

https://i.stack.imgur.com/ZuCyy.png

[Xcode v6 -> Xcode v10]

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

https://i.stack.imgur.com/T4g6I.png


这是 iOS 唯一需要的步骤。
我在 Storyboard 中使用我导入的框架中的一个类并且遇到了这个错误。只是想补充一点,除了在 Storyboard 中设置自定义 CLASS 之外,您还必须设置 MODULE 字段。
我被困了一天。太感谢了
即使这样做了,我仍然遇到同样的错误
@ZevsVU 我的 macOS 项目中没有 Embedded binaries 部分。怎么了?
S
Sammio2

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

构建框架

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

包括框架

将创建的 .framework 文件拖到 Xcode 项目中,一定要勾选 'Copy Files to Directory' 在包含的应用程序目标中,添加一个新的 'Copy File Build Phase' 将 'Destination' 设置为 'Frameworks' 在创建的 .框架


这也适用于 iOS 框架。将自定义框架添加到工作区以与其一起构建时。在设备上调试时,您必须添加此解决方案的包括框架部分才能解决此错误!
谢谢,为iOS工作。我没有按照您的第一步,因为框架已经构建在我的派生数据文件夹中
惊人的!拯救了我该死的一天! 2017 - Xcode 8.3.2 谢谢!
由于某些奇怪的原因,您不能将框架从默认的“Link Binary with Libraries”部分拖到“Embedded Frameworks”部分,但您可以从左侧的 Projects 列表中拖拽框架。您仍然需要使用“-”按钮从“Link Binary With Libraries”部分手动删除框架。
“私有框架”是什么意思?我创建了一个类似于你的框架,你能告诉我如何识别我的框架是否是私有框架吗?
R
Robin Delaporte

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


V
Vincent

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

它位于“构建设置”标签上。在“链接”部分。将“Runpath Search Paths”更改为 $(inherited) @executable_path/Frameworks


我需要这两个步骤,这一步并在之前的框架中添加一个新的“复制文件构建阶段”。
我有一个旧的 Xcode 项目,该项目已逐步更新,而我缺少这些设置。添加并现在按预期工作。
在所有这些解决方案中,这个解决方案很烦人,解决问题的方法就像“好吧,让我看看所有这些 stackoverflow 帖子的列表,因为根本原因尚不清楚” APPLEEEEE
A
Amos Joshua

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

原帖中的错误是:

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 

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


这是一个很好的答案!移动框架/dylib 文件不会改变其原始路径。此处的步骤需要与已接受答案中的步骤结合使用。
S
SleepsOnNewspapers

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


对我不起作用,但是当我执行 pod install 时它起作用了。
U
UKDataGeek

这些问题都没有为我解决这个问题。最后的问题很简单。看起来它是一个非常重要的 Xcode 错误,我已经记录了这个问题并在 Apple 错误下修复:29820370。如果你正在苦苦挣扎(因为似乎有几页类似的问题),那么如果你能在错误报告器上提出错误:https://bugreport.apple.com/ 并参考我提出的错误以获得可见性。我想让 Xcode 恢复到以前的乐趣——这是我确信 Xcode 应该自己解决的问题。

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

https://i.stack.imgur.com/TemNv.jpg


“使用系统默认值”似乎是标准设置。
并非总是如此-似乎有些东西会改变它,从而导致该错误
谢谢这也解决了我的问题!不幸的是,我无法在错误跟踪器上看到您的票证以提供额外的可见性。我不知道为什么,但它没有显示任何错误。
谢谢,这就是问题所在。我有 2 个这样的证书,一个在另一个之后不久到期。一开始我改错了。现在它们都设置好了,问题就消失了。
C
Cerniuk

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

系统框架已经在设备上,因此它不会被复制到设备上,因此无法在运行时执行,所以 KABOOM(在 __abort_with_payload 中崩溃,并告知错误:“原因:找不到图像”)。这是因为框架代码没有复制到设备上...

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

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

将自定义框架拖到您的 iOS 项目文件列表中单击导航器中的项目名称 -> 目标名称 -> “构建阶段” -> 将二进制文件与库链接显示三角形 将自定义框架向下拖动到下面的“复制捆绑资源”部分(Xcode 现在移动框架参考,在 Xcode 10 中修复)在模拟器或设备中运行

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

https://i.stack.imgur.com/yMVOc.jpg

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


S
Saifan Nadaf

Xcode 11:

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

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

https://i.stack.imgur.com/fMXk0.png


如果您这样做,那么您将无法在应用商店上传您的应用
@Mahendra,在这种情况下您使用的替代方法是什么?我有一个类似的问题。
@DerrylThomas,该应用程序仍处于开发模式,所以没有测试这个案例
@Mahendra,请在此处分享,以防您找到替代方案。我将不胜感激。
@DerrylThomas 创建存档时,恢复到 , Do Not Embed 选项并创建可执行文件以上传到应用商店。
t
thacilima

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

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

https://i.stack.imgur.com/Gh9jU.png


u
user1742302

如果您不小心重置了钥匙串,这可能是因为钥匙串中缺少 Apple 证书。我按照 this 解决了我的问题。

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


这也解决了我的问题。记得在重新编译之前清理 build 文件夹。
S
Sachin Nautiyal

如果您使用的是 Xcode 11,请确保在 Target settings - General 下的 Frameworks、Libraries 和 Embed Content 中添加了框架。将嵌入状态从“不嵌入”更改为“嵌入并签名”


但这会在您分发到 App Store 时出现 ITMS-90206 Invalid Swift Support 错误。它仅适用于开发。
F
Francesco D.M.

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


I
Itachi

对于 Xcode 8,一些过时的产品将从派生数据文件夹中删除,请参阅 this solution

苹果:In macOS 10.12 and later, Xcode cleans up stale derived data, precompiled headers, and module caches. (23282174)

The Xcode build system supports stale file removal of some types of build artifacts that were produced in a previous build, but have since been removed from the project.

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

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 目的地后,上述删除日志在重建后消失。

只是澄清我的情况和原因,希望它对某人有所帮助。


M
Milo

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

出于某种原因,在 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


N
Nithyashree

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

https://i.stack.imgur.com/ZoT3P.png


i
iOS4Fun

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


X
Xavier

在尝试 Xcode 9 beta 并返回 Xcode 8 时遇到问题。目标上的简单清理解决了该问题。


Y
Yuval

由于不同的原因,我遇到了同样的问题。我已经为调试和发布创建了一个新配置(在项目 -> 信息选项卡 -> 配置下)。而且我必须更改我的 pod 框架 shell 脚本(Pods-"appName"-frameworks.sh ,在 Targets Support Files 下)才能使其正常工作。

[Xcode 9]


N
Neil

唯一对我有用的东西:

Target > Build Phases > [CP] Embed Pods Frameworks 取消选中“在构建日志中显示环境变量”和“仅在安装时运行脚本”


G
Gonzalo

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

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


A
Agustiar

打开 xcode -> 常规 -> Embedded Binaries -> 添加 QBImagepicker.framework 和 RSKImageCropper -> 清理项目

只需在为我工作的嵌入式二进制文件中添加 QBImagePicker.framework 和 RSKImageCropper.framework


s
sanyassh

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

我检查了互联网上发布的所有方式,例如更新证书,更改 Xcode 中的设置(上面提到的所有方式),实际上 Xcode 中的所有设置都已经按照之前的要求进行了设置,没有一种方式适合我。直到今天早上我删除 pod 并重新安装时,错误终于在一周后消失了。如果你也在使用 cocoapod,然后错误只是出现而没有任何具体原因,也许你可以试试我的方法。

检查我的 cocoapods 版本。如果有新版本可用,请更新它。转到您的项目文件夹,删除您的 Podfile.lock 、Pods 文件、项目 xcworkspace。运行 pod 安装


v
vandermesis

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

我确实从这个线程和 here 尝试了所有修复。这些都不适合我。

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

我做了:

清理构建文件夹,

清洁派生数据,

从设备中删除应用程序,

重启设备

它终于奏效了。 :)

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


重启设备,关灯,退出房间,上厕所再回来……这就是iOS上的问题解决方法。哈哈。尝试了上述解决方案,但它对我不起作用。
我想你可能会在整个过程中忘记屏住呼吸。据我记得,在 Atari 65 XE 上加载程序时它确实很有帮助。
O
Ofir Malachi

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

https://i.stack.imgur.com/wV7HJ.png


S
Sunil Targe

Pod Frameworks 可能会发生这种情况。我在使用 AnswerBotProvidersSDK.framework 时遇到了同样的问题,我的错误是,我在目标构建阶段设置了 Run Script 检查 Install builds only

不正确的设置:

https://i.stack.imgur.com/xdYre.png

正确设置:

https://i.stack.imgur.com/PYC8s.png


d
daxh

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

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

转到项目的常规选项卡选择您的目标(在我的情况下它是通知服务扩展目标)确保框架和库部分包含您缺少的框架。我在我的 NSE 目标中留下了嵌入而不签名,但它也通过嵌入和签名添加到我的主要应用程序目标保持选中目标并切换到构建设置选项卡在搜索栏中输入 LD_RUNPATH_SEARCH_PATHS(确保所有将显示可能的设置,而不仅仅是基本)您将看到运行路径搜索路径,它对我来说是空的。在此处添加 3 个以下值: $(inherited) @executable_path/Frameworks @executable_path/../../Frameworks

这对我有帮助。