【问题标题】:dyld: Library not loaded: @rpath/libswiftSwiftOnoneSupport.dylibdyld:库未加载:@rpath/libswiftSwiftOnoneSupport.dylib
【发布时间】:2017-04-20 13:03:46
【问题描述】:

我已经构建了一个 Swift 框架,现在我正在尝试构建一个将使用该框架的 Swift iOS 应用程序。我收到此错误:

dyld: Library not loaded: @rpath/libswiftSwiftOnoneSupport.dylib
  Referenced from: /Users/tdean/Library/Developer/Xcode/DerivedData/NFLApplication-ejmafvjrlqgjaabggwvadjarjjlg/Build/Products/Debug-iphonesimulator/NFLStatsModel.framework/NFLStatsModel
  Reason: image not found

我搜索了 SO 并找到了类似的报告并尝试了其中列出的修复,包括:

  • 清除我的 DerivedData 文件夹
  • 重新启动 Xcode 和 iPhone 模拟器
  • 确保在我的框架和应用程序的构建设置中都设置了 Always Embed Swift Standard Libraries = YES
  • 确保在我的框架和应用程序的构建设置中都设置了 Enable Bitcode=NO
  • 确保在我的框架和应用程序的构建设置中将Runpath Search Paths 设置为@executable_path/Frameworks
  • 将我安装的 Xcode 中的所有 libswift 文件复制到项目中的本地副本中,并添加了自定义构建阶段以将这些文件复制到 frameworks 文件夹中。

在每种情况下,当我尝试运行我的应用程序时都会遇到相同的错误。

  • Xcode 版本 8.1 (8B62)
  • Apple Swift 版本 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1)

【问题讨论】:

  • 长期建议:将 @executable_path/../Frameworks 添加到框架上的运行时搜索路径中。
  • @JoeDaniels - 我添加时没有区别。感谢您的建议。
  • 哦,Swift语言版本呢?都是3.0吗?
  • 更新问题以包含 Swift 版本

标签: ios swift xcode


【解决方案1】:

我最终使用了多种修复方法来解决这个问题。我不确定是否需要所有这些,但我正在记录这里似乎对我有用的东西,以防其他人可以从我的发现中受益。

  1. 我已在我的 Swift 框架和使用该框架的 Swift 应用程序的构建设置选项卡中将 Always Embed Swift Standard Libraries 的值设置为 YES
  2. 我已将Foundation.framework 添加到我的 Swift 框架和使用该框架的 Swift 应用程序的常规选项卡的链接框架和库部分。
  3. 我已将Foundation.framework 添加到使用该框架的 Swift 应用程序的常规选项卡的 Embedded Binaries 部分。

通过所有这 3 个设置,我能够构建和运行我的应用程序而不会遇到此错误。

【讨论】:

  • 谢谢!我花了两个小时设置我正在开发的生产应用程序的演示应用程序/框架功能。在构建东西时,我两次遇到了这个确切的错误。出于某种原因,我可以循环(迭代)通过框架中的自定义 UIButtons 数组,但是当我尝试实际访问循环中的某些内容时,我得到了这个错误。仅供参考:我测试了每一件事,我需要添加的唯一是#1。这个新功能仅在 Xcode 8 中开发,并且正在(我不知道为什么)在事物的一个分支中工作,但在任何其他新创建的项目中都没有 - 直到现在。
  • 我完成了你的第一点就足够了。谢谢。
  • 仅第 1 点就为我解决了这个问题。我觉得很奇怪你必须把它放在应用程序和链接的框架上。 XCode 的依赖管理是令人困惑的根源。有没有其他办法让它自动化?
  • 我在单元测试目标上遇到了这个问题。在测试目标的 Link Binary with Libraries 上添加 Foundation.framework 对我来说已经足够了。
  • 第 1 点为我解决了这个问题。值得注意的是,这是在嵌入式自定义框架中发生的
【解决方案2】:

可能不是每个人都这样,但我通过在主目标中实际编写一些代码来解决它。

