Xcode13编译旧iOS项目出现CMFormatDescription.h未知类型AudioFormatListItem错误
问题根因
该编译错误是老项目的配置与Xcode 13的编译规则不匹配,导致CoreMedia框架中定义的AudioFormatListItem类型未提前暴露,AVFoundation框架内部头文件引用时找不到对应类型。
解决方案
- 调整头文件导入顺序
在导入#import <AVFoundation/AVFoundation.h>的文件顶部,优先导入CoreMedia头文件:#import <CoreMedia/CoreMedia.h>
如果是在.pch预编译头中全局导入了AVFoundation,同样要保证CoreMedia的导入顺序早于AVFoundation。 - 升级最低部署版本
AudioFormatListItem是iOS 8及以上版本才公开的系统类型,老项目如果设置了低于iOS 8的Deployment Target,将其调整到iOS 9.0及以上版本即可适配Xcode 13的编译要求。 - 排查宏冲突
检查项目自定义预编译宏、第三方引入的宏是否存在和CoreMedia关键字冲突的定义,尤其是控制系统类型暴露的CM_NO_TYPE_QUALIFIERS这类宏,存在冲突则删除或重命名冲突宏即可。 - 清理构建缓存
按下快捷键Shift+Command+K执行清理构建文件夹操作,也可以手动删除~/Library/Developer/Xcode/DerivedData路径下对应项目的缓存目录,重新编译解决旧缓存导致的头文件索引异常。
内容的提问来源于stack exchange,提问作者Cale
相关产品推荐
相关产品推荐

