更新: 此博文中的信息已被我们的官方文档取代。请参考文档,而不是这篇博文。
DocC 于 WWDC 2021 推出,是 Apple 推荐的为您的包提供文档的方式。
它易于使用,并且生成的文档看起来很棒。它可以从注释或单独的文章文件中生成文档,这些文章文件以 Markdown 编写,更适合长篇文档。您甚至可以使用它来创建带有图像和逐步说明的美丽互动教程。DocC 可以生成 Xcode 文档归档,也可以生成一组 HTML 和 CSS 文件,您可以将其托管在 Web 服务器上。
当然,拥有一个装满 HTML 的目录只是成功了一半。您的下一个任务是将它托管到在线的某个地方,甚至设置一个 CI 任务来自动化该过程,以便您发布的文档随着开发的进展保持最新。
这就是我们最新的功能将派上用场的地方,我们今天就发布它!
自动生成、自动托管和自动更新
我们的构建系统现在可以生成和托管 DocC 文档,并使其可以从您在索引中的包页面访问。我们只需要一点配置数据,以便我们知道如何最好地构建您的文档。
配置完成后,您将在侧边栏中看到一个新的“文档”链接,并且再也不用担心您的文档了!

作为包作者或维护者,您只需做三两件事,Swift Package Index 即可构建和托管您的文档。
- 确保您的包可以使用 Swift 5.6 成功构建。您的包也可以支持早期版本的 Swift,但必须使用 5.6 成功构建。
如果您尚未添加,请将 swift-docc-plugin 文档插件添加到您包的Package.swift
清单文件中。- 创建一个
.spi.yml
文件并将其提交到您包的存储库的根目录,告诉我们的构建系统哪些目标具有文档。
从那里,我们将处理其他一切。每次您将新提交推送到您的包时,我们都会重新生成您的文档。
添加 Swift DocC 插件
更新: 不再需要将 DocC 插件添加到您的包中。如果您已经添加了它,请随意删除它。如果保留插件或需要将其用于其他目的,我们的构建系统也可以处理,因此无需急于删除它!您需要对项目进行的唯一更改是添加清单文件。
如果您已经在本地使用过 DocC,您可能已经完成了第一步。如果还没有,请将以下行添加到您的 Package.swift
的末尾
#if swift(>=5.6)
// Add the documentation compiler plugin if possible
package.dependencies.append(
.package(url: "https://github.com/apple/swift-docc-plugin", from: "1.0.0")
)
#endif
使插件依赖项有条件意味着即使您的清单的 swift-tools-version
适用于早于 5.6 的 Swift 版本,也不会发生任何中断。当然,如果您的包仅支持 Swift 5.6 及更高版本,则这是不必要的。
添加 Swift Package Index 清单文件
然后,在您的存储库的根目录中创建并提交一个名为 .spi.yml
的清单文件,如下所示
version: 1
builder:
configs:
- documentation_targets: [Target]
此文件告诉我们的构建系统为目标 Target
生成文档。您通常会将此设置为您包的主要(或唯一)目标,但也可能是一个包含文档 Markdown 文件的专用目标。
您还可以指定多个目标,我们将在托管文档中添加一个目标切换器,以便人们可以轻松找到您的所有文档!
文档平台
默认情况下,我们将使用 macOS 生成文档。如果您的包要求为特定平台(例如 iOS)运行文档生成,您也可以指定平台
version: 1
builder:
configs:
- platform: ios
documentation_targets: [Target]
自动更新频率
为了控制我们的构建服务器执行的处理量,我们最多每 24 小时仅为每个包构建一次默认分支。因此,当您推送配置文件上线时,系统将生成该组文档,但之后需要 24 小时才能再次运行生成过程。如果在此期间有任何提交,我们将在周期重置时从最新的提交创建文档。

早期采用者!
注意: 我们要感谢以下软件包作者如此早期地加入我们的文档托管功能。该功能现已完全发布且稳定,可供所有软件包作者使用。有关更多信息,请参阅我们的 SPIManifest 文档。
您可能在本周早些时候看到了征集具有 DocC 兼容文档的软件包作者的呼吁,我们很高兴地说,我们有 20 个软件包已经添加了配置文件,并且它们的文档由我们托管!为什么不看看它们呢?
- bytes,作者:TBO Interactive
- Compute,作者:Andrew Barba
- GeoJSONKit,作者:Maparoni
- mqtt-nio,作者:Swift On Server Community
- ParseSwift,作者:Parse Platform
- RevenueCat,作者:RevenueCat
- Runestone,作者:Simon Støvring
- Saga,作者:Loopwerk,他非常慷慨地通过 GitHub Sponsors 赞助这个项目。
- ScaledFont,作者:Keith Harrison
- SemanticVersion,作者:Swift Package Index(嗯,如果我们的一个包没有文档,我们就无法发布它,对吧?😂)
- SpanGrid,作者:James Sherlock,他也非常慷慨地通过 GitHub Sponsors 赞助这个项目,并且是我们核心团队之外的顶级贡献者!
- StreamChat、StreamChatSwiftUI 和 EffectsLibrary,作者:Stream,他们非常慷慨地赞助这个项目。
- swift-bundler,作者:stackotter
- swift-composable-architecture,作者:Point-Free,他们也非常慷慨地通过 GitHub Sponsors 赞助这个项目。
- SwiftDocC 和 swift-markdown,来自 Apple。如果没有这些包,这个项目就不可能实现,我们要向 Apple 这些团队的所有成员表示衷心的感谢!❤️
- TGCardViewController,作者:SkedGo
如果您维护我们在索引中的 4,600 多个包之一,请添加您的配置文件以选择让您的文档托管在 Swift Package Index 上,我们将处理其他一切。如果您有任何问题,请加入我们的 Discord 或提出 issue。
后续步骤
我们为我们在这里构建的内容感到自豪,但我们尚未完成此功能。
在我们的讨论论坛上,有一篇关于我们接下来要处理的事情的总结,但总结来说,这是我们计划接下来要做的事情
- 带有稳定 URL 的版本化文档。您将能够阅读您在项目中使用的确切版本的包的文档。
- 在文档版本之间轻松切换。一旦我们有了版本化文档,我们计划明确您正在阅读的文档来自何处。如果您正在查看默认分支文档,您将能够看到这一点。如果您正在查看标记版本,也是如此。我们还将使在每个包的文档集之间切换变得容易。