内容来自 Chat-GPT-4.0 收拾

Swift Package Manager(简称SPM)是一款强壮的 Swift 言语包办理东西,它被规划出来用于自动化 Swift 代码的获取、编译和链接过程。从 Swift 3.0 开始,SPM 被默认集成在 Swift 言语中。

创立包

Xcode 14创立

在 Xcode 的菜单栏中挑选 “File”(文件)> “New”(新建)> “Package…”(包…)。

指令行创立

运用 Swift Package Manager 创立新的 Swift 包相当简单,只需求运转 swift package init 指令即可:

swift package init --type library

上述指令会在当前目录下创立一个新的库类型的 Swift 包。

Swift 包的根本结构

创立后的 Swift 包一般会有以下结构:

 MyPackage
    ├── Package.swift
    ├── Sources
      └── MyPackage
        ├── File1.swift
        └── File2.swift
    └── Tests
       └── MyPackageTests
         ├── File1Tests.swift
         └── File2Tests.swift

这里主要包含三个部分:

  • Package.swift:这是 Swift 包的配置文件,其中界说了包的称号、产品、依靠项等信息。
  • Sources:这个目录包含了 Swift 包的源代码。
  • Tests:这个目录包含了 Swift 包的测验代码。

配置依靠

Package.swift 文件中,咱们能够声明当前包依靠的其他 Swift 包。例如:

let package = Package(
      name: "Example",
      dependencies: [
        .package(url: "https://github.com/anotherUser/anotherPackage.git", from: "1.2.3"),
      ],
      targets: [
        .target(
          name: "Example",
          dependencies: ["anotherPackage"]),
      ]
    )

在这个比如中,咱们的 “Example” 包依靠于 “anotherPackage”,它的源代码托管在 GitHub 上。

细说 Package.swift 文件

Package.swift 是一个包描绘文件,这里面界说了包的一些根本信息,如包的称号,产品,依靠项等。它运用 Swift 言语编写。

Package.swift 文件中,一般会首要声明 Swift tools 的版别,这决定了 Package Manager 的行为和功能。例如:

// swift-tools-version:5.3

上面的代码声明晰运用 Swift 5.3 版别的东西。

接下来,咱们需求导入 PackageDescription 模块,它供给了构建 Package.swift 所需求的一切数据类型:

import PackageDescription

然后,咱们需求创立一个 Package 方针,它是 Package.swift 文件的中心部分:

let package = Package(
    //...
)

Package 方针中,咱们能够界说以下内容:

  • name:这是你的包的称号。
  • platforms:这界说了你的包支撑的渠道和版别。
  • products:这界说了你的包供给的产品。一个产品能够是一个库或一个可执行文件。
  • dependencies:这界说了你的包依靠的其他包。你需求供给每个依靠包的 URL 和版别。
  • targets:这界说了你的包的构建方针。每个方针能够依靠于源文件和其他方针。

以下是一个 Package.swift 的示例:

// swift-tools-version:5.3
import PackageDescription
let package = Package(
    name: "MyPackage",
    platforms: [
        .macOS(.v10_15),
    ],
    products: [
        .library(
            name: "MyPackage",
            targets: ["MyPackage"]),
    ],
    dependencies: [
        .package(url: "https://github.com/someone/somepackage.git", from: "1.0.0"),
    ],
    targets: [
        .target(
            name: "MyPackage",
            dependencies: ["SomePackage"]),
        .testTarget(
            name: "MyPackageTests",
            dependencies: ["MyPackage"]),
    ]
)

在这个比如中,咱们界说了一个名为 “MyPackage” 的包,它在 macOS 10.15 及以上版别上运转,依靠于 “SomePackage”,并供给一个名为 “MyPackage” 的库和一些测验。

解说 Package.swift 与项目目录的联系

在 Swift Package Manager 中,Package.swift 文件和项目目录的结构有着严密的联系。

首要,Package.swift 文件一般坐落项目的根目录。这个文件是 Swift Package 的描绘文件,它界说了包的根本信息(如包的称号、产品和依靠等)。

除了 Package.swift 文件之外,Swift Package 一般还有以下目录结构:

  1. Sources:这个目录包含一切的 Swift 源代码文件。每个 target(方针)在 Sources 目录中都有一个对应的子目录。例如,如果你在 Package.swift 文件中界说了一个名为 “MyLibrary” 的 target,那么你应该在 Sources 目录下创立一个同名的 “MyLibrary” 子目录,然后将这个 target 的一切源代码文件放在这个子目录中。
  2. Tests:这个目录包含一切的测验代码。和 Sources 目录类似,每个测验 target 在 Tests 目录中也有一个对应的子目录。

因此,Package.swift 文件和目录结构是一一对应的。你在 Package.swift 文件中界说的每个 target,都应该在 SourcesTests 目录中有一个对应的子目录。

以下是一个典型的 Swift Package 的目录结构:

MyPackage
    ├── Package.swift
    ├── Sources
      └── MyPackage
        ├── File1.swift
        └── File2.swift
    └── Tests
       └── MyPackageTests
         ├── File1Tests.swift
         └── File2Tests.swift

在这个比如中,咱们有一个名为 “MyPackage” 的包,它有一个同名的 target 和一个 “MyPackageTests” 的测验 target。每个 target 的源代码都坐落其对应的子目录中。

构建和运转

要构建和运转 Swift 包,咱们能够运用 Swift Package Manager 的 swift buildswift run 指令。例如,要构建你的包,能够在终端中运转:

$  swift build

测验

如果你的 Swift 包中包含了测验代码,能够运用 swift test 指令来运转这些测验:

$  swift test

总结

Swift Package Manager 是一个强壮的东西,它能协助咱们更方便地办理 Swift 代码包,同时也使代码的分享和复用变得更加简单。把握 SPM,你会发现在 Swift 开发中,无论是办理自己的代码,仍是运用他人的代码,都变得非常方便。

对于更具体的信息和高级用法,你能够参阅 Swift 官方文档 或 Swift Package Manager 的 GitHub 页面。