Skip to content
Skills Library
Programming · Building & coding

init-xcode-app

/init-xcode-app

Scaffold a standalone SwiftUI app via XcodeGen — pick macOS, iOS, or iOS+watchOS; ships house conventions, a Swift Testing target, swiftformat/swiftlint, optional CloudKit/CI/Release/Push modules, and optional JTBD product context. Use to "init an xcode project", "scaffold a swiftui app", "new mac/ios app".

Licence
MIT
Last repository change
25.10.2026

Assessment and security

100/ 100Class: good
Format25 / 25
Frontmatter with name and description, valid name, description up to 1,024 characters, name matching the folder.
Discoverability25 / 25
Description explains when to use the skill, has a reasonable length and uses third person.
Content35 / 35
At least 150 words and at most 500 lines, headings, step lists, examples or code.
Hygiene15 / 15
No placeholders such as TODO, no Windows paths, with a licence.
Riskno signals detected in the scan
Files in this package
43
Scripts
17
HTML comments
0
URLs in SKILL.md
0
Deprecation

No signals detected. Repository changed on 25.10.2026, without references to retired models or APIs.

Licence

MIT, open: use and modify while retaining author attribution.

What to check before installing
  • 17 scripts in this package. Review them before installing, as Claude may execute them.

Scripts: assets/core/shapes/ios-watchos/Sources/Shared/Item.swift, assets/core/shapes/ios-watchos/Sources/Shared/SyncService.swift, assets/core/shapes/ios-watchos/Sources/Watch/<Name>WatchApp.swift, assets/core/shapes/ios-watchos/Sources/Watch/WatchContentView.swift, assets/core/shapes/ios-watchos/Sources/iPhone/<Name>App.swift, assets/core/shapes/ios-watchos/Sources/iPhone/ContentView.swift, assets/core/s

What it does and when to use it

Scaffold a standalone SwiftUI app via XcodeGen — pick macOS, iOS, or iOS+watchOS; ships house conventions, a Swift Testing target, swiftformat/swiftlint, optional CloudKit/CI/Release/Push modules, and optional JTBD product context. Use to "init an xcode project", "scaffold a swiftui app", "new mac/ios app".

Triggers from the description

init an xcode projectscaffold a swiftui appnew mac/ios app
Original author description

Scaffold a standalone SwiftUI app via XcodeGen — pick macOS, iOS, or iOS+watchOS; ships house conventions, a Swift Testing target, swiftformat/swiftlint, optional CloudKit/CI/Release/Push modules, and optional JTBD product context. Use to "init an xcode project", "scaffold a swiftui app", "new mac/ios app".

How it works

  1. When to use
  2. Prerequisites (verify before scaffolding)
  3. Procedure
Original SKILL.md headings · 60 lines, 375 words
SKILL.md preview
---
name: init-xcode-app
description: Scaffold a standalone SwiftUI app via XcodeGen — pick macOS, iOS, or iOS+watchOS; ships house conventions, a Swift Testing target, swiftformat/swiftlint, optional CloudKit/CI/Release/Push modules, and optional JTBD product context. Use to "init an xcode project", "scaffold a swiftui app", "new mac/ios app".
---

# init-xcode-app

Scaffolds a native SwiftUI app with XcodeGen (`project.yml` → generated, committed `.xcodeproj`),
pre-loaded with the conventions and loop-closer toolchain (xcsift, the Xcode MCP, swiftformat/lint).
The lighter native sibling of `init-tauri-app`.

## When to use
- "init an xcode project", "scaffold a swiftui app", "new macOS/iOS app".

## Prerequisites (verify before scaffolding)
- `xcodegen` on PATH (`xcodegen --version`; `brew install xcodegen` if missing).
- Xcode + CLT (`xcodebuild -version`).

## Procedure

