BU

build-macos-apps

Builds, tests, and ships native macOS applications via CLI, focusing on verified outcomes instead of manual IDE steps.

Install

mkdir -p .claude/skills/build-macos-apps && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/340" && unzip -o skill.zip -d .claude/skills/build-macos-apps && rm skill.zip

Installs to .claude/skills/build-macos-apps

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Build professional native macOS apps in Swift with SwiftUI and AppKit. Full lifecycle - build, debug, test, optimize, ship. CLI-only, no Xcode.
143 charsno explicit “when” trigger
Intermediate

Key capabilities

  • Compile native macOS applications using command line tools
  • Execute XCUITest suites to verify application logic
  • Profile application performance to identify bottlenecks
  • Sign and notarize application artifacts for distribution
  • Perform iterative development through verified small changes

How it works

The agent executes shell commands via xcodebuild and related utilities to manage the build lifecycle, verifying each step with automated tests before reporting outcomes.

Inputs & outputs

You give it
User request for app modification or build task
You get back
Verified build status and functional application artifact

When to use build-macos-apps

  • Building native macOS apps from the command line
  • Running XCUITest suites
  • Debugging performance and memory leaks
  • Shipping app artifacts via CLI

About this skill

<essential_principles>

How We Work

The user is the product owner. Claude is the developer.

The user does not write code. The user does not read code. The user describes what they want and judges whether the result is acceptable. Claude implements, verifies, and reports outcomes.

1. Prove, Don't Promise

Never say "this should work." Prove it:

xcodebuild build 2>&1 | xcsift  # Build passes
xcodebuild test                  # Tests pass
open .../App.app                 # App launches

If you didn't run it, you don't know it works.

2. Tests for Correctness, Eyes for Quality

QuestionHow to Answer
Does the logic work?Write test, see it pass
Does it look right?Launch app, user looks at it
Does it feel right?User uses it
Does it crash?Test + launch
Is it fast enough?Profiler

Tests verify correctness. The user verifies desirability.

3. Report Outcomes, Not Code

Bad: "I refactored DataService to use async/await with weak self capture" Good: "Fixed the memory leak. leaks now shows 0 leaks. App tested stable for 5 minutes."

The user doesn't care what you changed. The user cares what's different.

4. Small Steps, Always Verified

Change → Verify → Report → Next change

Never batch up work. Never say "I made several changes." Each change is verified before the next. If something breaks, you know exactly what caused it.

5. Ask Before, Not After

Unclear requirement? Ask now. Multiple valid approaches? Ask which. Scope creep? Ask if wanted. Big refactor needed? Ask permission.

Wrong: Build for 30 minutes, then "is this what you wanted?" Right: "Before I start, does X mean Y or Z?"

6. Always Leave It Working

Every stopping point = working state. Tests pass, app launches, changes committed. The user can walk away anytime and come back to something that works. </essential_principles>

<intake> **Ask the user:**

What would you like to do?

  1. Build a new app
  2. Debug an existing app
  3. Add a feature
  4. Write/run tests
  5. Optimize performance
  6. Ship/release
  7. Something else

Then read the matching workflow from workflows/ and follow it. </intake>

<routing> | Response | Workflow | |----------|----------| | 1, "new", "create", "build", "start" | `workflows/build-new-app.md` | | 2, "broken", "fix", "debug", "crash", "bug" | `workflows/debug-app.md` | | 3, "add", "feature", "implement", "change" | `workflows/add-feature.md` | | 4, "test", "tests", "TDD", "coverage" | `workflows/write-tests.md` | | 5, "slow", "optimize", "performance", "fast" | `workflows/optimize-performance.md` | | 6, "ship", "release", "notarize", "App Store" | `workflows/ship-app.md` | | 7, other | Clarify, then select workflow or references | </routing>

<verification_loop>

After Every Change

# 1. Does it build?
xcodebuild -scheme AppName build 2>&1 | xcsift

# 2. Do tests pass?
xcodebuild -scheme AppName test

