您可以使用 IntelliJ 原生导入器Eclipse Buildship 在 IDE 中打开此示例。

本指南演示了如何使用 gradle init 使用 Gradle 创建 Swift 应用程序。您可以按照指南逐步创建新的项目,也可以使用上面的链接下载完整的示例项目。

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

您将构建什么

您将生成一个遵循 Gradle 约定的 Swift 应用程序。

您需要什么

创建项目文件夹

Gradle 带有一个内置的任务,名为 init,它在空文件夹中初始化一个新的 Gradle 项目。init 任务使用(也是内置的)wrapper 任务来创建一个 Gradle 包装器脚本,gradlew

第一步是为新项目创建一个文件夹,并进入该文件夹。

$ mkdir demo
$ cd demo

运行 init 任务

在新的项目目录中,使用以下命令在终端中运行 init 任务:gradle init。当提示时,选择 1: application 项目类型和 6: Swift 作为实现语言。接下来,您可以选择用于编写构建脚本的 DSL - 1 : Groovy2: Kotlin。对于其他问题,按回车键使用默认值。

输出将如下所示

$ gradle init

Select type of project to generate:
  1: basic
  2: application
  3: library
  4: Gradle plugin
Enter selection (default: basic) [1..4] 1

Select implementation language:
  1: C++
  2: Groovy
  3: Java
  4: Kotlin
  5: Scala
  6: Swift
Enter selection (default: Java) [1..6] 6

Select build script DSL:
  1: Groovy
  2: Kotlin
Enter selection (default: Groovy) [1..2] 1

Project name (default: demo):


BUILD SUCCESSFUL
2 actionable tasks: 2 executed

init 任务使用以下结构生成新项目

├── gradle (1)
│   ├── libs.versions.toml (2)
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew (3)
├── gradlew.bat (3)
├── settings.gradle.kts (4)
└── app
    ├── build.gradle.kts (5)
    └── src
        ├── main
        │   └── swift (6)
        │       └── main.swift
        └── test
            └── swift (7)
                └── GreeterTests.swift
                └── LinuxMain.swift
├── gradle (1)
│   ├── libs.versions.toml (2)
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew (3)
├── gradlew.bat (3)
├── settings.gradle (4)
└── app
    ├── build.gradle (5)
    └── src
        ├── main
        │   └── swift (6)
        │       └── main.swift
        └── test
            └── swift (7)
                └── GreeterTests.swift
                └── LinuxMain.swift
1 为包装器文件生成的文件夹
2 生成的版本目录
3 Gradle 包装器启动脚本
4 设置文件,用于定义构建名称和子项目
5 app 项目的构建脚本
6 默认 Swift 源代码文件夹
7 默认 Swift 测试源代码文件夹

您现在已设置好项目,可以构建 Swift 应用程序。

查看项目文件

settings.gradle(.kts) 文件有两行有趣的代码

settings.gradle.kts
rootProject.name = "demo"
include("app")
settings.gradle
rootProject.name = 'demo'
include('app')
  • rootProject.name 为构建分配一个名称,这将覆盖将构建命名为其所在目录的默认行为。建议设置一个固定名称,因为如果项目被共享(例如作为 Git 存储库的根目录),文件夹可能会发生更改。

  • include("app") 定义构建包含一个名为 app 的子项目,该子项目包含实际代码和构建逻辑。可以通过额外的 include(…​) 语句添加更多子项目。

我们的构建包含一个名为 app 的子项目,它代表我们正在构建的 Swift 应用程序。它在 app/build.gradle(.kts) 文件中配置

app/build.gradle.kts
plugins {
    `swift-application` (1)
    xctest (2)
}

application { (3)
    targetMachines.add(machines.linux.x86_64) (4)
}
app/build.gradle
plugins {
    id 'swift-application' (1)
    id 'xctest' (2)
}