### 1. Gather inputs (AskUserQuestion)
- **App name** (PascalCase, e.g. `Tidepool`) → `<Name>`; lowercase → `<name>`.
- **Bundle-id prefix** (default `com.glebkalinin`) → `<bundlePrefix>`.
- **DEVELOPMENT_TEAM** (optional — blank allowed) → `<TEAM>`.
- **Target shape:** `ios` | `macos` | `ios-watchos`.
- **Modules** (multi-select): CloudKit · CI · Release · Push.
- **JTBD artifact (optional):** path to a `jtbd.json` (else auto-discover `./jtbd.json`, `~/jtbd/<name>/jtbd.json`). See 1.5.
- **Target directory** (default `~/ai_projects/<name>`). Abort if non-empty.

### 1.5 Ingest JTBD (optional, additive)
Identical contract to init-tauri-app: resolve (explicit → `./jtbd.json` → `~/jtbd/<name>/jtbd.json`),
confirm via `hook`, validate (`render-jtbd.sh` exits 3 → skip), pre-fill name. Artifacts written in Step 3.

### 2. Render core
Copy `assets/core/common/*` into the project (renames: `gitignore`→`.gitignore`, `swiftformat`→`.swiftformat`,
`CLAUDE.md`→`.claude/CLAUDE.md`). Copy `assets/core/shapes/<shape>/*` into the project root. For `macos`,
also copy `assets/core/shapes/ios/Sources` + `Tests` (macos reuses the same SwiftUI sources). Substitute
`<Name>`/`<name>`/`<bundlePrefix>`/`<TEAM>` in every copied file. Blank `<TEAM>` → leave the placeholder line
`DEVELOPMENT_TEAM: ""`.

**If a JTBD artifact was confirmed:** render `assets/jtbd/PRODUCT.md.template`→`docs/PRODUCT.md`,
`guardrails-check.md.template`→`docs/internal/guardrails-check.md`, insert
`agents-product-section.md.template` into `AGENTS.md` after the first heading, copy the artifact to
project-root `jtbd.json`. See `assets/jtbd/jtbd-map.md`.

### 3. Compose selected modules
For each selected module open `assets/modules/<m>/INSERT.md` and follow it: it lists source files to copy
and a `project-fragment.yml` to merge into `project.yml` (merge into the existing `targets.<Name>` and
`entitlements:` maps — never overwrite). CloudKit + Push both extend the same `entitlements:` map.

### 4. Generate + verify (the gate)
```bash
xcodegen generate
```
Then the unsigned build gate by shape:
- ios / ios-watchos: `xcodebuild build -scheme <Name> -destination 'generic/platform=iOS Simulator'`
- macos: `xcodebuild build -scheme <Name> -destination 'platform=macOS' CODE_SIGNING_ALLOWED=NO`

Then `xcodebuild test` against the same destination for the test target. Both must pass.

