Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/codytwinton/swiftyviper
Swift Interaction with VIPER Architecture
https://github.com/codytwinton/swiftyviper
cocoapod ios swift swift-3 tvos viper viper-architecture viper-template
Last synced: 29 days ago
JSON representation
Swift Interaction with VIPER Architecture
- Host: GitHub
- URL: https://github.com/codytwinton/swiftyviper
- Owner: codytwinton
- License: mit
- Created: 2016-04-19T18:52:13.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2019-12-16T22:24:19.000Z (almost 5 years ago)
- Last Synced: 2024-10-13T14:40:31.041Z (about 1 month ago)
- Topics: cocoapod, ios, swift, swift-3, tvos, viper, viper-architecture, viper-template
- Language: Swift
- Homepage:
- Size: 2.36 MB
- Stars: 122
- Watchers: 7
- Forks: 14
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# SwiftyVIPER
![Header][main-image]
---
[![Language][lang-image]](https://swift.org/)
[![License][license-image]](LICENSE)
[![Platform][platform-image]](http://cocoapods.org/pods/SwiftyVIPER)[![Build Status][build-image]](https://travis-ci.org/codytwinton/SwiftyVIPER)
[![Docs Percentage][docs-image]](http://cocoadocs.org/docsets/SwiftyVIPER)
[![Code Coverage][codecov-image]](https://codecov.io/gh/codytwinton/SwiftyVIPER)
[![Code Beat][codebeat-image]](https://codebeat.co/projects/github-com-codytwinton-swiftyviper)[![Pod Version][pod-version-image]](http://cocoapods.org/pods/SwiftyVIPER)
[![Carthage Compatible][carthage-image]](https://github.com/Carthage/Carthage)SwiftyVIPER allows easy use of VIPER architecture throughout your iOS application.
## VIPER Architecture
What is VIPER? Great question! VIPER is a [backronym](https://en.wikipedia.org/wiki/Backronym) which stands for:
* View
* Interactor
* Presenter
* Entity
* RouterIf all of this is totally new for you, check out my running list of [VIPER Resources](#resources)
## Features
* [x] VIPER Module Templates
* [x] VIPER Unit Test Templates
* [x] Simple Module Initialization and Presentation
* [x] CocoaPods Support
* [x] Carthage Support## Requirements
* iOS 8.0+ | tvOS 9.0+
* Xcode 9
* Swift 4## Installation
### CocoaPods
You can use [CocoaPods](http://cocoapods.org/) to install `SwiftyVIPER` by adding it to your `Podfile`:
```ruby
source 'https://github.com/CocoaPods/Specs.git'
use_frameworks!
platform :ios, '8.0'def shared_pods
pod 'SwiftyVIPER', '~> 1.0'
endtarget 'MyApp' do
shared_pods
endtarget 'MyAppTests' do
shared_pods
end
```To get the full benefits import `SwiftyVIPER` wherever you import UIKit
``` swift
import UIKit
import SwiftyVIPER
```### Carthage
[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.
You can install Carthage with [Homebrew](http://brew.sh/) using the following command:
```bash
brew update
brew install carthage
```To integrate SwiftyVIPER into your Xcode project using Carthage, specify it in your `Cartfile`:
```ogdl
github "codytwinton/SwiftyVIPER" ~> 1.0
```Run `carthage update` to build the framework and drag the built `SwiftyVIPER.framework` into your Xcode project.
#### Manually
This is discouraged, but allowed. :D
1. Download and drop the ```Source``` folder in your project.
2. Congratulations!---
## Usage of SwiftyVIPER
### Installing Templates
If you're looking for VIPER architecture templates to use directly within Xcode, you can find these in the `/Templates/VIPER` folder. Open your terminal and run:
```bash
cd PATH/TO/REPO
```Then, simply run this command in your terminal:
```bash
mkdir -p ~/Library/Developer/Xcode/Templates/File\ Templates
cp -R Templates/VIPER ~/Library/Developer/Xcode/Templates/File\ Templates
```### Adding a Module
Once you've installed the VIPER Templates, you're ready to add a module. Select `File > New > File` or use press `⌘N` to bring up the template selector. You'll find the templates at the bottom.
Choose `Module` for a normal module, `Module Storyboard` for a normal module that interacts with Storyboards, or `Module Tests` for a module unit tests template.
![Choice](Assets/Template Choice.png)
Next, choose the Module name. We'll go with `Custom`.
![Name](Assets/Template Name.png)
This will create 5 files per module:
* `CustomModule.swift`
* `CustomViewController.swift`
* `CustomPresenter.swift`
* `CustomRouter.swift`
* `CustomInteractor.swift`Don't forget to target your main app. Once you've added the main template, go ahead and add the Unit Test template. **Make sure it's the same name!** In this case, we'd stay with `Custom`.
### Using SwiftyVIPER
Simply add a new module using the VIPER template. Once done, simply call:
```swift
import SwiftyVIPERCustomModule().present(from: self.viewController, style: .coverVertical, completion: nil)
```The module will handle the rest, including initializing and attaching all the connections necessary for the Module to show properly.
## Contribute
We would love for you to contribute to **SwiftyVIPER**, check the ``LICENSE`` file for more info. Pull Requests welcome!
## Resources
* [mutualmobile.com](https://mutualmobile.com/posts/meet-viper-fast-agile-non-lethal-ios-architecture-framework)
* [objc.io](https://www.objc.io/issues/13-architecture/viper/)
* [ckl.io](https://www.ckl.io/blog/ios-project-architecture-using-viper/)
* [stackoverflow.com](http://stackoverflow.com/questions/35132664/why-protocols-are-used-in-both-direction-in-viper-architecture-rather-than-in-on)
* [yalantis.com](https://yalantis.com/blog/tree-of-models-as-an-alternative-app-architecture-model/)
* [medium.com](https://medium.com/mobile-travel-technologies/architecting-mobile-apps-with-b-viper-modules-e94e277c8d68)
* [speakerdeck.com](https://speakerdeck.com/sergigracia/clean-architecture-viper)
* [brigade.engineering](https://brigade.engineering/brigades-experience-using-an-mvc-alternative-36ef1601a41f#.tezoetq87)## Meta
* Cody Winton – [@codytwinton](https://twitter.com/codytwinton)
* Distributed under the MIT license. See [LICENSE][license-url] for more information.
* Inspired by [ViperMcFlurry](https://github.com/rambler-digital-solutions/ViperMcFlurry)
* README edited with [StackEdit](https://stackedit.io/)[main-image]: Assets/SwiftyVIPER.png
[build-image]: https://travis-ci.org/codytwinton/SwiftyVIPER.svg?branch=master
[carthage-image]: https://img.shields.io/badge/Carthage-compatible-4BC51D.svg
[codebeat-image]: https://codebeat.co/badges/74c04e5b-e6a2-4baa-9e09-5b08d87dcabc
[codecov-image]: https://codecov.io/gh/codytwinton/SwiftyVIPER/branch/master/graph/badge.svg
[docs-image]: https://img.shields.io/cocoapods/metrics/doc-percent/SwiftyVIPER.svg
[lang-image]: https://img.shields.io/badge/swift-4.0-orange.svg
[license-image]: https://img.shields.io/github/license/codytwinton/SwiftyVIPER.svg
[platform-image]: https://img.shields.io/cocoapods/p/SwiftyVIPER.svg
[pod-version-image]: https://img.shields.io/cocoapods/v/SwiftyVIPER.svg