dyld 崩溃:库未加载:/usr/lib/swift/libswift_Concurrency.dylib 运行 在模拟器上

Crash on dyld: Library not loaded: /usr/lib/swift/libswift_Concurrency.dylib running on simulator

我正在现有应用程序上执行一项非常基本的任务(从远程服务器下载几个文件),以使用新的 Swift 并发 API。任务在 iOS 15 上完美完成:我使用任务组并按预期收到图像。 由于这个应用程序已经存在,我使用 @available 标签来检查设备是否可以执行我的任务(如果 iOS 15,就执行。否则,向用户显示一个警报,什么也不做) 当我尝试在 iOS 13.5 的模拟器上 运行 这个应用程序时出现问题,我的应用程序在启动时崩溃并出现以下错误:

dyld: Library not loaded: /usr/lib/swift/libswift_Concurrency.dylib
  Referenced from: /Users/username/Library/Developer/CoreSimulator/Devices/B316A0F0-B7EF-4F5E-8A26-F7FF54E8A681/data/Containers/Bundle/Application/6CF3D46E-3F15-4FA3-BD61-9D353541B9DA/MyApp.app/MyApp
  Reason: image not found
dyld: launch, loading dependent libraries
DYLD_SHARED_CACHE_DIR=/Users/username/Library/Developer/CoreSimulator/Caches/dyld/20F71/com.apple.CoreSimulator.SimRuntime.iOS-13-5.17F61
DYLD_ROOT_PATH=/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 13.5.simruntime/Contents/Resources/RuntimeRoot
DYLD_LIBRARY_PATH=/Users/username/Library/Developer/Xcode/DerivedData/MyApp-bawyiebpygwuwxawcoistefwxuyy/Build/Products/Debug-iphonesimulator:/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 13.5.simruntime/Contents/Resources/RuntimeRoot/usr/lib/system/introspection
DYLD_INSERT_LIBRARIES=/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 13.5.simruntime/Contents/Resources/RuntimeRoot/usr/lib/libBacktraceRecording.dylib:/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 13.5.simruntime/Contents/Resources/RuntimeRoot/usr/lib/libMainThreadChecker.dylib:/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 13.5.simruntime/Contents/Resources/RuntimeRoot/Developer/Library/PrivateFrameworks/DTDDI

环境:Xcode 13.0 beta 2 (13A5155e) 模拟器 iPhone 8 (iOS 13.5)。 Swift 语言版本 5

有什么我可以做的吗?

编辑:如果可用的话,我就是这样使用的

@available(iOS 15.0, *)
class SCTestViewController: UIViewController {...}
    

Swift 并发的新 Async/Await 标准将仅在 IOS 15 iirc 上可用。 这就是说,我在尝试为 IOS 15 构建时遇到了同样的错误,所以也许这会有用: 我意识到指定的 dyld 不在我的 /usr/lib/swift 目录中,而 XCode 实际上找不到它,因为它不在那里。前往 this site 下载 Swift 5.5 并在我的 machine 上安装了 PKG。通常,您可以 select Swift 的这个新版本作为 XCode 中的工具链,但这导致我的 Pods 构建失败。因此,我导航到 /library/developer/toolchains/<snapshotname>/usr/lib/swift/iphoneos/libswift_Concurrency.dylib 并将此文件作为嵌入式库添加到我的目标中,如下所示:

这个的每个方面都是 hacky 和短期解决方案,你不应该 不在任何实际产品中发布 并且只用作占位符,直到它被包含在标准 Swift图书馆。这就是说,它实际上让我开始使用这些功能进行开发。 顺便说一句,由于与我的 Pods 和 M1 mac 不相关的不兼容,我目前无法 运行 我的模拟器,所以我只在物理设备上测试了这种方法。 我希望遇到此错误的其他人会发现此错误,但我怀疑在您的情况下无法找到该文件仅仅是因为 IOS.

的旧版本不支持这些功能

根据@vera-gonzalez 对她的案例所做的工作找到了解决方案。 这不是生产代码。 我还从 swift 快照 https://swift.org/download/#snapshots 下载了 PKG 文件,我从 /Library/Developer/toolchains/<snapshotname>/usr/lib/swift/<version>/libswift_Concurrency.dylib

