SwiftGen code generation for Swift packages that works on any machine. No installation required, simply add the package to your Package.swift
's dependencies:
dependencies: [
.package(url: "https://github.com/SwiftGen/SwiftGenPlugin", from: "6.6.0")
]
Adding SwiftGen as a prebuild tool will execute it and generate your files before each build.
After adding the dependency to your Package.swift
, include the SwiftGenPlugin
plugin in any targets for which you would like it to run.
targets: [
.target(
name: "YourTargetName",
dependencies: [],
plugins: [
.plugin(name: "SwiftGenPlugin", package: "SwiftGenPlugin")
]
)
]
Add a swiftgen.yml
file to your project following the configuration file format, and prefix each of your output paths with ${DERIVED_SOURCES_DIR}/
. Or set this globally in your configuration by setting the output_dir
to that value.
Take a look at this repository's swiftgen.yml for an example.
Each time the plugin is invoked it will look for a swiftgen.yml
configuration file in 2 places:
- The root of your package (same folder as
Package.swift
). - Your target's folder, for example
Sources/MyExample
.
It will invoke SwiftGen for each found configuration file, so you could choose either option, or combine both. This can be useful if you need some target-specific configuration and some shared configuration, without repeating yourself.
Do note that the paths (to resources) in a configuration will need to change depending on where the configuration is located:
- Root configurations will need the full path to resources, such as
Sources/MyExample/Resources/Localizable.strings
. Or set the config'sinput_dir
toSources/MyExample/Resources
. See an example of a top-level configuration. - Target configurations will need the relative path to resources, such as
Resources/Localizable.strings
. Or set the config'sinput_dir
toResources
. See an example of a target specific configuration.
You can manually invoke SwiftGen using the following command:
swift package --allow-writing-to-package-directory generate-code-for-resources
The command will automatically search for swiftgen.yml
configuration files in each of your targets' (or top-level) folder, and invoke SwiftGen for them.
If you want to manually provide the configuration file and other settings, pass them along as extra arguments:
swift package --allow-writing-to-package-directory generate-code-for-resources --config MyConfig.yml
This code and tool is under the MIT Licence. See the LICENCE
file in this repository.
These plugins are powered by SwiftGen.
It is currently mainly maintained by @AliSoftware and @djbe. But I couldn't thank enough all the other contributors to this tool along the different versions which helped make SwiftGen awesome! 🎉
If you want to contribute, don't hesitate to open a Pull Request, or even join the team!