dyld: 库未加载:@rpath/libswiftCore.dylib / 未找到图像

82

我正在从Xcode将我的应用程序运行到iOS设备上,但在iOS设备上出现了这个黑屏。

控制台信息:

dyld: Library not loaded: @rpath/libswiftCore.dylib
Referenced from: /private/var/mobile/Containers/Bundle/Application/10DB2FE8-EF09-4857-B4AC-0DB2E4419D6F/App-Name.app/App-Name           
Reason: image not found        
(lldb)

新增截图


你使用哪些框架?你的设备运行的是哪个iOS版本? - return true
@return true - iOS 8 我的游戏中有以下框架:UIKit、AdSupport、CoreGraphics、AudioToolbox、AVFoundation、CoreTelephony、MessageUI、SystemConfiguration、Accelerate、Foundation、SpriteKit。我把它们都写下来了:D - Stig Omdal
可能是重复的问题:dyld: Library not loaded: @rpath/libswift_stdlib_core.dylib - Sruit A.Suk
我在换了新的Mac电脑后遇到了这个问题。原因是缺少苹果WWDR中间证书。 - Morten Holmgaard
在真实设备上,我测试了所有的方法都没有得到答案,但最终我从我的项目中移除了 CocoaPod 并重新安装它,问题得到解决,我的应用程序在设备上运行了!这就是移除 CocoaPod 的答案:stackoverflow.com/a/34765245/2201814。 - MHSaffari
显示剩余5条评论
30个回答

90
将以下行添加到您的目标的运行路径搜索路径中。
@executable_path/Frameworks

your_target -> 构建设置 -> 链接 -> 运行路径搜索路径


55
在我的“运行路径搜索路径”中,默认已经包含了这个。 - S P Balu Kommuri
3
解决了!谢谢!我建议也清理一下项目:shift + cmd + k - ric
在我的情况下,这个错误是发生在我合并了另一个分支后,我在那里创建了一个今日扩展(小部件)。在合并冲突之后,我的合并小部件目标的运行路径不知何故已经损坏,并且不包含正确的运行路径。当跳回到合并前的小部件时,我注意到它有这两个运行路径:@executable_path/Frameworks @executable_path/../../Frameworks(除了$(CONFIGURATION_BUILD_DIR))。 - Sti
在我的情况下,我创建了两个目标,并添加了一个Swift文件,该文件创建了一个桥接头文件和一些配置,但我只将其标记为一个目标的成员。第一个目标正常工作,但第二个目标不行,我注意到构建设置中的差异是这个设置: Runpath Search Paths -> $(inherited) and @executable_path/Frameworks 我还需要将Objective-C Bridging Header引用到之前创建的文件中。 添加这两个设置后,第二个目标开始正常工作。 - Diego Carrera

51
在以下位置添加框架:
  1. 常规 > 嵌入式二进制文件
  2. 常规 > 链接的框架和库
  3. 构建阶段 > 链接二进制文件和库
对我来说,嵌入式二进制文件似乎是关键。

3
嵌入式二进制文件!这似乎是其他许多答案中缺失的关键点,对我来说很重要。 - bitwit
这个问题出现在我引用“SharedCode.framework”时。在应用程序Target>General>"Embedded Binaries"中添加“.framework”解决了这个问题。 - Alphonse R. Dsouza

29
@executable_path/Frameworks添加到项目的运行路径搜索路径,而不是目标。 enter image description here your_project -> Build Settings -> Linking -> Runpath Search Paths

15
通过删除Xcode的Derived Data目录,一切问题都得到了解决。

是的,这对我有用。我之前只删除了特定项目的派生数据,但需要删除Xcode的派生数据文件夹。谢谢。 - vikzilla
6
派生数据在哪里? - JW.ZG
2
可以在 Xcode -> 首选项 -> 位置 中找到 DerivedData 目录,然后单击箭头以进入该目录。 - Caroline

13
在您的构建设置>构建选项下,将“始终嵌入Swift标准库”设置为“是”。

dyld: Library not loaded: @rpath/libswiftCore.dylib

不要忘记在项目之后按下Shift+Cmd+K。

2
谢谢,"别忘了完成项目后按shift+cmd+K"这个建议对我有用 :) - Saleh Enam Shohag

11

更新了带有Swift对象的Obj-C嵌入式框架后,我必须将“嵌入式内容包含Swift代码”切换为“是”,才能让我的Obj-C应用程序正常工作。


11
在 Framework Target(不是 app target)中,进入 Build Settings > Build Options > 将 Always Embed Standard Swift Libraries 设置为 YES。

1
对我来说可以运行,但是在将“始终嵌入标准 Swift 库”设置为 YES 后需要进行清理构建(shift+cmd+K)。 - Saleh Enam Shohag

9

在一个命令行项目中,我遇到了这个错误(Xcode 10.2和macOS 10.14.3)

解决方法是升级到macOS 10.14.4

如果没有安装Swift 5运行时支持命令行工具包,则在macOS 10.14.3及更早版本上无法运行Swift命令行项目。没有这个包,Swift命令行项目在启动时会崩溃,并显示“dyld:Library not loaded”错误。(46824656)

来源:Xcode 10.2的Swift 5发行说明


这个解决了我的问题。甚至连一个简单的命令行应用程序都无法运行,总是出现dlyd错误。 - RobertJoseph
这对我也起作用。我在一个全新的Swift项目(hello world)中遇到了这个错误,操作系统版本为10.14.3。升级到10.14.4后就可以了。 - Ross Tajvar

8
在我的情况下,这个问题出现在一个 Objective-C 项目中,我正在使用一个 Swift 框架 (AirWatch SDK)。
解决方案: 我已经按照下面的步骤,使用 Xcode 9.3 和 11.0.1 iOS 解决了这个问题:
1. 将你的 Swift 框架拖放到项目中,并将其移动到项目的默认 Framework 文件夹中。 2. 然后将它们添加为嵌入式二进制文件,如截图所示。 3. 将你的框架状态从“必需”更改为“可选”,如截图所示。 (Build Phases > Link Binary with Library)

enter image description here

  1. 在您的构建设置中将始终嵌入Swift标准库设置为

  2. 在“Build Phases>嵌入框架”中,设置子路径并选择目标为Framework以添加的框架,如屏幕截图所示。 enter image description here

希望能对某些人有所帮助。


如果我们将框架设置为可选项,那么我们在代码中访问的框架类将会是nil。你有什么解决方案吗? - Vijay
请问您是如何获取这个AirWatch SDK的?我在使用它时遇到了一些问题。这是我的问题链接:https://stackoverflow.com/questions/53023149/how-can-i-download-airwatch-ios-sdk - Alex
谢谢!这是唯一有效的解决方案!+1 - batman
@akdsouza 很高兴听到这个好消息 :) - Aashish1aug

5
我曾经遇到过相同的问题,设置正确的代码签名身份解决了问题(构建设置->代码签名身份)。
根据苹果技术问题 Apple,“自iOS 8发布以来创建的所有企业和标准iOS开发人员证书都在正确的位置上具有新的Team ID字段,允许Swift语言应用程序运行”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接