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


412

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

我努力了

  • 重新启动Xcode,iPhone,计算机
  • 清洁与重建
  • 吊销和创建新的证书/设置配置文件
  • 现“运行路径搜索路径”为 $(inherited) @executable_path/Frameworks
  • 嵌入式内容包含Swift代码为“是”
  • 代码签名身份是开发人员

以下是整体错误

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


4
清洁和重建为我工作
MoralCode '16

解决方案在这里。同一主题
Tarik

清理并重建适合我的项目
Syed Zahid Shah,

1我一直面临着同样的问题...通过添加以下内容已解决:在您的podfile中:use_modular_headers!而不是use_frameworks!祝好运!希望这对您有用!
Tejas

Answers:


554

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

Build Settings > Always Embed Swift Standard Libraries

设置完之后,请在重新构建之前清理项目。

对于敏锐的读者一些解释 最重要的部分是:

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

在此处输入图片说明

旗帜原名 Embedded Content Contains Swift Code


20
也为我工作,非常感谢。让我感到困惑的是,如果我将快速代码添加到项目中,为什么Xcode不会自动更新它?这听起来像是合理的默认行为。我想这种方式,让你更好地控制包括图书馆等
PoL0

11
对我来说是“产品捆绑包中的嵌入式资产包”!
Matte.Car

17
执行此操作后请进行清洁。
侵略者2015年

2
完成此操作后进行清洁即可解决我的问题。很高兴我检查了评论!=]
Relequestual,2015年

75
现在称为Always Embed Swift标准库。
Warpzit

136

出乎意料的是,我所做的就是“清理”我的项目(shift + cmd + K),并且它奏效了。确实确实与证书有关。


清理很有意义,因为它会强制刷新构建中使用的缓存项。我必须这样做,因为我刚刚刷新了签名证书。我做了一个干净的Clean Build文件夹(Option-clean)。
维克托·恩格尔

12
哈,是的,它起作用了。我早些时候重置了证书,这种清洁工作就像一种魅力。
代码树

天才,哈,这是概率迅速从2到3所造成的不升级清洁间我怀疑,至少对我来说
的Fonix

2
这里同样的问题。处理证书后,需要重新构建新版本。
马克

1
同样的问题在这里。清洁是必须采取的步骤。无需操纵证书。我的问题解决了。
Manish Nahar

95

删除后,我开始出现此错误:

@executable_path/Frameworks

Runpath Search Paths我的构建设置中。替换它会再次修复所有问题(感谢您进行源代码控制!)

我不知道它是怎么到达那里的,但是似乎二进制文件才需要它来找到其嵌入式Swift运行时。


2
将旧的iOS6项目更新为iOS7和Swift,并收到该错误。@ executable_path / Frameworks修复了它。谢谢!
Lensflare 2014年

5
对我来说,从Xcode 8b5开始,它实际上是@loader_path/../Frameworks针对macOS单元测试和@loader_path/FrameworksiOS单元测试需要添加的。
帕斯卡

是! 这是在iOS 10 / Xcode 8中为我完成的修复程序。该项目在iOS 2-3上以纯Objective-c的形式开始,我们现在添加了一些Swift。
塔霍金刚狼

添加此错误也为我修复了错误。任何人都知道原因吗?谢谢您的帮助。
Rod

也为我工作!(XCode 8.2.1)
好巨人

63

对于设备,还需要将动态框架添加到项目选项卡中的Embedded binaries部分General
在此处输入图片说明


1
有什么想法吗?@Mustafa
user3751185 2014年

62
答案很模糊。
Unheilig 2014年

1
再次,回答很模糊。不完全确定这对OP意味着什么。
Richie Marquez 2014年

2
为我工作。仅将其添加到“链接的框架和库”部分并不能解决问题。
Danchoys 2015年

