Design Swift app architecture with MVVM, Clean Architecture, dependency injection, and repository patterns. Use when structuring iOS/macOS projects, creating ViewModels, implementing DI, or organizing code layers.
/plugin marketplace add fusengine/claude-code-plugins/plugin install fuse:swift-apple-expert@fusengine-pluginsThis skill inherits all available tools. When active, it can use any tool Claude has access to.
App/
├── Features/
│ └── UserProfile/
│ ├── Views/ProfileView.swift
│ ├── ViewModels/ProfileViewModel.swift
│ └── Models/User.swift
├── Core/
│ ├── Network/NetworkService.swift
│ ├── Persistence/DataRepository.swift
│ └── DI/Container.swift
└── Shared/
├── Components/
└── Extensions/
import Observation
@Observable
final class ProfileViewModel {
// State
var user: User?
var isLoading = false
var error: Error?
// Dependencies
private let repository: UserRepositoryProtocol
init(repository: UserRepositoryProtocol = UserRepository()) {
self.repository = repository
}
@MainActor
func loadUser(id: String) async {
isLoading = true
defer { isLoading = false }
do {
user = try await repository.fetch(id: id)
} catch {
self.error = error
}
}
}
protocol UserRepositoryProtocol: Sendable {
func fetch(id: String) async throws -> User
func save(_ user: User) async throws
}
final class UserRepository: UserRepositoryProtocol {
private let api: APIClientProtocol
private let cache: CacheProtocol
init(api: APIClientProtocol, cache: CacheProtocol) {
self.api = api
self.cache = cache
}
func fetch(id: String) async throws -> User {
if let cached: User = cache.get(key: id) { return cached }
let user = try await api.get("/users/\(id)")
cache.set(key: id, value: user)
return user
}
}
// Define environment key
private struct APIClientKey: EnvironmentKey {
static let defaultValue: APIClientProtocol = APIClient()
}
extension EnvironmentValues {
var apiClient: APIClientProtocol {
get { self[APIClientKey.self] }
set { self[APIClientKey.self] = newValue }
}
}
// Usage in App
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.environment(\.apiClient, APIClient())
}
}
}
| Layer | Contains | Depends On |
|---|---|---|
| Presentation | View, ViewModel | Domain |
| Domain | Entity, UseCase, Protocol | Nothing |
| Data | Repository, DataSource, DTO | Domain |
This skill should be used when the user asks to "create a hookify rule", "write a hook rule", "configure hookify", "add a hookify rule", or needs guidance on hookify rule syntax and patterns.
Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.