ワンクリックで
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.