5
要说明:如果您在错误消息中看到的是框架的名称(例如,您制作的自定义Cocoa Touch框架),则不要仅在构建阶段的目标依赖项中添加.framework。您还需要将其添加到“常规”选项卡中的“嵌入式二进制文件”。这个答案为我解决了。
马修·奎罗斯

62

在Xcode 8中,option Embedded Content Contains Swift Code选项不再可用。

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

在此处输入图片说明


这帮助我在WatchOS上崩溃了
AlexBartiş17年

28

我认为直接从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>首选项>帐户> [您的Apple ID]>双击您的团队名称>点击刷新按钮以更新证书和配置文件

仅当在XCode中删除和创建时,developer.apple.com的“证书,标识符和配置文件”工具才为我工作,它创建了新的不良证书。
Graham P Heath 2014年

4
原谅我的无知...这个答案与提出的问题有什么关系?您好像回答了另一个问题。或更正确地说,您响应了@ user3056783删除的答案,这只是一个“我也有此问题的评论”。
jww 2015年

我刚刚在Xcode中生成了一个证书,所以尽管我可以通过运行Clean来解决它,但这可能是相同的问题。
pr1001 2016年

1
该“刷新”按钮现在已重命名为“全部下载” ... :)
Thyselius,2016年

1
XCode 7中存在相同的问题。在Apple开发人员中心手动生成证书文件对我来说解决了该问题。
JonSlowCN

25

好的,在此共享此错误的另一个原因。我花了几个小时才解决这个问题。

以我为例,我在“钥匙串访问”中证书的信任策略为Always Trust,将其更改回默认值即可解决此问题。

为了打开证书设置窗口,在证书的“钥匙串访问”列表中双击证书。

在此处输入图片说明 在此处输入图片说明


它也对我有用。我正在使用pod来包含PubNub和AWS sdks。我尝试使用不同的方法,例如更改“运行路径搜索路径”。它已被设置为以上答案中提到的值。标记为“在构建设置中嵌入快速代码”,但无效。终于,这个解决方案对我有用。干杯。
Ehsan

1
为我工作。我永远不会怀疑这样的事情。非常感谢。
皮埃尔·伊夫斯

我尝试了以上所有解决方案,这就是棺材上的钉子。我不确定是否需要所有这些的组合,但这对我来说是赢家。明确地说,我所做的是:清理项目,在Runpath搜索路径中包含load_path,将分发证书从系统移至登录钥匙串,将始终将swift标准库嵌入为yes,将证书“不信任”(将其设置回系统)默认信任)。
Nick Molyneux

莫莉...非常感谢!
Ethenyl

23

我在运行Swift测试(而不是我的应用程序)时遇到了这个问题。事实证明,测试需要具有比测试目标@executable_path/FrameworksRunpath Search Paths构建设置更多的功能。将运行路径搜索路径设置为以下内容对我来说很有吸引力:

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

1
是的,就是这样!对于AFDateHelper.framework来说,面对这个,对于Google来这里的人们来说就是Result.framework。我意识到这是解决方案,因为这样做改变了我收到此错误的框架的名称-这是我错过了的框架,carthage copy-frameworks因为它是次要的依赖(我正在使用的框架已经添加了一个框架) )
Angad

2
哈利路亚!上帝保佑你DonnaLea。到此结束了3个小时的奋斗。
亚当·怀特

辉煌。正是我想要的。
gran_profaci

21

Xcode 10.2中再次发生此问题。您必须从Apple下载并安装以下软件包。它为命令行工具提供了Swift 5运行时支持

https://support.apple.com/kb/DL1998?locale=zh_CN


我正在使用dyld:未找到符号:_ $ s11SubSequenceSlTl。此作品👍
阿迪亚Deshmane

大!解决了这个问题
罗兰(Roran)

作品!这让我想起了以前的Windows编程,需要安装可重新分发的Visual C ++ msvcrt.dll
mcatach

谢谢!尝试了所有其他一切,仅此而已。
Silverstar,

17