获得了两个版本(iphoneos 和 iphonesimulator)

之后我用 lipo 创建了一个 fat dylib 文件:

❯ lipo iphoneos/libswift_Concurrency.dylib iphonesimulator/libswift_Concurrency.dylib -create -output libswift_Concurrency.dylib
❯ lipo -info libswift_Concurrency.dylib
Architectures in the fat file: libswift_Concurrency.dylib are: armv7 armv7s i386 x86_64 arm64 arm64e

在那之后,我将这个 dylib 文件作为可选库添加到我的项目中,在我的项目目标上。

有了这个技巧,我现在可以构建、运行 并为我的项目中的设备和模拟器存档(Swift 论坛上的讨论表明这将在某个时候得到修复,但是同时,我们可以用这个来测试我们的应用程序)

我发现 this link 适合我。在 [TARGET] > Build Phases > Link Binary With Libraries 下并添加 libswift_concurrency.tbd 和可选状态。

我设法用这些解决了这个问题:

  1. 安装了来自 apple 的最新 Swift 软件包:https://download.swift.org/development/xcode/swift-DEVELOPMENT-SNAPSHOT-2021-12-06-a/swift-DEVELOPMENT-SNAPSHOT-2021-12-06-a-osx.pkg
  2. 安装了最新的Swift调试符号:https://download.swift.org/development/xcode/swift-DEVELOPMENT-SNAPSHOT-2021-12-06-a/swift-DEVELOPMENT-SNAPSHOT-2021-12-06-a-osx-symbols.pkg
  3. 取消选中“使此应用可用”Apple Silicon Mac定价和可用性的可用性 来自 AppStore
  4. Link 二进制库中添加了 libswift_Concurrency.tbd 来自 XCode 构建阶段 并设置为可选

我有一个类似的问题,只有安装了 TestFlight 的应用程序会在启动时崩溃并出现该错误(模拟器 运行 正常),并且已通过将 Xcode 更新为 13.2.1 来解决此问题。

来自https://developer.apple.com/documentation/xcode-release-notes/xcode-13_2_1-release-notes

Resolved Issues

Fixed an issue where apps built with Xcode 13 or Xcode 13.1 sometimes crashed at launch with an error reporting that the libswift_Concurrency.dylib library was not loaded. This only affected apps that used Swift Concurrency features (such as async/await), deployed to iOS prior to 15, tvOS prior to 15, or watchOS prior to 8, and had bitcode enabled. (86349088)

我和 Xcode 13.2.1

有同样的问题

Xcode 13.3 也可能导致拒绝您的新版本 Async/await causes apps not process for AppStore


解决方法 1

最简单的解决方法是更新到支持 Swift 5.6.

Xcode 13.3.1

Xcode 13.3 Beta Release Notes:

Resolved Issues Apps that use back-deployed Swift Concurrency on operating systems prior to macOS 10.15, iOS 13, tvOS 13, or watchOS 6 no longer crash on launch. (87789769)

Xcode 13.3.1 Release Notes:

Resolved Issues

Fixed: Exporting an app that uses Swift’s concurrency features from an archive with bitcode might fail when the app targets iOS 13.0–14.7, watchOS 6.0–7.6, or tvOS 13.0–14.7. (89271047) When you target iOS 13.4 and later and enable bitcode, the bitcode segment is now stripped correctly. This fixes a crash that prevented some apps from running in older operating systems (iOS 14 and earlier). (90024354) (FB9951126)

本期部分链接Alamofire GRDB.swift RxSwift


解决方法 2

有很多库可能导致此失败。 因此,如果您不想更新 Xcode,那么只需降级您的一些库即可。例如:

  • RxSwift6.2 或更低;
  • Alamofire5.4.4 或更低;
  • GRDB5.16.0 或更低;
  • 等等

大多数导致失败的库都有这样的问题。因此,您可以在 github 中使用文本 libswift_Concurrency.dylib 搜索这些问题。他们中的大多数人说它已在 Xcode 13.3.1.

中修复