Code generator for Swift.
brew install edudo-inc/formulae/spmgen# Download repo
git clone https://github.com/edudo-inc/spmgen.git
# Navigate to repo directory
cd spmgen
# Build and install using Make
make install
# You can also delete spmgen using `make uninstall` commandSPMGen provides static resource factories for various resource types.
Supported resources:
| Resource | Extensions | Is reliable |
|---|---|---|
| ColorResource | .xcassets |
true |
| FontResource | .ttf .otf |
true |
| ImageResource | .xcassets |
true |
| NibResource | .xib |
not used |
| StoryboardResource | .storyboard |
not used |
| SCNSceneResource | .scnassets/.scn |
true |
Add SPMGen dependency to your package
.package(url: "https://github.com/edudo-inc/spmgen.git", from: "1.0.1")Create <#Project#>Resources target with a following structure
Sources
<#Project#>Resources
Resources
<#Assets#>
Specify resource processing and add SPMResources dependency to your target
.target(
name: "<#Project#>Resources",
dependencies: [
.product(
name: "SPMResources",
package: "spmgen"
)
],
resources: [
.process("Resources")
]
)Add a script to your Run Script target build phases
spmgen resources "$SRCROOT/Sources/<#Project#>Resources/Resources" \
--output "$SRCROOT/Sources/<#Project#>Resources/SPMGen.swift" \
--indentor " " \
--indentation-width 2
# You can also add `--disable-exports` flag to disable `@_exported` attribute
# for `import SPMResources` declaration in generated fileAdd <#Project#>Resources target as a dependency to other targets
.target(
name: "<#Project#>Module",
dependencies: [
.target(name: "<#Project#>Resources")
]
)Import your <#Project#>Resources package and initialize objects using .resource() static factory
import <#Project#>Resources
import UIKit
let label = UILabel()
label.backgroundColor = .resource(.accentColor)
label.textColor = .resource(.primaryText)
label.font = .primary(ofSize: 12, weight: .semibold, style: .italic)
let imageView = UIImageView(image: .resource(.logo))Note: Fonts require additional setup
For example you want to add
MonsterratandArimofonts with different styles
Download fonts and add them to
Sources/<#Project#>Resources/ResourcesfolderAdd a static factories for your custom fonts (Example)
Register custom fonts on app launch (in AppDelegate, for example)
UIFont.bootstrap()if you are using code from the example above.
Generate CasePaths for all enums in your project using following command
spmgen casepaths "<path_to_sources>" \
--indentor " " \
--indentation-width 2Todo: Support configuration file with exclude paths and typename-based excludes.