spmgen

1.0.1

Resources boilerplate code generator for Swift
EduDo-Inc/spmgen

What's New

1.0.1

2021-05-07T18:50:54Z

Tiny fix for broken generation

SPMGen

Resources boilerplate code generator for Swift.

About

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

Setup

Install spmgen CLI

Installation

Homebrew support will be added soon

Makefile

# 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

Integration

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")
  ]
)

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 Monsterrat and Arimo fonts with different styles

  • Download fonts and add them to Sources/<#Project#>Resources/Resources folder

  • 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.

Description

  • Swift Tools
View More Packages from this Author

Dependencies

  • None
Last updated: Mon Dec 05 2022 11:37:00 GMT-0500 (GMT-05:00)