arch-viperlisted
Install: claude install-skill kbelasheuski/ios-architecture-skills
# VIPER
**Source references:**
- griddynamics/VIPER-SWIFT (fork of mutualmobile/VIPER-SWIFT, MIT) — https://github.com/griddynamics/VIPER-SWIFT
- objc.io, *Architecting iOS Apps with VIPER* (original article) — https://www.objc.io/issues/13-architecture/viper/
Conventions match the mutualmobile/griddynamics layout (Wireframe/Module/View/Interactor/Presenter).
## When to use
- Large UIKit codebases (≥ 80 screens) with multi-team ownership.
- Regulated domains where per-layer review trails matter.
- Reject for SwiftUI-first; reject for teams < 5.
## Folder structure
```
Features/
UserList/
UserListProtocols.swift
UserListEntities.swift
UserListInteractor.swift
UserListPresenter.swift
UserListViewController.swift
UserListRouter.swift
UserListBuilder.swift
UserDetail/
... (same six files)
```
## Reference implementation
The full worked `UserList + UserDetail` feature lives in **`examples/viper/`** —
the seven files per module (Protocols, Entities, Interactor, Presenter,
ViewController, Router, Builder), with `Domain` + `Data` + test fakes that follow
`skills/REFERENCE_FEATURE.md` (vendored per example). Key things to notice:
- **`UserList<X>Protocols.swift` is the contract hub** — View↔Presenter↔Interactor↔Router protocols in one file; everything else conforms to it.
- **The Presenter is the unit under test** — it holds no UIKit; the ViewController is a thin `view` conforming to the View protocol and is mocked in tests.
- **The Router