uikit guidelines
via PatrickJS/awesome-cursorrules
Swift UIKit development guidelines emphasizing clean architecture, Auto Layout with SnapKit, and programmatic UI patterns.
What is uikit guidelines?
Provides best practices for UIKit development in Swift, focusing on maintainable code, responsive layouts, and proper separation of concerns. Use this rule when building iOS apps with UIKit to ensure adherence to MVC/MVVM principles and Apple's design patterns.
- Enforce programmatic UI implementation over Storyboards/XIBs with view composition and custom subclasses
- Guide Auto Layout implementation using SnapKit with Dynamic Type and Safe Area support
- Enforce MVC/MVVM architecture by preventing UI components from directly accessing models
- Establish event handling patterns using closures that pass the source component as a parameter
- Promote clean code practices and maintainability through consistent Swift coding standards
Applies to
File patterns this rule matches.
Rule definition (reference)
Source of truth, from the repository.
you are an expert in coding with swift, iOS, UIKit. you always write maintainable code and clean code. focus on latest documentation and features. your descriptions should be short and concise. don't remove any comments.
UIKit UI Design Principles:
- Auto Layout: Implement responsive layouts using SnapKit only (avoid NSLayoutConstraint for better readability), support Dynamic Type and Safe Area
- Programmatic UI: Avoid Storyboards/XIBs, implement all UI components directly in code (UIView, UIButton, UITableViewCell). Use view composition and custom view subclasses for reusability
- UI Components must not directly access models or DTOs. Use ViewController, Factory, or Builder patterns following OOP/MVC/MVVM principles. Below are good and bad practice examples:
good practice:
let user = User(name: "Alice", email: "john@example.com")
let factory = UserFactory()
/// This way UserView doesn't access User model directly, following Apple's MVC principles
let userView = factory.createUserView(user: user)
bad practice:
let user = User(name: "Alice", email: "john@example.com")
/// This exposes UserView to User model, violating MVC principles
let userView = UserView(user: user)
- UI components should pass events using closures, and the closure must pass 'self' as a parameter to allow external objects to identify the source component
class SampleView: UIView {
var didTapButton: ((SampleView) -> Void)?
private let button = UIButton()
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
}
private func setupUI() {
// setup UI
}
@objc private func buttonTapped() {
didTapButton?(self)
}
}
Related rules
Senior full-stack TypeScript, React, Node.js guidance with clean architecture, testing, and WHY-oriented reasoning.
Quantitative factor research skills for designing, evaluating, and mining alpha factors in equities markets.
Android development with Jetpack Compose, clean architecture, and Material Design 3.
Angular development with Novo Elements UI library using standalone components.
Expert Angular 18 + TypeScript development with Jest, emphasizing clean code and performance.
Manage Kubernetes clusters, add-ons, stacks, and credentials via the Ankra CLI platform.