微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我正在现有应用程序上实施一项非常基本的任务(从远程服务器下载几个文件),以使用新的 Swift Concurrency API。该任务在 iOS 15 上完美完成:我使用 TaskGroup 并按预期接收图像。 由于这个应用程序已经存在,我使用@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

我能做些什么吗?

编辑:这就是我使用 if available 的方式

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

解决方法

我发现 this link 对我有用。在 [TARGET] > Build Phases > Link Binary With Libraries 下并添加具有可选状态的 libswift_concurrency.tbd。

,

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

这的每一个方面都是 hacky 和短期解决方案,您不应该在任何实际产品中提供,并且只能用作占位符,直到它被包含在标准 Swift 库中。这就是说,它实际上允许我开始使用这些功能进行开发。 顺便说一句,由于与我的 Pod 和 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 创建了一个胖 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 文件作为可选库添加到我的项目中,位于我的项目目标上。 image showing the Link Binary With Libraries,showing the Optional on the lib selected

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?