4

我正在现有应用程序上实现一项非常基本的任务(从远程服务器下载少量文件),以练习新的 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 {...}
    
4

6 回答 6

2

我发现这个链接对我有用。在 [TARGET] > Build Phases > Link Binary With Libraries 下并添加 libswift_concurrency.tbd 和可选状态。

于 2021-07-17T09:19:30.167 回答
1

Swift 并发的新 Async/Await 标准将仅在 IOS 15 iirc 上可用。这就是说,我在尝试为 IOS 15 构建时遇到了同样的错误,所以也许这会有用:我意识到dyld指定的不在我的/usr/lib/swift目录中,并且 XCode 实际上找不到它,因为它不存在。前往该站点下载 Swift 5.5 并在我的机器上安装了 PKG。通常,您可以选择这个新版本的 Swift 作为 XCode 中的工具链,但这会导致我的 Pod 无法构建。因此,我导航/library/developer/toolchains/<snapshotname>/usr/lib/swift/iphoneos/libswift_Concurrency.dylib到此文件并将其作为嵌入式库添加到我的目标中,如下所示: 在此处输入图像描述

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

于 2021-07-13T05:03:26.453 回答
1

根据@vera-gonzalez 对她的案例所做的事情找到了解决方案。这不是生产代码。我还从 swift 快照https://swift.org/download/#snapshots下载了 PKG 文件,两个版本(iphoneos 和 iphonesimulator)都来自/Library/Developer/toolchains/<snapshotname>/usr/lib/swift/<version>/libswift_Concurrency.dylib

之后,我用 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 文件作为可选库添加到我的项目中,位于我的项目目标上。 显示 Link Binary With Libraries 的图像,显​​示所选库上的 Optional

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

于 2021-07-14T16:15:19.020 回答
1

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

  1. 从苹果安装了最新的 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 Availability in Pricing and Availability from AppStore
  4. Link Binary中添加了libswift_Concurrency.tbd与XCode构建阶段的库并设置为可选
于 2021-12-08T14:24:11.110 回答
0

我有一个类似的问题,只有 TestFlight 安装的应用程序会在启动时崩溃并出现该错误(模拟器运行良好),并且通过将 Xcode 更新到 13.2.1 来修复它。

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

已解决的问题

修复了使用 Xcode 13 或 Xcode 13.1 构建的应用程序有时会在启动时崩溃并报告未加载 libswift_Concurrency.dylib 库的错误的问题。这仅影响使用 Swift 并发功能(例如 async/await)、部署到 15 之前的 iOS、15 之前的 tvOS 或 8 之前的 watchOS 并启用了位码的应用程序。(86349088)

于 2021-12-28T06:03:24.427 回答
0

我有同样的问题Xcode 13.2.1

我没有从其他答案中做任何事情(例如手动添加libswift_Concurrency.dylib、下载其他Xcode版本等)。

我刚刚将RxSwift(was added by Swift Package Manager) 的版本从降级6.55.1.3错误消失了。

我不知道它的原因,但这对我有用。

PS所以现在你可以尝试降级你的一些库的版本,它可能有效(或无效)。但它可以使您免于降级Xcode或安装Xcode 13.3.

PPS 我听说它已在Xcode 13.3 beta 1更高版本中得到修复,但那些 beta 版本存在一些问题,例如使用iOS 15.2模拟器时出现错误。

于 2022-02-23T12:21:39.737 回答