SwiftGen Versions Save

The Swift code generator for your assets, storyboards, Localizable.strings, … — Get rid of all String-based APIs!

6.6.3

2 months ago

Breaking Changes

None

New Features

Bug Fixes

Internal Changes

None

6.6.2

1 year ago

Changes in core dependencies of SwiftGen

Bug Fixes

Internal Changes

6.6.1

1 year ago

Changes in core dependencies of SwiftGen

Bug Fixes

  • CLI: fixed run parser when no params or options are provided (broken in 6.6.0).
    David Jennes #983
  • JSON/Plist/YAML: fixed code generation (broken in 6.6.0).
    David Jennes #983

6.6.0

1 year ago

Changes in core dependencies of SwiftGen

Breaking Changes

  • Strings: due to the bugfix for fallback translations, custom lookupFunctions will need to accept 3 arguments (table, key and value), up from 2 arguments (table and key).
    David Jennes #964

Deprecations

  • The Swift 4 templates are now deprecated. This means we will no longer test if the generated output is valid Swift code. We will still try to keep these up-to-date with context changes.
    David Jennes #955
  • Our spacing & trimming "hack" is now considered deprecated, and in the next major version we'll switch to Stencil's new "smart" trimming behaviour (see Stencil documentation for more information). Our built-in templates have already switched to this modern behaviour, you can try it with your own templates by using the --experimental-modern-spacing flag.
    David Jennes #977
  • XCAssets: some old properties & parameters are being deprecated. Read the migration guides for more information.
    David Jennes #978

New Features

  • Added support for --quiet/-q flag, to suppress all logs (except errors).
    Andre113 #823 #846
  • CoreData: ensure generated classes are final when model isn't abstract.
    grsouza #940
  • Added .artifactbundle release uploads to support SE-0325 Swift Plugins.
    nicorichard #913 #926
  • Strings: added support for .strings files comments. The built-in templates will now use them for comments instead of the translation of a key.
    CraigSiemens #563 #813
  • CoreData: support derived attributes.
    David Jennes #928 #961
  • Added an experimental flag --experimental-modern-spacing to enable modern spacing control, see Stencil documentation for more information. It will disable our own trimming "hack", and enable Stencil's "smart" trimming.
    David Jennes #977
  • XCAssets & Fonts: added support for SwiftUI. You can now easily access colors images, symbols and custom fonts from your SwiftUI code.
    David Jennes #979

Bug Fixes

Internal Changes

6.5.1

2 years ago

Bug Fixes

Internal Changes

  • Tweak release script to handle both universal & slim builds.
    David Jennes #884

6.5.0

2 years ago

Changes in core dependencies of SwiftGen

New Features

Bug Fixes

  • XCAssets: fixed some availability annotations that were incorrect.
    David Jennes #789
  • Strings: objc-h template now emits valid documentation comments.
    @szotp #822
  • Generate xcfilelist: Adds the template file path to the inputs xcfilelist (for custom templates).
    Craig Siemens #815
  • Strings: built-in templates now have better handling of multi-line translations.
    @mrackwitz #774

Internal Changes

6.4.0

3 years ago

New Features

  • The built-in templates will now correctly handle Swift Package Manager resources, using Bundle.module if it's available. As before, you can override the used Bundle using the bundle or lookupFunction template parameters.
    Arnaud Dorgans #763
  • Added config generate-xcfilelist subcommand to generate input and output xcfilelists based on your configuration file. These files should then be used in an Xcode build step that executes swiftgen config run. Don't forget to regenerate the file lists after adding/removing resources in your project in a way that might impact them.
    @CraigSiemens #441
  • Colors: the XML parser now accepts a colorFormat option, used to change the color format. The default format is rgba.
    @kevinstier #562 #768
  • IB: Added support for instantiating scenes while providing a creator block, commonly used for dependency injection. This feature is available in generated code starting from iOS 13, tvOS 13 and macOS 10.15.
    @matsune David Jennes #778

Bug Fixes

  • Plist: Update the parsing strategy (using Codable) to fix parsing of Bool values as Integer in some cases.
    @fortmarek Olivier Halligon #779
  • JSON/Plist/YAML: fixed issue with inline templates which incorrectly generated 1/0 as values, instead of true/false as expected.
    David Jennes #779 #783
  • JSON: the parser now correctly recognizes 0 and 1 as Int (instead of Bool).
    David Jennes #786

