Swift Academy · 课时

Package.swift:目标、产品与依赖

了解 Package.swift 清单的结构,并定义库产品和可执行产品。

第 1 / 4 课13 个步骤

Package.swift:目标、产品与依赖 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。

Package.swift 概览

Package.swift 是 Swift 包管理器的清单文件。它声明包名称、Swift 版本、目标、产品和依赖项。

import PackageDescription
let package = Package(
  name: "MyLibrary",
  platforms: [.iOS(.v16), .macOS(.v13)],
  products: [],
  dependencies: [],
  targets: []
)

目标

目标是构建的基本单元:.target(库或可执行代码)和 .testTarget(测试代码)。

.target(
  name: "MyFeature",
  dependencies: [],
  path: "Sources/MyFeature"
),
.testTarget(
  name: "MyFeatureTests",
  dependencies: ["MyFeature"],
  path: "Tests/MyFeatureTests"
)

产品

产品定义包向使用者公开的内容:.library 或 .executable。

.library(
  name: "MyFeature",
  targets: ["MyFeature"]
),
.executable(
  name: "MyTool",
  targets: ["MyTool"]
)

动态库与静态库

指定使用 .dynamic 或 .static 链接。静态链接是默认方式,开销更小;动态链接支持在模块之间共享。

.library(
  name: "MySDK",
  type: .dynamic,
  targets: ["MySDK"]
)

外部依赖

使用 URL 和版本要求声明远程包依赖。

.package(url: "https://github.com/apple/swift-algorithms", from: "1.0.0"),
.package(url: "https://github.com/pointfreeco/swift-composable-architecture", exact: "1.0.0")

在目标中使用外部依赖

使用 .product(name:package:) 在目标依赖中引用外部包产品。

.target(
  name: "MyApp",
  dependencies: [
    .product(name: "Algorithms", package: "swift-algorithms"),
    .product(name: "ComposableArchitecture", package: "swift-composable-architecture")
  ]
)

本地包依赖

引用本地包目录,以支持单体仓库配置,或迭代开发自己拥有的包。

.package(path: "../MySharedLibrary"),

Swift 版本要求

在 Package.swift 顶部设置最低 Swift 工具版本,并在包初始化器中设置平台要求。

// swift-tools-version: 5.9
import PackageDescription
let package = Package(
  name: "MyPackage",
  platforms: [.iOS(.v17)],
  // ...
)

目标中的资源

使用 resources: 参数包含非代码资源(图像、JSON、本地化文件)。

.target(
  name: "MyFeature",
  resources: [
    .process("Resources"),
    .copy("Fixtures/test_data.json")
  ]
)

构建设置与 C 目标

目标可以配置 C 标志和 Swift 设置,这对于封装 C 库或执行条件编译很有用。

.target(
  name: "CWrapper",
  cSettings: [.headerSearchPath("include")],
  swiftSettings: [.define("DEBUG", .when(configuration: .debug))]
)

包解析

运行 swift package resolve 获取依赖项。解析后的版本存储在 Package.resolved 中。

// Commands:
// swift package resolve      – fetch dependencies
// swift package update       – update to latest compatible versions
// swift build                – build the package
// swift test                 – run tests

快速检查

Package.swift 中的哪个元素定义了包向依赖它的其他包或应用公开的内容?

课程回顾

Package.swift:targets 是构建单元,products 将其公开给使用者,dependencies 引用远程或本地包。使用 .product(name:package:) 链接外部目标。在团队项目中提交 Package.resolved,以锁定版本。

免费开始

用 AI 导师学习 Swift — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
122
课程
409

常见问题解答

「Package.swift:目标、产品与依赖」课时是免费的吗?

是的 — 「Package.swift:目标、产品与依赖」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。

「Package.swift:目标、产品与依赖」这节课中我会学到什么?

了解 Package.swift 清单的结构,并定义库产品和可执行产品。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Swift Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「Package.swift:目标、产品与依赖」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Swift Academy 课中编写并运行代码吗?

能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Package.swift:目标、产品与依赖
  2. 本地包与功能模块
  3. 二进制目标与 XCFramework
  4. 版本管理、冲突解决与 Swift 插件
← 返回 Swift Academy