Common iOS architecture anti-patterns to avoid: - Putting business logic in `UIViewController`. Keep controllers thin and move logic into a `ViewModel`, `Interactor`, or equivalent layer. - Letting the `ViewModel` depend on `UIKit`. A ViewModel should stay platform-light and focus on state, formatting, and behavior. - Exposing mutable ViewModel state publicly. Prefer `private(set)`, bindings, or publishers so the view can observe state without mutating it directly. - Skipping clear input/outp...
Scanned 9/5/2026
Install to Claude Code
npx -y skills add HoangNguyen0403/agent-skills-standard --skill ios-architecture --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Ios Architecture?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/hoangnguyen0403-ios-architecture-56914a87)More formats (shields.io, HTML) on the badges page.
Common iOS architecture anti-patterns to avoid:
- Putting business logic in `UIViewController`. Keep controllers thin and move logic into a `ViewModel`, `Interactor`, or equivalent layer.
- Letting the `ViewModel` depend on `UIKit`. A ViewModel should stay platform-light and focus on state, formatting, and behavior.
- Exposing mutable ViewModel state publicly. Prefer `private(set)`, bindings, or publishers so the view can observe state without mutating it directly.
- Skipping clear input/output boundaries. Define explicit events coming in from the view and explicit state/output going back.
- Handling navigation directly inside a `ViewController` with `navigationController?.pushViewController(...)`. Navigation should live in a Coordinator or Router.
- Constructing dependencies inside screens instead of injecting them. Services and repositories should be passed in from the composition/navigation layer.
- Forgetting to remove finished child coordinators. This often causes leaked flows and retained objects.
- Mixing formatting, networking, persistence, and navigation into one class. That creates “Massive View Controller” or “Massive ViewModel” problems.
- Breaking unidirectional flow in VIP/Clean Swift style architectures. Prefer a predictable flow such as View -> Interactor -> Presenter -> View.
- Choosing an architecture pattern but not enforcing its boundaries consistently. The anti-pattern is often not the pattern itself, but partial adoption that leaves responsibilities blurred.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!