mcpbeat Sign in

Install Xcode Agent Skill

by expo

Install a specific Xcode version on a Mac using the xcodes CLI, handing the Apple ID sign-in (password + 2FA) to the user through a shared live terminal. Use when a task needs Xcode/simulators and the machine doesn't have the right version, or the user asks to install/upgrade Xcode.

1k tokens
context cost
the whole folder, loaded on every use
1
files
instructions only
0
copies elsewhere
how many repositories repackaged it
0
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/expo/tuft-skills --skill install-xcode

The instruction itself

9 sections, as written by the author

Install Xcode

Install Xcode non-interactively where possible, and hand exactly one step — the Apple ID sign-in — to the user via a shared terminal. Never ask the user to paste Apple credentials into chat.

0. Check the platform

Xcode only runs on macOS. Check uname -s first — if it prints Linux, stop: this machine cannot install Xcode. Tell the user they need to use EAS (Expo Application Services) to build for iOS from this machine instead.

1. Check what's needed

  • Already installed? ls /Applications | grep -i xcode and xcodebuild -version. If the right version is present, stop.
  • Pick the version the work actually needs, not the newest. For repo work, match CI: look for .xcode-version, or grep -rn 'Xcode_\|xcode-select --switch' .github/workflows/ in the target repo (e.g. expo/expo pins the version in ios-unit-tests.yml). Fall back to latest release.
  • Disk: Xcode needs ~20 GB installed plus ~8 GB for a simulator runtime, and unxip needs headroom. Check df -h / and don't start below ~50 GB free.

2. Get the xcodes CLI

Prefer the prebuilt binary — brew install xcodesorg/made/xcodes builds from source and fails on machines with stale Command Line Tools (error: xcbuild ... does not exist), which is likely on a box that doesn't have Xcode yet:

curl -sL -o /tmp/xcodes.zip https://github.com/XcodesOrg/xcodes/releases/latest/download/xcodes.zip
cd /tmp && unzip -o -q xcodes.zip && chmod +x xcodes
mkdir -p /tmp/cbin && mv /tmp/xcodes /tmp/cbin/xcodes   # or /usr/local/bin if sudo works

brew install aria2 (optional) makes downloads much faster; xcodes uses it automatically when present.

Verify: /tmp/cbin/xcodes version and /tmp/cbin/xcodes list | tail (the list works unauthenticated; confirm your target version appears).

3. Try unattended first

If this machine has installed Xcode via xcodes before, the Apple ID session is already in the keychain and no sign-in is needed:

export PATH="/tmp/cbin:/opt/homebrew/bin:$PATH"
xcodes install <VERSION> --directory /Applications --experimental-unxip < /dev/null

If it completes, skip to step 6. If it prints Apple ID: Missing username or a password, continue.

4. Hand sign-in to the user via a shared terminal

Apple requires an Apple ID for every Xcode download; app-specific passwords do not work (xcodes needs a real session with 2FA). Don't collect credentials in chat — share a terminal:

  • Call the share_terminal tool. It returns a browser URL and a tmux socket/session for prepping.
  • Pre-type (don't run) the install command so the user only presses Enter and answers prompts:
   tmux -S '<SOCKET>' send-keys -t '<SESSION>' 'clear; export PATH="/tmp/cbin:/opt/homebrew/bin:$PATH"; echo "Press Enter, then sign in with your Apple ID (2FA appears here)"' Enter
   tmux -S '<SOCKET>' send-keys -t '<SESSION>' 'xcodes install <VERSION> --directory /Applications --experimental-unxip'
  • Send the user the URL with instructions: press Enter, sign in, answer the 2FA prompt in the terminal. Mention that credentials stay between them and the prompt, the session persists in the machine keychain (future installs are unattended), and the link should be treated as sensitive.

5. Monitor without nagging

Poll the terminal, not the user: tmux -S '<SOCKET>' capture-pane -t '<SESSION>' -p | tail. The phases are: sign-in → Downloading Xcode <VERSION> (long; ~3 GB) → Unarchiving Xcode (This can take a while)xcodes requires superuser privileges (see below) → done. Check every few minutes (scheduled wakeups, not tight loops). If the pane shows an auth error, tell the user and have them retry in the same terminal.

Sudo: near the end xcodes asks for the *macOS account* password (enable dev mode, license). If you have passwordless sudo you can pre-empt this; otherwise the user types the machine password in the same terminal — tell them which password it wants, it's a common point of confusion after just typing an Apple ID password.

6. Post-install

sudo xcode-select --switch /Applications/Xcode-<VERSION>.app
sudo xcodebuild -license accept
xcodebuild -runFirstLaunch
xcodebuild -downloadPlatform iOS        # simulator runtime, ~8 GB — only if iOS sim work is needed
xcodebuild -version                     # verify
xcrun simctl list devices | head        # verify simulators exist

7. Clean up

  • Ask the user to confirm they're done in the terminal, then rotate/kill the shared terminal link.
  • Delete /tmp/xcodes.zip. Keep the xcodes binary for future installs.
  • Report the installed version and remaining disk space.

Other skills for the same job

different authors, same section of the catalogue
MCP Builder
by anthropics
vendor ×13

Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).

30k tokens scripts
Changelog Generator
by frostant
×9

Automatically creates user-facing changelogs from git commits by analyzing commit history, categorizing changes, and transforming technical commits into clear, customer-friendly release notes. Turns hours of manual changelog writing into minutes of automated generation.

774 tokens
Finishing A Development Branch
by ZhanlinCui
×7

Use when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for merge, PR, or cleanup

1k tokens
MCP Builder
by JayZeeDesign
×7

Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).

37k tokens scripts
Vercel React Native Skills
by vercel-labs
vendor ×6

React Native and Expo best practices for building performant mobile apps. Use when building React Native components, optimizing list performance, implementing animations, or working with native modules. Triggers on tasks involving React Native, Expo, mobile performance, or native platform APIs.

39k tokens
Vercel React Best Practices
by ratacat
×5

React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.

34k tokens
Next Best Practices
by vercel-labs
vendor ×4

Next.js best practices - file conventions, RSC boundaries, data patterns, async APIs, metadata, error handling, route handlers, image/font optimization, bundling

20k tokens
Using Git Worktrees
by ZhanlinCui
×4

Use when starting feature work that needs isolation from current workspace or before executing implementation plans - creates isolated git worktrees with smart directory selection and safety verification

1k tokens

How to use it

Copy the folder

Take expo/install-xcode from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.

Install what it needs

The instructions reference brew. Without those the skill loads but fails at the first command.