您可以在支持 Gradle 的 IDE 中打开此示例。

本指南演示了如何使用 gradle init 通过 Gradle 创建 Swift 库。您可以逐步按照本指南从头开始创建一个新项目,或者使用上面的链接下载完整的示例项目。

您将构建什么

您将生成一个遵循 Gradle 约定的 Swift 库。

您需要什么

创建项目文件夹

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

第一步是为新项目创建一个文件夹,并将目录更改到该文件夹中。

$ mkdir demo
$ cd demo

运行 init 任务

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

输出将如下所示

$ gradle init

Select type of build to generate:
  1: Application
  2: Library
  3: Gradle plugin
  4: Basic (build structure only)
Enter selection (default: Application) [1..4] 2

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

Project name (default: demo):

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

Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no]

BUILD SUCCESSFUL
1 actionable task: 1 executed

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

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

您现在已设置项目以构建 Swift 库。

查看项目文件

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

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

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

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

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

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

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

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

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

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

生成的测试 src/test/swift/Hello.swift 如下所示

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

import XCTest
@testable import Lib

class HelloTests: XCTestCase {
    public static let allTests = [
        ("testGreeting", testGreeting),
    ]

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

生成的测试类具有单个 XCTest 测试。该测试实例化 Hello 类,调用其上的一个方法,并检查它是否返回期望的值。

构建库

$ ./gradlew build

BUILD SUCCESSFUL in 0s
4 actionable tasks: 4 executed
首次运行 Wrapper 脚本 gradlew 时,下载该版本的 gradle 并将其本地存储在您的 ~/.gradle/wrapper/dists 文件夹中可能需要一些时间。

build 任务编译 Swift 源代码,将目标文件链接到共享库中,并运行测试。要构建静态库,请参阅 静态库示例

本指南未涵盖对其他项目的依赖。要了解有关此主题的更多信息,请查看 传递依赖示例 以进行演示。
将库发布到 Maven 仓库不在本指南的范围之内。要了解有关此主题的更多信息,请查看 简单库示例 以进行演示。
Gradle 与多个 IDE 集成:Visual StudioXcodeClion。要了解更多信息,请查看它们各自链接的文档,以在您的项目中配置这些 IDE 集成。

发布构建扫描

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

$ ./gradlew build --scan

BUILD SUCCESSFUL in 0s
4 actionable tasks: 4 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 库的项目

  • 构建库,包括运行其测试

下一步