Swift 应用程序插件与 配置缓存 不兼容。

Swift 应用程序插件提供了构建 Swift 应用程序的任务、配置和约定。

用法

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

构建变体

Swift 应用程序插件理解以下维度。阅读 构建变体简介 以了解更多信息。

构建类型 - 始终为 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
    ]
}

任务

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

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

变体相关任务

Swift 应用程序插件根据应用程序组件的变体创建任务。阅读 构建变体简介 以了解更多信息。下图显示了变体相关任务之间的关系。

swift application variant task graph
图 2. Swift 应用程序插件变体相关任务图
compileVariantSwift(例如 compileDebugSwiftcompileReleaseSwift) - SwiftCompile

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

linkVariant(例如 linkDebuglinkRelease) - LinkExecutable

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

installVariant(例如 installDebuginstallRelease) - InstallExecutable

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

assembleVariant(例如 assembleDebugassembleRelease) - 任务(生命周期)

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

生命周期任务

Swift 应用程序插件将其某些任务附加到 基础插件章节 中记录的标准生命周期任务 - Swift 应用程序插件会自动应用这些任务

assemble - 任务(生命周期)

依赖于:linkDebug :: 聚合任务,用于为项目中的当前主机(如果存在)组装应用程序的调试变体。此任务由 基础插件 添加。

check - 任务(生命周期)

聚合任务,执行验证任务,例如运行测试。一些插件将自己的验证任务添加到 check 中。例如,XCTest 插件 将一个任务附加到此生命周期任务以运行测试。此任务由 基础插件 添加。

build - 任务(生命周期)

依赖于:check, assemble :: 执行项目完整构建的聚合任务。此任务由 基础插件 添加。

clean - 删除

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

依赖管理

与 Swift 应用程序插件创建的任务类似,基于应用程序组件的变体创建多个配置。阅读 构建变体介绍 以了解更多信息。以下图表描述了 Swift 应用程序插件添加的配置

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

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

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

以下配置用于声明依赖项

implementation

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

mainVariantImplementation(例如 mainDebugImplementationmainReleaseImplementation)扩展 implementation

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

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

variantRuntimeElements(例如 debugRuntimeElementsreleaseRuntimeElements) 扩展 mainVariantImplementation

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

以下配置由应用程序本身使用

swiftCompileVariant(例如 swiftCompileDebugswiftCompileRelease)扩展了 mainVariantImplementation

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

nativeLinkVariant(例如 nativeLinkDebugnativeLinkRelease)扩展了 mainVariantImplementation

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

nativeRuntimeVariant(例如 nativeRuntimeDebugnativeRuntimeRelease)扩展了 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

false 用于调试构建类型,否则为 true

源代码

application.swiftSource

目标平台

从二进制文件的 TargetMachine 推断而来

工具链

根据目标机器自动选择

Swift 应用程序插件为应用程序的每个变体添加一个 LinkExecutable 实例,例如 linkDebuglinkRelease。有关更多信息,请阅读 构建变体简介。下面显示了一些最常见的配置选项。

debuggable

true

configurations.nativeLinkVariant

链接文件

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

链接器参数

[]

源代码

compileVariantSwift.objects

目标平台

从二进制文件的 TargetMachine 推断而来

工具链

根据目标机器自动选择

installVariant 任务

Swift 应用程序插件为测试组件的每个变体添加一个 InstallExecutable 实例,例如 installDebuginstallRelease。有关更多信息,请阅读 构建变体简介。无需在任务上配置任何属性。