Viper Module Generator
Gem to generate VIPER modules to use them in your Objective-C/Swift projects The implementation scheme returned by this generator is hardly inspired in the example and post of Objc.io, http://www.objc.io/issue-13/viper.html .
- Viper files structure
- How to install vipergen
- How to generate a VIPER module with a given name?
- Developer tips
- Generates the module in Swift and Objective-C
- Ready to be installed as a gem https://rubygems.org/gems/VIPERGen
templatescommand to know which templates are available
- YAML file in each template with the information about the template (more scalable)
- Added default template
- Fully components tested
- VIPER Example using the Twitter API
- Default template implemented in Swift
Expected in version 0.3
- Integrate with XCode as a plugin (http://nshipster.com/xcode-plugins/)
Viper files structure
.objc +-- DataManager | +-- VIPERDataManager.h | +-- VIPERDataManager.m +-- Interactor | +-- VIPERInteractor.h | +-- VIPERInteractor.m | +-- VIPERInteractorSpec.m +-- Presenter | +-- VIPERPresenter.h | +-- VIPERPresenter.m | +-- VIPERPresenterSpec.m +-- ViewController | +-- VIPERViewController.h | +-- VIPERViewController.m | +-- VIPERViewControllerSpec.m +-- WireFrame | +-- VIPERWireFrame.h | +-- VIPERWireFrame.m +-- Protocols | +-- VIPERProtocols.h .swift +-- DataManager | +-- VIPERDataManager.swift +-- Interactor | +-- VIPERInteractor.swift | +-- VIPERInteractorTests.swift +-- Presenter | +-- VIPERPresenter.swift | +-- VIPERPresenterTests.swift +-- View | +-- VIPERView.swift | +-- VIPERViewTests.swift +-- WireFrame | +-- VIPERWireFrame.swift +-- Protocols | +-- VIPERProtocols.swift
How to install vipergen ?
You can install it easily as using the gem. With ruby installed in your OSX execute:
sudo gem install vipergen-xctestable
If everything were right, you should have now the vipergem command available in your system console
How to generate a VIPER module with a given name?
You have just to execute the following command
vipergen generate MyFirstViperModule --path=~/myproject/shared
And then the files structure will be automatically created. Don't forget to add this folder to your project dragging it into the XCode/Appcode inspector
What options are available in generator?
You have just to execute the following command
vipergen help generate
And then you will see all options available
vipergen-xctestable generate <Module_Name> --path=<Path> --language=swift --author='michal' --template=testable --swift-module <MY_Project>
How can I try the demo project?
- Clone the repo
git clone https://github.com/pepibumur/viper-module-generator.git
- Move into the repo folder and update the git submodules
git sumodule update --init
- In the folder VIPERGenDemo install the pods
- Open the project from the
- Enjoy it!
Update the gem
When the gem is updated it has to be reported to the gem repository. I followed this tutorial http://amaras-tech.co.uk/article/43/Creating_executable_gems that basically says that once you have your gem ready execute:
gem build vipergen.gemspec gem install vipergen-xctestable-0.3.0.gem gem push vipergen-xctestable-0.3.0.gem
Then you'll be asked for your credentials in order to make the update in the repo (http://guides.rubygems.org/publishing/)
Add a new template
Are you interested in VIPER and you would like to contribute with this gem adding new templates? Feel free to do it. It's pretty easy. You've just to:
- Create a folder inside
templateswith the name of your template
- You'll have to create inside the templates in both languages, Swift and Objective-C (get inspired from existing templates)
- Use the word VIPER where you want the name to be replaced in.
- Remember to add the file viperspec.yml with the description of your template as below:
author: pepi author_email: firstname.lastname@example.org template_description: Default template with the simplest structure using VIPER updated_at: 2014-08-24
- Report it as a PR in this repo updating the gem version in Gemspec.
- default by pepimbur
- testable by wojtysim (includes Spec file templates for Interactor, Presenter and View)
- xctestable by hhtopcu (Swift 3.0 compliant and XCTest copmliant)
- Redbooth presentation: https://speakerdeck.com/sergigracia/clean-architecture-viper
- Rspec documentation: http://rubydoc.info/gems/rspec-expectations/frames
- XCode Plugins: http://nshipster.com/xcode-plugins/
- XCodeProj gem (to modify project groups structure): https://github.com/CocoaPods/Xcodeproj
- Thor, powerful Ruby library for command line: http://whatisthor.com/
- Cocoa Design Patters: https://developer.apple.com/legacy/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaDesignPatterns/CocoaDesignPatterns.html
If you have any doubt about the gem or even if you want to make any suggestion you can do it directly to my email address, email@example.com . You can use the issues Github page too