iOS Swift Patterns
Production-grade iOS development with Swift, SwiftUI, and UIKit.
Architecture
MVVM + Coordinator Pattern
View (SwiftUI/UIViewController)
↕ binds to
ViewModel (ObservableObject)
↕ calls
Service Layer (Networking, DB)
↕
Core Data / API
Key Principles
- Views are dumb: They render state and forward actions — no business logic
- ViewModels own state:
@Publishedproperties,@Stateonly for local UI - Services are stateless: Network calls, DB operations, analytics
- Coordinators handle navigation: Removing navigation from views makes them reusable
SwiftUI Best Practices
Performance
- Use
LazyVStack/LazyHStackfor large lists, notVStack - Mark views with
@MainActorexplicitly - Use
equatable()on complex views to prevent unnecessary re-renders - Prefer
@Statefor local,@StateObjectfor owned,@ObservedObjectfor passed-in
State Management
// Good: Clear separation
@MainActor
class UserViewModel: ObservableObject {
@Published var users: [User] = []
@Published var isLoading = false
func loadUsers() async {
isLoading = true
users = await userService.fetchUsers()
isLoading = false
}
}
App Store Submission Checklist
- No Hardcoded API keys
- TestFlight beta tested with real users
- Privacy manifest updated
- Screenshots for all required sizes
- App Store description and keywords ready
- Subscription/IAP products configured
Source: cosmicstack-labs/mercury-agent-skills — distributed by TomeVault.