如何在多个Swift包之间共享Package.swift配置?
不需要等待Swift 5.6的可扩展构建工具,现有版本的SwiftPM就支持多种配置共享方案,完全可以解决重复配置的问题:
方案1:封装独立配置包(最推荐)
SwiftPM 5.3及以上版本支持在Package.swift中导入其他本地包的内容,你可以创建一个专门的本地配置包来统一管理所有通用配置:
- 新建名为
BuildConfig的本地Swift包,在其Sources/BuildConfig/BuildConfig.swift中定义通用配置:
import PackageDescription public enum CommonConfig { // 通用Swift编译标记 public static let swiftSettings: [SwiftSetting] = [ .unsafeFlags(["-enable-experimental-concurrency"]), .define("DEBUG", .when(configuration: .debug)) ] // 通用支持的最低系统版本 public static let supportedPlatforms: [SupportedPlatform] = [ .iOS(.v15), .macOS(.v12) ] // 通用依赖版本 public static let commonDependencies: [Package.Dependency] = [ .package(url: "https://github.com/apple/swift-algorithms.git", from: "1.0.0") ] }
- 在所有业务本地包的
Package.swift中声明对BuildConfig包的本地依赖,直接调用预设的配置即可:
// swift-tools-version: 5.3 import PackageDescription import BuildConfig let package = Package( name: "YourBusinessPackage", platforms: CommonConfig.supportedPlatforms, dependencies: CommonConfig.commonDependencies, targets: [ .target( name: "YourBusinessPackage", swiftSettings: CommonConfig.swiftSettings ) ] )
依赖声明中通过path: "../BuildConfig"指定配置包的本地相对路径即可。
方案2:使用xcconfig文件共享配置
如果所有本地包最终都通过Xcode项目集成使用,你可以把通用编译配置写入.xcconfig文件,在Xcode项目的构建设置中导入该文件,Xcode的xcconfig配置优先级会高于Swift包内的同名配置,修改时只需要改xcconfig文件即可全局生效。
方案3:脚本批量生成清单文件
如果配置改动频率极高,你可以把Package.swift做成模板,把公共配置抽成变量,写简单的Shell/Python脚本批量生成所有本地包的清单文件,这种方案灵活性最高,不受SwiftPM版本限制。
补充说明
Swift 5.6推出的可扩展构建工具主要用于支持自定义构建流程、代码生成、资源处理等复杂需求,并不是专门用来解决配置共享问题的,无需等待该特性即可完成配置统一。
内容的提问来源于stack exchange,提问作者noziar
相关产品推荐
相关产品推荐

