随着 Xcode 16.4 的发布,在使用模拟器(特别是iOS 18.5 模拟器)运行包含 WebKit 功能的 iOS 应用时,遇到了如下严重的运行时崩溃:
dyld[99512]: Library not loaded: /usr/lib/swift/libswiftWebKit.dylib
Referenced from: .../xxx.app/xxx.debug.dylib
Reason: tried:
'/usr/lib/swift/libswiftWebKit.dylib' (no such file)
这个错误导致应用在模拟器中启动即闪退,而在真机运行则完全正常。
• 模拟器试图在运行时加载 libswiftWebKit.dylib,但该动态库在模拟器运行时路径中不存在。
• 所有涉及 WebKit Swift 接口的引用(包括 .createPDF()、.createWebArchiveData() 等)都会触发动态链接器(dyld)查找这个库。
• 如果找不到,就会触发崩溃:EXC_BAD_INSTRUCTION 或 dyld: Library not loaded.
• 真机系统完整,包含所有必要的动态库和 dyld 缓存。
• 问题仅限于模拟器架构(x86_64 或 arm64 模拟器)。
这是 WebKit 官方推荐的临时解决方案,适合仅用于开发测试的项目:
步骤:
1. 选中项目的主 Target
2. 打开 General 标签页
3. 在 Deployment Info 区块,将 iOS Deployment Target 设置为 18.4 或更高版本
优点:
• 快速生效
• 无需更改业务逻辑
缺点:
• 若你需要支持 iOS 16、iOS 17 用户,则不能使用此方式上线.
通过手动设置模拟器的动态库搜索路径,临时绕过缺失的问题。
步骤:
1. 打开终端,输入以下命令查找模拟器 runtime 路径:
xcrun simctl list runtimes -v
2. 找到 iOS 18.5 对应路径,例如:
/Library/Developer/CoreSimulator/Volumes/iOS_22F77/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 18.5.simruntime
3. 拼接完整路径:
将 /Contents/Resources/RuntimeRoot/System/Cryptexes/OS/usr/lib/swift 拼接到第二步得到的路径后面。
结果如下:
/Library/Developer/CoreSimulator/Volumes/iOS_22F77/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 18.5.simruntime/Contents/Resources/RuntimeRoot/System/Cryptexes/OS/usr/lib/swift
4. 打开 Xcode > Product > Scheme > Edit Scheme > Run > Arguments
5. 添加 Environment Variable:
Name: DYLD_FALLBACK_LIBRARY_PATH
Value: 上述完整路径
按照上面的解决方案,基本上就能使模拟器正常运行起来了。
方案 | 是否推荐 | 适用场景 |
---|---|---|
设置 iOS 18.4+ | ✅ 临时方案 | 仅模拟器调试,无需支持老版本 |
设置环境变量 | ✅ 推荐 | 模拟器调试需要保留低版本支持 |
参考文档:293831 – Crash when using libswiftWebKit APIs in iOS 18.5 simulator
最后,希望能够帮助到有需要的朋友,如果觉得有帮助,还望点个赞,添加个关注,笔者也会不断地努力,写出更多更好用的文章。