您必须将设置为Runpath Search Paths@executable_path/Frameworks如下面的Build Settings屏幕截图所示:

在此处输入图片说明

如果您有使用Swift制作的任何嵌入式框架,则可以将其设置为YESBuild Options Embedded Content Contains Swift Code


1
是的,对于迅速的框架,必须将“嵌入的内容包含Swift代码”设置为“是”
大卫,2016年

我制作了一个命令行工具,该工具使用了一些dylib,这些dylib将与该工具一起在本地目录中提供(而不是在/ usr / lib或类似目录中)。otool -L因为这些dylib告诉我他们已经在使用@rpath/...自己的路径了。现在,通过将“ 运行路径搜索路径”设置为该文件夹的路径,我可以运行我的工具,它将找到存储在该文件夹旁边的dylib。
Thomas Tempelmann

当尝试将Swift模块添加到React Native项目中时,它却未能找到@rpath/libswiftAppKit.dylib。一个问题使我得知我必须添加搜索路径:@executable_path/../Frameworks/根据这些说明。我不能说这是否仅适用于我的项目结构。值得注意的是,我不必清除DerivedData即可使此设置生效!
杰米·伯奇

16

我认为Apple 在尝试引用Swift库libswiftCore.dylib时已经在Swift应用程序崩溃下对其进行了总结

技术问答QA1886引用

尝试引用Swift库libswiftCore.dylib时,Swift应用程序崩溃。

问:当我尝试运行Swift语言应用程序时,如何解决设备控制台中的libswiftCore.dylib加载错误?

答:要更正此问题,您将需要使用主题组织单位(OU)设置为团队ID的代码签名证书对应用程序进行签名。在iOS 8发行后创建的所有Enterprise和标准iOS开发人员证书的正确位置都有新的Team ID字段,以允许运行Swift语言应用程序。

通常,此错误会显示在设备的控制台日志中,并显示类似以下内容的消息:

[....] [deny-mmap] mapped file has no team identifier and is not a platform binary:
/private/var/mobile/Containers/Bundle/Application/5D8FB2F7-1083-4564-94B2-0CB7DC75C9D1/YourAppNameHere.app/Frameworks/libswiftCore.dylib

Dyld Error Message:
  Library not loaded: @rpath/libswiftCore.dylib

Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x0000000120021088
Triggered by Thread: 0

Referenced from: /private/var/mobile/Containers/Bundle/Application/C3DCD586-2A40-4C7C-AA2B-64EDAE8339E2/TestApp.app/TestApp
Reason: no suitable image found. Did find:
/private/var/mobile/Containers/Bundle/Application/C3DCD586-2A40-4C7C-AA2B-64EDAE8339E2/TestApp.app/Frameworks/libswiftCore.dylib: mmap() error 1 at address=0x1001D8000, size=0x00194000 segment=__TEXT in Segment::map() mapping /private/var/mobile/Containers/Bundle/Application/C3DCD586-2A40-4C7C-AA2B-64EDAE8339E2/TestApp.app/Frameworks/libswiftCore.dylib
Dyld Version: 353.5

构建档案和打包应用程序时需要新证书。即使您拥有新证书之一,仅辞职现有的快速应用程序存档也将不起作用。如果它是使用iOS 8之前的证书构建的,则需要构建另一个存档。

重要提示:如果您需要吊销和设置新的Enterprise Distribution证书,请谨慎使用。如果您是内部企业开发人员,则需要注意不要撤销用于签署应用程序的发行证书,任何您的企业员工仍在使用通过该企业发行证书签名的任何应用程序将立即停止工作。以上仅适用于企业分发证书。对于企业/标准iOS开发人员而言,可以撤销开发证书。

正如AirSign专家指出的那样,问题源于内部证书主题字段中缺少OU属性。

主题:UID = 269J2W3P2L,CN = iPhone发行:公司名称,OU = 269J2W3P2L,O =公司名称,C = FR

