Swift Package Index 获得 Apple 赞助

构建一个蓬勃发展的开源生态系统对于 Swift 的成功至关重要,而开源软件包是驱动无数 Swift 项目的基石。随着软件包数量的增加,对于需要找到帮助他们构建应用和服务的工具和库的开发者来说,发现变得至关重要。

在过去的三年里,Swift Package Index 已成为搜索和发现软件包的热门目的地,以帮助开发者进行他们的工作。

认识到 Swift Package Index 为社区提供的宝贵资源,该服务现在由 Apple 赞助。

下面的帖子是来自 Swift Package Index 创建者 Dave VerwerSven A. Schmidt 的开发者聚焦,内容是关于他们将索引构建成今天的样子的历程。


我们对 Swift Package Index 的目标始终是帮助人们更好地决定他们项目中包含的软件包依赖项。

当我们在 2020 年首次推出该网站时,我们最初着手处理软件包元数据和搜索。该网站轮询已知软件包列表,克隆每个仓库,分析软件包清单和 git 历史记录,并使该元数据可搜索。但这不仅仅是一个简单的元数据搜索,我们还设计了软件包页面来公开基本信息,使开发者能够对其依赖项做出明智的决定。它回答了诸如软件包开发了多长时间、作者如何授权代码、拉取请求和问题是否正在被监控和响应等等问题。乍一看,索引上的软件包页面可能看起来类似于其 GitHub 仓库页面,但我们将元数据集中于与软件包的潜在用户相关的内容。

随着网站的发展,我们决定添加软件包兼容性测试。Swift 软件包可以在各种平台上的应用程序中使用,但没有简单的方法来确定每个平台的兼容性。我们是如何解决这个问题的?如果您想象我们尝试为索引中的每个软件包构建四种 Swift 版本和五个平台的每种排列组合,每次默认分支向前移动或作者标记发布时都这样做,那么您就对了!我们现在称之为“构建系统”的系统平均每天处理 5,000 个构建,总共完成了超过 500 万个构建。这是一个如此庞大的操作,以至于需要自己的自定义监控应用程序

A screenshot of the internal Swift Package Index app, Pipelines. It shows the status of several pending, running, passed, and failed package builds.

所有这些构建结果都用于构建简洁的兼容性矩阵,该矩阵显示您在每个软件包页面上看到的平台和 Swift 版本要求。

去年,我们将注意力转向了文档。突出显示具有文档的软件包符合该网站的目标,即更好地决定依赖项,但我们认为检测和突出显示是不够的。相反,我们决定为社区提供一个免费构建和托管版本化文档的平台。任何软件包作者现在都可以选择加入文档生成,一旦构建系统完成成功的构建,我们将托管版本化的 DocC 文档。您可以在 swift-markdown 的文档中看到一个例子。社区很快采用了这个功能,我们现在有 300 多个软件包选择加入,我们的存储需求正在迅速攀升

A chart showing documentation storage rising over time from zero in May 2022 to 35Gb in February 2023 with a sharp increase at the end of December 2022

Swift Package Index 不仅仅索引 Swift 软件包,它还是一个开源 Swift 软件包!它作为一个 vapor 应用程序运行,并依赖于许多其他软件包,例如用于数据库访问的 fluentPostgres 驱动程序,用于渲染 HTML 的 PlotInk,用于测试的 swift-snapshot-testing 等等。

运行这样一个网站需要持续的维护,自从三年前推出以来,我们已经合并了 1,200 多个拉取请求,并部署了 600 多个版本(大约每周四个)。我们还有一个不断壮大的外部贡献者社区,他们每天都在帮助改进该网站。

最后,考虑到社区,我们还启动了一个名为 Swift Package Indexing 的播客,我们在其中讨论功能开发的进展,并为每集节目挑选来自社区的精选软件包。

我们为看到 Apple 支持我们的项目并加入我们的其他社区和企业赞助商而感到无比自豪,以确保我们能够继续为未来更多年提供这项服务。感谢 Apple 以及使该网站运行的每个人。