Internal Changes

  • Update the Swift version in .swift-version so that the right version is used when building manually (using swiftenv).
    @cfiken #764
  • Update Yams from 3.0.0 to 4.0.0.
    @hungrxyz #772
  • Updated Pods and Gems dependencies, and Xcode 12.
    David Jennes #782

6.3.0

3 years ago

Deprecations

  • Fonts: the generated Font typealias (to UIFont/NSFont) is deprecated and will be removed in the next major release.
    David Jennes #728

New Features

  • Strings: support for plurals declared in .stringsdict files.
    Florian Fittschen #184 #634
  • Fonts: the templates now support a new fontTypeName template parameter that you can use to change the name of the struct representing a font to something else.
    David Jennes #728
  • Fonts: the templates now support a new fontAliasName that you can use to change the typealias's name from Font to something else. For example: this is useful when working with SwiftUI which already defines a Font type. Note that as this typealias is deprecated (see deprecations above), this template parameter will also be removed in the next major release.
    David Jennes #647 #728
  • CoreData: Deprecates fetchRequest() and adds makeFetchRequest() to avoid ambiguous function usage.
    David Rothera #726
  • XCAssets: image assets now load faster on macOS if they're in the main bundle. MacOS only provides a caching mechanism for images in the main bundle, for other cases you may need to provide your own caching mechanism as needed.
    David Jennes #648 #733
  • Fonts/IB/JSON/Plist/Strings/XCAssets: all templates that load data at runtime from a bundle now support a bundle template parameter, which you can use to override the bundle from which resources are loaded. Check out the template specific documentation for more information. For an in-depth explanation, also check the customize loading of resources article.
    David Jennes #737
  • Fonts/IB/JSON/Plist: Similar to the strings templates, these templates now support a lookupFunction template parameter, which allows you to provide your own resource lookup mechanism at runtime. Check the template specific documentation for more information. For an in-depth explanation, also check the customize loading of resources article.
    David Jennes #738

Bug Fixes

  • Strings: fix incorrect interpretation of format placeholders when there were missing positional parameters (e.g. "%2$@" without a %1$… defined).
    @AliSoftware #634

6.2.1

3 years ago

There are no major changes in this release, although JSON & Plist template writers may want to read the small migration guide to prepare for upcoming context changes.

Deprecations

  • JSON & Plist: if you wrote your own templates, know that the documents property of a file has been deprecated in favour of document. The old documents property will be removed in the next major release.
    David Jennes #702 #732

Bug Fixes

  • Prevent generating default.profraw (code coverage) files.
    David Jennes #722
  • JSON/Plist/YAML: Fix issue with homogeneous Arrays in the Inline templates (such as [String]).
    #687 @fjtrujy
  • Avoid breaking the system swift installation when installing SwiftGen via Homebrew on macOS 10.14.4 or higher.
    David Jennes #686 #730

Internal Changes

  • Parsers are now executed in parallel, making SwiftGen faster when multiple parsers are used. Note: only applies when using a configuration file.
    Marcelo Fabri #699
  • Use JSONSerialization instead of Yams for parsing JSONs, making the json parser faster.
    Marcelo Fabri #698
  • JSON/Plist/YAML: Lazily evaluate metadata of documents, making SwiftGen faster if the metadata field is never used in a template.
    Marcelo Fabri #700

6.2.0

3 years ago

⚠️ This minor version contains a lot of deprecations that may apply to your configuration and how you use SwiftGen. With the exception of swift3 templates (which have been removed), everything should still work as before. But be warned that all features marked as deprecated will be removed in SwiftGen 7.0.

Read the SwiftGen 6.2 Migration Guide for a list of changes you'll need to apply.

Breaking Changes

  • As Swift 3 is officially no longer maintained, we're obsoleting the Swift 3 templates and they are no longer included with SwiftGen. You can still use the old swift 3 templates by getting them from older SwiftGen versions, or from GitHub by browsing older tags.
    David Jennes #601 #691

Deprecations

  • XCAssets: the colorAliasName and imageAliasName template parameters are now deprecated and will be removed in the next major release.
    David Jennes #614
  • The use of swiftgen <parser> (e.g. swiftgen strings, swiftgen xcassets, …) command line for running individual parsers is now deprecated in favor of swiftgen run <parser>. See "New Features" below.
    @AliSoftware #705
  • The subcommand swiftgen templates has been renamed swiftgen template (singular); the plural form of the command has been deprecated and will be removed in next major version.
    @AliSoftware #697
  • The ability for SwiftGen to search custom named templates in ~/Library/Application Support has been deprecated and will be removed in SwiftGen 7.0. This little known feature made SwiftGen dependent on the machine it was running on. Use templatePath to reference custom templates by path instead.
    @AliSoftware #717

