dyld:库未加载:@rpath/libswiftCore.dylib。

465

我正在尝试在我的iPhone 4s上运行一款Swift应用程序。它在模拟器上运行良好,我的朋友也可以在他的iPhone 4s上成功运行它。我使用的是iOS 8和Xcode 6正式版本。

我已经尝试了以下:

  • 重启Xcode、iPhone、电脑
  • 清理并重新构建
  • 吊销并创建新的证书/配置文件
  • Runpath搜索路径为$(inherited) @executable_path/Frameworks
  • 嵌入内容包含Swift代码是'Yes'
  • 代码签名标识是开发者

下面是完整的错误信息:

dyld: Library not loaded: @rpath/libswiftCore.dylib
  Referenced from: /private/var/mobile/Containers/Bundle/Application/LONGSERIALNUMBER/AppName.app/AppName
  Reason: no suitable image found.  Did find:
    /private/var/mobile/Containers/Bundle/Application/LONGSERIALNUMBER/AppName.app/Frameworks/libswiftCore.dylib: mmap() error 1 at
address=0x008A1000, size=0x001A4000 segment=__TEXT in Segment::map() mapping
/private/var/mobile/Containers/Bundle/Application/LONGSERIALNUMBER/APPLICATION_NAME/Frameworks/libswiftCore.dylib

2
可能是一个重复问题:dyld: Library not loaded: @rpath/libswift_stdlib_core.dylib - Sruit A.Suk
4
清理并重新构建对我有用。 - MoralCode
解决方案在这里。同一主题。 - Tarik
清理并重新构建我的项目,使其能够正常工作。 - Syed Zahid Shah
我曾经遇到过同样的问题... 我通过添加以下内容解决了它:在您的podfile中:使用 use_modular_headers! 代替 use_frameworks!祝好运!希望这对你有用! - XtremeDevX
59个回答

582

对我来说之前的解决方案都不起作用。我们发现在构建设置中有一个“始终嵌入Swift标准库”的标志,需要将其设置为YES。默认情况下它是NO!

构建设置 > 始终嵌入Swift标准库

设置后,在再次构建之前清理项目。

对于热心读者的一些说明

在您的应用程序中将嵌入的内容包含Swift代码(EMBEDDED_CONTENT_CONTAINS_SWIFT)构建设置设置为YES,如图2所示。这个构建设置指定目标的产品是否具有包含Swift代码的嵌入式内容,当设置为YES时,告诉Xcode在您的应用程序中嵌入Swift标准库。

enter image description here

这个标志以前被称为嵌入式内容包含Swift代码

21
对我也起了作用,非常感谢。让我困惑的是,如果我将 Swift 代码添加到项目中,为什么 Xcode 不会自动更新呢?这听起来像是一个合理的默认行为。不过我猜这样可以让你更好地控制包含的库等内容。 - PoL0
14
对我来说,“将资产包嵌入产品捆绑包”是重点! - Matte.Car
19
完成此操作后,请进行清理。 - Aggressor
3
做完这件事后进行清理是解决我的问题的关键。很高兴我查看了评论!=] - Relequestual
79
现在它被称为“始终嵌入Swift标准库”。 - Warpzit
显示剩余17条评论

144

令人惊讶的是,我所做的只是“清理”我的项目(shift+cmd+K) ,这样就起作用了。似乎与证书有关。


清理很有道理,因为它强制刷新了构建中使用的缓存项。我不得不这样做,因为我刚刚刷新了签名证书。我进行了清理和清理构建文件夹(选项-清理)。 - Victor Engel
13
是的,没错,它起作用了。我之前已经重置了我的证书,这次顺利地解决了问题。 - Code Tree
如果在不同的机器上编译时出现错误,这可能是最简单的修复方法。 - cypark
2
这里也有同样的问题。在操作证书后需要进行新的构建。 - Marc
1
这里也遇到了同样的问题。清理是必要的步骤,无需操纵证书。我的问题已解决。 - Manish Nahar
显示剩余3条评论

102

当我移除了以下内容时,我开始收到这个错误:

@executable_path/Frameworks

在我的构建设置中,从Runpath Search Paths中移除并替换后修复了所有问题(幸好有源代码控制!)

我不知道它是怎么出现的,但似乎一个二进制需要它才能找到其嵌入式的 Swift 运行时。


2
将一个旧的iOS6项目更新到iOS7和Swift时出现了错误。@executable_path/Frameworks解决了这个问题。谢谢! - Lensflare
6
对我来说,从Xcode 8b5开始,实际上需要添加@loader_path/../Frameworks用于macOS单元测试,以及@loader_path/Frameworks用于iOS单元测试。 - Pascal
是的!这就是在iOS 10 / Xcode 8中为我解决问题的方法。该项目始于iOS 2-3,作为纯Objective-C,现在我们正在添加一些Swift。 - TahoeWolverine
这个修复方法对我也有效。有人知道完整的原因吗?感谢帮助。 - Rod
我也试过了,可行!(XCode 8.2.1) - The Good Giant
@Pascal 我想亲吻你。就这些了。非常感谢 - @loader_path/Frameworks 在iOS/Xcode9上为我完成了它。 - CPR

70

对于设备,你还需要在项目的 General 选项卡的 Embedded binaries 部分添加动态框架。
输入图像描述


