edudo-inc/spmgen
Code generator for Swift.
Installation
Homebrew
brew install edudo-inc/formulae/spmgenMakefile
# 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` commandResources command
SPMGen 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 |
Integration
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")
]
)Usage
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/Resourcesfolder
- Add 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.
CasePaths command
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.
Package Metadata
Repository: edudo-inc/spmgen
Default branch: main
README: README.md