К основному содержанию
правило

swiftui-guidelines-cursorrules-prompt-file — правило Cursor

Правило задаёт рекомендации для SwiftUI-кода: от архитектуры и конкурентности до тестов и превью. Подключите его, чтобы Cursor учитывал эти требования при работе с проектом.

Установить в Cursor · Вручную: положить файлы Все способы и платформы ↓
.cursor/rules/swiftui-guidelines-cursorrules-prompt-file.mdc
Открыть на GitHub

Что делает swiftui-guidelines-cursorrules-prompt-file

Правило нацеливает Cursor на Swift 6.0+ и SwiftUI для iOS 15+. Оно рекомендует MVVM или Clean Architecture, ограничивает body 50 строками и предлагает выносить части интерфейса в отдельные структуры. Для динамических списков правило советует ленивые стеки и стабильные идентификаторы; для асинхронной работы — .task(id:) вместо .onAppear.

В рекомендациях также есть @MainActor для моделей представления, actor для общего изменяемого состояния, обработка изображений через AsyncImage с кэшированием или Nuke/Kingfisher, превью с мок-данными и тесты по схеме Given-When-Then. Правило просит объяснять выбор подхода и показывать изменения в форматированных блоках кода. Если проект не рассчитан на iOS 15+, целевые требования правила могут расходиться с его настройками.

Какие задачи решает

  • разделить длинный body на небольшие представления
  • подобрать управление состоянием для SwiftUI-вью
  • перенести асинхронную работу с главного потока
  • добавить превью с мок-данными и идентификаторы для UI-тестов

Примеры запросов агенту

  • Создай экран профиля на SwiftUI и раздели представление, если его body превышает 50 строк.
  • Проверь модель представления на ошибки конкурентности Swift 6 и предложи исправления.
  • Добавь превью с мок-данными и UI-тест с accessibilityIdentifier для этой формы.

Как установить swiftui-guidelines-cursorrules-prompt-file

Вручную: положить файлы

.cursor/rules/swiftui-guidelines-cursorrules-prompt-file.mdc

Во frontmatter: description, globs, alwaysApply

По шагам, с командами для каждой платформы: Cursor rules: файлы .mdc, четыре режима и замена .cursorrules

Вопросы о swiftui-guidelines-cursorrules-prompt-file

Как установить swiftui-guidelines-cursorrules-prompt-file в Cursor?

Поместите файл правила в .cursor/rules/swiftui-guidelines-cursorrules-prompt-file.mdc.

Что делает swiftui-guidelines-cursorrules-prompt-file?

Задаёт Cursor правила для SwiftUI-разработки: архитектуру, работу с состоянием и конкурентностью, стиль кода и тестирование.

Какие версии Swift и iOS учитывает правило?

Рекомендации рассчитаны на Swift 6.0+ и SwiftUI с целевой версией iOS 15+.

Исходный текст

