Xcode 12编译应用遇Swift版本兼容问题:自定义框架无法导入
这个问题我之前踩过同款坑,光设置系统级的命令行工具确实不够,Xcode的项目和target层面还有不少容易忽略的细节需要调整,我给你梳理几个关键的解决步骤:
检查项目级别的Swift版本配置
打开项目根目录的设置(不是单个target),切换到Build Settings标签,搜索Swift Language Version,确保这里设置的是和你的自定义框架匹配的Swift 5.2。Xcode默认会用当前版本(Xcode12对应Swift5.3)覆盖系统命令行工具的设置,这是最容易踩的坑。逐个验证Target的Swift版本
不仅主App Target,你的自定义框架Target也要单独检查Swift Language Version,必须把框架的编译版本设为5.2,然后重新编译框架生成适配的产物。彻底清理构建缓存
Xcode的缓存经常会导致配置不生效,先按Cmd + Shift + K清理当前项目的构建文件夹,再按Cmd + Option + Shift + K清理全局Derived Data,之后重启Xcode再尝试编译。确认命令行工具的实际生效状态
打开终端输入swift --version,看看输出是不是Swift 5.2.4(对应Xcode11.7)。如果不是,手动在终端执行:sudo xcode-select -s /Applications/Xcode11.7.app/Contents/Developer强制指定命令行工具路径。
CocoaPods管理的框架额外检查
如果你的自定义框架是通过CocoaPods引入的,要在Podfile里给对应的Pod指定Swift版本:post_install do |installer| installer.pods_project.targets.each do |target| if target.name == '你的自定义框架名称' target.build_configurations.each do |config| config.build_settings['SWIFT_VERSION'] = '5.2' end end end end然后执行
pod install更新配置。
为什么设置了命令行工具还是没用?
因为Xcode项目和Target的编译配置优先级高于系统级的命令行工具,就算你改了系统默认的命令行版本,只要项目里指定了Swift 5.3,Xcode还是会用项目配置来编译代码,这就是问题的核心所在。
内容的提问来源于stack exchange,提问作者Antoine Lefebvre