1
有什么想法吗?@Mustafa - user3751185
69
答案非常模糊。 - Unheilig
1
再次回答,答案相当模糊。不完全确定这与 OP 有什么关系。 - Richie Marquez
2
对我有用。仅将内容添加到“链接的框架和库”部分是没有用的。 - Danchoys
5
阐述一下:如果你在错误信息中看到的是一个框架的名称(例如你自己制作的自定义Cocoa Touch框架),不要仅仅在“目标依赖项”中的“生成阶段”添加.framework。你还需要在“常规”选项卡中的“嵌入式二进制文件”中添加它。这个答案对我非常有帮助。 - Matthew Quiros
显示剩余5条评论

69

Xcode 8中的Embedded Content Contains Swift Code选项已不再可用。

它已被重命名为"Always Embed Swift Standard Libraries = YES"

输入图像描述


这帮助我解决了WatchOS上的崩溃问题。 - trusk

68

Xcode 13(带有react-native的13.1版本)。

创建了一个干净的react-native项目,并在运行路径搜索路径(Runpath Search Paths)中看到了/usr/lib/swift条目。

输入图像描述

添加后,我的项目最终成功运行而不崩溃!

之前所建议的方法都没有起作用。


11
这拯救了我的一天!以上的解决方案都对Xcode 13无效,谢谢! - Sunding Wei
GG WP!确实如此,除了这个之外什么都没用。 - noob Mama
这是唯一对我起作用的解决方案(Flutter,Xcode 13.2.1)。谢谢! - thammaknot
已解决在Xcode 13.4.1中Flutter Google-Ml-Kit插件的构建问题。谢谢! - VladH
是的。这对我来说是解决方案。不知道实际发生了什么。 - Larry
显示剩余4条评论

29

我认为直接从Xcode生成证书时会出现错误。 要解决此问题(至少在Xcode 6.1 / 6A1052d中):

  1. 进入管理证书的Apple Developer网站:https://developer.apple.com/account/ios/certificate/certificateList.action
  2. 选择您的证书(应该在“状态”下显示“由Xcode管理”),然后“吊销”它
  3. 按照这里的说明手动生成新的证书:https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/MaintainingCertificates/MaintainingCertificates.html#//apple_ref/doc/uid/TP40012582-CH31-SW32
  4. 进入Xcode > Preferences > Accounts > [您的苹果ID] > 双击您的团队名称 > 点击刷新按钮以更新证书和预配文件

只有在XCode中删除和创建时才对我有效,developer.apple.com的“证书、标识符和配置文件”工具会创建新的错误证书。 - Graham P Heath
4
请原谅我的无知...... 这个回答与所提出的问题有什么关系?看起来你回答了一个不同的问题。更正确地说,你回应了@user3056783删除的答案,这只是一个“我也遇到了这个问题”的评论。 - jww
我刚在Xcode中生成了一个证书,可能是同样的问题,但是我可以通过运行Clean来解决它。 - pr1001
1
那个“刷新”按钮现在改名为“全部下载”... :) - Thyselius
1
在XCode 7中遇到了同样的问题。在Apple开发者中心手动生成证书文件解决了我的问题。 - JonSlowCN
哇,使用Xcode 9 - 惊讶地发现这是实际的问题,但更新我的证书解决了它。 - powerj1984

28

我在运行Swift测试时遇到了问题(但不是我的应用程序)。 原来测试需要在其测试目标的 Runpath Search Paths 构建设置中具有超过 @ executable_path / Frameworks 。 将Runpath搜索路径设置为以下内容对我起了很好的作用:

$(inherited)
@executable_path/Frameworks
@loader_path/Frameworks

1
没错,就是这个!对于AFDateHelper.framework和Result.framework,那些通过谷歌搜索到这里的人也会遇到同样的问题。我意识到这是解决方案,因为这样做改变了我收到错误信息的框架名称——这是一个我漏掉的框架,在carthage copy-frameworks中没有包含,因为它是一个次要依赖项(由我使用的一个框架添加)。 - Angad
2
哈利路亚!上帝保佑你,唐娜莉。这刚刚结束了三个小时的挣扎。 - Adam Waite
太棒了,正是我需要的。 - gran_profaci

25

好的,这里分享另一个引起此错误的原因。我花了几个小时来解决这个问题。

在我的情况下,钥匙串访问中我的证书信任策略为始终信任,将其更改回默认设置解决了问题。

为了打开证书设置窗口,请在Keychain Access证书列表中双击该证书。

输入图像描述 输入图像描述


这对我也起作用。我正在使用pods来包含PubNub和AWS SDK。我尝试过使用不同的方法,例如更改'Runpath Search Paths',它已经设置为上面答案中提到的值。在构建设置中标记了“嵌入式swift代码”,但没有起作用。最后,这个解决方案对我有用。干杯。 - Ehsan
1
对我有用。我从来没有想到过会是这样的问题。非常感谢。 - Pierre-Yves
我尝试了上面的每个解决方案,但这是最后的救命稻草。我不确定是否需要将它们全部组合起来,但对我来说,这是最好的选择。明确一下,我所做的是:清理项目、在运行路径搜索路径中包含加载路径、将分发证书从系统移动到登录钥匙串、将“始终嵌入Swift标准库”设置为是、“不信任”证书(将其恢复为系统默认信任)。 - Nick Molyneux
哇塞...非常感谢! - Ethenyl

23

我遇到了dyld: Symbol not found: _$s11SubSequenceSlTl的问题。这个可以解决。 - Aditya Deshmane
太好了!用这个解决了。 - Roran
可以了!这让我想起了旧时的Windows编程,当时需要安装可再发行的Visual C++“msvcrt.dll”。 - mcatach
谢谢!尝试了其他所有方法,这就是解决办法。 - Silverstar

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