# 3. Does it launch? (if UI changed)
open ./build/Build/Products/Debug/AppName.app

Report to the user:

  • "Build: ✓"
  • "Tests: 12 pass, 0 fail"
  • "App launches, ready for you to check [specific thing]" </verification_loop>

<when_to_test>

Testing Decision

Write a test when:

  • Logic that must be correct (calculations, transformations, rules)
  • State changes (add, delete, update operations)
  • Edge cases that could break (nil, empty, boundaries)
  • Bug fix (test reproduces bug, then proves it's fixed)
  • Refactoring (tests prove behavior unchanged)

Skip tests when:

  • Pure UI exploration ("make it blue and see if I like it")
  • Rapid prototyping ("just get something on screen")
  • Subjective quality ("does this feel right?")
  • One-off verification (launch and check manually)

The principle: Tests let the user verify correctness without reading code. If the user needs to verify it works, and it's not purely visual, write a test. </when_to_test>

<reference_index>

Domain Knowledge

All in references/:

Architecture: app-architecture, swiftui-patterns, appkit-integration, concurrency-patterns Data: data-persistence, networking App Types: document-apps, shoebox-apps, menu-bar-apps System: system-apis, app-extensions Development: project-scaffolding, cli-workflow, cli-observability, testing-tdd, testing-debugging Polish: design-system, macos-polish, security-code-signing </reference_index>

<workflows_index>

Workflows

All in workflows/:

FilePurpose
build-new-app.mdCreate new app from scratch
debug-app.mdFind and fix bugs
add-feature.mdAdd to existing app
write-tests.mdWrite and run tests
optimize-performance.mdProfile and speed up
ship-app.mdSign, notarize, distribute
</workflows_index>

When not to use it

  • When the user prefers a graphical interface like Xcode
  • When performing purely visual UI exploration without logic requirements

Prerequisites

SwiftSwiftUIAppKit

Limitations

  • Requires command line access for all development tasks
  • Cannot perform subjective visual quality assessments without user input

How it compares

Unlike manual Xcode development, this approach enforces a strict verification loop where every change is validated by tests or execution before proceeding.

Compared to similar skills

build-macos-apps side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
build-macos-apps (this skill)708moReviewIntermediate
ios-developer104moNo flagsAdvanced
developing-ios-apps12moReviewIntermediate
ios-simulator-skill271moReviewAdvanced

Try saying

Example prompts that trigger this skill in your AI assistant.

More by glittercowboy

View all by glittercowboy

build-iphone-apps

glittercowboy

Build professional native iPhone apps in Swift with SwiftUI and UIKit. Full lifecycle - build, debug, test, optimize, ship. CLI-only, no Xcode. Targets iOS 26 with iOS 18 compatibility.

1483

setup-ralph

glittercowboy

Set up and configure Geoffrey Huntley's original Ralph Wiggum autonomous coding loop in any directory with proper structure, prompts, and backpressure.

1111

create-subagents

glittercowboy

Expert guidance for creating, building, and using Claude Code subagents and the Task tool. Use when working with subagents, setting up agent configurations, understanding how agents work, or using the Task tool to launch specialized agents.

611

create-meta-prompts

glittercowboy

Create optimized prompts for Claude-to-Claude pipelines with research, planning, and execution stages. Use when building prompts that produce outputs for other prompts to consume, or when running multi-stage workflows (research -> plan -> implement).

428

debug-like-expert

glittercowboy

Deep analysis debugging mode for complex issues. Activates methodical investigation protocol with evidence gathering, hypothesis testing, and rigorous verification. Use when standard troubleshooting fails or when issues require systematic root cause analysis.

26

create-hooks

glittercowboy

Expert guidance for creating, configuring, and using Claude Code hooks. Use when working with hooks, setting up event listeners, validating commands, automating workflows, adding notifications, or understanding hook types (PreToolUse, PostToolUse, Stop, SessionStart, UserPromptSubmit, etc).

13

Search skills

Search the agent skills registry