Generamba Template with Dependency inversion (EasyDi or Swinject), Storyboards (Reusable), Routing (LightRoute) and Tests (Quick + Nible)
-
Initialize Generamba in your project's folder and install templates from this repo
-
open terminal and execute this in the same project's folder:
To use with Swinject
$ generamba gen Module swift_viper_swinject
To use with EasyDi
$ generamba gen Module swift_viper_easydi
The new VIPER Module/Submodule(whatever) will be generated in your project's folder with structure:
Module
├── View
│ ├── ModuleViewInput.swift
│ ├── ModuleViewOutput.swift
│ └── ModuleViewController.swift
├── Storyboard
│ └── ModuleModuleStoryboard.storyboard
├── Presenter
│ ├── ModuleModuleInput.swift
│ └── ModulePresenter.swift
├── Interactor
│ ├── ModuleInteractorInput.swift
│ ├── ModuleInteractorOutput.swift
│ └── ModuleInteractor.swift
├── Router
│ ├── ModuleRouterInput.swift
│ └── ModuleRouter.swift
└── Assembly
├── ModuleAssembly.swift
└── ModuleInitializer.swift (EasyDi only)
If you use Swinject, add ApplicationAssembly
file:
import Swinject
import SwinjectStoryboard
final class ApplicationAssembly {
//Use default dependency
class var assembler: Assembler {
return Assembler([ApplicationModuleAssembly()])
}
var assembler: Assembler
//If you want use custom Assembler
init(with assemblies: [Assembly]) {
assembler = Assembler(assemblies)
}
}
//Inject dependency in Main Storyboard
extension SwinjectStoryboard {
@objc class func setup() {
defaultContainer = ApplicationAssembly.assembler.resolver as! Container
}
}
Russian Federation, Saint-Petersburg, 2019 Yastrebov A.A.