Resources boilerplate code generator for Swift.
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 |
Install spmgen
CLI
Homebrew support will be added soon
# 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` command
Add SPMGen dependency to your package
.package(url: "https://github.com/edudo-inc/spmgen.git", from: "1.0.0")
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 file
Add <#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
Monsterrat
andArimo
fonts with different styles
Download fonts and add them to
Sources/<#Project#>Resources/Resources
folderAdd 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.