我有一个由框架和测试目标组成的空项目,在运行测试时出现此错误。显然 Swift 很聪明地检测到你实际上并不需要这个库并且没有链接到 libswiftSwiftOnoneSupport.dylib

修复只是添加一些代码,我只是添加了:

class Test {
    func a() { print ("something") }
}

libswiftSwiftOnoneSupport.dylib 已关联。

【讨论】:

  • "显然 Swift 很聪明地检测到你实际上并不需要这个库并且没有链接到 libswiftSwiftOnoneSupport.dylib" 太聪明了,因为你显然这样做了。
  • 刚刚浪费了 3 个小时。警告:我刚刚在主要目标中声明了结构,但我仍然收到此错误。添加带有函数的测试类使错误消失(!!!)。疯了。
  • 您找到了不同的解决方案吗?我也发生了同样的事情,而且很奇怪
  • 不,因为我实际上需要我的框架来包含一些代码。理论上你可以强制链接到它,但你确定你需要它吗?只要你的框架里面有一些代码,你就可以开始了。
  • 这也适用于我,在 iOS 11 和 Xcode 10.2 上的单元测试目标中。值得注意的是,iOS 12 上没有问题。奇怪。
【解决方案3】:

在被这个问题困扰了几天后,我终于找到了适合我的东西;希望这对其他人也有帮助。

事实证明,特别是在代码中的任何位置使用 print() 会以某种方式强制加载 libswiftSwiftOnoneSupport.dylib,问题就会消失。

我使用的是 Xcode 10.1、Swift 4.2,而出现此问题的 pod 是 Nimble。

顺便说一句,我知道@S2dent 的建议“只需添加一些代码”,但就我而言,我的框架已经有几个不同的类所以它没有别帮我。

【讨论】:

  • 为我工作...这是唯一有效的方法,但如何?为什么?谁能解释一下?
  • 我不敢相信。这也是我的正确答案。我刚刚在我的测试中随机添加了一个 print() 到一个随机的 Swift 文件中!这闻起来像 Xcode 错误。
【解决方案4】:

您是如何安装依赖项的?

我也有类似的问题:

dyld: Library not loaded: @rpath/libswiftSwiftOnoneSupport.dylib Referenced from: <internal framework> Reason: image not found

原来是和Swift全模块优化有关。

使用 Carthage 作为依赖管理器,它们被编译为发布,因此编译时使用了全模块优化,Xcode 建议我打开它。在模拟器上运行应用程序会为调试编译它。我猜动态框架不能与运行它的应用处于不同的优化级别。

解决方案是明确指定我希望 Carthage 为其构建的配置。 (carthage bootstrap --configuration Debug) 哦,当然还有清理我的构建文件夹。

【讨论】:

  • 感谢您的建议,但我没有安装任何依赖项,也没有使用 Carthage。我在一个 Xcode 项目中拥有自己创建的 Swift 框架。我在另一个 Xcode 项目中有自己创建的 Swift 应用程序。我在一个 Xcode 工作区中有两个项目,并且我有应用程序引用的框架。
  • 尝试在框架和应用的构建设置中检查优化级别。
  • 清理我的构建文件夹对我有用。我总是使用选项- Xcode > Product > Clean Build Folder
【解决方案5】:

我遇到了同样的问题,将库(我自己的构建版本)添加到应用程序的General 选项卡中的Linked Frameworks and Libraries 解决了这个问题。

【讨论】:

  • 我遇到了同样的 dylib 链接器错误,但使用的是 LinkKit 库。按照您的指示进行了重建。现在在为 iOS 14.2 构建的 XCode 12.2 上运行良好
【解决方案6】:

如果您不想将 Foundation.framework 添加到链接框架或嵌入式二进制文件中,您还可以为测试目标提供主机应用程序

【讨论】:

    【解决方案7】:

    您可以通过在目标的构建设置中将“始终嵌入 Swift 标准库”设置为“是”来解决此问题。

    【讨论】:

      【解决方案8】:

      这是一个动态链接器错误,它在加载或运行时链接二进制文件

      [@rpath]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-24
        • 2016-05-29
        • 2016-10-27
        • 2015-12-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多