iOS 15环境下App启动崩溃:_swift_getExtendedExistentialTypeMetadata符号缺失
iOS 15下App启动崩溃:dyld缺失
_swift_getExtendedExistentialTypeMetadata符号 问题详情
生产环境App在iOS 15系统启动时,先显示1秒空白屏后被系统终止。真机Release构建时捕获到的崩溃日志:
dyld[6062]: Symbol not found: (_swift_getExtendedExistentialTypeMetadata)
Referenced from: '/private/var/containers/Bundle/Application/661DFEBF-EA64-489A-9DA3-3957077A0C3A/yummypets.app/yummypets'
Expected in: '/usr/lib/swift/libswiftCore.dylib'
环境配置
- Xcode 14.3.1
- Swift 5.8.1
- Xcode中Swift语言版本:5
- 最低部署版本:iOS 15
- 无兼容性报错提示
已尝试的方案
- 清理并重新构建项目
- 配置Runpath Search Paths为
$(inherited) @executable_path/Frameworks - 设置
Embedded Content Contains Swift Code为"Yes" - 使用开发者签名身份
- 回滚至之前版本
- 删除重装Xcode
- 检查依赖包
临时规避方案:在Build Settings的Other Linking Flags中添加-Wl,-weak-lswiftCore可绕过首次崩溃,但会引发其他问题,并非最优解。
解决思路与方案
1. 排查Swift版本与语法依赖
_swift_getExtendedExistentialTypeMetadata是Swift 5.9新增的符号,当前使用的Swift 5.8.1本不应引用该符号。需检查:
- 代码中是否使用了Swift 5.9才支持的语法特性(如特定存在类型的扩展、新的协议关联类型用法)
- 第三方依赖库是否有使用高于Swift 5.8.1的版本编译,导致间接引入该符号
2. 统一编译配置
- 确认所有Target(主App及依赖库)的
Deployment Target均设置为iOS 15,避免部分依赖库的部署版本过高引发符号不兼容 - 检查
Build Settings→Swift Compiler - Language→Swift Language Version是否强制设为5,而非自动选择导致的隐性版本升级
3. 重置依赖与编译缓存
- 若使用CocoaPods,执行
pod deintegrate后重新pod install,确保依赖库基于当前Xcode/Swift版本重新编译 - 删除
~/Library/Developer/Xcode/DerivedData下的项目缓存目录,彻底清除旧编译产物后重新构建
4. 检查链接配置
- 确认
Other Linking Flags中无其他可能干扰Swift Core库链接的参数 - 对于动态依赖库,确保
Embed & Sign配置正确,避免符号引用路径错误
内容的提问来源于stack exchange,提问作者yann-rzd
相关产品推荐
相关产品推荐

