Swift Macro包平台版本配置冲突问题如何解决?
解决Swift Macro包的平台版本兼容问题
问题根源
你遇到的第一个错误是因为SwiftSyntaxMacros这类依赖包对macOS有最低版本要求(10.15),但你只指定iOS平台版本时,Swift Package Manager会给macOS默认分配较低的版本(比如10.13),导致版本不匹配。添加macOS 10.15后出现新错误,大概率是其他未明确指定的平台(如tvOS、watchOS)仍使用默认旧版本,或是缓存引发的依赖解析异常。
解决方案
1. 统一指定所有支持平台的最低版本
修改Package.swift,明确列出所有需要支持的平台,并设置符合SwiftSyntax要求的最低版本(对应你使用的509版本,要求iOS14+、macOS10.15+、tvOS14+、watchOS7+):
import CompilerPluginSupport import PackageDescription let package = Package( name: "TestMockable", platforms: [ .iOS(.v14), .macOS(.v10_15), .tvOS(.v14), .watchOS(.v7) ], products: [ .library( name: "Test", targets: ["Test"] ), ], dependencies: [ .package(url: "https://github.com/apple/swift-syntax.git", from: "509.0.0-swift-5.9-DEVELOPMENT-SNAPSHOT-2023-04-25-b"), ], targets: [ .macro( name: "TestMacro", dependencies: [ .product(name: "SwiftSyntaxMacros", package: "swift-syntax"), .product(name: "SwiftCompilerPlugin", package: "swift-syntax"), ] ), .target( name: "Test", dependencies: ["TestMacro"] ), ] )
2. 针对特定Target单独配置平台(可选)
如果你的Test库不需要支持所有平台(比如仅需iOS),可以给该Target单独指定平台范围。注意Macro Target必须支持macOS(编译插件运行在macOS环境):
.target( name: "Test", dependencies: ["TestMacro"], platforms: [.iOS(.v14)] )
3. 清理缓存并重新解析依赖
缓存常引发奇怪的依赖错误,执行以下步骤:
- 在Xcode中选择
Product > Clean Build Folder - 或删除项目对应的DerivedData文件夹(路径:
~/Library/Developer/Xcode/DerivedData) - 终端进入项目目录,运行:
swift package clean swift package resolve
内容的提问来源于stack exchange,提问作者Sharmin Khan
相关产品推荐
相关产品推荐

