Package Collections

在 Swift 5.5 中,Swift Package Manager 添加了对 package collections(软件包集合)的支持——这是一系列精选的软件包列表,它们使得发现、分享和采纳软件包变得容易。

在本文发布时,Swift 5.5 预览版已在 和 Xcode 13 seeds 中提供。Swift 5.5 将于今年晚些时候正式发布。

package collections(软件包集合)的目标是改进软件包生态系统的两个关键方面

  1. 发现优秀的软件包
  2. 决定哪个软件包最适合特定的工程任务

Package collections(软件包集合)拥抱并推广策展的概念。Package collections(软件包集合)不是浏览冗长的网络搜索结果列表,而是将选择范围缩小到来自您信任的策展人的一小部分软件包列表。Package collections(软件包集合)服务于多种用例:例如,我们设想 Swift 开发者社区发布软件包集合,这些集合反映了这些社区为解决日常任务而生产和使用的优秀软件包。教育工作者也可以使用 package collections(软件包集合)来聚合一组软件包,以配合课程材料。企业可以使用 package collections(软件包集合)来缩小其内部工程团队的决策范围,专注于一组受信任的、经过审查的软件包。

使用软件包集合

Package collections(软件包集合)非常容易使用。您可以使用 SwiftPM 命令行中的新 package-collection add 选项来添加它。

$ swift package-collection add https://swiftserver.group/collection/sswg.json
Added "Swift Server Workgroup Collection" to your package collections.

Xcode 13(预览版可用)也包含了对 package collections(软件包集合)的支持,使用了一个新的软件包集合配置界面。

软件包集合现已可用!

今天已经有新的 package collections(软件包集合)可用,我们期待 Swift 社区涌现出更多软件包集合。

Swift 服务器工作组

Swift 服务器工作组(Swift 项目的一部分)发布了一个软件包集合,其中包含了该工作组孵化的软件包。SSWG 软件包集合可在以下地址获取

https://swiftserver.group/collection/sswg.json

SwiftPackageIndex.com

Swift Package Index 网站背后的团队创建了动态生成的 package collections(软件包集合)的第一个实现。该网站允许您下载包含软件包所有者创建的所有软件包的集合。更多信息可以在该网站的 collection page(软件包集合页面)上找到。

Apple 的 OSS Swift 软件包

Apple 已经发布了一个软件包集合,其中包含了一些由 Apple 发布的令人兴奋的 Swift 软件包,包括 Swift Argument ParserSwift AlgorithmsSwiftNIO。Apple 的软件包集合可在以下地址获取

https://developer.apple.com/swift/packages/collections/apple.json

Xcode 13 预配置为使用 Apple 软件包集合。Xcode 用户可以立即试用它!

创建您自己的软件包集合

Package collections(软件包集合)是简单的 JSON 文档。作为 JSON 文件,它们易于发布和共享。您可以将它们发布到网络(或文件服务器)、分享链接,或直接与他人分享 JSON 文件。

创建软件包集合

推荐的方法是使用新的 package collection generator(软件包集合生成器)工具。该工具接受软件包 URL 列表,并通过解析软件包清单文件并尽可能从 SCM 系统获取元数据,为它们生成更完整的元数据集。

给定以下 packages.json

{
  "name": "My Collection",
  "packages": [
    {
      "url": "https://github.com/user/package.git"
    }
  ]
}

运行以下命令

$ package-collection-generate packages.json collection.json

将生成如下所示的软件包集合 JSON 文件

{
  "formatVersion": "1.0",
  "name": "My Collection",
  "generatedAt": "2021-06-01T21:28:28Z",
  "packages": [
    {
      "url": "https://github.com/user/package.git",
      "versions": [
        {
          "version": "1.0.0",
          "defaultToolsVersion": "5.1.0",
          "manifests": {
            "5.1.0": {
              "packageName": "MyPackage",
              "products": [
                {
                  "name": "MyProduct",
                  "targets": ["MyTarget"],
                  "type": { "library": ["automatic"] }
                }
              ],
              "targets": [
                {
                  "name": "MyTarget"
                }
              ],
              "toolsVersion": "5.1.0"
            }
          }
        }
      ]
    }
  ]
}

就这么简单!

签名软件包集合

在生成 package collections(软件包集合)时,可以对其进行签名以建立真实性并保护其完整性。签名软件包集合是可选的,用户可以使用未签名的软件包集合,但在这样做之前会被提示确认。

推荐的签名软件包集合的方法是使用 package collection signer(软件包集合签名器)工具,该工具使用代码签名证书对软件包集合进行签名。

例如,使用我们在上一步创建的 collection.json 作为输入,以及代码签名证书及其私钥,运行以下命令将创建一个签名的软件包集合版本,作为 collection-signed.json 文件,签名嵌入在输出文件本身中。

$ package-collection-sign \
    collection.json \
    collection-signed.json \
    /certs/private.pem \
    /certs/signing.cer

您可以在 SwiftPM 关于此主题的文档中找到关于生成和签名软件包集合的更详细信息,SwiftPM’s documentation on the subject

一旦您的软件包集合准备就绪,您可以选择如何分发它。对于与学生或一小群合作者分享,通过电子邮件将软件包集合作为附件发送就足够了。博客作者可以选择将其托管在他们的 Web 服务器上并分享链接。大型开发团队可以决定将其推送到他们的 SCM 系统并从那里访问它。

告诉其他人关于您的软件包集合!

如果您创建了一个通用的软件包集合,并想与更广泛的 Swift 社区分享,Swift 论坛的 community showcase(社区展示)区域是一个让人们了解它的绝佳方式。