macOS 13 ubuntu x86_64

docs Version License Platform

深入的 Sourcery 指南包含在我的 SwiftyStack 工程课程中。

Sourcery Pro 提供了一个强大的 Stencil 编辑器,并通过实时 AST 模板扩展了 Xcode 的功能:可在 Mac App Store 上获取

Overview.mp4

了解更多关于 Sourcery Pro 的信息

Sourcery 是一款 Swift 语言的代码生成器,构建于 Apple 自己的 SwiftSyntax 之上。它扩展了语言抽象,允许您自动生成样板代码。

它被 iOS 和 macOS 上超过 40,000 个项目使用,并为一些最受欢迎和广受好评的应用程序提供支持(包括 Airbnb、Bumble、纽约时报)。它的大规模社区采用是推动 Apple 实现派生 Equality 和自动 Codable 一致性的因素之一。Sourcery 由一个不断增长的贡献者社区维护。

在您的下一个项目尝试 Sourcery,或者将其添加到现有项目中——您将节省大量时间,并且会很高兴您做了这件事!

TL;DR (太长不看)

Sourcery 允许您摆脱重复代码,并创建更好的架构和开发者工作流程。一个例子可能是为您的所有协议实现 Mocks,如果没有 Sourcery,您将需要为每个协议编写数百行代码,例如这样:

class MyProtocolMock: MyProtocol {

    //MARK: - sayHelloWith
    var sayHelloWithNameCallsCount = 0
    var sayHelloWithNameCalled: Bool {
        return sayHelloWithNameCallsCount > 0
    }
    var sayHelloWithNameReceivedName: String?
    var sayHelloWithNameReceivedInvocations: [String] = []
    var sayHelloWithNameClosure: ((String) -> Void)?

    func sayHelloWith(name: String) {
        sayHelloWithNameCallsCount += 1
        sayHelloWithNameReceivedName = name
        sayHelloWithNameReceivedInvocations.append(name)
        sayHelloWithNameClosure?(name)
    }

}

有了 Sourcery 呢?

extension MyProtocol: AutoMockable {}

Sourcery 移除了编写任何 mocks 代码的需要。您的项目中有多少个协议?想象一下您将节省多少时间,使用 Sourcery 还可以使每个 mock 保持一致性,如果您重构或添加属性,mock 代码将自动为您更新,从而消除可能的人为错误。

Sourcery 可以应用于代码库中的任何问题,如果您可以向另一个人描述一个算法,您就可以使用 Sourcery 将其自动化。

最常见的用途是

但是更具体的用例呢,例如自动生成应用程序 BetaSetting 的所有 UI?您也可以为此使用 Sourcery

一旦您开始编写自己的模板并了解 Sourcery 的强大功能,您将离不开它。

如何开始使用

有很多关于 Sourcery 不同用途的教程,您也可以在我们的 Swift 论坛分类 中寻求帮助。

Quick Mocking Intro & Getting Started Video (快速 Mocking 介绍和入门视频)

您还可以观看 Inside iOS Dev 制作的这个快速入门和 mocking 介绍视频

Watch the video

安装

.package(url: "https://github.com/krzysztofzablocki/Sourcery.git", from: "1.8.3")
- repo: https://github.com/krzysztofzablocki/Sourcery
  rev: 1.9.1
  hooks:
  - id: sourcery

文档

最新版本的完整文档可在此处获得:here (这里)

Linux 支持

Linux 支持在此页面上描述

用法

运行可执行文件

Sourcery 是一个命令行工具; 您可以手动运行它,也可以使用以下命令在自定义构建阶段运行它

$ ./bin/sourcery --sources <sources path> --templates <templates path> --output <output path>

注意:此命令取决于您安装 Sourcery 的方式(请参阅安装

Swift Package 命令

Sourcery 现在可以用作 Swift 包命令插件。为此,必须将该包作为依赖项添加到您的 Swift 包或 Xcode 项目中(请参阅上面的安装)。

要为插件提供要使用的配置,请将 .sourcery.yml 文件放置在目标目录的根目录中(在源文件夹中,而不是包的根目录中)。

从命令行运行

要验证 SwiftPM 是否可以找到该插件,请使用

$ swift package plugin --list

要运行代码生成器,您需要允许使用 --allow-writing-to-package-directory 标志更改项目

$ swift package --allow-writing-to-package-directory sourcery-command

在 Xcode 中运行

在使用了此命令插件的项目/包中,右键单击该项目,然后从“SourceryPlugins”菜单组中选择“SourceryCommand”。

⚠️请注意,这仅适用于 Xcode 14 及更高版本。

命令行选项

配置文件

您可以不使用 CLI 参数,而是使用 .sourcery.yml 配置文件

sources:
  - <sources path>
  - <sources path>
templates:
  - <templates path>
  - <templates path>
forceParse:
  - <string value>
  - <string value>
output:
  <output path>
args:
  <name>: <value>

在此处阅读有关此配置文件的更多信息:here (这里)

问题

如果您在使用二进制 zip 分发时收到未经验证的开发者警告,请尝试:xattr -dr com.apple.quarantine Sourcery-1.1.1

贡献

欢迎并鼓励对 Sourcery 做出贡献!

很容易参与。 有关更多详细信息,请参见贡献指南

贡献者列表可通过 GitHub 获得.

为了阐明对我们社区的期望,Sourcery 采用了 Contributor Covenant 定义的行为准则。 该文档已在许多开源社区中使用,并很好地阐明了我的价值观。 有关更多信息,请参见行为准则

赞助

如果您想支持 Sourcery 的开发,可以通过 GitHub SponsorsOpen Collective 进行赞助,非常感谢🙇‍

如果您是一家公司,并希望直接赞助该项目并在其徽标上加上徽标,则可以直接与我联系

赞助商

Bumble Inc

Airbnb Engineering

许可证

Sourcery 在 MIT 许可下可用。 有关更多信息,请参见LICENSE

致谢

该工具由以下工具提供支持

谢谢! 致

其他库/工具

如果您想为资产相关的数据(如 .xib、.storyboard 等)生成代码,请使用 SwiftGen。SwiftGen 和 Sourcery 是互补的工具。

请务必查看我的其他库和工具,尤其是

您可以在 Twitter 上关注我,获取有关我正在创建的其他项目的新闻/更新。