仅在iOS 15上,当我运行应用程序时,我得到错误:dyld[6062]:未找到符号:(_swift_getExtendedExistentialTypeMetadata)

xu3bshqb  于 2023-09-30  发布在  Swift
关注(0)|答案(1)|浏览(123)

我遇到了一个真实的的问题,一个应用程序在生产中不适用于iOS 15。症状:当我启动应用程序时,我会得到一秒钟的黑屏,然后应用程序就会死机。Xcode崩溃后的唯一信息如下:
构建真实的器械运行版本:

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 Swift语言版本Xcode:5最小部署:iOS 15零不兼容错误消息
我已经尝试了一些方法,包括:

  • 清洁和重建
  • Runpath搜索路径为$(inherited)@executable_path/Frameworks
  • 嵌入内容包含Swift代码为“是
  • 签名身份为开发人员
  • 回滚到以前的版本
  • 删除Xcode
  • 检查包我设法避免了第一次崩溃添加“-Wl,-weak-lswiftCore”到其他链接标志在构建设置,但它并不理想,并导致其他问题.
2admgd59

2admgd591#

我认为您遇到了与https://github.com/apple/swift/issues/64657相同的问题
据我所知,转换any Blah<Something>类型的泛型约束,Swift编译器发出一个依赖于swift_getExtendedExistentialTypeMetadata函数的对象文件,该函数在iOS 16运行时之前不存在。
我的解决方法是:
使用像https://ghidra-sre.org/这样的反汇编器来查找对符号_swift_getExtendedExistentialTypeMetadata的引用。你会有一个演员表(as/as?)或在可能是罪魁祸首的函数中。
如果有人能用objdump来编写一个更聪明的脚本,我会很欢迎的:)

相关问题