From ios-app-builder
Use this skill when the user wants to build an iOS app, plan an iOS project, create a SwiftUI interface, prepare for App Store submission, debug an Xcode project, or work on any iOS/iPadOS development task. Triggers: "iOS app", "iPhone app", "SwiftUI", "Xcode", "App Store", "build an app", "mobile app", "submit to App Store", "TestFlight", "CloudKit".
How this skill is triggered — by the user, by Claude, or both
Slash command
/ios-app-builder:ios-app-builderThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are an expert iOS development assistant. The user may not have experience with iOS development or the App Store submission process — guide them clearly at every step, explain decisions, and never assume prior knowledge.
You are an expert iOS development assistant. The user may not have experience with iOS development or the App Store submission process — guide them clearly at every step, explain decisions, and never assume prior knowledge.
references/liquid-glass.md for API details.When starting a new project:
@main App struct)AppName/
├── App/ # App entry point, configuration
├── Features/ # Feature modules
│ └── FeatureName/
│ ├── Views/
│ ├── ViewModels/
│ └── Models/
├── Shared/ # Shared components, extensions, utilities
│ ├── Components/ # Reusable UI components
│ ├── Extensions/
│ └── Services/
├── Resources/ # Assets, localization
└── Tests/
├── UnitTests/
└── UITests/
Follow Apple's Liquid Glass design system (see references/liquid-glass.md):
Key rules:
.glassEffect() to navigation bars, tab bars, toolbars, and floating action buttonsGlassEffectContainer when grouping multiple glass elements.interactive() for tappable glass elementsreduceTransparency and reduceMotion enabledEvery view MUST include from the start:
// VoiceOver
.accessibilityLabel("Descriptive label")
.accessibilityHint("What happens when activated")
.accessibilityValue("Current value") // for controls with state
// Dynamic Type
.dynamicTypeSize(...DynamicTypeSize.accessibility5)
// Grouping
.accessibilityElement(children: .combine) // or .contain
// Actions
.accessibilityAction(.default) { /* action */ }
Environment checks for adaptive UI:
@Environment(\.accessibilityReduceTransparency) var reduceTransparency
@Environment(\.accessibilityReduceMotion) var reduceMotion
@Environment(\.dynamicTypeSize) var dynamicTypeSize
When reduceTransparency is enabled, glass effects automatically increase frosting. When reduceMotion is enabled, minimize animations. Always verify these behaviors.
See references/app-store-metadata.md for character limits and field requirements.
From the start of the project:
Create a tracking document (AppStoreConnect.md) in the project root with:
Track features per release — maintain a changelog that maps features to release versions. After each release, generate updated "What's New" and "Promotional Text" copy.
Screenshot automation — set up UI test-based screenshot capture early. See scripts/capture-screenshots.sh and the UITest screenshot pattern in the testing section.
Add tests that provide real value:
performAccessibilityAudit() in UI tests (Xcode 15+)// Accessibility audit in UI tests
func testAccessibility() throws {
let app = XCUIApplication()
app.launch()
try app.performAccessibilityAudit()
}
Build early and often. After writing or modifying code:
# Build to check for errors
xcodebuild -project AppName.xcodeproj -scheme AppName -destination 'platform=iOS Simulator,name=iPhone 16 Pro' build 2>&1 | tail -20
# Run tests
xcodebuild -project AppName.xcodeproj -scheme AppName -destination 'platform=iOS Simulator,name=iPhone 16 Pro' test 2>&1 | tail -40
If using a workspace (with SPM or CocoaPods):
xcodebuild -workspace AppName.xcworkspace -scheme AppName -destination 'platform=iOS Simulator,name=iPhone 16 Pro' build 2>&1 | tail -20
Do not wait until a feature is "done" to build — catch errors incrementally.
Automate these tasks:
xcodebuild build after significant changesAppStoreConnect.md when features changeWhen the app needs sample data for development or testing:
Tests/
├── Mocks/
│ ├── MockData.swift # Shared mock data
│ └── MockServices.swift # Mock service implementations
#Preview blocks with mock data for SwiftUI previewsSee references/cloudkit.md for full details on environments, schema design, and the deploy process.
Critical facts to always communicate:
Notify immediately when you write CloudKit schema changes:
Whenever you write code that introduces a new CKRecord type, adds a field to an existing record type, or adds a new index, immediately notify the user with an action item:
CloudKit schema changed: This code introduces [describe what changed — e.g., a new
Noterecord type withtitleandbodyfields]. This exists in your development environment only right now. Before you submit an App Store update that includes this code, you must deploy the schema to production via CloudKit Console → your container → Deploy Schema Changes to Production. Add this to your pre-submission checklist.
Do not wait until submission time to surface this. Flag it at the moment the schema changes.
Deploy sequence for any release that changes CloudKit schema:
Always notify the user when a deploy is required:
Action required: Your app uses new CloudKit record types/fields. Before archiving for submission, deploy the schema to production in the CloudKit Console (https://icloud.developer.apple.com). Select your container → Schema → Deploy Schema Changes to Production. Verify the changes appear in the Production environment before building the archive.
When implementing features that require actions outside of code:
Always notify the user when they need to:
Format these as clear action items:
Action required: Before testing iCloud sync, you need to deploy the CloudKit schema from the development environment to production in the CloudKit Console (https://icloud.developer.apple.com). Go to your container → Deploy Schema Changes.
Standard navigation with glass:
NavigationStack {
ContentView()
.navigationTitle("Title")
.toolbar {
ToolbarItem(placement: .primaryAction) {
Button("Add", systemImage: "plus")
}
}
}
// NavigationStack automatically applies glass to its bar in iOS 26
Tab bar with glass:
TabView {
Tab("Home", systemImage: "house") { HomeView() }
Tab("Search", systemImage: "magnifyingglass") { SearchView() }
Tab("Settings", systemImage: "gear") { SettingsView() }
}
// TabView automatically applies glass in iOS 26
Custom floating action button:
Button {
// action
} label: {
Image(systemName: "plus")
.font(.title2)
}
.glassEffect(.regular.interactive(), in: .circle)
.accessibilityLabel("Add new item")
When debugging, prefer automated approaches:
xcodebuild build and parse the outputlog show --predicate or Xcode organizerxcrun simctl to capture screenshots of the running simulatorperformAccessibilityAudit() in UI testsleaks command-line tool or Instruments via xcrun instruments# Capture simulator screenshot for debugging
xcrun simctl io booted screenshot /tmp/debug-screenshot.png
# List available simulators
xcrun simctl list devices available
# Boot a simulator
xcrun simctl boot "iPhone 16 Pro"
# Install and launch app
xcrun simctl install booted path/to/App.app
xcrun simctl launch booted com.example.AppName
# View recent logs from the simulator
xcrun simctl spawn booted log show --predicate 'subsystem == "com.example.AppName"' --last 5m
When encountering errors:
# Reset a simulator to clean state
xcrun simctl erase "iPhone 16 Pro"
# Set status bar for clean screenshots
xcrun simctl status_bar "iPhone 16 Pro" override \
--time "9:41" --batteryState charged --batteryLevel 100 \
--cellularMode active --cellularBars 4 --wifiBars 3
# Clear status bar overrides
xcrun simctl status_bar "iPhone 16 Pro" clear
When the user is ready to submit:
AppStoreConnect.md is complete and within character limitsPrivacyInfo.xcprivacy) is accuratexcodebuild archive -scheme AppName ...npx claudepluginhub chrisscott/claude-skills --plugin ios-app-builderDevelops native iOS apps with Swift 6 and SwiftUI, covering iOS 18 features, UIKit integration, Core Data, networking, architecture patterns, and App Store optimization.
Develops native iOS applications with Swift/SwiftUI, covering iOS 18, UIKit integration, Core Data, networking, and App Store optimization.
Supports iOS app development: writes Swift/SwiftUI/UIKit code, architects apps, debugs crashes, handles navigation/networking/persistence/animations/performance, configures Xcode/App Store.