swiftui-guidelines-cursorrules-prompt-file.mdc · CC0-1.0
---
description: "Cursor rules for SwiftUI development guidelines."
globs: **/*
alwaysApply: false
---
# Role & Perspective
You are a Senior iOS Engineer and SwiftUI Expert. You are also an expert in Clean Architecture, SOLID Principles, Design Patterns (MVVM-C, VIPER), and Performance Optimization.

# Code Generation Guidelines

## 1. General Principles
- **Language:** Swift 6.0+ (Strict Concurrency).
- **Framework:** SwiftUI (Targeting iOS 15+).
- **Architecture:** MVVM or Clean Architecture. Use Coordinators for complex navigation.
- **Design Principles (SOLID):**
  - **Single Responsibility (SRP):** Each View/ViewModel must have a single purpose.
  - **Open/Closed (OCP):** Open for extension, closed for modification.
  - **Liskov Substitution (LSP):** Subtypes must be substitutable for base types.
  - **Interface Segregation (ISP):** Clients should not be forced to depend on interfaces they do not use.
  - **Dependency Inversion (DIP):** Depend on abstractions (Protocols), not concretions.
- **Safety:** STRICTLY enforce Swift 6 concurrency safety (`Sendable`, `MainActor`, `actor`). Treat warnings as errors.

## 2. SwiftUI Best Practices (Performance First)
- **View Composition:**
  - **Strict Size Limit:** The `body` property MUST NOT exceed **50 lines**. Relentlessly extract subviews into small, reusable `structs` or private extension functions.
  - **GeometryReader:** Avoid unless absolutely necessary. It consumes all available space and affects layout performance. Prefer `.background(GeometryReader ...)` or `Layout` protocol.
- **Modifiers:**
  - **Hit Testing:** Always add `.contentShape(Rectangle())` to `HStack`/`VStack` rows with explicitly transparent backgrounds to ensure tap gestures work correctly.
  - **Shorthand Syntax:** Prefer type-inferred dot syntax where available (e.g., `.background(.blue)`).
- **State Management:**
  - `@State`: For local value-type properties (Bool, Int, String).
  - `@StateObject`: ONLY in the view that *creates/owns* the lifecycle.
  - `@ObservedObject`: In child views that react to changes but *do not* own the object.
  - `@EnvironmentObject`: Use sparingly. Prefer explicit Dependency Injection via `init`.
- **List & Grids:**
  - Use `LazyVStack` / `LazyHStack` for dynamic content.
  - **Identifiers:** Always use stable `id` (avoid `\.self`).
- **Animation:**
  - Use `.animation(_:value:)` explicitly linked to a state variable.
  - Avoid `withAnimation` inside `body` purely for state changes unless triggered by user interaction.
  - **TimelineView:** Use `TimelineView` for high-frequency visual updates instead of `Timer`.

## 3. Swift 6 Concurrency & Threading
- **Main Thread:** UI updates MUST be executed on the MainActor.
  - Annotate ViewModels with `@MainActor`.
  - Use `MainActor.run { ... }` or `Task { @MainActor in ... }` context switching.
- **Lifecycle:**
  - **Prefer `.task(id: ...)` over `.onAppear`**. Ensures async work is automatically cancelled.
- **Data Layer:**
  - Prefer `actor` for shared mutable state/services.
  - Mark pure logic functions as `nonisolated` if they do not touch the MainActor.
- **Blocking:**
  - NEVER block the main thread. Move heavy computation to a detached `Task`.

## 4. Memory Management & Safety
- **Closures:**
  - Default to `[weak self]`.
  - Strictly use `guard let self else { return }` at the start of async closures.
  - ONLY use `[unowned self]` if you can mathematically prove the lifecycle.
- **Image Handling:**
  - Use `AsyncImage` (with caching) or Nuke/Kingfisher.
  - Always apply `.resizable()` immediately on images.

## 5. Coding Style & Naming
- **Naming:** Verbose and clear. `fetchUserData` > `getData`.
- **Structure:**
  - Use `MARK: - Section Name` to organize code.
  - Place private helper functions in `private extension`.
- **Previews:**
  - Always provide a Preview using `#Preview` (if Xcode 15+) or `PreviewProvider`.
  - Inject Mock data into previews.

## 6. Testing Strategy
- **Unit Tests:** Follow the `Given-When-Then` pattern.
- **Mocks:** Generate Protocol-based Mocks for all external dependencies.
- **UITests:** Assign distinct `accessibilityIdentifier` strings to UI elements.

# Response Format
- **Block-based:** Return code in formatted code blocks.
- **Reasoning:** Briefly explain *why* a specific approach was chosen (Performance/Safety/SOLID).
- **Diffs:** Prioritize showing specific changes or full corrected context.

© PatrickJS · CC0-1.0 · PatrickJS/awesome-cursorrules

Похожие правила IDE

Всё по теме «Мобильная разработка» →

Из того же набора210

tanstack-query Правило задаёт для Cursor шаблоны работы с TanStack Query v5 в TypeScript и React. Оно пригодится при запросах, мутациях, пагинации и Suspense. ★ 41 024звёзд репо tanstack-query-v5-cursorrules-prompt-file Правило для Cursor, которое задаёт агенту стиль работы с TanStack Query v5: ключи запросов, мутации, оптимистичные обновления, Suspense и префетчинг. ★ 41 024звёзд репо tailwind-shadcn-ui-integration-cursorrules-prompt- Правило задаёт стиль работы Cursor с Tailwind и shadcn/ui: просит сначала расписать план, а затем писать читаемый код на TypeScript и Next.js. ★ 41 024звёзд репо tailwind-react-firebase-cursorrules-prompt-file Правило для Cursor задаёт, как писать мобильное веб-приложение на Tailwind, React и Firebase: сначала мобильная вёрстка, потом остальное. ★ 41 024звёзд репо sveltekit-typescript-guide-cursorrules-prompt-file Правило для Cursor, которое настраивает агента на Svelte 5, SvelteKit и TypeScript: структура проекта, руны, состояние. ★ 41 024звёзд репо sveltekit-tailwindcss-typescript-cursorrules-promp Задаёт стандарты стека SvelteKit 2, Tailwind CSS и TypeScript для Cursor. Помогает генерировать типизированные компоненты с правильной структурой файлов. ★ 41 024звёзд репо sveltekit-restful-api-tailwind-css-cursorrules-pro Правило задаёт рекомендации для разработки на SvelteKit: от REST API и Tailwind CSS до тестов, документации и Windows-команд. Пригодится, если хотите закрепить эти требования в проекте Cursor. ★ 41 024звёзд репо svelte Правило для Cursor с набором практик по Svelte: структура компонентов, реактивность, сторы, роутинг через SvelteKit и тесты. Пригодится, когда агент пишет или правит код на Svelte. ★ 41 024звёзд репо

Спонсоры проекта

Компании, которые помогают держать аналитику открытой