diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index d67dc461..9c2dc23a 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -17,21 +17,20 @@ jobs:
runs-on: macos-12
- steps:
- - uses: maxim-lobanov/setup-xcode@v1
- with:
- xcode-version: '13.4.1'
-
+ steps:
- name: Checkout
uses: actions/checkout@v1
- - uses: actions/cache@v3
+ - name: Install SwiftGen
+ run: brew install swiftgen
+
+ - name: Cache Carthage
+ uses: actions/cache@v3
id: carthage-cache
with:
path: Carthage
key: ${{ runner.os }}-carthage-${{ hashFiles('**/Cartfile.resolved') }}
- restore-keys: |
- ${{ runner.os }}-carthage-
+ restore-keys: ${{ runner.os }}-carthage-
- name: Update Carthage
run: carthage update --use-xcframeworks --cache-builds
@@ -41,8 +40,7 @@ jobs:
with:
path: .build
key: ${{ runner.os }}-${{ matrix.scheme }}-spm-${{ hashFiles('**/Package.resolved') }}
- restore-keys: |
- ${{ runner.os }}-${{ matrix.scheme }}-spm-
+ restore-keys: ${{ runner.os }}-${{ matrix.scheme }}-spm-
- name: xcodebuild!
run: |
diff --git a/Swiftfin.xcodeproj/project.pbxproj b/Swiftfin.xcodeproj/project.pbxproj
index a8e3f2eb..3d8e4b85 100644
--- a/Swiftfin.xcodeproj/project.pbxproj
+++ b/Swiftfin.xcodeproj/project.pbxproj
@@ -2191,7 +2191,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${PROJECT_DIR}/bin/swiftgen\"\n";
+ shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"swiftgen\"\n";
};
6286F0A3271C0ABA00C40ED5 /* R.swift */ = {
isa = PBXShellScriptBuildPhase;
@@ -2209,7 +2209,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${PROJECT_DIR}/bin/swiftgen\"\n";
+ shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"swiftgen\"\n";
};
/* End PBXShellScriptBuildPhase section */
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Info.plist b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Info.plist
deleted file mode 100644
index 01d943f2..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Info.plist
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
- BuildMachineOSBuild
-
- CFBundleDevelopmentRegion
- en
- CFBundleExecutable
- SwiftGen_SwiftGenCLI
- CFBundleIdentifier
- SwiftGen.SwiftGenCLI.resources
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- SwiftGen_SwiftGenCLI
- CFBundlePackageType
- BNDL
- CFBundleSupportedPlatforms
-
- MacOSX
-
- DTCompiler
- com.apple.compilers.llvm.clang.1_0
- DTPlatformBuild
- 13A233
- DTPlatformName
- macosx
- DTPlatformVersion
- 11.3
- DTSDKBuild
- 20E214
- DTSDKName
- macosx11.3
- DTXcode
- 1300
- DTXcodeBuild
- 13A233
- LSMinimumSystemVersion
- 10.11
-
-
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/literals-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/literals-swift4.stencil
deleted file mode 100644
index af604776..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/literals-swift4.stencil
+++ /dev/null
@@ -1,43 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if palettes %}
-{% set enumName %}{{param.enumName|default:"ColorName"}}{% endset %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-#if os(macOS)
- import AppKit
- {% if enumName != 'NSColor' %}{{accessModifier}} enum {{enumName}} { }{% endif %}
-#elseif os(iOS) || os(tvOS) || os(watchOS)
- import UIKit
- {% if enumName != 'UIColor' %}{{accessModifier}} enum {{enumName}} { }{% endif %}
-#endif
-
-// swiftlint:disable superfluous_disable_command
-// swiftlint:disable file_length
-
-// MARK: - Colors
-
-// swiftlint:disable identifier_name line_length type_body_length
-{{accessModifier}} extension {{enumName}} {
-{% macro h2f hex %}{{hex|hexToInt|int255toFloat}}{% endmacro %}
-{% macro enumBlock colors accessPrefix %}
- {% for color in colors %}
- /// 0x{{color.red}}{{color.green}}{{color.blue}}{{color.alpha}} (r: {{color.red|hexToInt}}, g: {{color.green|hexToInt}}, b: {{color.blue|hexToInt}}, a: {{color.alpha|hexToInt}})
- {{accessPrefix}}static let {{color.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = #colorLiteral(red: {% call h2f color.red %}, green: {% call h2f color.green %}, blue: {% call h2f color.blue %}, alpha: {% call h2f color.alpha %})
- {% endfor %}
-{% endmacro %}
- {% if palettes.count > 1 or param.forceFileNameEnum %}
- {% set accessPrefix %}{{accessModifier}} {% endset %}
- {% for palette in palettes %}
- enum {{palette.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call enumBlock palette.colors accessPrefix %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call enumBlock palettes.first.colors "" %}
- {% endif %}
-}
-// swiftlint:enable identifier_name line_length type_body_length
-{% else %}
-// No color found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/literals-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/literals-swift5.stencil
deleted file mode 100644
index af604776..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/literals-swift5.stencil
+++ /dev/null
@@ -1,43 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if palettes %}
-{% set enumName %}{{param.enumName|default:"ColorName"}}{% endset %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-#if os(macOS)
- import AppKit
- {% if enumName != 'NSColor' %}{{accessModifier}} enum {{enumName}} { }{% endif %}
-#elseif os(iOS) || os(tvOS) || os(watchOS)
- import UIKit
- {% if enumName != 'UIColor' %}{{accessModifier}} enum {{enumName}} { }{% endif %}
-#endif
-
-// swiftlint:disable superfluous_disable_command
-// swiftlint:disable file_length
-
-// MARK: - Colors
-
-// swiftlint:disable identifier_name line_length type_body_length
-{{accessModifier}} extension {{enumName}} {
-{% macro h2f hex %}{{hex|hexToInt|int255toFloat}}{% endmacro %}
-{% macro enumBlock colors accessPrefix %}
- {% for color in colors %}
- /// 0x{{color.red}}{{color.green}}{{color.blue}}{{color.alpha}} (r: {{color.red|hexToInt}}, g: {{color.green|hexToInt}}, b: {{color.blue|hexToInt}}, a: {{color.alpha|hexToInt}})
- {{accessPrefix}}static let {{color.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = #colorLiteral(red: {% call h2f color.red %}, green: {% call h2f color.green %}, blue: {% call h2f color.blue %}, alpha: {% call h2f color.alpha %})
- {% endfor %}
-{% endmacro %}
- {% if palettes.count > 1 or param.forceFileNameEnum %}
- {% set accessPrefix %}{{accessModifier}} {% endset %}
- {% for palette in palettes %}
- enum {{palette.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call enumBlock palette.colors accessPrefix %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call enumBlock palettes.first.colors "" %}
- {% endif %}
-}
-// swiftlint:enable identifier_name line_length type_body_length
-{% else %}
-// No color found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/swift4.stencil
deleted file mode 100644
index 57c2d797..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/swift4.stencil
+++ /dev/null
@@ -1,84 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if palettes %}
-{% set colorAlias %}{{param.colorAliasName|default:"Color"}}{% endset %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-#if os(macOS)
- import AppKit.NSColor
- {{accessModifier}} typealias {{colorAlias}} = NSColor
-#elseif os(iOS) || os(tvOS) || os(watchOS)
- import UIKit.UIColor
- {{accessModifier}} typealias {{colorAlias}} = UIColor
-#endif
-
-// swiftlint:disable superfluous_disable_command file_length implicit_return
-
-// MARK: - Colors
-
-// swiftlint:disable identifier_name line_length type_body_length
-{% set enumName %}{{param.enumName|default:"ColorName"}}{% endset %}
-{{accessModifier}} struct {{enumName}} {
- {{accessModifier}} let rgbaValue: UInt32
- {{accessModifier}} var color: {{colorAlias}} { return {{colorAlias}}(named: self) }
-
-{% macro rgbaValue color %}0x{{color.red}}{{color.green}}{{color.blue}}{{color.alpha}}{% endmacro %}
-{% macro enumBlock colors %}
- {% for color in colors %}
- ///
- /// Alpha: {{color.alpha|hexToInt|int255toFloat|percent}}
(0x{{color.red}}{{color.green}}{{color.blue}}{{color.alpha}})
- {{accessModifier}} static let {{color.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{enumName}}(rgbaValue: {% call rgbaValue color %})
- {% endfor %}
-{% endmacro %}
- {% if palettes.count > 1 or param.forceFileNameEnum %}
- {% for palette in palettes %}
- {{accessModifier}} enum {{palette.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call enumBlock palette.colors %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call enumBlock palettes.first.colors %}
- {% endif %}
-}
-// swiftlint:enable identifier_name line_length type_body_length
-
-// MARK: - Implementation Details
-
-internal extension {{colorAlias}} {
- convenience init(rgbaValue: UInt32) {
- let components = RGBAComponents(rgbaValue: rgbaValue).normalized
- self.init(red: components[0], green: components[1], blue: components[2], alpha: components[3])
- }
-}
-
-private struct RGBAComponents {
- let rgbaValue: UInt32
-
- private var shifts: [UInt32] {
- [
- rgbaValue >> 24, // red
- rgbaValue >> 16, // green
- rgbaValue >> 8, // blue
- rgbaValue // alpha
- ]
- }
-
- private var components: [CGFloat] {
- shifts.map {
- CGFloat($0 & 0xff)
- }
- }
-
- var normalized: [CGFloat] {
- components.map { $0 / 255.0 }
- }
-}
-
-{{accessModifier}} extension {{colorAlias}} {
- convenience init(named color: {{enumName}}) {
- self.init(rgbaValue: color.rgbaValue)
- }
-}
-{% else %}
-// No color found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/swift5.stencil
deleted file mode 100644
index 57c2d797..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/swift5.stencil
+++ /dev/null
@@ -1,84 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if palettes %}
-{% set colorAlias %}{{param.colorAliasName|default:"Color"}}{% endset %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-#if os(macOS)
- import AppKit.NSColor
- {{accessModifier}} typealias {{colorAlias}} = NSColor
-#elseif os(iOS) || os(tvOS) || os(watchOS)
- import UIKit.UIColor
- {{accessModifier}} typealias {{colorAlias}} = UIColor
-#endif
-
-// swiftlint:disable superfluous_disable_command file_length implicit_return
-
-// MARK: - Colors
-
-// swiftlint:disable identifier_name line_length type_body_length
-{% set enumName %}{{param.enumName|default:"ColorName"}}{% endset %}
-{{accessModifier}} struct {{enumName}} {
- {{accessModifier}} let rgbaValue: UInt32
- {{accessModifier}} var color: {{colorAlias}} { return {{colorAlias}}(named: self) }
-
-{% macro rgbaValue color %}0x{{color.red}}{{color.green}}{{color.blue}}{{color.alpha}}{% endmacro %}
-{% macro enumBlock colors %}
- {% for color in colors %}
- ///
- /// Alpha: {{color.alpha|hexToInt|int255toFloat|percent}}
(0x{{color.red}}{{color.green}}{{color.blue}}{{color.alpha}})
- {{accessModifier}} static let {{color.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{enumName}}(rgbaValue: {% call rgbaValue color %})
- {% endfor %}
-{% endmacro %}
- {% if palettes.count > 1 or param.forceFileNameEnum %}
- {% for palette in palettes %}
- {{accessModifier}} enum {{palette.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call enumBlock palette.colors %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call enumBlock palettes.first.colors %}
- {% endif %}
-}
-// swiftlint:enable identifier_name line_length type_body_length
-
-// MARK: - Implementation Details
-
-internal extension {{colorAlias}} {
- convenience init(rgbaValue: UInt32) {
- let components = RGBAComponents(rgbaValue: rgbaValue).normalized
- self.init(red: components[0], green: components[1], blue: components[2], alpha: components[3])
- }
-}
-
-private struct RGBAComponents {
- let rgbaValue: UInt32
-
- private var shifts: [UInt32] {
- [
- rgbaValue >> 24, // red
- rgbaValue >> 16, // green
- rgbaValue >> 8, // blue
- rgbaValue // alpha
- ]
- }
-
- private var components: [CGFloat] {
- shifts.map {
- CGFloat($0 & 0xff)
- }
- }
-
- var normalized: [CGFloat] {
- components.map { $0 / 255.0 }
- }
-}
-
-{{accessModifier}} extension {{colorAlias}} {
- convenience init(named color: {{enumName}}) {
- self.init(rgbaValue: color.rgbaValue)
- }
-}
-{% else %}
-// No color found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/coredata/swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/coredata/swift4.stencil
deleted file mode 100644
index 9832876e..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/coredata/swift4.stencil
+++ /dev/null
@@ -1,211 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-// swiftlint:disable superfluous_disable_command implicit_return
-// swiftlint:disable sorted_imports
-import CoreData
-import Foundation
-{% for import in param.extraImports %}
-import {{ import }}
-{% empty %}
-{# If extraImports is a single String instead of an array, `for` considers it empty but we still have to check if there's a single String value #}
-{% if param.extraImports %}import {{ param.extraImports }}{% endif %}
-{% endfor %}
-
-// swiftlint:disable attributes file_length vertical_whitespace_closing_braces
-// swiftlint:disable identifier_name line_length type_body_length
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-
-{% for model in models %}
-{% for name, entity in model.entities %}
-{% set superclass %}{{ model.entities[entity.superEntity].className|default:"NSManagedObject" }}{% endset %}
-{% set entityClassName %}{{ entity.className|default:"NSManagedObject" }}{% endset %}
-// MARK: - {{ entity.name }}
-
-{% if not entity.shouldGenerateCode %}
-// Note: '{{ entity.name }}' has codegen enabled for Xcode, skipping code generation.
-
-{% elif entityClassName|contains:"." %}
-// Warning: '{{ entityClassName }}' cannot be a valid type name, skipping code generation.
-
-{% else %}
-{% if param.generateObjcName %}
-@objc({{ entityClassName }})
-{% endif %}
-{{ accessModifier }} class {{ entityClassName }}: {{ superclass }} {
- {% set override %}{% if superclass != "NSManagedObject" %}override {% endif %}{% endset %}
- {{ override }}{{ accessModifier }} class var entityName: String {
- return "{{ entity.name }}"
- }
-
- {{ override }}{{ accessModifier }} class func entity(in managedObjectContext: NSManagedObjectContext) -> NSEntityDescription? {
- return NSEntityDescription.entity(forEntityName: entityName, in: managedObjectContext)
- }
-
- @available(*, deprecated, renamed: "makeFetchRequest", message: "To avoid collisions with the less concrete method in `NSManagedObject`, please use `makeFetchRequest()` instead.")
- @nonobjc {{ accessModifier }} class func fetchRequest() -> NSFetchRequest<{{ entityClassName }}> {
- return NSFetchRequest<{{ entityClassName }}>(entityName: entityName)
- }
-
- @nonobjc {{ accessModifier }} class func makeFetchRequest() -> NSFetchRequest<{{ entityClassName }}> {
- return NSFetchRequest<{{ entityClassName }}>(entityName: entityName)
- }
-
- // swiftlint:disable discouraged_optional_boolean discouraged_optional_collection
- {% for attribute in entity.attributes %}
- {% if attribute.userInfo.RawType %}
- {% set rawType attribute.userInfo.RawType %}
- {% set unwrapOptional attribute.userInfo.unwrapOptional %}
- {{ accessModifier }} var {{ attribute.name }}: {{ rawType }}{% if not unwrapOptional %}?{% endif %} {
- get {
- let key = "{{ attribute.name }}"
- willAccessValue(forKey: key)
- defer { didAccessValue(forKey: key) }
-
- {% if unwrapOptional %}
- guard let value = primitiveValue(forKey: key) as? {{ rawType }}.RawValue,
- let result = {{ rawType }}(rawValue: value) else {
- fatalError("Could not convert value for key '\(key)' to type '{{ rawType }}'")
- }
- return result
- {% else %}
- guard let value = primitiveValue(forKey: key) as? {{ rawType }}.RawValue else {
- return nil
- }
- return {{ rawType }}(rawValue: value)
- {% endif %}
- }
- set {
- let key = "{{ attribute.name }}"
- willChangeValue(forKey: key)
- defer { didChangeValue(forKey: key) }
-
- setPrimitiveValue(newValue{% if not unwrapOptional %}?{% endif %}.rawValue, forKey: key)
- }
- }
- {% elif attribute.usesScalarValueType and attribute.isOptional %}
- {{ accessModifier }} var {{ attribute.name }}: {{ attribute.typeName }}? {
- get {
- let key = "{{ attribute.name }}"
- willAccessValue(forKey: key)
- defer { didAccessValue(forKey: key) }
-
- return primitiveValue(forKey: key) as? {{ attribute.typeName }}
- }
- set {
- let key = "{{ attribute.name }}"
- willChangeValue(forKey: key)
- defer { didChangeValue(forKey: key) }
-
- setPrimitiveValue(newValue, forKey: key)
- }
- }
- {% else %}
- @NSManaged {{ accessModifier }} var {{ attribute.name }}: {{ attribute.typeName }}{% if attribute.isOptional %}?{% endif %}
- {% endif %}
- {% endfor %}
- {% for relationship in entity.relationships %}
- {% if relationship.isToMany %}
- @NSManaged {{ accessModifier }} var {{ relationship.name }}: {% if relationship.isOrdered %}NSOrderedSet{% else %}Set<{{ model.entities[relationship.destinationEntity].className|default:"NSManagedObject" }}>{% endif %}{% if relationship.isOptional %}?{% endif %}
- {% else %}
- @NSManaged {{ accessModifier }} var {{ relationship.name }}: {{ model.entities[relationship.destinationEntity].className|default:"NSManagedObject" }}{% if relationship.isOptional %}?{% endif %}
- {% endif %}
- {% endfor %}
- {% for fetchedProperty in entity.fetchedProperties %}
- @NSManaged {{ accessModifier }} var {{ fetchedProperty.name }}: [{{ fetchedProperty.fetchRequest.entity }}]
- {% endfor %}
- // swiftlint:enable discouraged_optional_boolean discouraged_optional_collection
-}
-
-{% for relationship in entity.relationships where relationship.isToMany %}
-{% set destinationEntityClassName %}{{ model.entities[relationship.destinationEntity].className|default:"NSManagedObject" }}{% endset %}
-{% set collectionClassName %}{% if relationship.isOrdered %}NSOrderedSet{% else %}Set<{{ destinationEntityClassName }}>{% endif %}{% endset %}
-{% set relationshipName %}{{ relationship.name | upperFirstLetter }}{% endset %}
-// MARK: Relationship {{ relationshipName }}
-
-extension {{ entityClassName }} {
- {% if relationship.isOrdered %}
- @objc(insertObject:in{{ relationshipName }}AtIndex:)
- @NSManaged public func insertInto{{ relationshipName }}(_ value: {{ destinationEntityClassName }}, at idx: Int)
-
- @objc(removeObjectFrom{{ relationshipName }}AtIndex:)
- @NSManaged public func removeFrom{{ relationshipName }}(at idx: Int)
-
- @objc(insert{{ relationshipName }}:atIndexes:)
- @NSManaged public func insertInto{{ relationshipName }}(_ values: [{{ destinationEntityClassName }}], at indexes: NSIndexSet)
-
- @objc(remove{{ relationshipName }}AtIndexes:)
- @NSManaged public func removeFrom{{ relationshipName }}(at indexes: NSIndexSet)
-
- @objc(replaceObjectIn{{ relationshipName }}AtIndex:withObject:)
- @NSManaged public func replace{{ relationshipName }}(at idx: Int, with value: {{ destinationEntityClassName }})
-
- @objc(replace{{ relationshipName }}AtIndexes:with{{ relationshipName }}:)
- @NSManaged public func replace{{ relationshipName }}(at indexes: NSIndexSet, with values: [{{ destinationEntityClassName }}])
-
- {% endif %}
- @objc(add{{ relationshipName }}Object:)
- @NSManaged public func addTo{{ relationshipName }}(_ value: {{ destinationEntityClassName }})
-
- @objc(remove{{ relationshipName }}Object:)
- @NSManaged public func removeFrom{{ relationshipName }}(_ value: {{ destinationEntityClassName }})
-
- @objc(add{{ relationshipName }}:)
- @NSManaged public func addTo{{ relationshipName }}(_ values: {{ collectionClassName }})
-
- @objc(remove{{ relationshipName }}:)
- @NSManaged public func removeFrom{{ relationshipName }}(_ values: {{ collectionClassName }})
-}
-
-{% endfor %}
-{% if model.fetchRequests[entity.name].count > 0 %}
-// MARK: Fetch Requests
-
-extension {{ entityClassName }} {
- {% for fetchRequest in model.fetchRequests[entity.name] %}
- {% set resultTypeName %}{% filter removeNewlines:"leading" %}
- {% if fetchRequest.resultType == "Object" %}
- {{ entityClassName }}
- {% elif fetchRequest.resultType == "Object ID" %}
- NSManagedObjectID
- {% elif fetchRequest.resultType == "Dictionary" %}
- [String: Any]
- {% endif %}
- {% endfilter %}{% endset %}
- class func fetch{{ fetchRequest.name | upperFirstLetter }}({% filter removeNewlines:"leading" %}
- managedObjectContext: NSManagedObjectContext
- {% for variableName, variableType in fetchRequest.substitutionVariables %}
- , {{ variableName | lowerFirstWord }}: {{ variableType }}
- {% endfor %}
- {% endfilter %}) throws -> [{{ resultTypeName }}] {
- guard let persistentStoreCoordinator = managedObjectContext.persistentStoreCoordinator else {
- fatalError("Managed object context has no persistent store coordinator for getting fetch request templates")
- }
- let model = persistentStoreCoordinator.managedObjectModel
- let substitutionVariables: [String: Any] = [
- {% for variableName, variableType in fetchRequest.substitutionVariables %}
- "{{ variableName }}": {{ variableName | lowerFirstWord }}{{ "," if not forloop.last }}
- {% empty %}
- :
- {% endfor %}
- ]
-
- guard let fetchRequest = model.fetchRequestFromTemplate(withName: "{{ fetchRequest.name }}", substitutionVariables: substitutionVariables) else {
- fatalError("No fetch request template named '{{ fetchRequest.name }}' found.")
- }
-
- guard let result = try managedObjectContext.fetch(fetchRequest) as? [{{ resultTypeName }}] else {
- fatalError("Unable to cast fetch result to correct result type.")
- }
-
- return result
- }
-
- {% endfor %}
-}
-
-{% endif %}
-{% endif %}
-{% endfor %}
-{% endfor %}
-// swiftlint:enable identifier_name line_length type_body_length
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/coredata/swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/coredata/swift5.stencil
deleted file mode 100644
index 9832876e..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/coredata/swift5.stencil
+++ /dev/null
@@ -1,211 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-// swiftlint:disable superfluous_disable_command implicit_return
-// swiftlint:disable sorted_imports
-import CoreData
-import Foundation
-{% for import in param.extraImports %}
-import {{ import }}
-{% empty %}
-{# If extraImports is a single String instead of an array, `for` considers it empty but we still have to check if there's a single String value #}
-{% if param.extraImports %}import {{ param.extraImports }}{% endif %}
-{% endfor %}
-
-// swiftlint:disable attributes file_length vertical_whitespace_closing_braces
-// swiftlint:disable identifier_name line_length type_body_length
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-
-{% for model in models %}
-{% for name, entity in model.entities %}
-{% set superclass %}{{ model.entities[entity.superEntity].className|default:"NSManagedObject" }}{% endset %}
-{% set entityClassName %}{{ entity.className|default:"NSManagedObject" }}{% endset %}
-// MARK: - {{ entity.name }}
-
-{% if not entity.shouldGenerateCode %}
-// Note: '{{ entity.name }}' has codegen enabled for Xcode, skipping code generation.
-
-{% elif entityClassName|contains:"." %}
-// Warning: '{{ entityClassName }}' cannot be a valid type name, skipping code generation.
-
-{% else %}
-{% if param.generateObjcName %}
-@objc({{ entityClassName }})
-{% endif %}
-{{ accessModifier }} class {{ entityClassName }}: {{ superclass }} {
- {% set override %}{% if superclass != "NSManagedObject" %}override {% endif %}{% endset %}
- {{ override }}{{ accessModifier }} class var entityName: String {
- return "{{ entity.name }}"
- }
-
- {{ override }}{{ accessModifier }} class func entity(in managedObjectContext: NSManagedObjectContext) -> NSEntityDescription? {
- return NSEntityDescription.entity(forEntityName: entityName, in: managedObjectContext)
- }
-
- @available(*, deprecated, renamed: "makeFetchRequest", message: "To avoid collisions with the less concrete method in `NSManagedObject`, please use `makeFetchRequest()` instead.")
- @nonobjc {{ accessModifier }} class func fetchRequest() -> NSFetchRequest<{{ entityClassName }}> {
- return NSFetchRequest<{{ entityClassName }}>(entityName: entityName)
- }
-
- @nonobjc {{ accessModifier }} class func makeFetchRequest() -> NSFetchRequest<{{ entityClassName }}> {
- return NSFetchRequest<{{ entityClassName }}>(entityName: entityName)
- }
-
- // swiftlint:disable discouraged_optional_boolean discouraged_optional_collection
- {% for attribute in entity.attributes %}
- {% if attribute.userInfo.RawType %}
- {% set rawType attribute.userInfo.RawType %}
- {% set unwrapOptional attribute.userInfo.unwrapOptional %}
- {{ accessModifier }} var {{ attribute.name }}: {{ rawType }}{% if not unwrapOptional %}?{% endif %} {
- get {
- let key = "{{ attribute.name }}"
- willAccessValue(forKey: key)
- defer { didAccessValue(forKey: key) }
-
- {% if unwrapOptional %}
- guard let value = primitiveValue(forKey: key) as? {{ rawType }}.RawValue,
- let result = {{ rawType }}(rawValue: value) else {
- fatalError("Could not convert value for key '\(key)' to type '{{ rawType }}'")
- }
- return result
- {% else %}
- guard let value = primitiveValue(forKey: key) as? {{ rawType }}.RawValue else {
- return nil
- }
- return {{ rawType }}(rawValue: value)
- {% endif %}
- }
- set {
- let key = "{{ attribute.name }}"
- willChangeValue(forKey: key)
- defer { didChangeValue(forKey: key) }
-
- setPrimitiveValue(newValue{% if not unwrapOptional %}?{% endif %}.rawValue, forKey: key)
- }
- }
- {% elif attribute.usesScalarValueType and attribute.isOptional %}
- {{ accessModifier }} var {{ attribute.name }}: {{ attribute.typeName }}? {
- get {
- let key = "{{ attribute.name }}"
- willAccessValue(forKey: key)
- defer { didAccessValue(forKey: key) }
-
- return primitiveValue(forKey: key) as? {{ attribute.typeName }}
- }
- set {
- let key = "{{ attribute.name }}"
- willChangeValue(forKey: key)
- defer { didChangeValue(forKey: key) }
-
- setPrimitiveValue(newValue, forKey: key)
- }
- }
- {% else %}
- @NSManaged {{ accessModifier }} var {{ attribute.name }}: {{ attribute.typeName }}{% if attribute.isOptional %}?{% endif %}
- {% endif %}
- {% endfor %}
- {% for relationship in entity.relationships %}
- {% if relationship.isToMany %}
- @NSManaged {{ accessModifier }} var {{ relationship.name }}: {% if relationship.isOrdered %}NSOrderedSet{% else %}Set<{{ model.entities[relationship.destinationEntity].className|default:"NSManagedObject" }}>{% endif %}{% if relationship.isOptional %}?{% endif %}
- {% else %}
- @NSManaged {{ accessModifier }} var {{ relationship.name }}: {{ model.entities[relationship.destinationEntity].className|default:"NSManagedObject" }}{% if relationship.isOptional %}?{% endif %}
- {% endif %}
- {% endfor %}
- {% for fetchedProperty in entity.fetchedProperties %}
- @NSManaged {{ accessModifier }} var {{ fetchedProperty.name }}: [{{ fetchedProperty.fetchRequest.entity }}]
- {% endfor %}
- // swiftlint:enable discouraged_optional_boolean discouraged_optional_collection
-}
-
-{% for relationship in entity.relationships where relationship.isToMany %}
-{% set destinationEntityClassName %}{{ model.entities[relationship.destinationEntity].className|default:"NSManagedObject" }}{% endset %}
-{% set collectionClassName %}{% if relationship.isOrdered %}NSOrderedSet{% else %}Set<{{ destinationEntityClassName }}>{% endif %}{% endset %}
-{% set relationshipName %}{{ relationship.name | upperFirstLetter }}{% endset %}
-// MARK: Relationship {{ relationshipName }}
-
-extension {{ entityClassName }} {
- {% if relationship.isOrdered %}
- @objc(insertObject:in{{ relationshipName }}AtIndex:)
- @NSManaged public func insertInto{{ relationshipName }}(_ value: {{ destinationEntityClassName }}, at idx: Int)
-
- @objc(removeObjectFrom{{ relationshipName }}AtIndex:)
- @NSManaged public func removeFrom{{ relationshipName }}(at idx: Int)
-
- @objc(insert{{ relationshipName }}:atIndexes:)
- @NSManaged public func insertInto{{ relationshipName }}(_ values: [{{ destinationEntityClassName }}], at indexes: NSIndexSet)
-
- @objc(remove{{ relationshipName }}AtIndexes:)
- @NSManaged public func removeFrom{{ relationshipName }}(at indexes: NSIndexSet)
-
- @objc(replaceObjectIn{{ relationshipName }}AtIndex:withObject:)
- @NSManaged public func replace{{ relationshipName }}(at idx: Int, with value: {{ destinationEntityClassName }})
-
- @objc(replace{{ relationshipName }}AtIndexes:with{{ relationshipName }}:)
- @NSManaged public func replace{{ relationshipName }}(at indexes: NSIndexSet, with values: [{{ destinationEntityClassName }}])
-
- {% endif %}
- @objc(add{{ relationshipName }}Object:)
- @NSManaged public func addTo{{ relationshipName }}(_ value: {{ destinationEntityClassName }})
-
- @objc(remove{{ relationshipName }}Object:)
- @NSManaged public func removeFrom{{ relationshipName }}(_ value: {{ destinationEntityClassName }})
-
- @objc(add{{ relationshipName }}:)
- @NSManaged public func addTo{{ relationshipName }}(_ values: {{ collectionClassName }})
-
- @objc(remove{{ relationshipName }}:)
- @NSManaged public func removeFrom{{ relationshipName }}(_ values: {{ collectionClassName }})
-}
-
-{% endfor %}
-{% if model.fetchRequests[entity.name].count > 0 %}
-// MARK: Fetch Requests
-
-extension {{ entityClassName }} {
- {% for fetchRequest in model.fetchRequests[entity.name] %}
- {% set resultTypeName %}{% filter removeNewlines:"leading" %}
- {% if fetchRequest.resultType == "Object" %}
- {{ entityClassName }}
- {% elif fetchRequest.resultType == "Object ID" %}
- NSManagedObjectID
- {% elif fetchRequest.resultType == "Dictionary" %}
- [String: Any]
- {% endif %}
- {% endfilter %}{% endset %}
- class func fetch{{ fetchRequest.name | upperFirstLetter }}({% filter removeNewlines:"leading" %}
- managedObjectContext: NSManagedObjectContext
- {% for variableName, variableType in fetchRequest.substitutionVariables %}
- , {{ variableName | lowerFirstWord }}: {{ variableType }}
- {% endfor %}
- {% endfilter %}) throws -> [{{ resultTypeName }}] {
- guard let persistentStoreCoordinator = managedObjectContext.persistentStoreCoordinator else {
- fatalError("Managed object context has no persistent store coordinator for getting fetch request templates")
- }
- let model = persistentStoreCoordinator.managedObjectModel
- let substitutionVariables: [String: Any] = [
- {% for variableName, variableType in fetchRequest.substitutionVariables %}
- "{{ variableName }}": {{ variableName | lowerFirstWord }}{{ "," if not forloop.last }}
- {% empty %}
- :
- {% endfor %}
- ]
-
- guard let fetchRequest = model.fetchRequestFromTemplate(withName: "{{ fetchRequest.name }}", substitutionVariables: substitutionVariables) else {
- fatalError("No fetch request template named '{{ fetchRequest.name }}' found.")
- }
-
- guard let result = try managedObjectContext.fetch(fetchRequest) as? [{{ resultTypeName }}] else {
- fatalError("Unable to cast fetch result to correct result type.")
- }
-
- return result
- }
-
- {% endfor %}
-}
-
-{% endif %}
-{% endif %}
-{% endfor %}
-{% endfor %}
-// swiftlint:enable identifier_name line_length type_body_length
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/flat-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/flat-swift4.stencil
deleted file mode 100644
index 09df24de..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/flat-swift4.stencil
+++ /dev/null
@@ -1,103 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if groups.count > 0 %}
-{% set enumName %}{{param.enumName|default:"Files"}}{% endset %}
-{% set useExt %}{% if param.useExtension|default:"true" %}true{% endif %}{% endset %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-{% set resourceType %}{{param.resourceTypeName|default:"File"}}{% endset %}
-import Foundation
-
-// swiftlint:disable superfluous_disable_command file_length line_length implicit_return
-
-// MARK: - Files
-
-{% macro groupBlock group %}
- {% for file in group.files %}
- {% call fileBlock file %}
- {% endfor %}
- {% for dir in group.directories %}
- {% call dirBlock dir %}
- {% endfor %}
-{% endmacro %}
-{% macro fileBlock file %}
- /// {% if file.path and param.preservePath %}{{file.path}}/{% endif %}{{file.name}}{% if file.ext %}.{{file.ext}}{% endif %}
- {% set identifier %}{{ file.name }}{% if useExt %}.{{ file.ext }}{% endif %}{% endset %}
- {{accessModifier}} static let {{identifier|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{resourceType}}(name: "{{file.name}}", ext: {% if file.ext %}"{{file.ext}}"{% else %}nil{% endif %}, relativePath: "{{file.path if param.preservePath}}", mimeType: "{{file.mimeType}}")
-{% endmacro %}
-{% macro dirBlock directory %}
- {% for file in directory.files %}
- {% call fileBlock file %}
- {% endfor %}
- {% for dir in directory.directories %}
- {% call dirBlock dir %}
- {% endfor %}
-{% endmacro %}
-// swiftlint:disable explicit_type_interface identifier_name
-// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces
-{{accessModifier}} enum {{enumName}} {
- {% if groups.count > 1 or param.forceFileNameEnum %}
- {% for group in groups %}
- {{accessModifier}} enum {{group.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call groupBlock group %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call groupBlock groups.first %}
- {% endif %}
-}
-// swiftlint:enable explicit_type_interface identifier_name
-// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces
-
-// MARK: - Implementation Details
-
-{{accessModifier}} struct {{resourceType}} {
- {{accessModifier}} let name: String
- {{accessModifier}} let ext: String?
- {{accessModifier}} let relativePath: String
- {{accessModifier}} let mimeType: String
-
- {{accessModifier}} var url: URL {
- return url(locale: nil)
- }
-
- {{accessModifier}} func url(locale: Locale?) -> URL {
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- let url = bundle.url(
- forResource: name,
- withExtension: ext,
- subdirectory: relativePath,
- localization: locale?.identifier
- )
- guard let result = url else {
- let file = name + (ext.flatMap { ".\($0)" } ?? "")
- fatalError("Could not locate file named \(file)")
- }
- return result
- }
-
- {{accessModifier}} var path: String {
- return path(locale: nil)
- }
-
- {{accessModifier}} func path(locale: Locale?) -> String {
- return url(locale: locale).path
- }
-}
-{% if not param.bundle %}
-
-// swiftlint:disable convenience_type explicit_type_interface
-private final class BundleToken {
- static let bundle: Bundle = {
- #if SWIFT_PACKAGE
- return Bundle.module
- #else
- return Bundle(for: BundleToken.self)
- #endif
- }()
-}
-// swiftlint:enable convenience_type explicit_type_interface
-{% endif %}
-{% else %}
-// No files found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/flat-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/flat-swift5.stencil
deleted file mode 100644
index 09df24de..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/flat-swift5.stencil
+++ /dev/null
@@ -1,103 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if groups.count > 0 %}
-{% set enumName %}{{param.enumName|default:"Files"}}{% endset %}
-{% set useExt %}{% if param.useExtension|default:"true" %}true{% endif %}{% endset %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-{% set resourceType %}{{param.resourceTypeName|default:"File"}}{% endset %}
-import Foundation
-
-// swiftlint:disable superfluous_disable_command file_length line_length implicit_return
-
-// MARK: - Files
-
-{% macro groupBlock group %}
- {% for file in group.files %}
- {% call fileBlock file %}
- {% endfor %}
- {% for dir in group.directories %}
- {% call dirBlock dir %}
- {% endfor %}
-{% endmacro %}
-{% macro fileBlock file %}
- /// {% if file.path and param.preservePath %}{{file.path}}/{% endif %}{{file.name}}{% if file.ext %}.{{file.ext}}{% endif %}
- {% set identifier %}{{ file.name }}{% if useExt %}.{{ file.ext }}{% endif %}{% endset %}
- {{accessModifier}} static let {{identifier|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{resourceType}}(name: "{{file.name}}", ext: {% if file.ext %}"{{file.ext}}"{% else %}nil{% endif %}, relativePath: "{{file.path if param.preservePath}}", mimeType: "{{file.mimeType}}")
-{% endmacro %}
-{% macro dirBlock directory %}
- {% for file in directory.files %}
- {% call fileBlock file %}
- {% endfor %}
- {% for dir in directory.directories %}
- {% call dirBlock dir %}
- {% endfor %}
-{% endmacro %}
-// swiftlint:disable explicit_type_interface identifier_name
-// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces
-{{accessModifier}} enum {{enumName}} {
- {% if groups.count > 1 or param.forceFileNameEnum %}
- {% for group in groups %}
- {{accessModifier}} enum {{group.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call groupBlock group %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call groupBlock groups.first %}
- {% endif %}
-}
-// swiftlint:enable explicit_type_interface identifier_name
-// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces
-
-// MARK: - Implementation Details
-
-{{accessModifier}} struct {{resourceType}} {
- {{accessModifier}} let name: String
- {{accessModifier}} let ext: String?
- {{accessModifier}} let relativePath: String
- {{accessModifier}} let mimeType: String
-
- {{accessModifier}} var url: URL {
- return url(locale: nil)
- }
-
- {{accessModifier}} func url(locale: Locale?) -> URL {
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- let url = bundle.url(
- forResource: name,
- withExtension: ext,
- subdirectory: relativePath,
- localization: locale?.identifier
- )
- guard let result = url else {
- let file = name + (ext.flatMap { ".\($0)" } ?? "")
- fatalError("Could not locate file named \(file)")
- }
- return result
- }
-
- {{accessModifier}} var path: String {
- return path(locale: nil)
- }
-
- {{accessModifier}} func path(locale: Locale?) -> String {
- return url(locale: locale).path
- }
-}
-{% if not param.bundle %}
-
-// swiftlint:disable convenience_type explicit_type_interface
-private final class BundleToken {
- static let bundle: Bundle = {
- #if SWIFT_PACKAGE
- return Bundle.module
- #else
- return Bundle(for: BundleToken.self)
- #endif
- }()
-}
-// swiftlint:enable convenience_type explicit_type_interface
-{% endif %}
-{% else %}
-// No files found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/structured-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/structured-swift4.stencil
deleted file mode 100644
index 6d6db960..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/structured-swift4.stencil
+++ /dev/null
@@ -1,107 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if groups.count > 0 %}
-{% set enumName %}{{param.enumName|default:"Files"}}{% endset %}
-{% set useExt %}{% if param.useExtension|default:"true" %}true{% endif %}{% endset %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-{% set resourceType %}{{param.resourceTypeName|default:"File"}}{% endset %}
-import Foundation
-
-// swiftlint:disable superfluous_disable_command file_length line_length implicit_return
-
-// MARK: - Files
-
-{% macro groupBlock group %}
- {% for file in group.files %}
- {% call fileBlock file %}
- {% endfor %}
- {% for dir in group.directories %}
- {% call dirBlock dir "" %}
- {% endfor %}
-{% endmacro %}
-{% macro fileBlock file %}
- /// {% if file.path and param.preservePath %}{{file.path}}/{% endif %}{{file.name}}{% if file.ext %}.{{file.ext}}{% endif %}
- {% set identifier %}{{ file.name }}{% if useExt %}.{{ file.ext }}{% endif %}{% endset %}
- {{accessModifier}} static let {{identifier|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{resourceType}}(name: "{{file.name}}", ext: {% if file.ext %}"{{file.ext}}"{% else %}nil{% endif %}, relativePath: "{{file.path if param.preservePath}}", mimeType: "{{file.mimeType}}")
-{% endmacro %}
-{% macro dirBlock directory parent %}
- {% set fullDir %}{{parent}}{{directory.name}}/{% endset %}
- /// {{ fullDir }}
- {{accessModifier}} enum {{directory.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% for file in directory.files %}
- {% filter indent:2 %}{% call fileBlock file %}{% endfilter %}
- {% endfor %}
- {% for dir in directory.directories %}
- {% filter indent:2 %}{% call dirBlock dir fullDir %}{% endfilter %}
- {% endfor %}
- }
-{% endmacro %}
-// swiftlint:disable explicit_type_interface identifier_name
-// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces
-{{accessModifier}} enum {{enumName}} {
- {% if groups.count > 1 or param.forceFileNameEnum %}
- {% for group in groups %}
- {{accessModifier}} enum {{group.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call groupBlock group %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call groupBlock groups.first %}
- {% endif %}
-}
-// swiftlint:enable explicit_type_interface identifier_name
-// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces
-
-// MARK: - Implementation Details
-
-{{accessModifier}} struct {{resourceType}} {
- {{accessModifier}} let name: String
- {{accessModifier}} let ext: String?
- {{accessModifier}} let relativePath: String
- {{accessModifier}} let mimeType: String
-
- {{accessModifier}} var url: URL {
- return url(locale: nil)
- }
-
- {{accessModifier}} func url(locale: Locale?) -> URL {
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- let url = bundle.url(
- forResource: name,
- withExtension: ext,
- subdirectory: relativePath,
- localization: locale?.identifier
- )
- guard let result = url else {
- let file = name + (ext.flatMap { ".\($0)" } ?? "")
- fatalError("Could not locate file named \(file)")
- }
- return result
- }
-
- {{accessModifier}} var path: String {
- return path(locale: nil)
- }
-
- {{accessModifier}} func path(locale: Locale?) -> String {
- return url(locale: locale).path
- }
-}
-{% if not param.bundle %}
-
-// swiftlint:disable convenience_type explicit_type_interface
-private final class BundleToken {
- static let bundle: Bundle = {
- #if SWIFT_PACKAGE
- return Bundle.module
- #else
- return Bundle(for: BundleToken.self)
- #endif
- }()
-}
-// swiftlint:enable convenience_type explicit_type_interface
-{% endif %}
-{% else %}
-// No files found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/structured-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/structured-swift5.stencil
deleted file mode 100644
index 6d6db960..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/structured-swift5.stencil
+++ /dev/null
@@ -1,107 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if groups.count > 0 %}
-{% set enumName %}{{param.enumName|default:"Files"}}{% endset %}
-{% set useExt %}{% if param.useExtension|default:"true" %}true{% endif %}{% endset %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-{% set resourceType %}{{param.resourceTypeName|default:"File"}}{% endset %}
-import Foundation
-
-// swiftlint:disable superfluous_disable_command file_length line_length implicit_return
-
-// MARK: - Files
-
-{% macro groupBlock group %}
- {% for file in group.files %}
- {% call fileBlock file %}
- {% endfor %}
- {% for dir in group.directories %}
- {% call dirBlock dir "" %}
- {% endfor %}
-{% endmacro %}
-{% macro fileBlock file %}
- /// {% if file.path and param.preservePath %}{{file.path}}/{% endif %}{{file.name}}{% if file.ext %}.{{file.ext}}{% endif %}
- {% set identifier %}{{ file.name }}{% if useExt %}.{{ file.ext }}{% endif %}{% endset %}
- {{accessModifier}} static let {{identifier|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{resourceType}}(name: "{{file.name}}", ext: {% if file.ext %}"{{file.ext}}"{% else %}nil{% endif %}, relativePath: "{{file.path if param.preservePath}}", mimeType: "{{file.mimeType}}")
-{% endmacro %}
-{% macro dirBlock directory parent %}
- {% set fullDir %}{{parent}}{{directory.name}}/{% endset %}
- /// {{ fullDir }}
- {{accessModifier}} enum {{directory.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% for file in directory.files %}
- {% filter indent:2 %}{% call fileBlock file %}{% endfilter %}
- {% endfor %}
- {% for dir in directory.directories %}
- {% filter indent:2 %}{% call dirBlock dir fullDir %}{% endfilter %}
- {% endfor %}
- }
-{% endmacro %}
-// swiftlint:disable explicit_type_interface identifier_name
-// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces
-{{accessModifier}} enum {{enumName}} {
- {% if groups.count > 1 or param.forceFileNameEnum %}
- {% for group in groups %}
- {{accessModifier}} enum {{group.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call groupBlock group %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call groupBlock groups.first %}
- {% endif %}
-}
-// swiftlint:enable explicit_type_interface identifier_name
-// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces
-
-// MARK: - Implementation Details
-
-{{accessModifier}} struct {{resourceType}} {
- {{accessModifier}} let name: String
- {{accessModifier}} let ext: String?
- {{accessModifier}} let relativePath: String
- {{accessModifier}} let mimeType: String
-
- {{accessModifier}} var url: URL {
- return url(locale: nil)
- }
-
- {{accessModifier}} func url(locale: Locale?) -> URL {
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- let url = bundle.url(
- forResource: name,
- withExtension: ext,
- subdirectory: relativePath,
- localization: locale?.identifier
- )
- guard let result = url else {
- let file = name + (ext.flatMap { ".\($0)" } ?? "")
- fatalError("Could not locate file named \(file)")
- }
- return result
- }
-
- {{accessModifier}} var path: String {
- return path(locale: nil)
- }
-
- {{accessModifier}} func path(locale: Locale?) -> String {
- return url(locale: locale).path
- }
-}
-{% if not param.bundle %}
-
-// swiftlint:disable convenience_type explicit_type_interface
-private final class BundleToken {
- static let bundle: Bundle = {
- #if SWIFT_PACKAGE
- return Bundle.module
- #else
- return Bundle(for: BundleToken.self)
- #endif
- }()
-}
-// swiftlint:enable convenience_type explicit_type_interface
-{% endif %}
-{% else %}
-// No files found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/fonts/swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/fonts/swift4.stencil
deleted file mode 100644
index 744d6a4c..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/fonts/swift4.stencil
+++ /dev/null
@@ -1,110 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if families %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-{% set fontType %}{{param.fontTypeName|default:"FontConvertible"}}{% endset %}
-#if os(macOS)
- import AppKit.NSFont
-#elseif os(iOS) || os(tvOS) || os(watchOS)
- import UIKit.UIFont
-#endif
-
-// Deprecated typealiases
-@available(*, deprecated, renamed: "{{fontType}}.Font", message: "This typealias will be removed in SwiftGen 7.0")
-{{accessModifier}} typealias {{param.fontAliasName|default:"Font"}} = {{fontType}}.Font
-
-// swiftlint:disable superfluous_disable_command
-// swiftlint:disable file_length
-// swiftlint:disable implicit_return
-
-// MARK: - Fonts
-
-// swiftlint:disable identifier_name line_length type_body_length
-{% macro transformPath path %}{% filter removeNewlines %}
- {% if param.preservePath %}
- {{path}}
- {% else %}
- {{path|basename}}
- {% endif %}
-{% endfilter %}{% endmacro %}
-{{accessModifier}} enum {{param.enumName|default:"FontFamily"}} {
- {% for family in families %}
- {{accessModifier}} enum {{family.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% for font in family.fonts %}
- {{accessModifier}} static let {{font.style|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{fontType}}(name: "{{font.name}}", family: "{{family.name}}", path: "{% call transformPath font.path %}")
- {% endfor %}
- {{accessModifier}} static let all: [{{fontType}}] = [{% for font in family.fonts %}{{font.style|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{{ ", " if not forloop.last }}{% endfor %}]
- }
- {% endfor %}
- {{accessModifier}} static let allCustomFonts: [{{fontType}}] = [{% for family in families %}{{family.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}.all{{ ", " if not forloop.last }}{% endfor %}].flatMap { $0 }
- {{accessModifier}} static func registerAllCustomFonts() {
- allCustomFonts.forEach { $0.register() }
- }
-}
-// swiftlint:enable identifier_name line_length type_body_length
-
-// MARK: - Implementation Details
-
-{{accessModifier}} struct {{fontType}} {
- {{accessModifier}} let name: String
- {{accessModifier}} let family: String
- {{accessModifier}} let path: String
-
- #if os(macOS)
- {{accessModifier}} typealias Font = NSFont
- #elseif os(iOS) || os(tvOS) || os(watchOS)
- {{accessModifier}} typealias Font = UIFont
- #endif
-
- {{accessModifier}} func font(size: CGFloat) -> Font! {
- return Font(font: self, size: size)
- }
-
- {{accessModifier}} func register() {
- // swiftlint:disable:next conditional_returns_on_newline
- guard let url = url else { return }
- CTFontManagerRegisterFontsForURL(url as CFURL, .process, nil)
- }
-
- fileprivate var url: URL? {
- {% if param.lookupFunction %}
- return {{param.lookupFunction}}(name, family, path)
- {% else %}
- return {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil)
- {% endif %}
- }
-}
-
-{{accessModifier}} extension {{fontType}}.Font {
- convenience init?(font: {{fontType}}, size: CGFloat) {
- #if os(iOS) || os(tvOS) || os(watchOS)
- if !UIFont.fontNames(forFamilyName: font.family).contains(font.name) {
- font.register()
- }
- #elseif os(macOS)
- if let url = font.url, CTFontManagerGetScopeForURL(url as CFURL) == .none {
- font.register()
- }
- #endif
-
- self.init(name: font.name, size: size)
- }
-}
-{% if not param.bundle and not param.lookupFunction %}
-
-// swiftlint:disable convenience_type
-private final class BundleToken {
- static let bundle: Bundle = {
- #if SWIFT_PACKAGE
- return Bundle.module
- #else
- return Bundle(for: BundleToken.self)
- #endif
- }()
-}
-// swiftlint:enable convenience_type
-{% endif %}
-{% else %}
-// No fonts found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/fonts/swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/fonts/swift5.stencil
deleted file mode 100644
index 5a268b58..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/fonts/swift5.stencil
+++ /dev/null
@@ -1,113 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if families %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-{% set fontType %}{{param.fontTypeName|default:"FontConvertible"}}{% endset %}
-#if os(macOS)
- import AppKit.NSFont
-#elseif os(iOS) || os(tvOS) || os(watchOS)
- import UIKit.UIFont
-#endif
-
-// Deprecated typealiases
-@available(*, deprecated, renamed: "{{fontType}}.Font", message: "This typealias will be removed in SwiftGen 7.0")
-{{accessModifier}} typealias {{param.fontAliasName|default:"Font"}} = {{fontType}}.Font
-
-// swiftlint:disable superfluous_disable_command
-// swiftlint:disable file_length
-
-// MARK: - Fonts
-
-// swiftlint:disable identifier_name line_length type_body_length
-{% macro transformPath path %}{% filter removeNewlines %}
- {% if param.preservePath %}
- {{path}}
- {% else %}
- {{path|basename}}
- {% endif %}
-{% endfilter %}{% endmacro %}
-{{accessModifier}} enum {{param.enumName|default:"FontFamily"}} {
- {% for family in families %}
- {{accessModifier}} enum {{family.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% for font in family.fonts %}
- {{accessModifier}} static let {{font.style|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{fontType}}(name: "{{font.name}}", family: "{{family.name}}", path: "{% call transformPath font.path %}")
- {% endfor %}
- {{accessModifier}} static let all: [{{fontType}}] = [{% for font in family.fonts %}{{font.style|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{{ ", " if not forloop.last }}{% endfor %}]
- }
- {% endfor %}
- {{accessModifier}} static let allCustomFonts: [{{fontType}}] = [{% for family in families %}{{family.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}.all{{ ", " if not forloop.last }}{% endfor %}].flatMap { $0 }
- {{accessModifier}} static func registerAllCustomFonts() {
- allCustomFonts.forEach { $0.register() }
- }
-}
-// swiftlint:enable identifier_name line_length type_body_length
-
-// MARK: - Implementation Details
-
-{{accessModifier}} struct {{fontType}} {
- {{accessModifier}} let name: String
- {{accessModifier}} let family: String
- {{accessModifier}} let path: String
-
- #if os(macOS)
- {{accessModifier}} typealias Font = NSFont
- #elseif os(iOS) || os(tvOS) || os(watchOS)
- {{accessModifier}} typealias Font = UIFont
- #endif
-
- {{accessModifier}} func font(size: CGFloat) -> Font {
- guard let font = Font(font: self, size: size) else {
- fatalError("Unable to initialize font '\(name)' (\(family))")
- }
- return font
- }
-
- {{accessModifier}} func register() {
- // swiftlint:disable:next conditional_returns_on_newline
- guard let url = url else { return }
- CTFontManagerRegisterFontsForURL(url as CFURL, .process, nil)
- }
-
- fileprivate var url: URL? {
- // swiftlint:disable:next implicit_return
- {% if param.lookupFunction %}
- return {{param.lookupFunction}}(name, family, path)
- {% else %}
- return {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil)
- {% endif %}
- }
-}
-
-{{accessModifier}} extension {{fontType}}.Font {
- convenience init?(font: {{fontType}}, size: CGFloat) {
- #if os(iOS) || os(tvOS) || os(watchOS)
- if !UIFont.fontNames(forFamilyName: font.family).contains(font.name) {
- font.register()
- }
- #elseif os(macOS)
- if let url = font.url, CTFontManagerGetScopeForURL(url as CFURL) == .none {
- font.register()
- }
- #endif
-
- self.init(name: font.name, size: size)
- }
-}
-{% if not param.bundle and not param.lookupFunction %}
-
-// swiftlint:disable convenience_type
-private final class BundleToken {
- static let bundle: Bundle = {
- #if SWIFT_PACKAGE
- return Bundle.module
- #else
- return Bundle(for: BundleToken.self)
- #endif
- }()
-}
-// swiftlint:enable convenience_type
-{% endif %}
-{% else %}
-// No fonts found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/scenes-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/scenes-swift4.stencil
deleted file mode 100644
index 9ad52fff..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/scenes-swift4.stencil
+++ /dev/null
@@ -1,157 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if platform and storyboards %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-{% set isAppKit %}{% if platform == "macOS" %}true{% endif %}{% endset %}
-{% set prefix %}{% if isAppKit %}NS{% else %}UI{% endif %}{% endset %}
-{% set controller %}{% if isAppKit %}Controller{% else %}ViewController{% endif %}{% endset %}
-// swiftlint:disable sorted_imports
-import Foundation
-{% for module in modules where module != env.PRODUCT_MODULE_NAME and module != param.module %}
-import {{module}}
-{% endfor %}
-
-// swiftlint:disable superfluous_disable_command
-// swiftlint:disable file_length implicit_return
-
-// MARK: - Storyboard Scenes
-
-// swiftlint:disable explicit_type_interface identifier_name line_length type_body_length type_name
-{% macro moduleName item %}{% filter removeNewlines %}
- {% if item.moduleIsPlaceholder %}
- {{ env.PRODUCT_MODULE_NAME|default:param.module }}
- {% else %}
- {{ item.module }}
- {% endif %}
-{% endfilter %}{% endmacro %}
-{% macro className item %}{% filter removeNewlines %}
- {% set module %}{% call moduleName item %}{% endset %}
- {% if module and ( not param.ignoreTargetModule or module != env.PRODUCT_MODULE_NAME and module != param.module ) %}
- {{module}}.
- {% endif %}
- {{item.type}}
-{% endfilter %}{% endmacro %}
-{{accessModifier}} enum {{param.enumName|default:"StoryboardScene"}} {
- {% for storyboard in storyboards %}
- {% set storyboardName %}{{storyboard.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}{% endset %}
- {{accessModifier}} enum {{storyboardName}}: StoryboardType {
- {{accessModifier}} static let storyboardName = "{{storyboard.name}}"
- {% if storyboard.initialScene %}
-
- {% set sceneClass %}{% call className storyboard.initialScene %}{% endset %}
- {{accessModifier}} static let initialScene = InitialSceneType<{{sceneClass}}>(storyboard: {{storyboardName}}.self)
- {% endif %}
- {% for scene in storyboard.scenes %}
-
- {% set sceneID %}{{scene.identifier|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %}
- {% set sceneClass %}{% call className scene %}{% endset %}
- {{accessModifier}} static let {{sceneID}} = SceneType<{{sceneClass}}>(storyboard: {{storyboardName}}.self, identifier: "{{scene.identifier}}")
- {% endfor %}
- }
- {% endfor %}
-}
-// swiftlint:enable explicit_type_interface identifier_name line_length type_body_length type_name
-
-// MARK: - Implementation Details
-
-{{accessModifier}} protocol StoryboardType {
- static var storyboardName: String { get }
-}
-
-{{accessModifier}} extension StoryboardType {
- static var storyboard: {{prefix}}Storyboard {
- let name = {% if isAppKit %}NSStoryboard.Name({% endif %}self.storyboardName{% if isAppKit %}){% endif %}
- {% if param.lookupFunction %}
- return {{param.lookupFunction}}(name)
- {% else %}
- return {{prefix}}Storyboard(name: name, bundle: {{param.bundle|default:"BundleToken.bundle"}})
- {% endif %}
- }
-}
-
-{{accessModifier}} struct SceneType {
- {{accessModifier}} let storyboard: StoryboardType.Type
- {{accessModifier}} let identifier: String
-
- {{accessModifier}} func instantiate() -> T {
- let identifier = {% if isAppKit %}NSStoryboard.SceneIdentifier({% endif %}self.identifier{% if isAppKit %}){% endif %}
- guard let controller = storyboard.storyboard.instantiate{{controller}}(withIdentifier: identifier) as? T else {
- fatalError("{{controller}} '\(identifier)' is not of the expected class \(T.self).")
- }
- return controller
- }
-
- {% if isAppKit %}
- @available(macOS 10.15, *)
- {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSViewController {
- return storyboard.storyboard.instantiate{{controller}}(identifier: identifier, creator: block)
- }
-
- @available(macOS 10.15, *)
- {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSWindowController {
- return storyboard.storyboard.instantiate{{controller}}(identifier: identifier, creator: block)
- }
- {% else %}
- @available(iOS 13.0, tvOS 13.0, *)
- {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T {
- return storyboard.storyboard.instantiate{{controller}}(identifier: identifier, creator: block)
- }
- {% endif %}
-}
-
-{{accessModifier}} struct InitialSceneType {
- {{accessModifier}} let storyboard: StoryboardType.Type
-
- {{accessModifier}} func instantiate() -> T {
- guard let controller = storyboard.storyboard.instantiateInitial{{controller}}() as? T else {
- fatalError("{{controller}} is not of the expected class \(T.self).")
- }
- return controller
- }
-
- {% if isAppKit %}
- @available(macOS 10.15, *)
- {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSViewController {
- guard let controller = storyboard.storyboard.instantiateInitial{{controller}}(creator: block) else {
- fatalError("Storyboard \(storyboard.storyboardName) does not have an initial scene.")
- }
- return controller
- }
-
- @available(macOS 10.15, *)
- {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSWindowController {
- guard let controller = storyboard.storyboard.instantiateInitial{{controller}}(creator: block) else {
- fatalError("Storyboard \(storyboard.storyboardName) does not have an initial scene.")
- }
- return controller
- }
- {% else %}
- @available(iOS 13.0, tvOS 13.0, *)
- {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T {
- guard let controller = storyboard.storyboard.instantiateInitial{{controller}}(creator: block) else {
- fatalError("Storyboard \(storyboard.storyboardName) does not have an initial scene.")
- }
- return controller
- }
- {% endif %}
-}
-{% if not param.bundle and not param.lookupFunction %}
-
-// swiftlint:disable convenience_type
-private final class BundleToken {
- static let bundle: Bundle = {
- #if SWIFT_PACKAGE
- return Bundle.module
- #else
- return Bundle(for: BundleToken.self)
- #endif
- }()
-}
-// swiftlint:enable convenience_type
-{% endif %}
-{% elif storyboards %}
-// Mixed AppKit and UIKit storyboard files found, please invoke swiftgen with these separately
-{% else %}
-// No storyboard found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/scenes-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/scenes-swift5.stencil
deleted file mode 100644
index 5f29f8ba..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/scenes-swift5.stencil
+++ /dev/null
@@ -1,159 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if platform and storyboards %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-{% set isAppKit %}{% if platform == "macOS" %}true{% endif %}{% endset %}
-{% set prefix %}{% if isAppKit %}NS{% else %}UI{% endif %}{% endset %}
-{% set controller %}{% if isAppKit %}Controller{% else %}ViewController{% endif %}{% endset %}
-// swiftlint:disable sorted_imports
-import Foundation
-{% for module in modules where module != env.PRODUCT_MODULE_NAME and module != param.module %}
-import {{module}}
-{% endfor %}
-
-// swiftlint:disable superfluous_disable_command
-// swiftlint:disable file_length implicit_return
-
-// MARK: - Storyboard Scenes
-
-// swiftlint:disable explicit_type_interface identifier_name line_length type_body_length type_name
-{% macro moduleName item %}{% filter removeNewlines %}
- {% if item.moduleIsPlaceholder %}
- {{ env.PRODUCT_MODULE_NAME|default:param.module }}
- {% else %}
- {{ item.module }}
- {% endif %}
-{% endfilter %}{% endmacro %}
-{% macro className item %}{% filter removeNewlines %}
- {% set module %}{% call moduleName item %}{% endset %}
- {% if module and ( not param.ignoreTargetModule or module != env.PRODUCT_MODULE_NAME and module != param.module ) %}
- {{module}}.
- {% endif %}
- {{item.type}}
-{% endfilter %}{% endmacro %}
-{{accessModifier}} enum {{param.enumName|default:"StoryboardScene"}} {
- {% for storyboard in storyboards %}
- {% set storyboardName %}{{storyboard.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}{% endset %}
- {{accessModifier}} enum {{storyboardName}}: StoryboardType {
- {{accessModifier}} static let storyboardName = "{{storyboard.name}}"
- {% if storyboard.initialScene %}
-
- {% set sceneClass %}{% call className storyboard.initialScene %}{% endset %}
- {{accessModifier}} static let initialScene = InitialSceneType<{{sceneClass}}>(storyboard: {{storyboardName}}.self)
- {% endif %}
- {% for scene in storyboard.scenes %}
-
- {% set sceneID %}{{scene.identifier|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %}
- {% set sceneClass %}{% call className scene %}{% endset %}
- {{accessModifier}} static let {{sceneID}} = SceneType<{{sceneClass}}>(storyboard: {{storyboardName}}.self, identifier: "{{scene.identifier}}")
- {% endfor %}
- }
- {% endfor %}
-}
-// swiftlint:enable explicit_type_interface identifier_name line_length type_body_length type_name
-
-// MARK: - Implementation Details
-
-{{accessModifier}} protocol StoryboardType {
- static var storyboardName: String { get }
-}
-
-{{accessModifier}} extension StoryboardType {
- static var storyboard: {{prefix}}Storyboard {
- let name = {% if isAppKit %}NSStoryboard.Name({% endif %}self.storyboardName{% if isAppKit %}){% endif %}
- {% if param.lookupFunction %}
- return {{param.lookupFunction}}(name)
- {% else %}
- return {{prefix}}Storyboard(name: name, bundle: {{param.bundle|default:"BundleToken.bundle"}})
- {% endif %}
- }
-}
-
-{{accessModifier}} struct SceneType {
- {{accessModifier}} let storyboard: StoryboardType.Type
- {{accessModifier}} let identifier: String
-
- {{accessModifier}} func instantiate() -> T {
- let identifier = {% if isAppKit %}NSStoryboard.SceneIdentifier({% endif %}self.identifier{% if isAppKit %}){% endif %}
- guard let controller = storyboard.storyboard.instantiate{{controller}}(withIdentifier: identifier) as? T else {
- fatalError("{{controller}} '\(identifier)' is not of the expected class \(T.self).")
- }
- return controller
- }
-
- {% if isAppKit %}
- @available(macOS 10.15, *)
- {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSViewController {
- let identifier = NSStoryboard.SceneIdentifier(self.identifier)
- return storyboard.storyboard.instantiate{{controller}}(identifier: identifier, creator: block)
- }
-
- @available(macOS 10.15, *)
- {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSWindowController {
- let identifier = NSStoryboard.SceneIdentifier(self.identifier)
- return storyboard.storyboard.instantiate{{controller}}(identifier: identifier, creator: block)
- }
- {% else %}
- @available(iOS 13.0, tvOS 13.0, *)
- {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T {
- return storyboard.storyboard.instantiate{{controller}}(identifier: identifier, creator: block)
- }
- {% endif %}
-}
-
-{{accessModifier}} struct InitialSceneType {
- {{accessModifier}} let storyboard: StoryboardType.Type
-
- {{accessModifier}} func instantiate() -> T {
- guard let controller = storyboard.storyboard.instantiateInitial{{controller}}() as? T else {
- fatalError("{{controller}} is not of the expected class \(T.self).")
- }
- return controller
- }
-
- {% if isAppKit %}
- @available(macOS 10.15, *)
- {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSViewController {
- guard let controller = storyboard.storyboard.instantiateInitial{{controller}}(creator: block) else {
- fatalError("Storyboard \(storyboard.storyboardName) does not have an initial scene.")
- }
- return controller
- }
-
- @available(macOS 10.15, *)
- {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSWindowController {
- guard let controller = storyboard.storyboard.instantiateInitial{{controller}}(creator: block) else {
- fatalError("Storyboard \(storyboard.storyboardName) does not have an initial scene.")
- }
- return controller
- }
- {% else %}
- @available(iOS 13.0, tvOS 13.0, *)
- {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T {
- guard let controller = storyboard.storyboard.instantiateInitial{{controller}}(creator: block) else {
- fatalError("Storyboard \(storyboard.storyboardName) does not have an initial scene.")
- }
- return controller
- }
- {% endif %}
-}
-{% if not param.bundle and not param.lookupFunction %}
-
-// swiftlint:disable convenience_type
-private final class BundleToken {
- static let bundle: Bundle = {
- #if SWIFT_PACKAGE
- return Bundle.module
- #else
- return Bundle(for: BundleToken.self)
- #endif
- }()
-}
-// swiftlint:enable convenience_type
-{% endif %}
-{% elif storyboards %}
-// Mixed AppKit and UIKit storyboard files found, please invoke swiftgen with these separately
-{% else %}
-// No storyboard found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/segues-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/segues-swift4.stencil
deleted file mode 100644
index 476d5464..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/segues-swift4.stencil
+++ /dev/null
@@ -1,60 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if platform and storyboards %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-{% set isAppKit %}{% if platform == "macOS" %}true{% endif %}{% endset %}
-// swiftlint:disable sorted_imports
-import Foundation
-{% for module in modules where module != env.PRODUCT_MODULE_NAME and module != param.module %}
-import {{module}}
-{% endfor %}
-
-// swiftlint:disable superfluous_disable_command
-// swiftlint:disable file_length
-
-// MARK: - Storyboard Segues
-
-// swiftlint:disable explicit_type_interface identifier_name line_length type_body_length type_name
-{{accessModifier}} enum {{param.enumName|default:"StoryboardSegue"}} {
- {% for storyboard in storyboards where storyboard.segues %}
- {{accessModifier}} enum {{storyboard.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}: String, SegueType {
- {% for segue in storyboard.segues %}
- {% set segueID %}{{segue.identifier|swiftIdentifier:"pretty"|lowerFirstWord}}{% endset %}
- case {{segueID|escapeReservedKeywords}}{% if segueID != segue.identifier %} = "{{segue.identifier}}"{% endif %}
- {% endfor %}
- }
- {% endfor %}
-}
-// swiftlint:enable explicit_type_interface identifier_name line_length type_body_length type_name
-
-// MARK: - Implementation Details
-
-{{accessModifier}} protocol SegueType: RawRepresentable {}
-
-{{accessModifier}} extension {% if isAppKit %}NSSeguePerforming{% else %}UIViewController{% endif %} {
- func perform(segue: S, sender: Any? = nil) where S.RawValue == String {
- let identifier = {% if isAppKit %}NSStoryboardSegue.Identifier({% endif %}segue.rawValue{% if isAppKit %}){% endif %}
- performSegue{% if isAppKit %}?{% endif %}(withIdentifier: identifier, sender: sender)
- }
-}
-
-{{accessModifier}} extension SegueType where RawValue == String {
- init?(_ segue: {% if isAppKit %}NS{% else %}UI{% endif %}StoryboardSegue) {
- {% if isAppKit %}
- #if swift(>=4.2)
- guard let identifier = segue.identifier else { return nil }
- #else
- guard let identifier = segue.identifier?.rawValue else { return nil }
- #endif
- {% else %}
- guard let identifier = segue.identifier else { return nil }
- {% endif %}
- self.init(rawValue: identifier)
- }
-}
-{% elif storyboards %}
-// Mixed AppKit and UIKit storyboard files found, please invoke swiftgen with these separately
-{% else %}
-// No storyboard found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/segues-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/segues-swift5.stencil
deleted file mode 100644
index 476d5464..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/segues-swift5.stencil
+++ /dev/null
@@ -1,60 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if platform and storyboards %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-{% set isAppKit %}{% if platform == "macOS" %}true{% endif %}{% endset %}
-// swiftlint:disable sorted_imports
-import Foundation
-{% for module in modules where module != env.PRODUCT_MODULE_NAME and module != param.module %}
-import {{module}}
-{% endfor %}
-
-// swiftlint:disable superfluous_disable_command
-// swiftlint:disable file_length
-
-// MARK: - Storyboard Segues
-
-// swiftlint:disable explicit_type_interface identifier_name line_length type_body_length type_name
-{{accessModifier}} enum {{param.enumName|default:"StoryboardSegue"}} {
- {% for storyboard in storyboards where storyboard.segues %}
- {{accessModifier}} enum {{storyboard.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}: String, SegueType {
- {% for segue in storyboard.segues %}
- {% set segueID %}{{segue.identifier|swiftIdentifier:"pretty"|lowerFirstWord}}{% endset %}
- case {{segueID|escapeReservedKeywords}}{% if segueID != segue.identifier %} = "{{segue.identifier}}"{% endif %}
- {% endfor %}
- }
- {% endfor %}
-}
-// swiftlint:enable explicit_type_interface identifier_name line_length type_body_length type_name
-
-// MARK: - Implementation Details
-
-{{accessModifier}} protocol SegueType: RawRepresentable {}
-
-{{accessModifier}} extension {% if isAppKit %}NSSeguePerforming{% else %}UIViewController{% endif %} {
- func perform(segue: S, sender: Any? = nil) where S.RawValue == String {
- let identifier = {% if isAppKit %}NSStoryboardSegue.Identifier({% endif %}segue.rawValue{% if isAppKit %}){% endif %}
- performSegue{% if isAppKit %}?{% endif %}(withIdentifier: identifier, sender: sender)
- }
-}
-
-{{accessModifier}} extension SegueType where RawValue == String {
- init?(_ segue: {% if isAppKit %}NS{% else %}UI{% endif %}StoryboardSegue) {
- {% if isAppKit %}
- #if swift(>=4.2)
- guard let identifier = segue.identifier else { return nil }
- #else
- guard let identifier = segue.identifier?.rawValue else { return nil }
- #endif
- {% else %}
- guard let identifier = segue.identifier else { return nil }
- {% endif %}
- self.init(rawValue: identifier)
- }
-}
-{% elif storyboards %}
-// Mixed AppKit and UIKit storyboard files found, please invoke swiftgen with these separately
-{% else %}
-// No storyboard found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/inline-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/inline-swift4.stencil
deleted file mode 100644
index 62ca48db..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/inline-swift4.stencil
+++ /dev/null
@@ -1,82 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if files %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-import Foundation
-
-// swiftlint:disable superfluous_disable_command
-// swiftlint:disable file_length
-
-// MARK: - JSON Files
-{% macro fileBlock file %}
- {% call documentBlock file file.document %}
-{% endmacro %}
-{% macro documentBlock file document %}
- {% set rootType %}{% call typeBlock document.metadata %}{% endset %}
- {% if document.metadata.type == "Array" %}
- {{accessModifier}} static let items: {{rootType}} = {% call valueBlock document.data document.metadata %}
- {% elif document.metadata.type == "Dictionary" %}
- {% for key,value in document.metadata.properties %}
- {{accessModifier}} {% call propertyBlock key value document.data %}
- {% endfor %}
- {% else %}
- {{accessModifier}} static let value: {{rootType}} = {% call valueBlock document.data document.metadata %}
- {% endif %}
-{% endmacro %}
-{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %}
- {% if metadata.type == "Array" %}
- [{% call typeBlock metadata.element %}]
- {% elif metadata.type == "Dictionary" %}
- [String: Any]
- {% elif metadata.type == "Optional" %}
- Any?
- {% else %}
- {{metadata.type}}
- {% endif %}
-{% endfilter %}{% endmacro %}
-{% macro propertyBlock key metadata data %}{% filter removeNewlines:"leading" %}
- {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %}
- {% set propertyType %}{% call typeBlock metadata %}{% endset %}
- static let {{propertyName}}: {{propertyType}} = {% call valueBlock data[key] metadata %}
-{% endfilter %}{% endmacro %}
-{% macro valueBlock value metadata %}{% filter removeNewlines:"leading" %}
- {% if metadata.type == "String" %}
- "{{ value }}"
- {% elif metadata.type == "Optional" %}
- nil
- {% elif metadata.type == "Array" and value %}
- [{% for value in value %}
- {% call valueBlock value metadata.element.items[forloop.counter0]|default:metadata.element %}
- {{ ", " if not forloop.last }}
- {% endfor %}]
- {% elif metadata.type == "Dictionary" %}
- [{% for key,value in value %}
- "{{key}}": {% call valueBlock value metadata.properties[key] %}
- {{ ", " if not forloop.last }}
- {% empty %}
- :
- {% endfor %}]
- {% elif metadata.type == "Bool" %}
- {% if value %}true{% else %}false{% endif %}
- {% else %}
- {{ value }}
- {% endif %}
-{% endfilter %}{% endmacro %}
-
-// swiftlint:disable identifier_name line_length number_separator type_body_length
-{{accessModifier}} enum {{param.enumName|default:"JSONFiles"}} {
- {% if files.count > 1 or param.forceFileNameEnum %}
- {% for file in files %}
- {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call fileBlock file %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call fileBlock files.first %}
- {% endif %}
-}
-// swiftlint:enable identifier_name line_length number_separator type_body_length
-{% else %}
-// No files found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/inline-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/inline-swift5.stencil
deleted file mode 100644
index 62ca48db..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/inline-swift5.stencil
+++ /dev/null
@@ -1,82 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if files %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-import Foundation
-
-// swiftlint:disable superfluous_disable_command
-// swiftlint:disable file_length
-
-// MARK: - JSON Files
-{% macro fileBlock file %}
- {% call documentBlock file file.document %}
-{% endmacro %}
-{% macro documentBlock file document %}
- {% set rootType %}{% call typeBlock document.metadata %}{% endset %}
- {% if document.metadata.type == "Array" %}
- {{accessModifier}} static let items: {{rootType}} = {% call valueBlock document.data document.metadata %}
- {% elif document.metadata.type == "Dictionary" %}
- {% for key,value in document.metadata.properties %}
- {{accessModifier}} {% call propertyBlock key value document.data %}
- {% endfor %}
- {% else %}
- {{accessModifier}} static let value: {{rootType}} = {% call valueBlock document.data document.metadata %}
- {% endif %}
-{% endmacro %}
-{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %}
- {% if metadata.type == "Array" %}
- [{% call typeBlock metadata.element %}]
- {% elif metadata.type == "Dictionary" %}
- [String: Any]
- {% elif metadata.type == "Optional" %}
- Any?
- {% else %}
- {{metadata.type}}
- {% endif %}
-{% endfilter %}{% endmacro %}
-{% macro propertyBlock key metadata data %}{% filter removeNewlines:"leading" %}
- {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %}
- {% set propertyType %}{% call typeBlock metadata %}{% endset %}
- static let {{propertyName}}: {{propertyType}} = {% call valueBlock data[key] metadata %}
-{% endfilter %}{% endmacro %}
-{% macro valueBlock value metadata %}{% filter removeNewlines:"leading" %}
- {% if metadata.type == "String" %}
- "{{ value }}"
- {% elif metadata.type == "Optional" %}
- nil
- {% elif metadata.type == "Array" and value %}
- [{% for value in value %}
- {% call valueBlock value metadata.element.items[forloop.counter0]|default:metadata.element %}
- {{ ", " if not forloop.last }}
- {% endfor %}]
- {% elif metadata.type == "Dictionary" %}
- [{% for key,value in value %}
- "{{key}}": {% call valueBlock value metadata.properties[key] %}
- {{ ", " if not forloop.last }}
- {% empty %}
- :
- {% endfor %}]
- {% elif metadata.type == "Bool" %}
- {% if value %}true{% else %}false{% endif %}
- {% else %}
- {{ value }}
- {% endif %}
-{% endfilter %}{% endmacro %}
-
-// swiftlint:disable identifier_name line_length number_separator type_body_length
-{{accessModifier}} enum {{param.enumName|default:"JSONFiles"}} {
- {% if files.count > 1 or param.forceFileNameEnum %}
- {% for file in files %}
- {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call fileBlock file %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call fileBlock files.first %}
- {% endif %}
-}
-// swiftlint:enable identifier_name line_length number_separator type_body_length
-{% else %}
-// No files found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/runtime-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/runtime-swift4.stencil
deleted file mode 100644
index c2466c7e..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/runtime-swift4.stencil
+++ /dev/null
@@ -1,112 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if files %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-import Foundation
-
-// swiftlint:disable superfluous_disable_command
-// swiftlint:disable file_length
-
-// MARK: - JSON Files
-{% macro fileBlock file %}
- {% call documentBlock file file.document %}
-{% endmacro %}
-{% macro documentBlock file document %}
- {% set rootType %}{% call typeBlock document.metadata %}{% endset %}
- {% if document.metadata.type == "Array" %}
- {{accessModifier}} static let items: {{rootType}} = objectFromJSON(at: "{% call transformPath file.path %}")
- {% elif document.metadata.type == "Dictionary" %}
- private static let _document = JSONDocument(path: "{% call transformPath file.path %}")
-
- {% for key,value in document.metadata.properties %}
- {{accessModifier}} {% call propertyBlock key value %}
- {% endfor %}
- {% else %}
- {{accessModifier}} static let value: {{rootType}} = objectFromJSON(at: "{% call transformPath file.path %}")
- {% endif %}
-{% endmacro %}
-{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %}
- {% if metadata.type == "Array" %}
- [{% call typeBlock metadata.element %}]
- {% elif metadata.type == "Dictionary" %}
- [String: Any]
- {% elif metadata.type == "Optional" %}
- Any?
- {% else %}
- {{metadata.type}}
- {% endif %}
-{% endfilter %}{% endmacro %}
-{% macro propertyBlock key metadata %}{% filter removeNewlines:"leading" %}
- {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %}
- {% set propertyType %}{% call typeBlock metadata %}{% endset %}
- static let {{propertyName}}: {{propertyType}} = _document["{{key}}"]
-{% endfilter %}{% endmacro %}
-{% macro transformPath path %}{% filter removeNewlines %}
- {% if param.preservePath %}
- {{path}}
- {% else %}
- {{path|basename}}
- {% endif %}
-{% endfilter %}{% endmacro %}
-
-// swiftlint:disable identifier_name line_length type_body_length
-{{accessModifier}} enum {{param.enumName|default:"JSONFiles"}} {
- {% if files.count > 1 or param.forceFileNameEnum %}
- {% for file in files %}
- {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call fileBlock file %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call fileBlock files.first %}
- {% endif %}
-}
-// swiftlint:enable identifier_name line_length type_body_length
-
-// MARK: - Implementation Details
-
-private func objectFromJSON(at path: String) -> T {
- {% if param.lookupFunction %}
- guard let url = {{param.lookupFunction}}(path),
- {% else %}
- guard let url = {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil),
- {% endif %}
- let json = try? JSONSerialization.jsonObject(with: Data(contentsOf: url), options: []),
- let result = json as? T else {
- fatalError("Unable to load JSON at path: \(path)")
- }
- return result
-}
-
-private struct JSONDocument {
- let data: [String: Any]
-
- init(path: String) {
- self.data = objectFromJSON(at: path)
- }
-
- subscript(key: String) -> T {
- guard let result = data[key] as? T else {
- fatalError("Property '\(key)' is not of type \(T.self)")
- }
- return result
- }
-}
-{% if not param.bundle and not param.lookupFunction %}
-
-// swiftlint:disable convenience_type
-private final class BundleToken {
- static let bundle: Bundle = {
- #if SWIFT_PACKAGE
- return Bundle.module
- #else
- return Bundle(for: BundleToken.self)
- #endif
- }()
-}
-// swiftlint:enable convenience_type
-{% endif %}
-{% else %}
-// No files found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/runtime-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/runtime-swift5.stencil
deleted file mode 100644
index c2466c7e..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/runtime-swift5.stencil
+++ /dev/null
@@ -1,112 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if files %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-import Foundation
-
-// swiftlint:disable superfluous_disable_command
-// swiftlint:disable file_length
-
-// MARK: - JSON Files
-{% macro fileBlock file %}
- {% call documentBlock file file.document %}
-{% endmacro %}
-{% macro documentBlock file document %}
- {% set rootType %}{% call typeBlock document.metadata %}{% endset %}
- {% if document.metadata.type == "Array" %}
- {{accessModifier}} static let items: {{rootType}} = objectFromJSON(at: "{% call transformPath file.path %}")
- {% elif document.metadata.type == "Dictionary" %}
- private static let _document = JSONDocument(path: "{% call transformPath file.path %}")
-
- {% for key,value in document.metadata.properties %}
- {{accessModifier}} {% call propertyBlock key value %}
- {% endfor %}
- {% else %}
- {{accessModifier}} static let value: {{rootType}} = objectFromJSON(at: "{% call transformPath file.path %}")
- {% endif %}
-{% endmacro %}
-{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %}
- {% if metadata.type == "Array" %}
- [{% call typeBlock metadata.element %}]
- {% elif metadata.type == "Dictionary" %}
- [String: Any]
- {% elif metadata.type == "Optional" %}
- Any?
- {% else %}
- {{metadata.type}}
- {% endif %}
-{% endfilter %}{% endmacro %}
-{% macro propertyBlock key metadata %}{% filter removeNewlines:"leading" %}
- {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %}
- {% set propertyType %}{% call typeBlock metadata %}{% endset %}
- static let {{propertyName}}: {{propertyType}} = _document["{{key}}"]
-{% endfilter %}{% endmacro %}
-{% macro transformPath path %}{% filter removeNewlines %}
- {% if param.preservePath %}
- {{path}}
- {% else %}
- {{path|basename}}
- {% endif %}
-{% endfilter %}{% endmacro %}
-
-// swiftlint:disable identifier_name line_length type_body_length
-{{accessModifier}} enum {{param.enumName|default:"JSONFiles"}} {
- {% if files.count > 1 or param.forceFileNameEnum %}
- {% for file in files %}
- {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call fileBlock file %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call fileBlock files.first %}
- {% endif %}
-}
-// swiftlint:enable identifier_name line_length type_body_length
-
-// MARK: - Implementation Details
-
-private func objectFromJSON(at path: String) -> T {
- {% if param.lookupFunction %}
- guard let url = {{param.lookupFunction}}(path),
- {% else %}
- guard let url = {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil),
- {% endif %}
- let json = try? JSONSerialization.jsonObject(with: Data(contentsOf: url), options: []),
- let result = json as? T else {
- fatalError("Unable to load JSON at path: \(path)")
- }
- return result
-}
-
-private struct JSONDocument {
- let data: [String: Any]
-
- init(path: String) {
- self.data = objectFromJSON(at: path)
- }
-
- subscript(key: String) -> T {
- guard let result = data[key] as? T else {
- fatalError("Property '\(key)' is not of type \(T.self)")
- }
- return result
- }
-}
-{% if not param.bundle and not param.lookupFunction %}
-
-// swiftlint:disable convenience_type
-private final class BundleToken {
- static let bundle: Bundle = {
- #if SWIFT_PACKAGE
- return Bundle.module
- #else
- return Bundle(for: BundleToken.self)
- #endif
- }()
-}
-// swiftlint:enable convenience_type
-{% endif %}
-{% else %}
-// No files found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/inline-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/inline-swift4.stencil
deleted file mode 100644
index c8e88310..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/inline-swift4.stencil
+++ /dev/null
@@ -1,82 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if files %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-import Foundation
-
-// swiftlint:disable superfluous_disable_command
-// swiftlint:disable file_length
-
-// MARK: - Plist Files
-{% macro fileBlock file %}
- {% call documentBlock file file.document %}
-{% endmacro %}
-{% macro documentBlock file document %}
- {% set rootType %}{% call typeBlock document.metadata %}{% endset %}
- {% if document.metadata.type == "Array" %}
- {{accessModifier}} static let items: {{rootType}} = {% call valueBlock document.data document.metadata %}
- {% elif document.metadata.type == "Dictionary" %}
- {% for key,value in document.metadata.properties %}
- {{accessModifier}} {% call propertyBlock key value document.data %}
- {% endfor %}
- {% else %}
- {{accessModifier}} static let value: {{rootType}} = {% call valueBlock document.data document.metadata %}
- {% endif %}
-{% endmacro %}
-{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %}
- {% if metadata.type == "Array" %}
- [{% call typeBlock metadata.element %}]
- {% elif metadata.type == "Dictionary" %}
- [String: Any]
- {% else %}
- {{metadata.type}}
- {% endif %}
-{% endfilter %}{% endmacro %}
-{% macro propertyBlock key metadata data %}{% filter removeNewlines:"leading" %}
- {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %}
- {% set propertyType %}{% call typeBlock metadata %}{% endset %}
- static let {{propertyName}}: {{propertyType}} = {% call valueBlock data[key] metadata %}
-{% endfilter %}{% endmacro %}
-{% macro valueBlock value metadata %}{% filter removeNewlines:"leading" %}
- {% if metadata.type == "String" %}
- "{{ value }}"
- {% elif metadata.type == "Date" %}
- Date(timeIntervalSinceReferenceDate: {{ value.timeIntervalSinceReferenceDate }})
- {% elif metadata.type == "Optional" %}
- nil
- {% elif metadata.type == "Array" and value %}
- [{% for value in value %}
- {% call valueBlock value metadata.element.items[forloop.counter0]|default:metadata.element %}
- {{ ", " if not forloop.last }}
- {% endfor %}]
- {% elif metadata.type == "Dictionary" %}
- [{% for key,value in value %}
- "{{key}}": {% call valueBlock value metadata.properties[key] %}
- {{ ", " if not forloop.last }}
- {% empty %}
- :
- {% endfor %}]
- {% elif metadata.type == "Bool" %}
- {% if value %}true{% else %}false{% endif %}
- {% else %}
- {{ value }}
- {% endif %}
-{% endfilter %}{% endmacro %}
-
-// swiftlint:disable identifier_name line_length number_separator type_body_length
-{{accessModifier}} enum {{param.enumName|default:"PlistFiles"}} {
- {% if files.count > 1 or param.forceFileNameEnum %}
- {% for file in files %}
- {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call fileBlock file %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call fileBlock files.first %}
- {% endif %}
-}
-// swiftlint:enable identifier_name line_length number_separator type_body_length
-{% else %}
-// No files found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/inline-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/inline-swift5.stencil
deleted file mode 100644
index c8e88310..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/inline-swift5.stencil
+++ /dev/null
@@ -1,82 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if files %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-import Foundation
-
-// swiftlint:disable superfluous_disable_command
-// swiftlint:disable file_length
-
-// MARK: - Plist Files
-{% macro fileBlock file %}
- {% call documentBlock file file.document %}
-{% endmacro %}
-{% macro documentBlock file document %}
- {% set rootType %}{% call typeBlock document.metadata %}{% endset %}
- {% if document.metadata.type == "Array" %}
- {{accessModifier}} static let items: {{rootType}} = {% call valueBlock document.data document.metadata %}
- {% elif document.metadata.type == "Dictionary" %}
- {% for key,value in document.metadata.properties %}
- {{accessModifier}} {% call propertyBlock key value document.data %}
- {% endfor %}
- {% else %}
- {{accessModifier}} static let value: {{rootType}} = {% call valueBlock document.data document.metadata %}
- {% endif %}
-{% endmacro %}
-{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %}
- {% if metadata.type == "Array" %}
- [{% call typeBlock metadata.element %}]
- {% elif metadata.type == "Dictionary" %}
- [String: Any]
- {% else %}
- {{metadata.type}}
- {% endif %}
-{% endfilter %}{% endmacro %}
-{% macro propertyBlock key metadata data %}{% filter removeNewlines:"leading" %}
- {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %}
- {% set propertyType %}{% call typeBlock metadata %}{% endset %}
- static let {{propertyName}}: {{propertyType}} = {% call valueBlock data[key] metadata %}
-{% endfilter %}{% endmacro %}
-{% macro valueBlock value metadata %}{% filter removeNewlines:"leading" %}
- {% if metadata.type == "String" %}
- "{{ value }}"
- {% elif metadata.type == "Date" %}
- Date(timeIntervalSinceReferenceDate: {{ value.timeIntervalSinceReferenceDate }})
- {% elif metadata.type == "Optional" %}
- nil
- {% elif metadata.type == "Array" and value %}
- [{% for value in value %}
- {% call valueBlock value metadata.element.items[forloop.counter0]|default:metadata.element %}
- {{ ", " if not forloop.last }}
- {% endfor %}]
- {% elif metadata.type == "Dictionary" %}
- [{% for key,value in value %}
- "{{key}}": {% call valueBlock value metadata.properties[key] %}
- {{ ", " if not forloop.last }}
- {% empty %}
- :
- {% endfor %}]
- {% elif metadata.type == "Bool" %}
- {% if value %}true{% else %}false{% endif %}
- {% else %}
- {{ value }}
- {% endif %}
-{% endfilter %}{% endmacro %}
-
-// swiftlint:disable identifier_name line_length number_separator type_body_length
-{{accessModifier}} enum {{param.enumName|default:"PlistFiles"}} {
- {% if files.count > 1 or param.forceFileNameEnum %}
- {% for file in files %}
- {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call fileBlock file %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call fileBlock files.first %}
- {% endif %}
-}
-// swiftlint:enable identifier_name line_length number_separator type_body_length
-{% else %}
-// No files found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/runtime-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/runtime-swift4.stencil
deleted file mode 100644
index a498a8f2..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/runtime-swift4.stencil
+++ /dev/null
@@ -1,117 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if files %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-import Foundation
-
-// swiftlint:disable superfluous_disable_command
-// swiftlint:disable file_length
-
-// MARK: - Plist Files
-{% macro fileBlock file %}
- {% call documentBlock file file.document %}
-{% endmacro %}
-{% macro documentBlock file document %}
- {% set rootType %}{% call typeBlock document.metadata %}{% endset %}
- {% if document.metadata.type == "Array" %}
- {{accessModifier}} static let items: {{rootType}} = arrayFromPlist(at: "{% call transformPath file.path %}")
- {% elif document.metadata.type == "Dictionary" %}
- private static let _document = PlistDocument(path: "{% call transformPath file.path %}")
-
- {% for key,value in document.metadata.properties %}
- {{accessModifier}} {% call propertyBlock key value %}
- {% endfor %}
- {% else %}
- // Unsupported root type `{{rootType}}`
- {% endif %}
-{% endmacro %}
-{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %}
- {% if metadata.type == "Array" %}
- [{% call typeBlock metadata.element %}]
- {% elif metadata.type == "Dictionary" %}
- [String: Any]
- {% else %}
- {{metadata.type}}
- {% endif %}
-{% endfilter %}{% endmacro %}
-{% macro propertyBlock key metadata %}{% filter removeNewlines:"leading" %}
- {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %}
- {% set propertyType %}{% call typeBlock metadata %}{% endset %}
- static let {{propertyName}}: {{propertyType}} = _document["{{key}}"]
-{% endfilter %}{% endmacro %}
-{% macro transformPath path %}{% filter removeNewlines %}
- {% if param.preservePath %}
- {{path}}
- {% else %}
- {{path|basename}}
- {% endif %}
-{% endfilter %}{% endmacro %}
-
-// swiftlint:disable identifier_name line_length type_body_length
-{{accessModifier}} enum {{param.enumName|default:"PlistFiles"}} {
- {% if files.count > 1 or param.forceFileNameEnum %}
- {% for file in files %}
- {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call fileBlock file %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call fileBlock files.first %}
- {% endif %}
-}
-// swiftlint:enable identifier_name line_length type_body_length
-
-// MARK: - Implementation Details
-
-private func arrayFromPlist(at path: String) -> [T] {
- {% if param.lookupFunction %}
- guard let url = {{param.lookupFunction}}(path),
- {% else %}
- guard let url = {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil),
- {% endif %}
- let data = NSArray(contentsOf: url) as? [T] else {
- fatalError("Unable to load PLIST at path: \(path)")
- }
- return data
-}
-
-private struct PlistDocument {
- let data: [String: Any]
-
- init(path: String) {
- {% if param.lookupFunction %}
- guard let url = {{param.lookupFunction}}(path),
- {% else %}
- guard let url = {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil),
- {% endif %}
- let data = NSDictionary(contentsOf: url) as? [String: Any] else {
- fatalError("Unable to load PLIST at path: \(path)")
- }
- self.data = data
- }
-
- subscript(key: String) -> T {
- guard let result = data[key] as? T else {
- fatalError("Property '\(key)' is not of type \(T.self)")
- }
- return result
- }
-}
-{% if not param.bundle and not param.lookupFunction %}
-
-// swiftlint:disable convenience_type
-private final class BundleToken {
- static let bundle: Bundle = {
- #if SWIFT_PACKAGE
- return Bundle.module
- #else
- return Bundle(for: BundleToken.self)
- #endif
- }()
-}
-// swiftlint:enable convenience_type
-{% endif %}
-{% else %}
-// No files found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/runtime-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/runtime-swift5.stencil
deleted file mode 100644
index a498a8f2..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/runtime-swift5.stencil
+++ /dev/null
@@ -1,117 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if files %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-import Foundation
-
-// swiftlint:disable superfluous_disable_command
-// swiftlint:disable file_length
-
-// MARK: - Plist Files
-{% macro fileBlock file %}
- {% call documentBlock file file.document %}
-{% endmacro %}
-{% macro documentBlock file document %}
- {% set rootType %}{% call typeBlock document.metadata %}{% endset %}
- {% if document.metadata.type == "Array" %}
- {{accessModifier}} static let items: {{rootType}} = arrayFromPlist(at: "{% call transformPath file.path %}")
- {% elif document.metadata.type == "Dictionary" %}
- private static let _document = PlistDocument(path: "{% call transformPath file.path %}")
-
- {% for key,value in document.metadata.properties %}
- {{accessModifier}} {% call propertyBlock key value %}
- {% endfor %}
- {% else %}
- // Unsupported root type `{{rootType}}`
- {% endif %}
-{% endmacro %}
-{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %}
- {% if metadata.type == "Array" %}
- [{% call typeBlock metadata.element %}]
- {% elif metadata.type == "Dictionary" %}
- [String: Any]
- {% else %}
- {{metadata.type}}
- {% endif %}
-{% endfilter %}{% endmacro %}
-{% macro propertyBlock key metadata %}{% filter removeNewlines:"leading" %}
- {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %}
- {% set propertyType %}{% call typeBlock metadata %}{% endset %}
- static let {{propertyName}}: {{propertyType}} = _document["{{key}}"]
-{% endfilter %}{% endmacro %}
-{% macro transformPath path %}{% filter removeNewlines %}
- {% if param.preservePath %}
- {{path}}
- {% else %}
- {{path|basename}}
- {% endif %}
-{% endfilter %}{% endmacro %}
-
-// swiftlint:disable identifier_name line_length type_body_length
-{{accessModifier}} enum {{param.enumName|default:"PlistFiles"}} {
- {% if files.count > 1 or param.forceFileNameEnum %}
- {% for file in files %}
- {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call fileBlock file %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call fileBlock files.first %}
- {% endif %}
-}
-// swiftlint:enable identifier_name line_length type_body_length
-
-// MARK: - Implementation Details
-
-private func arrayFromPlist(at path: String) -> [T] {
- {% if param.lookupFunction %}
- guard let url = {{param.lookupFunction}}(path),
- {% else %}
- guard let url = {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil),
- {% endif %}
- let data = NSArray(contentsOf: url) as? [T] else {
- fatalError("Unable to load PLIST at path: \(path)")
- }
- return data
-}
-
-private struct PlistDocument {
- let data: [String: Any]
-
- init(path: String) {
- {% if param.lookupFunction %}
- guard let url = {{param.lookupFunction}}(path),
- {% else %}
- guard let url = {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil),
- {% endif %}
- let data = NSDictionary(contentsOf: url) as? [String: Any] else {
- fatalError("Unable to load PLIST at path: \(path)")
- }
- self.data = data
- }
-
- subscript(key: String) -> T {
- guard let result = data[key] as? T else {
- fatalError("Property '\(key)' is not of type \(T.self)")
- }
- return result
- }
-}
-{% if not param.bundle and not param.lookupFunction %}
-
-// swiftlint:disable convenience_type
-private final class BundleToken {
- static let bundle: Bundle = {
- #if SWIFT_PACKAGE
- return Bundle.module
- #else
- return Bundle(for: BundleToken.self)
- #endif
- }()
-}
-// swiftlint:enable convenience_type
-{% endif %}
-{% else %}
-// No files found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/flat-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/flat-swift4.stencil
deleted file mode 100644
index 5bb4a128..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/flat-swift4.stencil
+++ /dev/null
@@ -1,99 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if tables.count > 0 %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-import Foundation
-
-// swiftlint:disable superfluous_disable_command file_length implicit_return
-
-// MARK: - Strings
-
-{% macro parametersBlock types %}{% filter removeNewlines:"leading" %}
- {% for type in types %}
- {% if type == "String" %}
- _ p{{forloop.counter}}: Any
- {% else %}
- _ p{{forloop.counter}}: {{type}}
- {% endif %}
- {{ ", " if not forloop.last }}
- {% endfor %}
-{% endfilter %}{% endmacro %}
-{% macro argumentsBlock types %}{% filter removeNewlines:"leading" %}
- {% for type in types %}
- {% if type == "String" %}
- String(describing: p{{forloop.counter}})
- {% elif type == "UnsafeRawPointer" %}
- Int(bitPattern: p{{forloop.counter}})
- {% else %}
- p{{forloop.counter}}
- {% endif %}
- {{ ", " if not forloop.last }}
- {% endfor %}
-{% endfilter %}{% endmacro %}
-{% macro recursiveBlock table item %}
- {% for string in item.strings %}
- {% if not param.noComments %}
- {% for line in string.translation|split:"\n" %}
- /// {{line}}
- {% endfor %}
- {% endif %}
- {% if string.types %}
- {{accessModifier}} static func {{string.key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}({% call parametersBlock string.types %}) -> String {
- return {{enumName}}.tr("{{table}}", "{{string.key}}", {% call argumentsBlock string.types %})
- }
- {% elif param.lookupFunction %}
- {# custom localization function is mostly used for in-app lang selection, so we want the loc to be recomputed at each call for those (hence the computed var) #}
- {{accessModifier}} static var {{string.key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}: String { return {{enumName}}.tr("{{table}}", "{{string.key}}") }
- {% else %}
- {{accessModifier}} static let {{string.key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{enumName}}.tr("{{table}}", "{{string.key}}")
- {% endif %}
- {% endfor %}
- {% for child in item.children %}
- {% call recursiveBlock table child %}
- {% endfor %}
-{% endmacro %}
-// swiftlint:disable function_parameter_count identifier_name line_length type_body_length
-{% set enumName %}{{param.enumName|default:"L10n"}}{% endset %}
-{{accessModifier}} enum {{enumName}} {
- {% if tables.count > 1 or param.forceFileNameEnum %}
- {% for table in tables %}
- {{accessModifier}} enum {{table.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call recursiveBlock table.name table.levels %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call recursiveBlock tables.first.name tables.first.levels %}
- {% endif %}
-}
-// swiftlint:enable function_parameter_count identifier_name line_length type_body_length
-
-// MARK: - Implementation Details
-
-extension {{enumName}} {
- private static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String {
- {% if param.lookupFunction %}
- let format = {{ param.lookupFunction }}(key, table)
- {% else %}
- let format = {{param.bundle|default:"BundleToken.bundle"}}.localizedString(forKey: key, value: nil, table: table)
- {% endif %}
- return String(format: format, locale: Locale.current, arguments: args)
- }
-}
-{% if not param.bundle and not param.lookupFunction %}
-
-// swiftlint:disable convenience_type
-private final class BundleToken {
- static let bundle: Bundle = {
- #if SWIFT_PACKAGE
- return Bundle.module
- #else
- return Bundle(for: BundleToken.self)
- #endif
- }()
-}
-// swiftlint:enable convenience_type
-{% endif %}
-{% else %}
-// No string found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/flat-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/flat-swift5.stencil
deleted file mode 100644
index 5bb4a128..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/flat-swift5.stencil
+++ /dev/null
@@ -1,99 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if tables.count > 0 %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-import Foundation
-
-// swiftlint:disable superfluous_disable_command file_length implicit_return
-
-// MARK: - Strings
-
-{% macro parametersBlock types %}{% filter removeNewlines:"leading" %}
- {% for type in types %}
- {% if type == "String" %}
- _ p{{forloop.counter}}: Any
- {% else %}
- _ p{{forloop.counter}}: {{type}}
- {% endif %}
- {{ ", " if not forloop.last }}
- {% endfor %}
-{% endfilter %}{% endmacro %}
-{% macro argumentsBlock types %}{% filter removeNewlines:"leading" %}
- {% for type in types %}
- {% if type == "String" %}
- String(describing: p{{forloop.counter}})
- {% elif type == "UnsafeRawPointer" %}
- Int(bitPattern: p{{forloop.counter}})
- {% else %}
- p{{forloop.counter}}
- {% endif %}
- {{ ", " if not forloop.last }}
- {% endfor %}
-{% endfilter %}{% endmacro %}
-{% macro recursiveBlock table item %}
- {% for string in item.strings %}
- {% if not param.noComments %}
- {% for line in string.translation|split:"\n" %}
- /// {{line}}
- {% endfor %}
- {% endif %}
- {% if string.types %}
- {{accessModifier}} static func {{string.key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}({% call parametersBlock string.types %}) -> String {
- return {{enumName}}.tr("{{table}}", "{{string.key}}", {% call argumentsBlock string.types %})
- }
- {% elif param.lookupFunction %}
- {# custom localization function is mostly used for in-app lang selection, so we want the loc to be recomputed at each call for those (hence the computed var) #}
- {{accessModifier}} static var {{string.key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}: String { return {{enumName}}.tr("{{table}}", "{{string.key}}") }
- {% else %}
- {{accessModifier}} static let {{string.key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{enumName}}.tr("{{table}}", "{{string.key}}")
- {% endif %}
- {% endfor %}
- {% for child in item.children %}
- {% call recursiveBlock table child %}
- {% endfor %}
-{% endmacro %}
-// swiftlint:disable function_parameter_count identifier_name line_length type_body_length
-{% set enumName %}{{param.enumName|default:"L10n"}}{% endset %}
-{{accessModifier}} enum {{enumName}} {
- {% if tables.count > 1 or param.forceFileNameEnum %}
- {% for table in tables %}
- {{accessModifier}} enum {{table.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call recursiveBlock table.name table.levels %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call recursiveBlock tables.first.name tables.first.levels %}
- {% endif %}
-}
-// swiftlint:enable function_parameter_count identifier_name line_length type_body_length
-
-// MARK: - Implementation Details
-
-extension {{enumName}} {
- private static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String {
- {% if param.lookupFunction %}
- let format = {{ param.lookupFunction }}(key, table)
- {% else %}
- let format = {{param.bundle|default:"BundleToken.bundle"}}.localizedString(forKey: key, value: nil, table: table)
- {% endif %}
- return String(format: format, locale: Locale.current, arguments: args)
- }
-}
-{% if not param.bundle and not param.lookupFunction %}
-
-// swiftlint:disable convenience_type
-private final class BundleToken {
- static let bundle: Bundle = {
- #if SWIFT_PACKAGE
- return Bundle.module
- #else
- return Bundle(for: BundleToken.self)
- #endif
- }()
-}
-// swiftlint:enable convenience_type
-{% endif %}
-{% else %}
-// No string found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/objc-h.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/objc-h.stencil
deleted file mode 100644
index 7c502917..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/objc-h.stencil
+++ /dev/null
@@ -1,68 +0,0 @@
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if tables.count > 0 %}
-#import
-
-NS_ASSUME_NONNULL_BEGIN
-
-{% macro parametersBlock types %}{% filter removeNewlines:"leading" %}
- {% for type in types %}
- ({% call paramTranslate type %})p{{ forloop.counter }}{{ " :" if not forloop.last }}
- {% endfor %}
-{% endfilter %}{% endmacro %}
-{% macro argumentsBlock types %}{% filter removeNewlines:"leading" %}
- {% for type in types %}
- p{{forloop.counter}}{{ ", " if not forloop.last }}
- {% endfor %}
-{% endfilter %}{% endmacro %}
-{% macro paramTranslate swiftType %}
- {% if swiftType == "Any" %}
- id
- {% elif swiftType == "CChar" %}
- char
- {% elif swiftType == "Float" %}
- float
- {% elif swiftType == "Int" %}
- NSInteger
- {% elif swiftType == "String" %}
- id
- {% elif swiftType == "UnsafePointer" %}
- char*
- {% elif swiftType == "UnsafeRawPointer" %}
- void*
- {% else %}
- objc-h.stencil is missing '{{swiftType}}'
- {% endif %}
-{% endmacro %}
-{% macro emitOneMethod table item %}
-{% for string in item.strings %}
-{% if not param.noComments %}
-{% for line in string.translation|split:"\n" %}
-/// {{line}}
-{% endfor %}
-{% endif %}
-{% if string.types %}
- {% if string.types.count == 1 %}
-+ (NSString*){{string.key|swiftIdentifier:"pretty"|lowerFirstWord}}WithValue:{% call parametersBlock string.types %};
- {% else %}
-+ (NSString*){{string.key|swiftIdentifier:"pretty"|lowerFirstWord}}WithValues:{% call parametersBlock string.types %};
- {% endif %}
-{% else %}
-+ (NSString*){{string.key|swiftIdentifier:"pretty"|lowerFirstWord}};
-{% endif %}
-{% endfor %}
-{% for child in item.children %}
-{% call emitOneMethod table child %}
-{% endfor %}
-{% endmacro %}
-{% for table in tables %}
-@interface {{ table.name }} : NSObject
- {% call emitOneMethod table.name table.levels %}
-@end
-
-{% endfor %}
-
-NS_ASSUME_NONNULL_END
-{% else %}
-// No strings found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/objc-m.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/objc-m.stencil
deleted file mode 100644
index 1f154b59..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/objc-m.stencil
+++ /dev/null
@@ -1,90 +0,0 @@
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if tables.count > 0 %}
-#import "{{ param.headerName|default:"Localizable.h" }}"
-{% if not param.bundle %}
-
-@interface BundleToken : NSObject
-@end
-
-@implementation BundleToken
-@end
-{% endif %}
-
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wformat-security"
-
-static NSString* tr(NSString *tableName, NSString *key, ...) {
- NSBundle *bundle = {{param.bundle|default:"[NSBundle bundleForClass:BundleToken.class]"}};
- NSString *format = [bundle localizedStringForKey:key value:nil table:tableName];
- NSLocale *locale = [NSLocale currentLocale];
-
- va_list args;
- va_start(args, key);
- NSString *result = [[NSString alloc] initWithFormat:format locale:locale arguments:args];
- va_end(args);
-
- return result;
-};
-#pragma clang diagnostic pop
-
-{% macro parametersBlock types %}{% filter removeNewlines:"leading" %}
- {% for type in types %}
- ({% call paramTranslate type %})p{{ forloop.counter }}{{ " :" if not forloop.last }}
- {% endfor %}
-{% endfilter %}{% endmacro %}
-{% macro argumentsBlock types %}{% filter removeNewlines:"leading" %}
- {% for type in types %}
- p{{forloop.counter}}{{ ", " if not forloop.last }}
- {% endfor %}
-{% endfilter %}{% endmacro %}
-{% macro paramTranslate swiftType %}
- {% if swiftType == "Any" %}
- id
- {% elif swiftType == "CChar" %}
- char
- {% elif swiftType == "Float" %}
- float
- {% elif swiftType == "Int" %}
- NSInteger
- {% elif swiftType == "String" %}
- id
- {% elif swiftType == "UnsafePointer" %}
- char*
- {% elif swiftType == "UnsafeRawPointer" %}
- void*
- {% else %}
- objc-m.stencil is missing '{{swiftType}}'
- {% endif %}
-{% endmacro %}
-{% macro tableContents table item %}
- {% for string in item.strings %}
- {% if string.types %}
- {% if string.types.count == 1 %}
-+ (NSString*){{string.key|swiftIdentifier:"pretty"|lowerFirstWord}}WithValue:{% call parametersBlock string.types %}
- {% else %}
-+ (NSString*){{string.key|swiftIdentifier:"pretty"|lowerFirstWord}}WithValues:{% call parametersBlock string.types %}
- {% endif %}
-{
- return tr(@"{{table}}", @"{{string.key}}", {% call argumentsBlock string.types %});
-}
-{% else %}
-+ (NSString*){{string.key|swiftIdentifier:"pretty"|lowerFirstWord}} {
- return tr(@"{{table}}", @"{{string.key}}");
-}
- {% endif %}
- {% endfor %}
- {% for child in item.children %}
- {% call tableContents table child %}
- {% endfor %}
-{% endmacro %}
-{% for table in tables %}
- {% set tableName %}{{table.name|default:"Localized"}}{% endset %}
-@implementation {{ tableName }} : NSObject
- {% call tableContents table.name table.levels %}
-@end
-
-{% endfor %}
-{% else %}
-// No strings found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/structured-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/structured-swift4.stencil
deleted file mode 100644
index f809bc24..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/structured-swift4.stencil
+++ /dev/null
@@ -1,104 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if tables.count > 0 %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-import Foundation
-
-// swiftlint:disable superfluous_disable_command file_length implicit_return
-
-// MARK: - Strings
-
-{% macro parametersBlock types %}{% filter removeNewlines:"leading" %}
- {% for type in types %}
- {% if type == "String" %}
- _ p{{forloop.counter}}: Any
- {% else %}
- _ p{{forloop.counter}}: {{type}}
- {% endif %}
- {{ ", " if not forloop.last }}
- {% endfor %}
-{% endfilter %}{% endmacro %}
-{% macro argumentsBlock types %}{% filter removeNewlines:"leading" %}
- {% for type in types %}
- {% if type == "String" %}
- String(describing: p{{forloop.counter}})
- {% elif type == "UnsafeRawPointer" %}
- Int(bitPattern: p{{forloop.counter}})
- {% else %}
- p{{forloop.counter}}
- {% endif %}
- {{ ", " if not forloop.last }}
- {% endfor %}
-{% endfilter %}{% endmacro %}
-{% macro recursiveBlock table item %}
- {% for string in item.strings %}
- {% if not param.noComments %}
- {% for line in string.translation|split:"\n" %}
- /// {{line}}
- {% endfor %}
- {% endif %}
- {% if string.types %}
- {{accessModifier}} static func {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}({% call parametersBlock string.types %}) -> String {
- return {{enumName}}.tr("{{table}}", "{{string.key}}", {% call argumentsBlock string.types %})
- }
- {% elif param.lookupFunction %}
- {# custom localization function is mostly used for in-app lang selection, so we want the loc to be recomputed at each call for those (hence the computed var) #}
- {{accessModifier}} static var {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}: String { return {{enumName}}.tr("{{table}}", "{{string.key}}") }
- {% else %}
- {{accessModifier}} static let {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{enumName}}.tr("{{table}}", "{{string.key}}")
- {% endif %}
- {% endfor %}
- {% for child in item.children %}
-
- {{accessModifier}} enum {{child.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call recursiveBlock table child %}{% endfilter %}
- }
- {% endfor %}
-{% endmacro %}
-// swiftlint:disable explicit_type_interface function_parameter_count identifier_name line_length
-// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces
-{% set enumName %}{{param.enumName|default:"L10n"}}{% endset %}
-{{accessModifier}} enum {{enumName}} {
- {% if tables.count > 1 or param.forceFileNameEnum %}
- {% for table in tables %}
- {{accessModifier}} enum {{table.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call recursiveBlock table.name table.levels %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call recursiveBlock tables.first.name tables.first.levels %}
- {% endif %}
-}
-// swiftlint:enable explicit_type_interface function_parameter_count identifier_name line_length
-// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces
-
-// MARK: - Implementation Details
-
-extension {{enumName}} {
- private static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String {
- {% if param.lookupFunction %}
- let format = {{ param.lookupFunction }}(key, table)
- {% else %}
- let format = {{param.bundle|default:"BundleToken.bundle"}}.localizedString(forKey: key, value: nil, table: table)
- {% endif %}
- return String(format: format, locale: Locale.current, arguments: args)
- }
-}
-{% if not param.bundle and not param.lookupFunction %}
-
-// swiftlint:disable convenience_type
-private final class BundleToken {
- static let bundle: Bundle = {
- #if SWIFT_PACKAGE
- return Bundle.module
- #else
- return Bundle(for: BundleToken.self)
- #endif
- }()
-}
-// swiftlint:enable convenience_type
-{% endif %}
-{% else %}
-// No string found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/structured-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/structured-swift5.stencil
deleted file mode 100644
index f809bc24..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/structured-swift5.stencil
+++ /dev/null
@@ -1,104 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if tables.count > 0 %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-import Foundation
-
-// swiftlint:disable superfluous_disable_command file_length implicit_return
-
-// MARK: - Strings
-
-{% macro parametersBlock types %}{% filter removeNewlines:"leading" %}
- {% for type in types %}
- {% if type == "String" %}
- _ p{{forloop.counter}}: Any
- {% else %}
- _ p{{forloop.counter}}: {{type}}
- {% endif %}
- {{ ", " if not forloop.last }}
- {% endfor %}
-{% endfilter %}{% endmacro %}
-{% macro argumentsBlock types %}{% filter removeNewlines:"leading" %}
- {% for type in types %}
- {% if type == "String" %}
- String(describing: p{{forloop.counter}})
- {% elif type == "UnsafeRawPointer" %}
- Int(bitPattern: p{{forloop.counter}})
- {% else %}
- p{{forloop.counter}}
- {% endif %}
- {{ ", " if not forloop.last }}
- {% endfor %}
-{% endfilter %}{% endmacro %}
-{% macro recursiveBlock table item %}
- {% for string in item.strings %}
- {% if not param.noComments %}
- {% for line in string.translation|split:"\n" %}
- /// {{line}}
- {% endfor %}
- {% endif %}
- {% if string.types %}
- {{accessModifier}} static func {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}({% call parametersBlock string.types %}) -> String {
- return {{enumName}}.tr("{{table}}", "{{string.key}}", {% call argumentsBlock string.types %})
- }
- {% elif param.lookupFunction %}
- {# custom localization function is mostly used for in-app lang selection, so we want the loc to be recomputed at each call for those (hence the computed var) #}
- {{accessModifier}} static var {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}: String { return {{enumName}}.tr("{{table}}", "{{string.key}}") }
- {% else %}
- {{accessModifier}} static let {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{enumName}}.tr("{{table}}", "{{string.key}}")
- {% endif %}
- {% endfor %}
- {% for child in item.children %}
-
- {{accessModifier}} enum {{child.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call recursiveBlock table child %}{% endfilter %}
- }
- {% endfor %}
-{% endmacro %}
-// swiftlint:disable explicit_type_interface function_parameter_count identifier_name line_length
-// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces
-{% set enumName %}{{param.enumName|default:"L10n"}}{% endset %}
-{{accessModifier}} enum {{enumName}} {
- {% if tables.count > 1 or param.forceFileNameEnum %}
- {% for table in tables %}
- {{accessModifier}} enum {{table.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call recursiveBlock table.name table.levels %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call recursiveBlock tables.first.name tables.first.levels %}
- {% endif %}
-}
-// swiftlint:enable explicit_type_interface function_parameter_count identifier_name line_length
-// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces
-
-// MARK: - Implementation Details
-
-extension {{enumName}} {
- private static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String {
- {% if param.lookupFunction %}
- let format = {{ param.lookupFunction }}(key, table)
- {% else %}
- let format = {{param.bundle|default:"BundleToken.bundle"}}.localizedString(forKey: key, value: nil, table: table)
- {% endif %}
- return String(format: format, locale: Locale.current, arguments: args)
- }
-}
-{% if not param.bundle and not param.lookupFunction %}
-
-// swiftlint:disable convenience_type
-private final class BundleToken {
- static let bundle: Bundle = {
- #if SWIFT_PACKAGE
- return Bundle.module
- #else
- return Bundle(for: BundleToken.self)
- #endif
- }()
-}
-// swiftlint:enable convenience_type
-{% endif %}
-{% else %}
-// No string found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/xcassets/swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/xcassets/swift4.stencil
deleted file mode 100644
index c8565931..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/xcassets/swift4.stencil
+++ /dev/null
@@ -1,329 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if catalogs %}
-{% set enumName %}{{param.enumName|default:"Asset"}}{% endset %}
-{% set arResourceGroupType %}{{param.arResourceGroupTypeName|default:"ARResourceGroupAsset"}}{% endset %}
-{% set colorType %}{{param.colorTypeName|default:"ColorAsset"}}{% endset %}
-{% set dataType %}{{param.dataTypeName|default:"DataAsset"}}{% endset %}
-{% set imageType %}{{param.imageTypeName|default:"ImageAsset"}}{% endset %}
-{% set symbolType %}{{param.symbolTypeName|default:"SymbolAsset"}}{% endset %}
-{% set forceNamespaces %}{{param.forceProvidesNamespaces|default:"false"}}{% endset %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-#if os(macOS)
- import AppKit
-#elseif os(iOS)
-{% if resourceCount.arresourcegroup > 0 %}
- import ARKit
-{% endif %}
- import UIKit
-#elseif os(tvOS) || os(watchOS)
- import UIKit
-#endif
-
-// Deprecated typealiases
-{% if resourceCount.color > 0 %}
-@available(*, deprecated, renamed: "{{colorType}}.Color", message: "This typealias will be removed in SwiftGen 7.0")
-{{accessModifier}} typealias {{param.colorAliasName|default:"AssetColorTypeAlias"}} = {{colorType}}.Color
-{% endif %}
-{% if resourceCount.image > 0 %}
-@available(*, deprecated, renamed: "{{imageType}}.Image", message: "This typealias will be removed in SwiftGen 7.0")
-{{accessModifier}} typealias {{param.imageAliasName|default:"AssetImageTypeAlias"}} = {{imageType}}.Image
-{% endif %}
-
-// swiftlint:disable superfluous_disable_command file_length implicit_return
-
-// MARK: - Asset Catalogs
-
-{% macro enumBlock assets %}
- {% call casesBlock assets %}
- {% if param.allValues %}
-
- // swiftlint:disable trailing_comma
- {% if resourceCount.arresourcegroup > 0 %}
- {{accessModifier}} static let allResourceGroups: [{{arResourceGroupType}}] = [
- {% filter indent:2 %}{% call allValuesBlock assets "arresourcegroup" "" %}{% endfilter %}
- ]
- {% endif %}
- {% if resourceCount.color > 0 %}
- {{accessModifier}} static let allColors: [{{colorType}}] = [
- {% filter indent:2 %}{% call allValuesBlock assets "color" "" %}{% endfilter %}
- ]
- {% endif %}
- {% if resourceCount.data > 0 %}
- {{accessModifier}} static let allDataAssets: [{{dataType}}] = [
- {% filter indent:2 %}{% call allValuesBlock assets "data" "" %}{% endfilter %}
- ]
- {% endif %}
- {% if resourceCount.image > 0 %}
- {{accessModifier}} static let allImages: [{{imageType}}] = [
- {% filter indent:2 %}{% call allValuesBlock assets "image" "" %}{% endfilter %}
- ]
- {% endif %}
- {% if resourceCount.symbol > 0 %}
- {{accessModifier}} static let allSymbols: [{{symbolType}}] = [
- {% filter indent:2 %}{% call allValuesBlock assets "symbol" "" %}{% endfilter %}
- ]
- {% endif %}
- // swiftlint:enable trailing_comma
- {% endif %}
-{% endmacro %}
-{% macro casesBlock assets %}
- {% for asset in assets %}
- {% if asset.type == "arresourcegroup" %}
- {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{arResourceGroupType}}(name: "{{asset.value}}")
- {% elif asset.type == "color" %}
- {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{colorType}}(name: "{{asset.value}}")
- {% elif asset.type == "data" %}
- {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{dataType}}(name: "{{asset.value}}")
- {% elif asset.type == "image" %}
- {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{imageType}}(name: "{{asset.value}}")
- {% elif asset.type == "symbol" %}
- {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{symbolType}}(name: "{{asset.value}}")
- {% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %}
- {{accessModifier}} enum {{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call casesBlock asset.items %}{% endfilter %}
- }
- {% elif asset.items %}
- {% call casesBlock asset.items %}
- {% endif %}
- {% endfor %}
-{% endmacro %}
-{% macro allValuesBlock assets filter prefix %}
- {% for asset in assets %}
- {% if asset.type == filter %}
- {{prefix}}{{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}},
- {% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %}
- {% set prefix2 %}{{prefix}}{{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}.{% endset %}
- {% call allValuesBlock asset.items filter prefix2 %}
- {% elif asset.items %}
- {% call allValuesBlock asset.items filter prefix %}
- {% endif %}
- {% endfor %}
-{% endmacro %}
-// swiftlint:disable identifier_name line_length nesting type_body_length type_name
-{{accessModifier}} enum {{enumName}} {
- {% if catalogs.count > 1 or param.forceFileNameEnum %}
- {% for catalog in catalogs %}
- {{accessModifier}} enum {{catalog.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call enumBlock catalog.assets %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call enumBlock catalogs.first.assets %}
- {% endif %}
-}
-// swiftlint:enable identifier_name line_length nesting type_body_length type_name
-
-// MARK: - Implementation Details
-{% if resourceCount.arresourcegroup > 0 %}
-
-{{accessModifier}} struct {{arResourceGroupType}} {
- {{accessModifier}} fileprivate(set) var name: String
-
- #if os(iOS)
- @available(iOS 11.3, *)
- {{accessModifier}} var referenceImages: Set {
- return ARReferenceImage.referenceImages(in: self)
- }
-
- @available(iOS 12.0, *)
- {{accessModifier}} var referenceObjects: Set {
- return ARReferenceObject.referenceObjects(in: self)
- }
- #endif
-}
-
-#if os(iOS)
-@available(iOS 11.3, *)
-{{accessModifier}} extension ARReferenceImage {
- static func referenceImages(in asset: {{arResourceGroupType}}) -> Set {
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- return referenceImages(inGroupNamed: asset.name, bundle: bundle) ?? Set()
- }
-}
-
-@available(iOS 12.0, *)
-{{accessModifier}} extension ARReferenceObject {
- static func referenceObjects(in asset: {{arResourceGroupType}}) -> Set {
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- return referenceObjects(inGroupNamed: asset.name, bundle: bundle) ?? Set()
- }
-}
-#endif
-{% endif %}
-{% if resourceCount.color > 0 %}
-
-{{accessModifier}} final class {{colorType}} {
- {{accessModifier}} fileprivate(set) var name: String
-
- #if os(macOS)
- {{accessModifier}} typealias Color = NSColor
- #elseif os(iOS) || os(tvOS) || os(watchOS)
- {{accessModifier}} typealias Color = UIColor
- #endif
-
- @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *)
- {{accessModifier}} private(set) lazy var color: Color = Color(asset: self)
-
- #if os(iOS) || os(tvOS)
- @available(iOS 11.0, tvOS 11.0, *)
- {{accessModifier}} func color(compatibleWith traitCollection: UITraitCollection) -> Color {
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- guard let color = Color(named: name, in: bundle, compatibleWith: traitCollection) else {
- fatalError("Unable to load color asset named \(name).")
- }
- return color
- }
- #endif
-
- fileprivate init(name: String) {
- self.name = name
- }
-}
-
-{{accessModifier}} extension {{colorType}}.Color {
- @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *)
- convenience init!(asset: {{colorType}}) {
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- #if os(iOS) || os(tvOS)
- self.init(named: asset.name, in: bundle, compatibleWith: nil)
- #elseif os(macOS)
- self.init(named: NSColor.Name(asset.name), bundle: bundle)
- #elseif os(watchOS)
- self.init(named: asset.name)
- #endif
- }
-}
-{% endif %}
-{% if resourceCount.data > 0 %}
-
-{{accessModifier}} struct {{dataType}} {
- {{accessModifier}} fileprivate(set) var name: String
-
- @available(iOS 9.0, tvOS 9.0, watchOS 6.0, macOS 10.11, *)
- {{accessModifier}} var data: NSDataAsset {
- return NSDataAsset(asset: self)
- }
-}
-
-@available(iOS 9.0, tvOS 9.0, watchOS 6.0, macOS 10.11, *)
-{{accessModifier}} extension NSDataAsset {
- convenience init!(asset: {{dataType}}) {
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- #if os(iOS) || os(tvOS) || os(watchOS)
- self.init(name: asset.name, bundle: bundle)
- #elseif os(macOS)
- self.init(name: NSDataAsset.Name(asset.name), bundle: bundle)
- #endif
- }
-}
-{% endif %}
-{% if resourceCount.image > 0 %}
-
-{{accessModifier}} struct {{imageType}} {
- {{accessModifier}} fileprivate(set) var name: String
-
- #if os(macOS)
- {{accessModifier}} typealias Image = NSImage
- #elseif os(iOS) || os(tvOS) || os(watchOS)
- {{accessModifier}} typealias Image = UIImage
- #endif
-
- @available(iOS 8.0, tvOS 9.0, watchOS 2.0, macOS 10.7, *)
- {{accessModifier}} var image: Image {
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- #if os(iOS) || os(tvOS)
- let image = Image(named: name, in: bundle, compatibleWith: nil)
- #elseif os(macOS)
- let name = NSImage.Name(self.name)
- let image = (bundle == .main) ? NSImage(named: name) : bundle.image(forResource: name)
- #elseif os(watchOS)
- let image = Image(named: name)
- #endif
- guard let result = image else {
- fatalError("Unable to load image asset named \(name).")
- }
- return result
- }
-
- #if os(iOS) || os(tvOS)
- @available(iOS 8.0, tvOS 9.0, *)
- {{accessModifier}} func image(compatibleWith traitCollection: UITraitCollection) -> Image {
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- guard let result = Image(named: name, in: bundle, compatibleWith: traitCollection) else {
- fatalError("Unable to load image asset named \(name).")
- }
- return result
- }
- #endif
-}
-
-{{accessModifier}} extension {{imageType}}.Image {
- @available(iOS 8.0, tvOS 9.0, watchOS 2.0, *)
- @available(macOS, deprecated,
- message: "This initializer is unsafe on macOS, please use the {{imageType}}.image property")
- convenience init!(asset: {{imageType}}) {
- #if os(iOS) || os(tvOS)
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- self.init(named: asset.name, in: bundle, compatibleWith: nil)
- #elseif os(macOS)
- self.init(named: NSImage.Name(asset.name))
- #elseif os(watchOS)
- self.init(named: asset.name)
- #endif
- }
-}
-{% endif %}
-{% if resourceCount.symbol > 0 %}
-
-{{accessModifier}} struct {{symbolType}} {
- {{accessModifier}} fileprivate(set) var name: String
-
- #if os(iOS) || os(tvOS) || os(watchOS)
- @available(iOS 13.0, tvOS 13.0, watchOS 6.0, *)
- {{accessModifier}} typealias Configuration = UIImage.SymbolConfiguration
- {{accessModifier}} typealias Image = UIImage
-
- @available(iOS 12.0, tvOS 12.0, watchOS 5.0, *)
- {{accessModifier}} var image: Image {
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- #if os(iOS) || os(tvOS)
- let image = Image(named: name, in: bundle, compatibleWith: nil)
- #elseif os(watchOS)
- let image = Image(named: name)
- #endif
- guard let result = image else {
- fatalError("Unable to load symbol asset named \(name).")
- }
- return result
- }
-
- @available(iOS 13.0, tvOS 13.0, watchOS 6.0, *)
- {{accessModifier}} func image(with configuration: Configuration) -> Image {
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- guard let result = Image(named: name, in: bundle, with: configuration) else {
- fatalError("Unable to load symbol asset named \(name).")
- }
- return result
- }
- #endif
-}
-{% endif %}
-{% if not param.bundle %}
-
-// swiftlint:disable convenience_type
-private final class BundleToken {
- static let bundle: Bundle = {
- #if SWIFT_PACKAGE
- return Bundle.module
- #else
- return Bundle(for: BundleToken.self)
- #endif
- }()
-}
-// swiftlint:enable convenience_type
-{% endif %}
-{% else %}
-// No assets found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/xcassets/swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/xcassets/swift5.stencil
deleted file mode 100644
index 42df7be8..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/xcassets/swift5.stencil
+++ /dev/null
@@ -1,337 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if catalogs %}
-{% set enumName %}{{param.enumName|default:"Asset"}}{% endset %}
-{% set arResourceGroupType %}{{param.arResourceGroupTypeName|default:"ARResourceGroupAsset"}}{% endset %}
-{% set colorType %}{{param.colorTypeName|default:"ColorAsset"}}{% endset %}
-{% set dataType %}{{param.dataTypeName|default:"DataAsset"}}{% endset %}
-{% set imageType %}{{param.imageTypeName|default:"ImageAsset"}}{% endset %}
-{% set symbolType %}{{param.symbolTypeName|default:"SymbolAsset"}}{% endset %}
-{% set forceNamespaces %}{{param.forceProvidesNamespaces|default:"false"}}{% endset %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-#if os(macOS)
- import AppKit
-#elseif os(iOS)
-{% if resourceCount.arresourcegroup > 0 %}
- import ARKit
-{% endif %}
- import UIKit
-#elseif os(tvOS) || os(watchOS)
- import UIKit
-#endif
-
-// Deprecated typealiases
-{% if resourceCount.color > 0 %}
-@available(*, deprecated, renamed: "{{colorType}}.Color", message: "This typealias will be removed in SwiftGen 7.0")
-{{accessModifier}} typealias {{param.colorAliasName|default:"AssetColorTypeAlias"}} = {{colorType}}.Color
-{% endif %}
-{% if resourceCount.image > 0 %}
-@available(*, deprecated, renamed: "{{imageType}}.Image", message: "This typealias will be removed in SwiftGen 7.0")
-{{accessModifier}} typealias {{param.imageAliasName|default:"AssetImageTypeAlias"}} = {{imageType}}.Image
-{% endif %}
-
-// swiftlint:disable superfluous_disable_command file_length implicit_return
-
-// MARK: - Asset Catalogs
-
-{% macro enumBlock assets %}
- {% call casesBlock assets %}
- {% if param.allValues %}
-
- // swiftlint:disable trailing_comma
- {% if resourceCount.arresourcegroup > 0 %}
- {{accessModifier}} static let allResourceGroups: [{{arResourceGroupType}}] = [
- {% filter indent:2 %}{% call allValuesBlock assets "arresourcegroup" "" %}{% endfilter %}
- ]
- {% endif %}
- {% if resourceCount.color > 0 %}
- {{accessModifier}} static let allColors: [{{colorType}}] = [
- {% filter indent:2 %}{% call allValuesBlock assets "color" "" %}{% endfilter %}
- ]
- {% endif %}
- {% if resourceCount.data > 0 %}
- {{accessModifier}} static let allDataAssets: [{{dataType}}] = [
- {% filter indent:2 %}{% call allValuesBlock assets "data" "" %}{% endfilter %}
- ]
- {% endif %}
- {% if resourceCount.image > 0 %}
- {{accessModifier}} static let allImages: [{{imageType}}] = [
- {% filter indent:2 %}{% call allValuesBlock assets "image" "" %}{% endfilter %}
- ]
- {% endif %}
- {% if resourceCount.symbol > 0 %}
- {{accessModifier}} static let allSymbols: [{{symbolType}}] = [
- {% filter indent:2 %}{% call allValuesBlock assets "symbol" "" %}{% endfilter %}
- ]
- {% endif %}
- // swiftlint:enable trailing_comma
- {% endif %}
-{% endmacro %}
-{% macro casesBlock assets %}
- {% for asset in assets %}
- {% if asset.type == "arresourcegroup" %}
- {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{arResourceGroupType}}(name: "{{asset.value}}")
- {% elif asset.type == "color" %}
- {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{colorType}}(name: "{{asset.value}}")
- {% elif asset.type == "data" %}
- {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{dataType}}(name: "{{asset.value}}")
- {% elif asset.type == "image" %}
- {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{imageType}}(name: "{{asset.value}}")
- {% elif asset.type == "symbol" %}
- {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{symbolType}}(name: "{{asset.value}}")
- {% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %}
- {{accessModifier}} enum {{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call casesBlock asset.items %}{% endfilter %}
- }
- {% elif asset.items %}
- {% call casesBlock asset.items %}
- {% endif %}
- {% endfor %}
-{% endmacro %}
-{% macro allValuesBlock assets filter prefix %}
- {% for asset in assets %}
- {% if asset.type == filter %}
- {{prefix}}{{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}},
- {% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %}
- {% set prefix2 %}{{prefix}}{{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}.{% endset %}
- {% call allValuesBlock asset.items filter prefix2 %}
- {% elif asset.items %}
- {% call allValuesBlock asset.items filter prefix %}
- {% endif %}
- {% endfor %}
-{% endmacro %}
-// swiftlint:disable identifier_name line_length nesting type_body_length type_name
-{{accessModifier}} enum {{enumName}} {
- {% if catalogs.count > 1 or param.forceFileNameEnum %}
- {% for catalog in catalogs %}
- {{accessModifier}} enum {{catalog.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call enumBlock catalog.assets %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call enumBlock catalogs.first.assets %}
- {% endif %}
-}
-// swiftlint:enable identifier_name line_length nesting type_body_length type_name
-
-// MARK: - Implementation Details
-{% if resourceCount.arresourcegroup > 0 %}
-
-{{accessModifier}} struct {{arResourceGroupType}} {
- {{accessModifier}} fileprivate(set) var name: String
-
- #if os(iOS)
- @available(iOS 11.3, *)
- {{accessModifier}} var referenceImages: Set {
- return ARReferenceImage.referenceImages(in: self)
- }
-
- @available(iOS 12.0, *)
- {{accessModifier}} var referenceObjects: Set {
- return ARReferenceObject.referenceObjects(in: self)
- }
- #endif
-}
-
-#if os(iOS)
-@available(iOS 11.3, *)
-{{accessModifier}} extension ARReferenceImage {
- static func referenceImages(in asset: {{arResourceGroupType}}) -> Set {
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- return referenceImages(inGroupNamed: asset.name, bundle: bundle) ?? Set()
- }
-}
-
-@available(iOS 12.0, *)
-{{accessModifier}} extension ARReferenceObject {
- static func referenceObjects(in asset: {{arResourceGroupType}}) -> Set {
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- return referenceObjects(inGroupNamed: asset.name, bundle: bundle) ?? Set()
- }
-}
-#endif
-{% endif %}
-{% if resourceCount.color > 0 %}
-
-{{accessModifier}} final class {{colorType}} {
- {{accessModifier}} fileprivate(set) var name: String
-
- #if os(macOS)
- {{accessModifier}} typealias Color = NSColor
- #elseif os(iOS) || os(tvOS) || os(watchOS)
- {{accessModifier}} typealias Color = UIColor
- #endif
-
- @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *)
- {{accessModifier}} private(set) lazy var color: Color = {
- guard let color = Color(asset: self) else {
- fatalError("Unable to load color asset named \(name).")
- }
- return color
- }()
-
- #if os(iOS) || os(tvOS)
- @available(iOS 11.0, tvOS 11.0, *)
- {{accessModifier}} func color(compatibleWith traitCollection: UITraitCollection) -> Color {
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- guard let color = Color(named: name, in: bundle, compatibleWith: traitCollection) else {
- fatalError("Unable to load color asset named \(name).")
- }
- return color
- }
- #endif
-
- fileprivate init(name: String) {
- self.name = name
- }
-}
-
-{{accessModifier}} extension {{colorType}}.Color {
- @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *)
- convenience init?(asset: {{colorType}}) {
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- #if os(iOS) || os(tvOS)
- self.init(named: asset.name, in: bundle, compatibleWith: nil)
- #elseif os(macOS)
- self.init(named: NSColor.Name(asset.name), bundle: bundle)
- #elseif os(watchOS)
- self.init(named: asset.name)
- #endif
- }
-}
-{% endif %}
-{% if resourceCount.data > 0 %}
-
-{{accessModifier}} struct {{dataType}} {
- {{accessModifier}} fileprivate(set) var name: String
-
- @available(iOS 9.0, tvOS 9.0, watchOS 6.0, macOS 10.11, *)
- {{accessModifier}} var data: NSDataAsset {
- guard let data = NSDataAsset(asset: self) else {
- fatalError("Unable to load data asset named \(name).")
- }
- return data
- }
-}
-
-@available(iOS 9.0, tvOS 9.0, watchOS 6.0, macOS 10.11, *)
-{{accessModifier}} extension NSDataAsset {
- convenience init?(asset: {{dataType}}) {
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- #if os(iOS) || os(tvOS) || os(watchOS)
- self.init(name: asset.name, bundle: bundle)
- #elseif os(macOS)
- self.init(name: NSDataAsset.Name(asset.name), bundle: bundle)
- #endif
- }
-}
-{% endif %}
-{% if resourceCount.image > 0 %}
-
-{{accessModifier}} struct {{imageType}} {
- {{accessModifier}} fileprivate(set) var name: String
-
- #if os(macOS)
- {{accessModifier}} typealias Image = NSImage
- #elseif os(iOS) || os(tvOS) || os(watchOS)
- {{accessModifier}} typealias Image = UIImage
- #endif
-
- @available(iOS 8.0, tvOS 9.0, watchOS 2.0, macOS 10.7, *)
- {{accessModifier}} var image: Image {
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- #if os(iOS) || os(tvOS)
- let image = Image(named: name, in: bundle, compatibleWith: nil)
- #elseif os(macOS)
- let name = NSImage.Name(self.name)
- let image = (bundle == .main) ? NSImage(named: name) : bundle.image(forResource: name)
- #elseif os(watchOS)
- let image = Image(named: name)
- #endif
- guard let result = image else {
- fatalError("Unable to load image asset named \(name).")
- }
- return result
- }
-
- #if os(iOS) || os(tvOS)
- @available(iOS 8.0, tvOS 9.0, *)
- {{accessModifier}} func image(compatibleWith traitCollection: UITraitCollection) -> Image {
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- guard let result = Image(named: name, in: bundle, compatibleWith: traitCollection) else {
- fatalError("Unable to load image asset named \(name).")
- }
- return result
- }
- #endif
-}
-
-{{accessModifier}} extension {{imageType}}.Image {
- @available(iOS 8.0, tvOS 9.0, watchOS 2.0, *)
- @available(macOS, deprecated,
- message: "This initializer is unsafe on macOS, please use the {{imageType}}.image property")
- convenience init?(asset: {{imageType}}) {
- #if os(iOS) || os(tvOS)
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- self.init(named: asset.name, in: bundle, compatibleWith: nil)
- #elseif os(macOS)
- self.init(named: NSImage.Name(asset.name))
- #elseif os(watchOS)
- self.init(named: asset.name)
- #endif
- }
-}
-{% endif %}
-{% if resourceCount.symbol > 0 %}
-
-{{accessModifier}} struct {{symbolType}} {
- {{accessModifier}} fileprivate(set) var name: String
-
- #if os(iOS) || os(tvOS) || os(watchOS)
- @available(iOS 13.0, tvOS 13.0, watchOS 6.0, *)
- {{accessModifier}} typealias Configuration = UIImage.SymbolConfiguration
- {{accessModifier}} typealias Image = UIImage
-
- @available(iOS 12.0, tvOS 12.0, watchOS 5.0, *)
- {{accessModifier}} var image: Image {
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- #if os(iOS) || os(tvOS)
- let image = Image(named: name, in: bundle, compatibleWith: nil)
- #elseif os(watchOS)
- let image = Image(named: name)
- #endif
- guard let result = image else {
- fatalError("Unable to load symbol asset named \(name).")
- }
- return result
- }
-
- @available(iOS 13.0, tvOS 13.0, watchOS 6.0, *)
- {{accessModifier}} func image(with configuration: Configuration) -> Image {
- let bundle = {{param.bundle|default:"BundleToken.bundle"}}
- guard let result = Image(named: name, in: bundle, with: configuration) else {
- fatalError("Unable to load symbol asset named \(name).")
- }
- return result
- }
- #endif
-}
-{% endif %}
-{% if not param.bundle %}
-
-// swiftlint:disable convenience_type
-private final class BundleToken {
- static let bundle: Bundle = {
- #if SWIFT_PACKAGE
- return Bundle.module
- #else
- return Bundle(for: BundleToken.self)
- #endif
- }()
-}
-// swiftlint:enable convenience_type
-{% endif %}
-{% else %}
-// No assets found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/yaml/inline-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/yaml/inline-swift4.stencil
deleted file mode 100644
index 9cc2aa36..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/yaml/inline-swift4.stencil
+++ /dev/null
@@ -1,92 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if files %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-{% set documentPrefix %}{{param.documentName|default:"Document"}}{% endset %}
-import Foundation
-
-// swiftlint:disable superfluous_disable_command
-// swiftlint:disable file_length
-
-// MARK: - YAML Files
-{% macro fileBlock file %}
- {% if file.documents.count > 1 %}
- {% for document in file.documents %}
- {% set documentName %}{{documentPrefix}}{{forloop.counter}}{% endset %}
- {{accessModifier}} enum {{documentName|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call documentBlock file document %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call documentBlock file file.documents.first %}
- {% endif %}
-{% endmacro %}
-{% macro documentBlock file document %}
- {% set rootType %}{% call typeBlock document.metadata %}{% endset %}
- {% if document.metadata.type == "Array" %}
- {{accessModifier}} static let items: {{rootType}} = {% call valueBlock document.data document.metadata %}
- {% elif document.metadata.type == "Dictionary" %}
- {% for key,value in document.metadata.properties %}
- {{accessModifier}} {% call propertyBlock key value document.data %}
- {% endfor %}
- {% else %}
- {{accessModifier}} static let value: {{rootType}} = {% call valueBlock document.data document.metadata %}
- {% endif %}
-{% endmacro %}
-{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %}
- {% if metadata.type == "Array" %}
- [{% call typeBlock metadata.element %}]
- {% elif metadata.type == "Dictionary" %}
- [String: Any]
- {% elif metadata.type == "Optional" %}
- Any?
- {% else %}
- {{metadata.type}}
- {% endif %}
-{% endfilter %}{% endmacro %}
-{% macro propertyBlock key metadata data %}{% filter removeNewlines:"leading" %}
- {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %}
- {% set propertyType %}{% call typeBlock metadata %}{% endset %}
- static let {{propertyName}}: {{propertyType}} = {% call valueBlock data[key] metadata %}
-{% endfilter %}{% endmacro %}
-{% macro valueBlock value metadata %}{% filter removeNewlines:"leading" %}
- {% if metadata.type == "String" %}
- "{{ value }}"
- {% elif metadata.type == "Optional" %}
- nil
- {% elif metadata.type == "Array" and value %}
- [{% for value in value %}
- {% call valueBlock value metadata.element.items[forloop.counter0]|default:metadata.element %}
- {{ ", " if not forloop.last }}
- {% endfor %}]
- {% elif metadata.type == "Dictionary" %}
- [{% for key,value in value %}
- "{{key}}": {% call valueBlock value metadata.properties[key] %}
- {{ ", " if not forloop.last }}
- {% empty %}
- :
- {% endfor %}]
- {% elif metadata.type == "Bool" %}
- {% if value %}true{% else %}false{% endif %}
- {% else %}
- {{ value }}
- {% endif %}
-{% endfilter %}{% endmacro %}
-
-// swiftlint:disable identifier_name line_length number_separator type_body_length
-{{accessModifier}} enum {{param.enumName|default:"YAMLFiles"}} {
- {% if files.count > 1 or param.forceFileNameEnum %}
- {% for file in files %}
- {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call fileBlock file %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call fileBlock files.first %}
- {% endif %}
-}
-// swiftlint:enable identifier_name line_length number_separator type_body_length
-{% else %}
-// No files found
-{% endif %}
diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/yaml/inline-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/yaml/inline-swift5.stencil
deleted file mode 100644
index 9cc2aa36..00000000
--- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/yaml/inline-swift5.stencil
+++ /dev/null
@@ -1,92 +0,0 @@
-// swiftlint:disable all
-// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
-
-{% if files %}
-{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
-{% set documentPrefix %}{{param.documentName|default:"Document"}}{% endset %}
-import Foundation
-
-// swiftlint:disable superfluous_disable_command
-// swiftlint:disable file_length
-
-// MARK: - YAML Files
-{% macro fileBlock file %}
- {% if file.documents.count > 1 %}
- {% for document in file.documents %}
- {% set documentName %}{{documentPrefix}}{{forloop.counter}}{% endset %}
- {{accessModifier}} enum {{documentName|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call documentBlock file document %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call documentBlock file file.documents.first %}
- {% endif %}
-{% endmacro %}
-{% macro documentBlock file document %}
- {% set rootType %}{% call typeBlock document.metadata %}{% endset %}
- {% if document.metadata.type == "Array" %}
- {{accessModifier}} static let items: {{rootType}} = {% call valueBlock document.data document.metadata %}
- {% elif document.metadata.type == "Dictionary" %}
- {% for key,value in document.metadata.properties %}
- {{accessModifier}} {% call propertyBlock key value document.data %}
- {% endfor %}
- {% else %}
- {{accessModifier}} static let value: {{rootType}} = {% call valueBlock document.data document.metadata %}
- {% endif %}
-{% endmacro %}
-{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %}
- {% if metadata.type == "Array" %}
- [{% call typeBlock metadata.element %}]
- {% elif metadata.type == "Dictionary" %}
- [String: Any]
- {% elif metadata.type == "Optional" %}
- Any?
- {% else %}
- {{metadata.type}}
- {% endif %}
-{% endfilter %}{% endmacro %}
-{% macro propertyBlock key metadata data %}{% filter removeNewlines:"leading" %}
- {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %}
- {% set propertyType %}{% call typeBlock metadata %}{% endset %}
- static let {{propertyName}}: {{propertyType}} = {% call valueBlock data[key] metadata %}
-{% endfilter %}{% endmacro %}
-{% macro valueBlock value metadata %}{% filter removeNewlines:"leading" %}
- {% if metadata.type == "String" %}
- "{{ value }}"
- {% elif metadata.type == "Optional" %}
- nil
- {% elif metadata.type == "Array" and value %}
- [{% for value in value %}
- {% call valueBlock value metadata.element.items[forloop.counter0]|default:metadata.element %}
- {{ ", " if not forloop.last }}
- {% endfor %}]
- {% elif metadata.type == "Dictionary" %}
- [{% for key,value in value %}
- "{{key}}": {% call valueBlock value metadata.properties[key] %}
- {{ ", " if not forloop.last }}
- {% empty %}
- :
- {% endfor %}]
- {% elif metadata.type == "Bool" %}
- {% if value %}true{% else %}false{% endif %}
- {% else %}
- {{ value }}
- {% endif %}
-{% endfilter %}{% endmacro %}
-
-// swiftlint:disable identifier_name line_length number_separator type_body_length
-{{accessModifier}} enum {{param.enumName|default:"YAMLFiles"}} {
- {% if files.count > 1 or param.forceFileNameEnum %}
- {% for file in files %}
- {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
- {% filter indent:2 %}{% call fileBlock file %}{% endfilter %}
- }
- {% endfor %}
- {% else %}
- {% call fileBlock files.first %}
- {% endif %}
-}
-// swiftlint:enable identifier_name line_length number_separator type_body_length
-{% else %}
-// No files found
-{% endif %}
diff --git a/bin/swiftgen b/bin/swiftgen
deleted file mode 100755
index 1bc2b874..00000000
Binary files a/bin/swiftgen and /dev/null differ
diff --git a/contributing.md b/contributing.md
index ebc6e6d5..dab114c5 100644
--- a/contributing.md
+++ b/contributing.md
@@ -6,19 +6,18 @@
## Setup
-Fork the Swiftfin repo and install the necessary Carthage with Xcode 13:
+Fork the Swiftfin repo and install the necessary dependencies with Xcode 13:
```bash
-# install Carthage (if not installed)
-$ brew install carthage
+# install Carthage, SwiftFormat, and SwiftGen with homebrew
+$ brew install carthage swiftformat swiftgen
-# update dependencies
+# install or update dependencies
$ carthage update --use-xcframeworks
-
-# open project and build
-$ open Swiftfin.xcodeproj
```
+If you run into a build error with Swift Packages because some have not finished installing, you may need to close and reopen Xcode to finish installing the last packages.
+
## Git Flow
Swiftfin follows the same Pull Request Guidelines as outlined in the [Jellyfin Pull Request Guidelines](https://jellyfin.org/docs/general/contributing/development.html#pull-request-guidelines).
@@ -30,11 +29,11 @@ If your Pull Request relates to an Issue, mention the issue correctly in your PR
The following must pass in order for a PR to be merged:
- automated `iOS` and `tvOS` builds must succeed
- developer account cannot be attached
-- SwiftFormat linting check must pass
+- SwiftFormat linting check must pass. If this does not pass after you have linted, you may need to update your local `swiftformat`
- new strings that are not part of an experimental feature must be localized
- correct label(s) are attached, if applicable
-Labeling PRs with `enhancement`, `bug`, or `crash` will allow the PR to be tracked in GitHub's [automatically generated release notes](https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes). Small fixes (like minor UI adjustments) or non-user facing issues (like developer project clean up) should also have the `ignore-for-release` label since many PRs may be similar. If you think that no labels are required, that is acceptable.
+Labeling PRs with `enhancement`, `bug`, or `crash` will allow the PR to be tracked in GitHub's [automatically generated release notes](https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes). Small fixes (like minor UI adjustments) or non-user facing issues (like developer project clean up) can also have the `ignore-for-release` label because they may not be important to include in the release notes. If you think that no labels are required, that is acceptable.
### Documentation
Documentation for advanced or complex features and other implementation reasoning is encouraged so that future developers may have insights and a better understand of the application. `// MARK:` comments are encouraged for organization, maintainability, and ease of navigation in Xcode's Minimap.
@@ -49,7 +48,7 @@ Playback is done with [VLCKit](https://code.videolan.org/videolan/VLCKit) for it
While there are no design guidelines for UI/UX features, Swiftfin has the goal to use native SwiftUI/UIKit components while adhering to a Jellyfin theme. If your feature creates new UI/UX components, you are welcome to introduce a general design that may receive feedback during the PR process or may be re-designed later on.
-User customizable UI/UX features are welcome and intended, however not all customization may be accepted for code maintainability and to also establish a specific Swiftfin design. Taking inspiration, but not always copying, from other applications is encouraged.
+User customizable UI/UX features are welcome and intended, however not all customization may be accepted for code maintainability and to also establish a distinct Swiftfin design. Taking inspiration, but not always copying, from other applications is encouraged.
## New Features
@@ -57,7 +56,7 @@ If you would like to develop a new feature or `Developer` issue, create an issue
## Other Code Work
-Other code work like bug fixes, issues with `Developer` tags, and localization and accessibility efforts are welcome to be picked up at any time. Just leave a comment when you start work on a bug fix or `Developer` issue.
+Other code work like bug fixes, issues with `Developer` tags, localizations, and accessibility efforts are welcome to be picked up at any time. Just leave a comment when you start work on a bug fix or `Developer` issue.
If you notice undesirable behavior or would like to make a UI/UX tweak, create an issue or ask in the iOS Matrix/Discord channel and a discussion will be made.