### 5. Handoff
Offer `git init && git add -A && git commit`. Print summary: shape, modules, signing note
(device/release signing is a human step), next command (`open <Name>.xcodeproj`).
Files in this package (43)
  • SKILL.md 3 KB
  • assets/core/common/AGENTS.md 3 KB
  • assets/core/common/CLAUDE.md 1 KB
  • assets/core/common/CONTRIBUTING.md 1 KB
  • assets/core/common/README.md 1 KB
  • assets/core/common/gitignore 1 KB
  • assets/core/common/swiftformat 1 KB
  • assets/core/common/swiftlint.yml 1 KB
  • assets/core/shapes/ios/project.yml 1 KB
  • assets/core/shapes/ios/Sources/App/<Name>App.swift 1 KB
  • assets/core/shapes/ios/Sources/App/ContentView.swift 1 KB
  • assets/core/shapes/ios/Sources/App/DetailView.swift 1 KB
  • assets/core/shapes/ios/Sources/App/Item.swift 1 KB
  • assets/core/shapes/ios/Tests/ItemTests.swift 1 KB
  • assets/core/shapes/ios-watchos/project.yml 2 KB
  • assets/core/shapes/ios-watchos/Sources/Shared/Item.swift 1 KB
  • assets/core/shapes/ios-watchos/Sources/Shared/SyncService.swift 1 KB
  • assets/core/shapes/ios-watchos/Sources/Watch/<Name>WatchApp.swift 1 KB
  • assets/core/shapes/ios-watchos/Sources/Watch/WatchContentView.swift 1 KB
  • assets/core/shapes/ios-watchos/Sources/iPhone/<Name>App.swift 1 KB
  • assets/core/shapes/ios-watchos/Sources/iPhone/ContentView.swift 1 KB
  • assets/core/shapes/ios-watchos/Tests/ItemTests.swift 1 KB
  • assets/core/shapes/macos/project.yml 1 KB
  • assets/jtbd/PRODUCT.md.template 1 KB
  • assets/jtbd/agents-product-section.md.template 1 KB
  • assets/jtbd/guardrails-check.md.template 1 KB
  • assets/jtbd/jtbd-map.md 2 KB
  • assets/jtbd/fixtures/malformed-jtbd.json 1 KB
  • assets/jtbd/fixtures/sample-jtbd.json 1 KB
  • assets/modules/ci/INSERT.md 1 KB
  • assets/modules/ci/ci.yml 1 KB
  • assets/modules/cloudkit/App.entitlements 1 KB
  • assets/modules/cloudkit/CloudKitStore.swift 1 KB
  • assets/modules/cloudkit/INSERT.md 1 KB
  • assets/modules/cloudkit/project-fragment.yml 1 KB
  • assets/modules/push/INSERT.md 1 KB
  • assets/modules/push/project-fragment.yml 1 KB
  • assets/modules/push/registration.swift 1 KB
  • assets/modules/release/ExportOptions.plist 1 KB
  • assets/modules/release/INSERT.md 1 KB
  • assets/modules/release/archive.sh 1 KB
  • scripts/render-jtbd.sh 1 KB
  • scripts/smoke-xcode.sh 2 KB

Versions

The database has no other skills named init-xcode-app.

Identical content appears in 1 other GitHub folders. We show one copy with the highest score.

Database snapshot: 13.11.2026 · package version e0e790fbbcf5 (SHA-256 digest of the entire package)

Downloads in the last 30 days: 0 · ranking

Report a problem with this skill: harmful content, incorrect descriptions or an author’s removal request.

Similar skills

  • 100format-swift-sources
    Guide SwiftLint and SwiftFormat integration across CLI, Xcode build phases, Xcode source-editor workflows, Swift Package plugins, AppleScript, Git hooks, and GitHub Actions, including exporting SwiftFormat for Xcode settings into a checked-in project config file. Use this first…
  • 100swift-app-scaffold
    Use when starting a new iOS or macOS app, bootstrapping Package.swift, or scaffolding a modern SwiftUI architecture with Observation, SwiftData, NavigationStack, and Swift Testing.
  • 100swift-dev
    Native iOS and macOS apps in Swift 6 - SwiftUI, AppKit, SwiftData, concurrency, Swift Testing, XcodeGen, CallKit and audio, App Intents, devices, TestFlight, code signing, notarization. Use for any iPhone or Mac app, helper or CLI work.
  • 100new-mac-app
    Create a native macOS SwiftUI app from a working template (Swift package, SwiftData, build script, icon script, snapshot mode, git), with no Xcode GUI. Use when the user wants to start a new Mac app or scaffold a macOS project.
  • 100new-mac-app
    Create a native macOS SwiftUI app from a working template (Swift package, SwiftData, build script, icon script, snapshot mode, git), with no Xcode GUI. Use when the user wants to start a new Mac app or scaffold a macOS project.
  • 100apple
    Develops Apple platform apps in Swift with SwiftUI and UIKit for iOS and macOS. Use when editing Swift or Xcode project files for iOS, macOS, watchOS or visionOS, when a build fails on Swift 6 concurrency or availability errors, when a view hangs or redraws too often, or when…

Feedback and reports

Your message goes to Bartosz Sokoliński. An email address is needed only for a reply. See the privacy policy.