Publish(by Sundell)编译时平台版本不匹配错误如何解决
报错根因
两个报错的触发逻辑是连锁的:
publish new默认生成的项目模板未在Package.swift中声明platforms配置,此时Swift Package Manager会为macOS目标默认设置最低兼容版本10.10,和Publish 0.9.0要求的最低macOS 12.0规则冲突,导致包解析失败。- 自行添加的
.macOS(.v12_4)是非法枚举值:SwiftPM的平台版本枚举仅提供大版本标识,不支持小版本(如12.4)的对应枚举值,编译器无法解析该写法,进一步导致包解析中断,Xcode无法生成有效scheme和目标,自然出现「无可用设备、目标缺失」的提示。
修复操作
- 修正
Package.swift配置,替换非法的版本声明,同时对齐依赖版本和本地安装的Publish版本:
let package = Package( name: "MySite", platforms: [ .macOS(.v12) // 仅需声明大版本,对应最低兼容macOS 12.0,满足Publish的版本要求 ], products: [ .executable( name: "MySite", targets: ["MySite"] ) ], dependencies: [ .package(name: "Publish", url: "https://github.com/johnsundell/publish.git", from: "0.9.0") ], targets: [ .target( name: "MySite", dependencies: ["Publish"] ) ] )
- 清理旧的解析缓存:关闭Xcode,在项目根目录执行以下命令删除本地缓存文件:
rm -rf .build .swiftpm xcuserdata swift package resolve
命令执行无报错则说明包配置已正确。
- 重新双击打开项目下的
Package.swift文件,等待Xcode完成依赖解析后,即可正常选择「My Mac」作为运行目的地,缺失的scheme和目标也会自动生成。
注意事项
- 不要尝试在Xcode的Build Settings面板中手动修改目标平台版本,SwiftPM项目的所有编译配置以
Package.swift中的声明为准,手动修改的配置会在下次包解析时被自动覆盖。 - 如果后续升级Publish版本后再次出现同类版本不匹配报错,直接调整
platforms字段内的大版本号匹配依赖要求即可。
内容的提问来源于stack exchange,提问作者loseth
相关产品推荐
相关产品推荐

