← ClaudeAtlas

arch-viperlisted

VIPER for UIKit. Five-component module per screen — View, Interactor, Presenter, Entity, Router — plus Builder. Use for large UIKit codebases with multi-team ownership or regulated domains. Reject for SwiftUI-first and small teams.
kbelasheuski/ios-architecture-skills · ★ 0 · Web & Frontend · score 70
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