dyld: Library not loaded: @rpath/libswiftCore.dylib:如何解决此错误

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

“嗖——应用崩溃了”:认识 dyld: Library not loaded: @rpath/libswiftCore.dylib

\n\n

你是否曾经启动过自己的 Swift 应用,看到了漂亮的启动画面,然后——砰!——黑屏和满是红色字符的控制台?熟悉吗?如果你至少遇到过 dyld: Library not loaded: @rpath/libswiftCore.dylib 这条消息,你就会知道那种轻微的恐慌感。在 Stack Overflow 上,这个问题已经积累了数千次浏览,这并非没有原因:这个错误很棘手,但完全可以解决。

\n\n

在这篇文章中,我们不仅会给出干巴巴的说明。我们还会分析为什么 Swift 库会在运行时“丢失”,如何避免这种情况,以及如果你已经陷入困境该怎么办。开始吧!

\n\n

什么是 dyld,它为什么生气?

\n\n

dyld(动态链接编辑器)是 macOS 和 iOS 中的动态库加载器。当你的应用启动时,dyld 会根据二进制文件中指定的路径查找所有必需的库。其中一个路径是 @rpath(运行时搜索路径)。如果库(例如 libswiftCore.dylib)在该路径下未找到,dyld 就会崩溃并报错。

\n\n

简单来说:你告诉应用“从 @rpath 书架上拿一本书”,但书架是空的。整个谜团就是这样。

\n\n

为什么这偏偏发生在 libswiftCore.dylib 上?

\n\n

libswiftCore.dylib 是 Swift 运行时的核心。没有它,任何 Swift 代码都无法运行。该错误最常见于三种情况:

\n\n
    \n
  • 你使用 Xcode 14+,但项目配置为旧版 Swift。
  • \n
  • 你连接了需要特定 Swift 运行时版本的 框架或 CocoaPods。
  • \n
  • 你忘记在构建设置中启用“Always Embed Swift Standard Libraries”。
  • \n
\n\n

修复 dyld: Library not loaded: @rpath/libswiftCore.dylib 的 5 种方法

\n\n

让我们进入实践环节。以下是经过验证的方法,从简单到复杂。每种方法我都会提供代码或设置示例。

\n\n

1. 启用“Always Embed Swift Standard Libraries”

\n\n

最常见的罪魁祸首。如果你的应用没有将 Swift 库嵌入到 bundle 中,dyld 将无法在设备上找到它们。

\n\n

如何修复:

\n
    \n
  1. 在 Xcode 中打开项目。
  2. \n
  3. 选择 Target → Build Settings。
  4. \n
  5. 找到 Always Embed Swift Standard Libraries。
  6. \n
  7. 将其值设置为 Yes。
  8. \n
\n\n

如果你使用 CocoaPods,请检查 Podfile 中是否有禁用此行为的行:

\n\n
# 不好(可能导致错误)\npost_install do |installer|\n  installer.pods_project.targets.each do |target|\n    target.build_configurations.each do |config|\n      config.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'NO'\n    end\n  end\nend\n\n# 好\npost_install do |installer|\n  installer.pods_project.targets.each do |target|\n    target.build_configurations.each do |config|\n      config.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'YES'\n    end\n  end\nend\n
\n\n

2. 检查 Swift 版本兼容性

\n\n

如果你连接了一个为 Swift 5.7 编译的框架,而你的项目使用的是 Swift 5.5——你好,错误。Swift 运行时并非“100%”向后兼容。

\n\n

解决方案:确保所有依赖项使用相同的 Swift 版本。打开终端并执行:

\n\n
# 查看特定 .framework 的 Swift 版本\nstrings MyFramework.framework/MyFramework | grep "Swift"\n# 或者通过 xcrun 检查\nxcrun swift --version\n
\n\n

如果框架是为不同版本编译的——请重新编译它或进行更新。

\n\n

3. 清理 Derived Data 并重新构建项目

\n\n

有时 Xcode 会缓存旧的库路径。完全重新构建通常可以解决问题。

\n\n
# 手动删除 Derived Data\nrm -rf ~/Library/Developer/Xcode/DerivedData                

博客

书籍推荐