Discover and curate Swift Packages using Collections
Developer Tools 入门 20m

通过 Collections 发现和管理 Swift 包

Discover and curate Swift Packages using Collections

2021年6月10日

在 Apple 官方观看视频

一句话判断

Swift Package Collections 是给包管理加了一层策展(Curation)机制——不再是搜索大海捞针,而是跟着 Apple 或社区维护的精选列表走。

这场 Session 讲了什么

Swift Package Manager 在 Swift 5.5 中引入了 Package Collections 功能。简单说,它是一种 JSON 格式的包列表,由可信的第三方维护,包含包名、描述、版本和分类信息。你可以在 Xcode 中添加一个 Collection(比如 Apple 官方的),然后浏览其中精选的包,一键添加到项目。

Session 讲了三件事:如何使用 Xcode 中内置的 Collections 浏览器来发现和添加包;如何创建你自己的 Collection——用 swift-package-collections 命令行工具从 Git 仓库列表生成 JSON 文件;以及如何维护和发布 Collection——可以托管在任何静态文件服务器上。

Apple 官方发布了一个精选 Collection,包含他们推荐的常用开源包。社区和公司也可以发布自己的 Collection,比如一个公司内部的私有包精选列表。

值得深挖的点

Collection 不是索引,是策展

Collection 和 CocoaPods 的 spec 仓库有本质区别。Spec 仓库是全量索引——收录所有包,靠搜索发现。Collection 是精选列表——由维护者挑选和分类,强调质量和推荐。这个设计选择反映了 Apple 对包管理的态度:宁精勿滥。搜索功能仍然存在,但 Collection 提供了一条更可靠的发现路径,尤其适合刚接触 Swift 生态的开发者。

私有 Collection 的企业场景

对于有内部包仓库的企业来说,Private Collection 是一个实用的工具。你可以把公司内部常用的包整理成一个 Collection,新员工入职时添加一个 URL 就能看到所有推荐使用的内部库。这比维护一份 README 文档要好用得多,因为它直接集成在 Xcode 的包管理流程中。

代码片段

用命令行工具生成 Collection

// 用 swift-package-collections 工具生成
// input.json 包含你要收录的包列表
/*
 [
   {
     "url": "https://github.com/Alamofire/Alamofire.git",
     "version": "5.4.0"
   },
   {
     "url": "https://github.com/onevcat/Kingfisher.git",
     "version": "6.3.0"
   }
 ]
*/

// 终端命令
// swift-package-collections generate input.json -o my-collection.json

在 Xcode 中添加 Collection

// Xcode > File > Packages > Add Package Collection...
// 输入 Collection 的 JSON URL,例如:
// https://developer.apple.com/package-collections/apple/swift-5.5.json

// 或通过命令行
// swift package-collection add <url>

在 Package.swift 中引用 Collection 中的包

// Package.swift 中的依赖声明方式不变
// Collection 只是帮助发现,添加后就是普通的依赖
dependencies: [
    .package(url: "https://github.com/Alamofire/Alamofire.git", from: "5.4.0"),
    .package(url: "https://github.com/onevcat/Kingfisher.git", from: "6.3.0"),
]

最佳实践

包作者: 确保你的包的 Package.swift 有完整的 metadata(description、license、keywords),这样被收录进 Collection 时信息更完整。考虑向 Apple 官方 Collection 提交你的包。

团队维护者: 创建团队内部的 Collection,收录所有推荐使用的包(包括第三方和内部包)。把它托管在团队可访问的静态服务器上,新项目启动时直接添加。

还有什么值得关注

  • Collection JSON 格式支持分类(categories)和关键词(keywords),方便浏览时筛选。
  • Xcode 13 可以直接从 Collection 页面查看包的 README 和基本文档。
  • Apple 发布了 Swift Algorithms 和 Swift Collections 两个官方包,它们会出现在官方 Collection 中。
WWDC 2021