Swift Application 插件为构建 Swift 应用程序提供了 task、配置和约定。

用法

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

构建变体

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

构建类型 - 始终为 debugrelease

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

  • 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
    ]
}

Task

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

swift application task graph
图 1. Swift Application 插件默认 task 图

变体相关的 Task

Swift Application 插件根据应用程序组件的变体创建 task。阅读构建变体介绍以获取更多信息。下图显示了变体相关的 task 之间的关系。

swift application variant task graph
图 2. Swift Application 插件变体相关的 task 图
compileVariantSwift (例如 compileDebugSwiftcompileReleaseSwift) - SwiftCompile

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

linkVariant (例如 linkDebuglinkRelease) - LinkExecutable

依赖于:所有为链接可执行文件做出贡献的 task,包括来自通过项目依赖关系解析的项目的 linkVariantcreateVariant task :: 使用选定的链接器从编译的对象文件链接可执行文件。

installVariant (例如 installDebuginstallRelease) - InstallExecutable

依赖于:linkVariant 和所有为可执行文件的运行时做出贡献的 task,包括来自通过项目依赖关系解析的项目的 linkVariant task :: 安装可执行文件及其所有运行时依赖项以便于执行。

assembleVariant (例如 assembleDebugassembleRelease) - Task (生命周期)

依赖于:linkVariant :: 聚合组装此应用程序特定变体的 task。

生命周期 Task

Swift Application 插件将其某些 task 附加到 Base Plugin 章节 中记录的标准生命周期 task — Swift Application 插件会自动应用 Base Plugin

assemble - Task (生命周期)

依赖于:linkDebug :: 聚合 task,用于组装项目中当前主机(如果存在)的应用程序的 debug 变体。此 task 由 Base Plugin 添加。

check - Task (生命周期)

聚合 task,用于执行验证 task,例如运行测试。某些插件将它们自己的验证 task 添加到 check。例如,XCTest 插件将一个 task 附加到此生命周期 task 以运行测试。此 task 由 Base Plugin 添加。

build - Task (生命周期)

依赖于:check, assemble :: 聚合 task,用于执行项目的完整构建。此 task 由 Base Plugin 添加。

clean - 删除

删除构建目录及其中的所有内容,即 layout.buildDirectory 项目属性指定的路径。此 task 由 Base Plugin 添加。

依赖管理

就像 Swift Application 插件创建的 task 一样,多个配置是基于应用程序组件的变体创建的。阅读构建变体介绍以获取更多信息。下图描述了 Swift Application 插件添加的配置

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

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

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

以下配置用于声明依赖项

implementation

用于为主要组件的所有变体声明实现依赖项。您应该在此处声明任何变体的依赖项。

mainVariantImplementation (例如 mainDebugImplementationmainReleaseImplementation) 扩展了 implementation

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

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

variantRuntimeElements (例如 debugRuntimeElementsreleaseRuntimeElements) 扩展了 `mainVariantImplementation

用于执行应用程序。此配置旨在供消费者使用,以检索运行应用程序所需的所有元素。

以下配置供应用程序自身使用

swiftCompileVariant (例如 swiftCompileDebugswiftCompileRelease) 扩展了 mainVariantImplementation

用于编译应用程序。此配置包含应用程序的编译 include 根目录,因此在调用 Swift 编译器编译应用程序时使用。

nativeLinkVariant (例如 nativeLinkDebugnativeLinkRelease) 扩展了 mainVariantImplementation

用于链接应用程序。此配置包含应用程序的库,因此在调用 Swift 链接器链接应用程序时使用。

nativeRuntimeVariant (例如 nativeRuntimeDebugnativeRuntimeRelease) 扩展了 mainVariantImplementation

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

约定

Swift Application 插件为源和 task 添加了约定,如下所示。

项目布局

Swift Application 插件假定如下所示的项目布局。这些目录都不需要存在或包含任何内容。Swift Application 插件将编译找到的任何内容,并忽略任何缺失的内容。

src/main/swift

Swift 源代码,扩展名为 .swift

您可以通过配置 application 脚本块上的 source配置项目布局

compileVariantSwift Task

Swift Application 插件为要构建的应用程序组件的每个变体添加一个 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 Application 插件为应用程序的每个变体添加一个 LinkExecutable 实例 - 例如 linkDebuglinkRelease。阅读构建变体介绍以获取更多信息。下面显示了一些最常见的配置选项。

debuggable

true

libs

configurations.nativeLinkVariant

linkedFile

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

linkerArgs

[]

source

compileVariantSwift.objects

targetPlatform

派生自二进制文件的 TargetMachine

toolChain

根据目标机器自动选择

installVariant Task

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