Một mục tập trung di động trong kho dữ liệu GitHub của TopGit: krzysztofzablocki/Sourcery, 8.0k sao, nhóm Mobile, Swift. Meta-programming for Swift, stop writing boilerplate code.
Tóm tắt dựng từ metadata GitHub của chính dự án — chưa có bài review TopGit. Trang sẽ tự động cập nhật khi bài review đầy đủ được xuất bản.
VÌ SAO CHƯA CÓ REVIEW
TopGit viết bài đầy đủ cho repo có nhiều sao nhất và được yêu cầu nhiều nhất. Trang này là snapshot trong thời gian chờ — xem README gốc ở tab READ ME.
Sourcery is a code generator for Swift language, built on top of Apple's own SwiftSyntax. It extends the language abstractions to allow you to generate boilerplate code automatically.
It's used in over 40,000 projects on both iOS and macOS and it powers some of the most popular and critically-acclaimed apps you have used (including Airbnb, Bumble, New York Times). Its massive community adoption was one of the factors that pushed Apple to implement derived Equality and automatic Codable conformance. Sourcery is maintained by a growing community of contributors.
Try Sourcery for your next project or add it to an existing one -- you'll save a lot of time and be happy you did!
TL;DR
Sourcery allows you to get rid of repetitive code and create better architecture and developer workflows.
An example might be implementing Mocks for all your protocols, without Sourcery you will need to write hundreds lines of code per each protocol like this:
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)
}
}
and with Sourcery ?
extension MyProtocol: AutoMockable {}
Sourcery removes the need to write any of the mocks code, how many protocols do you have in your project? Imagine how much time you'll save, using Sourcery will also make every single mock consistent and if you refactor or add properties, the mock code will be automatically updated for you, eliminating possible human errors.
Sourcery can be applied to arbitrary problems across your codebase, if you can describe an algorithm to another human, you can automate it using Sourcery.
Most common uses are:
Equality & Hashing
Enum cases & Counts
Lenses
Mocks & Stubs
LinuxMain
Decorators
Persistence and advanced Codable
Property level diffing
But how about more specific use-cases, like automatically generating all the UI for your app BetaSetting? you can use Sourcery for that too
Once you start writing your own template and learn the power of Sourcery you won't be able to live without it.
How To Get Started
There are plenty of tutorials for different uses of Sourcery, and you can always ask for help in our Swift Forum Category.
The Magic of Sourcery is a great starting tutorial
Generating Swift Code for iOS deals with JSON handling code
How To Automate Swift Boilerplate with Sourcery generates conversions to dictionaries
Codable Enums implements Codable support for Enumerations
Sourcery Workshops
Quick Mocking Intro & Getting Started Video
You can also watch this quick getting started and intro to mocking video by Inside iOS Dev:
Installation
Binary form
Download the latest release with the prebuilt binary from release tab. Unzip the archive into the desired destination and run bin/sourcery
Homebrew
brew install sourcery
CocoaPods
Add pod 'Sourcery' to your Podfile and run pod update Sourcery. This will download the latest release binary and will put it in your project's CocoaPods path so you will run it with $PODS_ROOT/Sourcery/bin/sourcery
If you only want to install the sourcery binary, you may want to use the CLI-Only subspec: pod 'Sourcery', :subspecs => ['CLI-Only'].
Mint
mint run krzysztofzablocki/Sourcery
Building from Source
Download the latest release source code from the release tab or clone the repository and build Sourcery manually.
Building with Swift Package Manager
Run swift build -c release in the root folder and then copy .build/release/sourcery to your desired destination.
Note: JS templates are not supported when building with SPM yet.
Building with Xcode
Run xcodebuild -scheme sourcery -destination generic/platform=macOS -archivePath sourcery.xcarchive archive and export the binary from the archive.
SPM (for plugin use only)
Add the package dependency to your Package.swift manifest from version 1.8.3.
Note: this command differs depending on how you installed Sourcery (see Installation)
Swift Package command
Sourcery can now be used as a Swift package command plugin. In order to do this, the package must be added as a dependency to your Swift package or Xcode project (see Installation above).
To provide a configuration for the plugin to use, place a .sourcery.yml file at the root of the target's directory (in the sources folder rather than the root of the package).
Running from the command line
To verify the plugin can be found by SwiftPM, use:
$ swift package plugin --list
To run the code generator, you need to allow changes to the project with the --allow-writing-to-package-directory flag:
$ swift package --allow-writing-to-package-directory sourcery-command
Running in Xcode
Inside a project/package that uses this command plugin, right-click the project and select "SourceryCommand" from the "SourceryPlugins" menu group.
⚠️ Note that this is only available from Xcode 14 onwards.
Command line options
--sources - Path to a source swift files or directories. You can provide multiple paths using multiple --sources option.
--templates - Path to templates. File or Directory. You can provide multiple paths using multiple --templates options.
--force-parse - File extensions of Sourcery generated file you want to parse. You can provide multiple extension using multiple --force-parse options. (i.e. file.toparse.swift will be parsed even if generated by Sourcery if --force-parse toparse). Useful when trying to implement a multiple phases generation. --force-parse can also be used to process within a sourcery annotation. For example to process code within sourcery:inline:auto:Type.AutoCodable annotation you can use --force-parse AutoCodable
--output [default: current path] - Path to output. File or Directory.
--config [default: current path] - Path to config file. File or Directory. See Configuration file.
--args - Additional arguments to pass to templates. Each argument can have an explicit value or will have implicit true value. Arguments should be separated with , without spaces (i.e. --args arg1=value,arg2). Arguments are accessible in templates via argument.name
--watch [default: false] - Watch both code and template folders for changes and regenerate automatically.
--verbose [default: false] - Turn on verbose logging
--quiet [default: false] - Turn off any logging, only emit errors
--disableCache [default: false] - Turn off caching of parsed data
If you get an unverified developer warning when using binary zip distribution try:
xattr -dr com.apple.quarantine Sourcery-1.1.1
Contributing
Contributions to Sourcery are welcomed and encouraged!
It is easy to get involved. Please see the Contributing guide for more details.
A list of contributors is available through GitHub.
To clarify what is expected of our community, Sourcery has adopted the code of conduct defined by the Contributor Covenant. This document is used across many open source communities, and articulates my values well. For more, see the Code of Conduct.
Sponsoring
If you'd like to support Sourcery development you can do so through GitHub Sponsors or Open Collective, it's highly appreciated 🙇
If you are a company and would like to sponsor the project directly and get it's logo here, you can contact me directly
Sponsors
License
Sourcery is available under the MIT license. See LICENSE for more information.
Attributions
This tool is powered by
Stencil and few other libs by Kyle Fuller
Thank you! to:
Mariusz Ostrowski for creating the logo.
Artsy Eidolon team, because we use their codebase as a stub data for performance testing the parser.
Olivier Halligon for showing me his setup scripts for CLI tools which are powering our rakefile.
JP Simard for creating SourceKitten that originally powered Sourcery and was instrumental in making this project happen.
Other Libraries / Tools
If you want to generate code for asset related data like .xib, .storyboards etc. use SwiftGen. SwiftGen and Sourcery are complementary tools.
Make sure to check my other libraries and tools, especially:
KZPlayground - Powerful playgrounds for Swift and Objective-C
KZFileWatchers - Daemon for observing local and remote file changes, used for building other developer tools (Sourcery uses it)
You can follow me on Twitter for news/updates about other projects I am creating.
Trang TopGit này là một snapshot — tab "Readme" hiển thị nguyên văn README của repo (đã bỏ link, giữ ảnh). Repo GitHub ở github.com/krzysztofzablocki/Sourcery là nguồn chính thức.
krzysztofzablocki/Sourcery có bao nhiêu sao?
krzysztofzablocki/Sourcery có 8.0k sao GitHub — tải lại trang để xem số mới nhất, hoặc xem trực tiếp github.com/krzysztofzablocki/Sourcery. TopGit phản chiếu số sao của GitHub nhưng không cam kết đến từng phút.
krzysztofzablocki/Sourcery có phải mã nguồn mở không?
Có — krzysztofzablocki/Sourcery phát hành theo license MIT, nghĩa là mã nguồn mở để đọc, fork và (tùy license) tái sử dụng. Mã: github.com/krzysztofzablocki/Sourcery.
krzysztofzablocki/Sourcery còn đang phát triển không?
Commit gần nhất trên krzysztofzablocki/Sourcery là 2 tháng trước (theo timestamp GitHub). Repo có 635 fork — một chỉ báo về mức độ quan tâm của cộng đồng.
krzysztofzablocki/Sourcery là gì?
krzysztofzablocki/Sourcery (krzysztofzablocki/Sourcery) là dự án Swift trên GitHub. Theo mô tả gốc: Meta-programming for Swift, stop writing boilerplate code.
krzysztofzablocki/Sourcery so với các dự án Mobile khác thế nào?
krzysztofzablocki/Sourcery được TopGit xếp vào nhóm Mobile, với 8.0k sao GitHub và viết bằng Swift. Xem trang chủ đề Mobile trên TopGit để so sánh với các dự án tương tự theo số sao và mức độ hoạt động.
Đọc đầy đủ README ở tab phía trên.
Muốn nghe thêm một ý kiến về Sourcery?
Hỏi một AI đọc được trang này — một cú bấm là có ngay nhận định về Sourcery.