如何为单个SPM目标指定平台限制?
Swift Package 单个Target指定平台方案
当然可以给单个Target单独指定平台限制,完全能满足你说的分Target适配不同平台的需求。
具体实现方式
在Package.swift中,直接给每个Target单独配置platforms参数即可,包级别的platforms仅作为未单独配置的Target的默认值,单个Target的配置优先级更高。
以下是贴合你场景的示例代码:
// swift-tools-version: 5.9 import PackageDescription let package = Package( name: "YourPackage", // 包级别可选配置,为未单独指定平台的Target提供默认值 platforms: [ .macOS(.v13), .iOS(.v16), .tvOS(.v16), .watchOS(.v9) ], products: [ .library(name: "Full", targets: ["Full"]), .library(name: "BackendModels", targets: ["BackendModels"]) ], targets: [ // 依赖UIKit的Full Target,仅限定iOS和tvOS .target( name: "Full", platforms: [ .iOS(.v16), .tvOS(.v16) ], dependencies: ["BackendModels"] ), // 后端模型Target,支持多平台 .target( name: "BackendModels", platforms: [ .macOS(.v13), .iOS(.v16), .tvOS(.v16), .watchOS(.v9) ] ), // 测试Target也可按需单独配置平台 .testTarget( name: "BackendModelsTests", dependencies: ["BackendModels"] ) ] )
关键注意点
- 单个Target的
platforms配置会直接覆盖包级别的设置。 - 如果不需要包级别的默认平台,可直接删除包的
platforms属性,仅给需要的Target单独配置。 - 存在依赖关系的Target(比如Full依赖BackendModels),要确保被依赖的Target支持当前Target的所有平台,否则会出现编译错误。
内容的提问来源于stack exchange,提问作者Ortwin Gentz
相关产品推荐
相关产品推荐