New Features

  • Invoking individual parsers from the command line is now done via swiftgen run <parser>. We still highly recommend to use a configuration file for flexibility and performance reasons in your projects, and only use swiftgen run <parser> for things like quick iterations when writing your own custom templates.
    @AliSoftware #705
  • You can now easily create a new config file using swiftgen config init. This will create an example and commented config file and open it to let you edit it to your needs. Note that the generated config file is static content which doesn't take the user's project into account (though that might change in the future).
    @AliSoftware #694
  • You can now use swiftgen template doc [parser] [templateName] on the command line to quickly open the documentation for templates on GitHub directly from your terminal.
    @AliSoftware #697
  • Each parser now accepts an options dictionary, with which you can set internal parser settings to change its behaviour. See the parser's specific documentation for available options.
    David Jennes #587 #597
  • Strings: the parser now accepts a separator option, used to split keys into structured components. The default separator remains .. For more information, check the parser's documentation.
    David Jennes #576 #588
  • Core Data: the built-in templates now support an optional extraImports parameter. With this you can provide a list of modules to additionally import, for when you have properties with types from external modules. For more information, check the template's documentation.
    David Jennes #591 #592
  • Core Data: the built-in templates now support RawRepresentable attributes (such as enum, OptionSet, …). They'll check the "User Info" of an attribute for a RawType key, which should be set to the type name you want to use for that attribute. To avoid optional attributes, you can also add the unwrapOptional user info key. For more information, check the template's documentation.
    David Jennes #566 #609 #593 #610
  • Strings: the built-in templates now accept a parameter lookupFunction for customizing the localization function, check the template documentation for more information.
    Steven Magdy 426 468 573 716
  • Strings: templates to generate Objective-C. Please check the template's documentation for more information.
    Eric Slosser SwiftGen/SwiftGen#378
  • XCAssets: the parser now supports AR Resource Groups, together with reference images and objects.
    David Jennes #614
  • Templates: Bundle now use static property on BundleToken for better performance.
    shuoli84 #623
  • All parsers now have built-in Swift 5 templates.
    David Jennes #595 #600
  • Most templates now accept a parameter to force having the file name used as namespace (enum <FileName>) in generated code even if there's only one single input file.
    Viktoras Laukevičius #669 @AliSoftware #693

Bug Fixes

  • SwiftGen now properly shows a better help message and the command usage when running an incomplete command, instead of complaining about a config file.
    @AliSoftware #706
  • XCAssets: improved the performance for color assets by caching the resolved colors.
    David Jennes #578 #589
  • Core Data: entityName is now correctly a class var instead of a class func.
    David Jennes #590
  • Strings: we now correctly generate the type Any (instead of String) for %@ placeholders.
    David Jennes 620
  • Colors: Reduce initializer type inference for improved compilation performance.
    Markus Faßbender #663
  • Config Lint: fix config lint not processing relative paths containing ".." correctly.
    Wolfgang Lutz #688
  • Core Data: the generated code was missing , (comma) for fetch requests with multiple arguments.
    David Jennes #692
  • Colors: Fix compile time warning when long expression type checking is enabled.
    Ryan Mason-Davies #704 #710

Internal Changes

  • The main branch of the repository has been renamed from master to stable. If you pointed your Podfile or dependency managment tool to master instead of an official release/tag, you will have to update the branch name in your dependency file.
    @AliSoftware #714
  • Documentation: Improved doc for creating custom templates, and added a Documentation Table of Contents.
    @AliSoftware #713
  • Refactoring: Reduce globals & rearrange CLI code.
    @AliSoftware #586
  • Moved generated test output files into subdirectories per template.
    David Jennes #598
  • Compile generated output using configuration files for easier management.
    David Jennes #365 #599
  • XCAssets: renamed the catalogs we use for sample code & testing to avoid some confusion.
    David Jennes #613
  • Update SwiftLint and enable some extra SwiftLint rules.
    David Jennes #617
  • Some CI fixes related to software versions.
    Patrick Nollet #645
  • Updated to CocoaPods 1.9.0.
    David Jennes #619
  • Updated Pods and Gems dependencies.
    David Jennes #684