application { (3)
    targetMachines.add(machines.linux.x86_64) (4)
}
1 应用 swift-application 插件以添加对构建 Swift 可执行文件的支持
2 应用 xctest 插件以添加对构建和运行 Swift 测试可执行文件(Linux)或捆绑包(macOS)的支持
3 为该库设置目标操作系统和体系结构

文件 src/main/swift/main.swift 如下所示

生成的 src/main/swift/main.swift
/*
 * This source file was generated by the Gradle 'init' task
 */

class Greeter {
    public func greeting() -> String {
        return "Hello, World!"
    }
}

let greeter = Greeter()
print(greeter.greeting())

接下来将展示生成的测试,src/test/swift/main.swift

生成的 src/test/swift/GreeterTests.swift
/*
 * This source file was generated by the Gradle 'init' task
 */

import XCTest
@testable import App

class GreeterTests: XCTestCase {
    public static var allTests = [
        ("testGreeting", testGreeting),
    ]

    func testGreeting() {
        XCTAssertEqual("Hello, World!", Greeter().greeting())
    }
}

生成的测试类包含一个XCTest测试。该测试实例化了Greeter类,调用其方法,并检查其返回值是否符合预期。

构建应用程序

$ ./gradlew build

BUILD SUCCESSFUL in 0s
7 actionable tasks: 7 executed
第一次运行包装脚本gradlew时,可能会出现延迟,因为需要下载该版本的gradle并将其存储在本地~/.gradle/wrapper/dists文件夹中。

build任务编译 Swift 源代码,链接目标文件并运行测试。它还会将主应用程序和测试应用程序打包,以便在其他系统上分发。installDebuginstallTest任务都作为build的一部分运行,它们复制可执行文件并生成用于执行应用程序的 shell 脚本。以下是build/install文件夹的内容

./app/build/install
├── main
│   └── debug
│       ├── app      (1)
│       └── lib
│           └── app  (2)
└── test
    ├── appTest      (1)
    └── lib
        └── appTest  (3)
1 用于执行应用程序变体的脚本
2 主可执行二进制文件(调试变体)
3 测试可执行二进制文件
当构建具有依赖项时,依赖库也会被复制到安装文件夹中。shell 脚本会正确配置库路径,以便可以重新定位包。
本指南不涵盖对其他项目的依赖。要了解更多关于此主题的信息,请查看传递依赖项示例,了解演示。
Gradle 集成了多个 IDE:Visual StudioXcodeClion。要了解更多信息,请查看其各自的链接文档,了解如何在项目中配置这些 IDE 集成。

运行应用程序

查看build文件夹,您会注意到出现了exe文件夹。按照惯例,Gradle 会将所有应用程序放置在以组件名称命名的子文件夹中。在本例中,您将在build/exe/main/debug中找到组装的可执行文件,它将被称为app(或在 Windows 下被称为app.exe)。

现在运行您新构建的可执行文件。

$ ./app/build/exe/main/debug/app
Hello, World!

发布构建扫描

了解构建在幕后执行情况的最佳方法是发布构建扫描。为此,只需使用--scan标志运行 Gradle。

$ ./gradlew build --scan

BUILD SUCCESSFUL in 0s
7 actionable tasks: 7 executed

Publishing a build scan to scans.gradle.com requires accepting the Gradle Terms of Service defined at https://gradle.com/terms-of-service.
Do you accept these terms? [yes, no] yes

Gradle Terms of Service accepted.

Publishing build scan...
https://gradle.com/s/5u4w3gxeurtd2

单击链接并探索执行了哪些任务、下载了哪些依赖项以及更多详细信息!

总结

就是这样!您现在已成功使用 Gradle 配置和构建 Swift 应用程序项目。您已经了解了如何

  • 初始化一个生成 Swift 应用程序的项目

  • 构建、打包和运行应用程序

下一步

要详细了解如何进一步自定义 Swift 应用程序项目,请查看用户手册中关于构建 Swift 项目的章节。