Swift 应用插件为构建 Swift 应用提供任务、配置和约定。

用法

build.gradle.kts
plugins {
    `swift-application`
}
build.gradle
plugins {
    id 'swift-application'
}

构建变体

Swift 应用插件理解以下维度。阅读构建变体介绍获取更多信息。

构建类型 - 总是 debug 或 release

构建类型控制生成二进制文件的可调试性以及优化。

  • debug - 生成调试符号且不优化二进制文件

  • release - 生成调试符号并优化,但从二进制文件中提取调试符号

目标机器 - 默认为构建主机

目标机器表示应用预期在哪种机器上运行。目标机器由其操作系统和架构标识。Gradle 使用目标机器根据主机上的可用性来决定选择哪种工具链。

目标机器可以按如下方式配置

build.gradle.kts
application {
    targetMachines = listOf(machines.linux.x86_64, machines.macOS.x86_64)
}
build.gradle
application {
    targetMachines = [
        machines.linux.x86_64, machines.macOS.x86_64
    ]
}

任务

下图显示了此插件添加的任务之间的关系。

swift application task graph
图 1. Swift 应用插件默认任务图

变体相关任务

Swift 应用插件根据应用组件的变体创建任务。阅读构建变体介绍获取更多信息。下图显示了依赖于变体的任务之间的关系。

swift application variant task graph
图 2. Swift 应用插件依赖于变体的任务图
compileVariantSwift(例如 `compileDebugSwift` 和 `compileReleaseSwift`)- SwiftCompile

依赖于:所有向编译贡献源文件的任务 :: 使用选定的编译器编译 Swift 源文件。

linkVariant(例如 `linkDebug` 和 `linkRelease`)- LinkExecutable

依赖于:所有对链接可执行文件有贡献的任务,包括通过项目依赖解析的项目中的 `linkVariant` 和 `createVariant` 任务 :: 使用选定的链接器从已编译的目标文件链接可执行文件。

installVariant(例如 `installDebug` 和 `installRelease`)- InstallExecutable

依赖于:`linkVariant` 以及所有对可执行文件运行时有贡献的任务,包括通过项目依赖解析的项目中的 `linkVariant` 任务 :: 安装可执行文件及其所有运行时依赖,以便轻松执行。

assembleVariant(例如 `assembleDebug` 和 `assembleRelease`)- 任务(生命周期)

依赖于:`linkVariant` :: 汇总组装此应用特定变体的任务。

生命周期任务

Swift 应用插件将其一些任务关联到基本插件章中记录的标准生命周期任务 — Swift 应用插件会自动应用此章

assemble - 任务(生命周期)

依赖于:`linkDebug` :: 汇总任务,用于组装项目中的 debug 变体应用(如果存在)以供当前主机使用。此任务由基本插件添加。

check - 任务(生命周期)

汇总任务,执行验证任务,例如运行测试。一些插件会将其自身的验证任务添加到 `check` 任务。例如,XCTest 插件将一个任务关联到此生命周期任务以运行测试。此任务由基本插件添加。

build - 任务(生命周期)

依赖于:`check`,`assemble` :: 汇总任务,执行项目的完整构建。此任务由基本插件添加。

clean - 删除

删除构建目录及其中的所有内容,即由 `layout.buildDirectory` 项目属性指定的路径。此任务由基本插件添加。

依赖管理

与 Swift 应用插件创建的任务类似,根据应用组件的变体创建多个配置。阅读构建变体介绍获取更多信息。下图描述了 Swift 应用插件添加的配置

swift application configurations
图 3. Swift 应用插件配置
  • 白色配置是用户应使用来声明依赖的配置

  • 粉色配置,也称为可消费配置并由 (C) 表示,是组件针对库运行时使用的配置

  • 蓝色配置,也称为可解析配置并由 (R) 表示,是组件内部使用的配置

以下配置用于声明依赖

implementation

用于声明主组件所有变体的实现依赖。在此处应声明所有变体的依赖。

mainVariantImplementation(例如 `mainDebugImplementation` 和 `mainReleaseImplementation`)扩展 `implementation`

用于声明主组件特定变体的实现依赖。在此处应声明特定变体的依赖。

依赖于此应用组件的下游消费者使用以下配置

variantRuntimeElements(例如 `debugRuntimeElements` 和 `releaseRuntimeElements`)扩展 `mainVariantImplementation`

用于执行应用。此配置供消费者使用,以获取运行应用所需的所有元素。

应用本身使用以下配置

swiftCompileVariant(例如 `swiftCompileDebug` 和 `swiftCompileRelease`)扩展 `mainVariantImplementation`

用于编译应用。此配置包含应用的编译包含根目录,因此在调用 Swift 编译器进行编译时会使用它。

nativeLinkVariant(例如 `nativeLinkDebug` 和 `nativeLinkRelease`)扩展 `mainVariantImplementation`

用于链接应用。此配置包含应用的库,因此在调用 Swift 链接器进行链接时会使用它。

nativeRuntimeVariant(例如 `nativeRuntimeDebug` 和 `nativeRuntimeRelease`)扩展 `mainVariantImplementation`

用于执行应用。此配置包含应用的运行时库。

约定

Swift 应用插件添加了源代码和任务的约定,如下所示。

项目布局

Swift 应用插件假设项目布局如下所示。这些目录无需存在或包含任何内容。Swift 应用插件将编译它找到的任何内容,并忽略任何缺失的内容。

src/main/swift

扩展名为 .swift 的 Swift 源代码

通过在 application 脚本块上配置 source配置项目布局

compileVariantSwift 任务

Swift 应用插件为应用组件的每个构建变体添加一个 SwiftCompile 实例(例如 compileDebugSwiftcompileReleaseSwift)。阅读构建变体介绍获取更多信息。下面列出了一些最常见的配置选项。

compilerArgs

[]

debuggable

true

modules

configurations.swiftCompileVariant

macros

[]

objectFileDir

layout.buildDirectory.dir("obj/main/$variant")

optimized

对于 debug 构建类型为 false,否则为 true

source

application.swiftSource

targetPlatform

从二进制文件的 TargetMachine 派生

toolChain

根据目标机器自动选择

Swift 应用插件为应用的每个变体添加一个 LinkExecutable 实例 — 例如 linkDebuglinkRelease。阅读构建变体介绍获取更多信息。下面列出了一些最常见的配置选项。

debuggable

true

libs

configurations.nativeLinkVariant

linkedFile

layout.buildDirectory.dir("exe/main/$variant/module")

linkerArgs

[]

source

compileVariantSwift.objects

targetPlatform

从二进制文件的 TargetMachine 派生

toolChain

根据目标机器自动选择

installVariant 任务

Swift 应用插件为测试组件的每个变体添加一个 InstallExecutable 实例 — 例如 installDebuginstallRelease。阅读构建变体介绍获取更多信息。无需在此任务上配置任何属性。