[2026-04-28] Add apple-browsers .cursor rules (43 files) + executor v2 context
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
---
|
||||
source: ~/DuckDuckGo/apple-browsers.git/main/.cursor/rules/architecture.mdc
|
||||
confidence: 0.9
|
||||
namespace: work
|
||||
last_synced: 2026-04-28
|
||||
alwaysApply: false
|
||||
---
|
||||
|
||||
# DuckDuckGo Browser Architecture Guidelines
|
||||
|
||||
## Overall Architecture
|
||||
- This is a multi-platform monorepo supporting iOS and macOS browsers
|
||||
- Shared code lives in `SharedPackages/` directory
|
||||
- Platform-specific code in `iOS/` and `macOS/` directories
|
||||
- Follow modular architecture with clear separation of concerns
|
||||
|
||||
## Architecture Patterns
|
||||
|
||||
### MVVM for SwiftUI Views
|
||||
- Use MVVM pattern for all SwiftUI views
|
||||
- ViewModels should conform to `ObservableObject`
|
||||
- Use `@Published` properties for reactive updates
|
||||
- Keep ViewModels testable and free from UI concerns
|
||||
|
||||
Example:
|
||||
```swift
|
||||
class FeatureViewModel: ObservableObject {
|
||||
@Published var state: FeatureState = .idle
|
||||
private let service: FeatureServiceProtocol
|
||||
|
||||
init(service: FeatureServiceProtocol) {
|
||||
self.service = service
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Coordinator Pattern
|
||||
- Use coordinators for navigation and flow control
|
||||
- Main app flow managed by `MainCoordinator`
|
||||
- Create feature-specific coordinators as needed
|
||||
- Coordinators handle navigation logic, not views
|
||||
|
||||
### Dependency Injection
|
||||
- Use constructor injection for dependencies
|
||||
- Define protocols for all dependencies
|
||||
- Use `AppDependencyProvider` for shared dependencies
|
||||
- Keep dependencies explicit and testable
|
||||
|
||||
## Code Organization
|
||||
|
||||
### Feature-Based Structure
|
||||
- Organize code by features, not layers
|
||||
- Each feature should have its own folder containing:
|
||||
- Views (SwiftUI/UIKit)
|
||||
- ViewModels
|
||||
- Services
|
||||
- Models
|
||||
- Tests
|
||||
|
||||
### File Naming Conventions
|
||||
- ViewModels: `FeatureNameViewModel.swift`
|
||||
- Views: `FeatureNameView.swift` (SwiftUI) or `FeatureNameViewController.swift` (UIKit)
|
||||
- Services: `FeatureNameService.swift`
|
||||
- Protocols: `FeatureNameProtocol.swift` or embed in main file
|
||||
|
||||
### Extension Organization
|
||||
- Split large classes into focused extensions
|
||||
- Name extensions descriptively: `MainViewController+Email.swift`
|
||||
- Group related functionality in extensions
|
||||
|
||||
## Privacy-First Design
|
||||
- All features must consider privacy implications
|
||||
- Use secure storage for sensitive data
|
||||
- Implement proper data clearing mechanisms
|
||||
- Follow fireproofing patterns where applicable
|
||||
|
||||
## Testing Requirements
|
||||
- Write unit tests for all ViewModels and Services
|
||||
- Test files should mirror source structure
|
||||
- Use mock objects for dependencies
|
||||
- Test async code with Combine publishers
|
||||
Reference in New Issue
Block a user