원클릭으로
swift-patterns
State management, navigation, code style, naming conventions, common patterns, testing, and build commands.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
State management, navigation, code style, naming conventions, common patterns, testing, and build commands.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Implement UI from Figma designs via MCP with a closed-loop pixel-parity check. Extract exact values (never eyeball), translate to SwiftUI, then render→diff→fix against the Figma export until it matches. Use when implementing or auditing UI against Figma.
HTTP networking layer reference — TargetType, HTTPClient, services, error handling.
Fetch CodeRabbit review comments from batch PRs and auto-fix the issues. Pushes fixes and re-requests review.
Run multiple tasks overnight as parallel PRs. Produces a PRD per task, selects skills/rules, spawns isolated agents, and reports PR links.
Run multiple tasks overnight as parallel PRs. Produces a PRD per task, selects skills/rules, spawns isolated agents, and reports PR links.
Run SwiftLint and xcodebuild to verify the project compiles cleanly.
| name | swift-patterns |
| description | State management, navigation, code style, naming conventions, common patterns, testing, and build commands. |
| user-invocable | false |
Singletons injected via environmentObject from VultisigApp.swift:
@EnvironmentObject var appViewModel: AppViewModel
@EnvironmentObject var homeViewModel: HomeViewModel
@EnvironmentObject var settingsViewModel: SettingsViewModel
class MyFeatureViewModel: ObservableObject {
@Published var items: [Item] = []
@Published var isLoading = false
@Published var error: String?
func loadItems() async {
isLoading = true
defer { isLoading = false }
do {
items = try await service.getItems()
} catch {
self.error = error.localizedDescription
}
}
}
@State private var showSheet = false
@State private var selectedItem: Item?
enum MyFeatureRoute: Hashable {
case list
case detail(item: Item)
case edit(item: Item)
}
struct MyFeatureRouter {
@ViewBuilder
func build(_ route: MyFeatureRoute) -> some View {
switch route {
case .list: MyListView()
case .detail(let item): MyDetailView(item: item)
case .edit(let item): MyEditView(item: item)
}
}
}
@Environment(\.router) var router
router.navigate(to: MyFeatureRoute.detail(item: item))
router.navigateBack()
router.replace(to: MyFeatureRoute.list)
Register in ContentView.swift:
.navigationDestination(for: MyFeatureRoute.self) { route in
router.myFeatureRouter.build(route)
}
| Type | Pattern | Example |
|---|---|---|
| Screens | *Screen.swift | HomeScreen.swift, VaultSettingsScreen.swift |
| Components | *View.swift | VaultCellView.swift |
| ViewModels | *ViewModel.swift | HomeViewModel.swift |
| Services | *Service.swift | THORChainAPIService.swift |
| API Endpoints | *API.swift | THORChainAPI.swift |
| Routes | *Route.swift | HomeRoute.swift |
| Routers | *Router.swift | HomeRouter.swift |
| Models | Descriptive name | THORChainPoolResponse.swift |
| Errors | *Error.swift | THORChainAPIError.swift |
Codable for all API modelsstruct over class unless reference semantics neededResult typestruct MyView: View {
@State private var data: [Item] = []
@State private var isLoading = true
var body: some View {
Group {
if isLoading { ProgressView() }
else { List(data) { item in ItemRow(item: item) } }
}
.task { await loadData() }
}
private func loadData() async {
defer { isLoading = false }
do { data = try await service.getData() }
catch { /* handle error */ }
}
}
actor MyCache {
private var cachedData: [Item]?
private var lastFetch: Date?
private let cacheDuration: TimeInterval = 300
func getCachedData() -> [Item]? {
guard let data = cachedData, let lastFetch,
Date().timeIntervalSince(lastFetch) < cacheDuration
else { return nil }
return data
}
func cacheData(_ data: [Item]) {
cachedData = data
lastFetch = Date()
}
}
Reference: Blockchain/THORChain/API/THORChainAPICache.swift
Use the Makefile at repo root (see /make skill):
make bootstrap # first-time setup (installs tools + generates xcodeproj)
make generate # regenerate xcodeproj after project.yml or source changes
make test # run unit tests
make ui_test # run UI tests
Never invoke xcodebuild directly for routine tasks — go through make so CI and local stay consistent.