第一种可能,升级Xcode导致链接的库失效
刚刚升级了Xcode16.1 发现项目无法运行了,提示了大量的Undefined symbol *
,检查发现这些错误都出现在了同一个SDK中,我就去找第三方厂家给提供的SDK Demo,发现人家的Demo可以正常运行,然后我就创建了一个OC环境的项目按照人家的文档在Generate
中导入相关的库发现还是不行,发现有时候在这块点击+号导入的.tbd库在这块不显示但是在左侧Frameworks
文件夹里是有的,运行项目还是不行
之后我又尝试在 Build Phases - Link Binary and Library
中重新导入发现可以运行了不会报Undefined symbol *
错误了。本以为解决了,但是回到自己的项目重新导系统库运行发现还是不行。
因为我原来项目是OC、Swift混编的我尝试在新建的OC项目中加入Swift代码,运行后果然报了错,之后我开始查找项目添加Swift后与添加前的配置差别果然发现了不同之处,然后尝试调整参数设置或者删除参数最后发现是受到参数 SWIFT_OPTIMIZATION_LEVEL
的影响
在项目中搜索SWIFT_OPTIMIZATION_LEVEL
有的项目会出搜索到图1 有的会搜索到图2,这是我遇到的两种环境
1. 搜索出来的第一种情况 参数在Swift Compiler - Code Generation
下的子参数Optimization Level
图1的情况点击选项会出现三种,如下图,选择第二个-O
即可
2. 搜索出来的第二中情况 参数在User - define
中
需要手动输入将参数SWIFT_OPTIMIZATION_LEVEL
的值改为-O
这种方法虽然可能能解决undefined symbol *
问题,但是在开发调试时会导致其他问题,例如调试时字典数组中的值无法取出等。