skills/ios-app-scaffold/SKILL.md
Scaffold iOS apps with Tuist and layered architecture (Domain, Infrastructure, App). Use when: (1) Creating a new iOS app project, (2) Setting up Tuist project structure, (3) User asks to "create an iOS app", "scaffold an app", or "set up a new Swift project", (4) User wants layered/clean architecture for iOS, (5) User mentions Tuist setup.
npx skillsauth add tddworks/claude-skills ios-app-scaffoldInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Scaffold iOS apps with Tuist, Swift 6, and layered architecture.
Run the scaffold script:
python3 scripts/scaffold.py <AppName> <output-directory> [--bundle-id <id>] [--team-id <id>]
Example:
python3 scripts/scaffold.py MyApp /Users/me/projects --bundle-id com.mycompany.myapp --team-id ABC123
Then generate and open:
cd /Users/me/projects/MyApp
tuist generate
open MyApp.xcworkspace
AppName/
├── Sources/
│ ├── App/ # SwiftUI views, app entry
│ │ ├── Views/
│ │ ├── Resources/
│ │ │ ├── Assets.xcassets
│ │ │ ├── XCConfig/ # Build configuration
│ │ │ │ ├── shared.xcconfig
│ │ │ │ ├── debug.xcconfig
│ │ │ │ └── release.xcconfig
│ │ │ └── en.lproj/
│ │ ├── Application/
│ │ ├── Info.plist
│ │ └── AppNameApp.swift
│ ├── Domain/ # Business logic (no dependencies)
│ │ ├── Models/
│ │ ├── Protocols/ # @Mockable repository interfaces
│ │ └── Utils/
│ └── Infrastructure/ # Persistence implementations
│ └── Local/ # SwiftData repositories
├── Tests/
│ ├── DomainTests/
│ └── InfrastructureTests/
├── Project.swift # Tuist configuration
├── Tuist.swift
├── .gitignore
└── README.md
| Layer | Purpose | Dependencies | |-------|---------|--------------| | Domain | Models, protocols, business logic | None | | Infrastructure | SwiftData persistence | Domain | | App | SwiftUI views, app entry | Domain, Infrastructure |
For detailed patterns, see references/architecture.md.
Example.swift, ExampleRepository.swift, LocalExampleRepository.swiftSources/Domain/Models/Sources/Domain/Protocols/Sources/Infrastructure/Local/Sources/App/Views/Edit Project.swift packages array:
packages: [
.remote(url: "https://github.com/Kolos65/Mockable.git", requirement: .upToNextMajor(from: "0.5.0")),
// Add more packages here
],
Then add to target dependencies:
dependencies: [
.package(product: "PackageName"),
]
Domain models are rich - Include computed properties and business logic:
public struct Order: Identifiable, Codable, Sendable {
public var items: [Item]
public var total: Decimal { items.reduce(0) { $0 + $1.price } }
}
Protocols use @Mockable - Enables testing without real persistence:
@Mockable
public protocol OrderRepository: Sendable {
func fetchAll() async throws -> [Order]
}
Views consume Domain directly - No ViewModel layer needed:
struct OrdersView: View {
let orders: [Order] // Domain model directly
}
Version numbers are managed in Project.swift build settings:
settings: .settings(
base: [
"MARKETING_VERSION": "1.0.0", // App Store version
"CURRENT_PROJECT_VERSION": "1", // Build number
],
...
)
The Info.plist references these via build setting variables:
CFBundleShortVersionString → $(MARKETING_VERSION)CFBundleVersion → $(CURRENT_PROJECT_VERSION)To bump version, edit Project.swift:
"MARKETING_VERSION": "1.1.0",
"CURRENT_PROJECT_VERSION": "2",
Build settings are managed via xcconfig files in Sources/App/Resources/XCConfig/:
| File | Purpose |
|------|---------|
| shared.xcconfig | Common settings (bundle ID, team ID, deployment target) |
| debug.xcconfig | Debug configuration (Apple Development signing) |
| release.xcconfig | Release configuration (Apple Development signing) |
Edit shared.xcconfig to customize:
PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.app
DEVELOPMENT_TEAM = YOUR_TEAM_ID
IPHONEOS_DEPLOYMENT_TARGET = 18.0
tools
Replace with description of the skill and when Claude should use it.
development
iOS/macOS app localization management for Tuist-based projects with .strings files. Use when: (1) Adding new translation keys to modules, (2) Validating .strings files for missing/duplicate keys, (3) Syncing translations across languages, (4) AI-powered translation from English to other locales, (5) Checking placeholder consistency (%@, %d), (6) Generating localization reports, (7) Updating Swift code to use localized strings instead of hardcoded text.
development
Guide for building SwiftUI components using Brad Frost's Atomic Design methodology — organizing views into Atoms, Molecules, Organisms, Templates, and Pages with Design Tokens for theming. Use this skill whenever building new SwiftUI UI components, refactoring existing views into reusable pieces, creating a design system, or organizing a component library. Also trigger when the user mentions "atomic design", "design system", "component hierarchy", "reusable components", "atoms and molecules", "design tokens", or wants to decompose a complex SwiftUI view into smaller, composable parts, or needs to implement theming/customization across a SwiftUI app.
development
Create interactive iOS/mobile app UX flow prototypes as HTML documents with realistic phone mockups. Use when: (1) Visualizing user journeys and navigation flows, (2) Creating mobile app wireframes, (3) Documenting screen-to-screen navigation patterns, (4) Presenting iOS UI designs with annotations, (5) Prototyping app architecture before implementation. Generates self-contained HTML files with iOS-native styling, phone frames, flow arrows, and callout annotations.