我拥有企业开发证书,创建了一个新的证书可以解决该问题。


在花了很多时间试图理解为什么我的新CI安装程序无法正确发布beta应用程序(实际上是企业帐户)后,我发现在导出选项中,compileBitcode必须为true。
gderaco '17


9

最简单,最容易忽略的方法:清理和重建。

在尝试了上述答案后,此问题得以解决,但没有奏效。



6

从以下位置更改目标的“ 复制容器”资源

"${SRCROOT}/Pods/Target Support Files/Pods-Wishlist/Pods-Wishlist-resources.sh"

至:

"${SRCROOT}/Pods/Target Support Files/Pods-Wishlist/Pods-Wishlist-frameworks.sh"

1
除非这破坏了其他东西,否则这就是我的解决方法!
RealCasually 2015年

那东西还坏了什么?您能帮我改善答案吗?
巴特洛梅耶Semańczyk

似乎可以运行“ pod install”来覆盖所做的更改。
RealCasually 2015年

@RealCasually你是对的,有没有办法防止覆盖此或任何替代方法?
巴特洛梅耶Semańczyk

我的天啊。在尝试了100次其他操作和4个小时的跟踪之后,这对我来说就是问题。在framework.sh与resources.sh中究竟发生了什么?
kennydust '16

6

我通过删除派生数据来解决,这次它可以正常工作。尝试过Xcode 7.3.1GM


删除我的派生数据也行得通,无论如何我还是事先做了一个清理工作(CMD + K),以防万一,错误导致了惨痛的死亡!
Stuart P.

6

升级Xcode(并随后升级到Swift的新版本)并且您的项目使用使用旧版/旧版Swift构建/编译的框架时,也可能导致此错误消息。

在这种情况下,重新构建框架并重新添加框架将解决此问题。


这发生在我身上,从Xcode 9.2变为9.3。尽管直到升级很久以后我才发现它,因为只要以前使用Xcode 9.2构建该项目,它就可以无限期地与Xcode 9.3一起工作。仅在执行完结帐后,我才发现这一点。
SveinFidjestøl18年

我认为这个答案的评价不够高。使用Carthage并安装了Xcode的更新版本,您需要重建Carthage库以使此问题消失。
达伦,

5

在尝试了所有内容之后,我终于发现,构建似乎并不总是一遍又一遍地包含每个细节。也许是为了加快处理过程...为了在设备上运行之前确保整个包装,请首先进行清洁:Shift-Cmd-K。然后使用:Cmd-B。之后,在您的设备上运行它。简单。谢谢您在那个地方的所有好人!


4

就我而言,这只是我的目标的名称:

我将其重命名为:MyApp.something,出现了相同的问题。但是我在构建设置窗口中看到,我的产品模块名称已经像MyApp-something这样更改。因此,我删除了目标名称(MyAppSomething)中的点,问题就消失了。


4

对于我来说,已经尝试了一切,但没有成功,什么工作是消除@executable_path/FrameworksPackaging section(不知道它是怎么来的在那里摆在首位)

在此处输入图片说明


这是框架路径还是主项目设置路径?
ZeeroCool77 '16

我有一个项目static lib a,想在其中添加swift fw。该指令与Embedded Contain一起包含Swift to Yes代码解决了所有问题。
mauron85 '16

这似乎破坏了我的项目。
UKDataGeek '16

3

没有一种解决方案对我有用。重新启动手机即可修复它。奇怪,但是有效。


3

这些解决方案似乎都不起作用,但是当我将World Wide Developer证书的许可更改为 Use System defaults有效时。我在下面的链接中包含了步骤和屏幕截图

我鼓励您像此处提到的那样在苹果错误报告中记录故障单,因为苹果真的应该解决这个大错误:https : //stackoverflow.com/a/41401354/559760


2

