Agent skill
swift
Comprehensive Swift and Apple platform development skill for building native iOS, macOS, tvOS, and iPadOS apps. Use when creating Swift projects, building SwiftUI views, implementing Swift concurrency (async/await, actors), working with SwiftData or Core Data, configuring Xcode projects, signing and capabilities, implementing platform-specific features (WidgetKit, App Intents, Live Activities), or troubleshooting Swift/Xcode issues.
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/other/swift-yebot-rad-cc-plugins
SKILL.md
Swift & Apple Platform Development
Build native apps for iOS, macOS, tvOS, and iPadOS using Swift and SwiftUI.
Instructions
- For SwiftUI views, modifiers, and state management, see references/swiftui-reference.md
- For async/await, actors, and structured concurrency, see references/swift-concurrency.md
- For MVVM, @Observable, and SwiftData patterns, see references/app-architecture.md
- For iOS/macOS/tvOS/iPadOS specific APIs, see references/platform-apis.md
- For Xcode configuration, signing, and App Store, see references/xcode-distribution.md
- PROACTIVELY use WebSearch to find current Apple Developer Documentation when you need deeper information on any Apple framework or API not covered in local references
- PROACTIVELY fetch https://www.swift.org/documentation/ for Swift language documentation and evolution proposals
Online Documentation Resources
When local references don't cover what you need:
| Topic | URL |
|---|---|
| Apple Developer Docs | https://developer.apple.com/documentation/ |
| Swift Language Guide | https://docs.swift.org/swift-book/documentation/the-swift-programming-language/ |
| SwiftUI Docs | https://developer.apple.com/documentation/swiftui |
| Swift Concurrency | https://docs.swift.org/swift-book/documentation/the-swift-programming-language/concurrency/ |
| SwiftData | https://developer.apple.com/documentation/swiftdata |
| Human Interface Guidelines | https://developer.apple.com/design/human-interface-guidelines/ |
| App Store Review Guidelines | https://developer.apple.com/app-store/review/guidelines/ |
Quick Start
# Create new Xcode project (use Xcode GUI or swift package init)
mkdir MyApp && cd MyApp
swift package init --type executable --name MyApp
# For iOS/macOS apps, use Xcode:
# File → New → Project → App
# Choose SwiftUI for Interface, Swift for Language
Reference Files
Load these based on the task at hand:
| Task | Reference File |
|---|---|
| SwiftUI views, modifiers, state (@State, @Binding, @Observable) | references/swiftui-reference.md |
| async/await, actors, Task, structured concurrency | references/swift-concurrency.md |
| MVVM architecture, SwiftData, dependency injection | references/app-architecture.md |
| Platform-specific APIs (iOS, macOS, tvOS, iPadOS) | references/platform-apis.md |
| Xcode setup, signing, capabilities, App Store submission | references/xcode-distribution.md |
Project Structure
MyApp/
├── MyApp.xcodeproj # Xcode project
├── MyApp/
│ ├── MyAppApp.swift # @main App entry point
│ ├── ContentView.swift # Root view
│ ├── Views/ # SwiftUI views
│ │ ├── HomeView.swift
│ │ └── DetailView.swift
│ ├── Models/ # Data models
│ │ └── Item.swift
│ ├── ViewModels/ # View models (@Observable)
│ │ └── HomeViewModel.swift
│ ├── Services/ # API, persistence, etc.
│ │ └── DataService.swift
│ ├── Resources/
│ │ └── Assets.xcassets
│ └── Info.plist
├── MyAppTests/
└── MyAppUITests/
Essential Patterns Quick Reference
App Entry Point
import SwiftUI
@main
struct MyAppApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
SwiftUI View with State
import SwiftUI
struct CounterView: View {
@State private var count = 0
var body: some View {
VStack {
Text("Count: \(count)")
.font(.largeTitle)
Button("Increment") {
count += 1
}
.buttonStyle(.borderedProminent)
}
.padding()
}
}
@Observable ViewModel (iOS 17+)
import SwiftUI
import Observation
@Observable
class HomeViewModel {
var items: [Item] = []
var isLoading = false
var error: Error?
func loadItems() async {
isLoading = true
defer { isLoading = false }
do {
items = try await ItemService.shared.fetchItems()
} catch {
self.error = error
}
}
}
struct HomeView: View {
@State private var viewModel = HomeViewModel()
var body: some View {
List(viewModel.items) { item in
Text(item.name)
}
.task {
await viewModel.loadItems()
}
}
}
Navigation (iOS 16+)
import SwiftUI
struct RootView: View {
@State private var path = NavigationPath()
var body: some View {
NavigationStack(path: $path) {
List {
NavigationLink("Go to Detail", value: "detail-id")
}
.navigationDestination(for: String.self) { id in
DetailView(id: id)
}
.navigationTitle("Home")
}
}
}
Async/Await
func fetchData() async throws -> [Item] {
let url = URL(string: "https://api.example.com/items")!
let (data, response) = try await URLSession.shared.data(from: url)
guard let httpResponse = response as? HTTPURLResponse,
httpResponse.statusCode == 200 else {
throw APIError.invalidResponse
}
return try JSONDecoder().decode([Item].self, from: data)
}
// Usage in SwiftUI
.task {
do {
items = try await fetchData()
} catch {
self.error = error
}
}
SwiftData Model (iOS 17+)
import SwiftData
@Model
class Item {
var name: String
var createdAt: Date
var category: Category?
init(name: String, createdAt: Date = .now) {
self.name = name
self.createdAt = createdAt
}
}
// In App
@main
struct MyAppApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
.modelContainer(for: Item.self)
}
}
// In View
struct ItemsView: View {
@Query var items: [Item]
@Environment(\.modelContext) private var modelContext
var body: some View {
List(items) { item in
Text(item.name)
}
}
func addItem() {
let item = Item(name: "New Item")
modelContext.insert(item)
}
}
Common Xcode Commands
# Build from command line
xcodebuild -project MyApp.xcodeproj -scheme MyApp -configuration Debug build
# Run tests
xcodebuild test -project MyApp.xcodeproj -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 15'
# Archive for distribution
xcodebuild archive -project MyApp.xcodeproj -scheme MyApp -archivePath MyApp.xcarchive
# List available simulators
xcrun simctl list devices
# Boot a simulator
xcrun simctl boot "iPhone 15"
# Install app on simulator
xcrun simctl install booted MyApp.app
Troubleshooting
Common Issues
"Cannot find type 'X' in scope"
- Check import statements
- Verify target membership of files
- Clean build folder: Cmd+Shift+K
SwiftUI preview not working
- Check for compile errors in the file
- Restart Xcode
- Clean derived data:
rm -rf ~/Library/Developer/Xcode/DerivedData
Signing issues
- Open Signing & Capabilities in Xcode
- Select your team
- Let Xcode manage signing automatically
"Module 'X' was not compiled with library evolution support"
- Clean build folder
- Delete derived data
- Restart Xcode
Best Practices
- Use SwiftUI for all new UI work
- Prefer @Observable over ObservableObject (iOS 17+)
- Use async/await instead of completion handlers
- Follow Apple HIG for each platform
- Support Dynamic Type for accessibility
- Use SF Symbols for icons
- Test on real devices before release
- Use SwiftData over Core Data for new projects (iOS 17+)
- Implement proper error handling with Result or throws
- Keep views simple - extract logic to view models
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
Didn't find tool you were looking for?