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个回答

5

我们有一个Unity项目,创建了一个包含使用Swift库的Xcode项目。

我们尝试了本帖中每一个合理的建议,但都没有解决问题。代码在新设备上运行良好,在iOS<= 12上崩溃。

似乎Swift非常聪明,即使将其设置为“ALWAYS_EMBED_SWIFT_LIBRAIES”="YES",它也不会包括Swift库。

实际上解决我们问题的是在项目中包含一个虚假的Swift文件。该文件必须包含对调度和基础库的调用。

显然,这提示mighty-xcode强制包括库,但这次是真的。

这是我们添加的虚拟文件,使其正常工作:

import Dispatch
import Foundation


class ForceSwiftInclusion {

   init() {

    // Force dispatch library.
    DispatchQueue.main.async {
      print("something")
    }

    // Force foundation library.
    let uuid = UUID().uuidString
    print("\(uuid)")

   }
}

为了使Unity支持Swift 5,在创建Xcode项目的后处理中添加project.AddBuildProperty(target, "SWIFT_VERSION", "Swift 5");


你确定是“Swift 5”而不是“5.0”吗? - Romain Bitard

4
对我来说,在尝试了所有方法都没有成功之后,最终有效的方法是从“打包”部分中删除@executable_path/Frameworks(我不知道它最初是如何被添加进去的)。
请参考以下截图:enter image description here

这是用于框架路径还是主项目设置路径? - ZeeroCool77
我有一个项目静态库A,并想将Swift框架添加进去。这个指令连同将Embedded Contain Contains Swift设为Yes的代码解决了所有问题。 - mauron85
这似乎破坏了我的项目。 - UKDataGeek

4
在我的情况下,这只是我的目标的名称:
我将其重命名为 MyApp.something,然后出现了同样的问题。 但是我在构建设置窗口中看到,我的产品模块名称已更改为 MyApp-something。 因此,我删除了目标名称中的点(MyAppSomething),问题就解决了。

4
在Xcode 11中对我有用的方法是进入“通用” -> “框架、库和嵌入内容”并将相关框架的“嵌入”选项更改为“嵌入并签名”。 嵌入与签名选项

1
谢谢你...今天你救了我一命。 - Sourabh Sharma

3

对于我来说,没有一种解决方案起作用。重新启动手机解决了问题。虽然很奇怪但确实有效。


3

似乎这些解决方案都不起作用,但当我将全球开发者证书的权限更改为使用系统默认值时,它就可以工作了。我在下面的链接中包含了步骤和截图。

我建议您像这里提到的那样在苹果bug报告中记录该问题,因为苹果确实应该解决这个严重的错误:https://dev59.com/1F8f5IYBdhLWcg3wJPtl#41401354


2

这里有很多答案,但也许我的答案能帮助到某些人。

我遇到了相同的问题,在模拟器上运行正常,但是在设备上启动应用程序时崩溃,并显示以上错误。我尝试了所有的答案和解决方案。在我的项目中,我有多个目标。我从目标A创建了重复的目标B。目标B正常工作,而目标A崩溃了。我为每个目标使用不同的图像资源。在经过搜索和谷歌后,我发现了一些方法可能会对某些人有所帮助。

当我为两个应用程序更改启动图像资源的名称时,应用程序停止崩溃。例如,将目标A的启动图像资源命名为LaunchImage A 。将目标B的启动图像资源命名为LaunchImage B ,并在每个目标的“常规”选项卡中正确分配它们。我的应用程序可以正常工作。


2
对于我来说,构建一个依赖第三方Swift库(例如SQLite)的MacOS命令行Swift应用程序,以上解决方案似乎都不起作用。可行的方法是在Build设置中直接添加以下路径到我的Runpath Search Paths中:
/Applications/Xcode.app/Contents//Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx/
这样做确实会在运行时给出警告,说明Xcode找到了2个版本的libswiftCore - 这是有道理的。但是如果不包括该行,Xcode将无法找到任何版本的libswiftCore。
总之,对我来说已经足够了,即使看起来不正确-我的应用程序只是一个我不打算分发的实用程序,至少现在可以运行了!

谢谢!我和你的情况一样,这个方法对我也起作用了。 - Joris Weimar
是的,这就是 CLI 的解决方案! - Maury Markowitz

2

虽然这个链接可以回答问题,但最好在此处包含答案的必要部分并提供链接以供参考。如果链接页面更改,则仅链接的答案可能会变得无效。- [来自审查] (/ review / low-quality-posts / 10722641) - Bartłomiej Semańczyk
2
抱歉。请下载WWDR证书,然后打开它并安装到您的钥匙串中。证书下载链接:http://developer.apple.com/certificationauthority/AppleWWDRCA.cer - HG123

1
我在尝试在私有pod上运行单元测试时遇到了这个问题。我做了所有人建议的事情,但什么都没有用。我所要做的就是在另一个模拟器上运行我的单元测试。 (我没有尝试重置模拟器的内容和设置,也许那样也会起作用 ¯_(ツ)_/¯)

神奇!!这个对我起作用了。我真的尝试了STO上发布的所有答案,但都没有起作用。 - Jayprakash Dubey
就我所知,我不确定模拟器是否具有不同的iOS版本,或者它们是否相同。 - mfaani

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