Xcode 7.2,一台设备上的iOS 9.2,另一台设备上的9.0。两者都有错误。不知道是什么原因导致了它,但是上面关于WWDR的解决方案对我来说是正确的。安装该证书,问题已解决。

https://forums.developer.apple.com/message/43547 https://forums.developer.apple.com/message/84846


虽然此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。- 评分
巴特洛梅耶Semańczyk

2
道歉。下载WWDR证书,然后将其打开以安装到您的钥匙串中。证书在这里: developer.apple.com/certificationauthority/AppleWWDRCA.cer
HG123 2015年

2

那里有很多答案,但也许我的答案会有所帮助。

我遇到了同样的问题,我的应用程序在Simulator上运行正常,但是在我的午餐应用程序上设备崩溃了,并给出了上述错误。我已经尝试了所有答案和解决方案。在我的案例中,我的项目我有多个目标。我从目标A创建了重复的目标B。目标B崩溃时,目标B正常运行。我为每个目标使用不同的图片资源。搜索并使用Google后,我发现了可能对某人有用的东西。

当我更改两个应用程序的启动图像资产的名称时,应用程序停止崩溃。例如,将目标定位为启动映像资产名称LaunchImage A。目标B午餐图像资产名称LaunchImage B,并在每个目标的“常规”选项卡中正确分配。我的应用程序运行正常。


2

对我来说,构建依赖于第三方Swift的libs(例如SQLite)的MacOS命令行Swift应用程序似乎都不起作用。所做的工作是直接将以下路径添加到“构建设置”中的“我的运行路径搜索路径”中:

/Applications/Xcode.app/Contents//Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx/

这样做确实在运行时发出警告,说Xcode找到了2个版本的libswiftCore-这很有意义。除了不包括该行,导致Xcode找不到任何版本的libswiftCore。

无论如何,即使它看起来不正确,它也会为我做-我的应用只是我不打算分发的实用程序,至少现在可以运行!


谢谢!我处于您的情况,这对我也很有效。
Joris Weimar

是的,这是CLI的解决方案!
Maury Markowitz

1

我同时安装了多个版本的Xcode。该框架是使用更新版本的Xcode构建的。我尝试编译的应用程序使用的是旧版本的Xcode。当我使用相同版本的Xcode清理和编译框架和应用程序时,一切正常。



1

我正在使用Xcode 8.3.2。对我而言,问题在于系统和登录钥匙串中都包含AppleWWDRCA证书。删除两者,然后将其添加到仅登录钥匙串中,现在它又可以正常运行了。2天


您能否保留更详细的答案?您在哪里找到它(证书)-我想您写的东西代表Apple Worldwide Developer……但是全名是什么?从所有钥匙串中将其完全删除后,如何重新添加它?您在哪里可以找到该证书?
Motti Shneor

1

我正在使用Xcode 8.3.3和Xcode 9.2。对我来说,解决方案是使用Xcode Select将默认的Xcode从8切换为9:

$ xcode-select-打印路径

$ sudo xcode-select -switch /Applications/Xcode-9.2.app

编辑:实际上,这里似乎有所帮助的是Xcode 9.2使用了从Xcode 8.3.3派生的数据。这不是解决方案,但至少可以使我继续前进。


我尝试过发生此问题,但是当我退出并重新启动xcode时,它可以工作。:)。不错的尝试
Abhishek Thapliyal,

1

如果出现这样的错误:

无法加载捆绑包“ YourFrameworkTests”,因为它已损坏或缺少必要的资源。尝试重新安装捆绑软件。(dlopen_preflight(/ some / path /.../ YourFrameworkTests.xctest / YourFrameworkTests):库未加载:@ rpath / SomeOther.framework / SomeOther引用自:/ some / path / ...)

并在您的框架中使用CocoaPods,然后尝试编辑Podfileinherit! :search_pathsTest目标中删除它,然后pod install再次运行。

有关更多详细信息,请参见https://github.com/CocoaPods/CocoaPods/issues/8868

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.