ios-simulator-triage · git:20260701.bf690c7 · 2026-07-01 · sha256 4ba084e4e1743c25

ios-simulator-triage git:20260701.bf690c7A

Immutable. This exact content never changes and is served at /api/v1/blob/4ba084e4e1743c25.

---
name: ios-simulator-triage
description: >-
  Diagnose and recover from failures when building, running, or driving an app on
  the iOS Simulator. A living catalog organized by layer: build failures
  (xcodebuild, CocoaPods, signing, codegen), runtime failures split into
  app-runtime vs Expo-runtime (the red error overlay), and automation failures
  that emit no error (element not found in the accessibility tree, stuck flow).
  Each layer names where its logs live. Used alongside ios-simulator and
  expo-ios-simulator when something breaks. Project-agnostic.
status: complete
sources:
  - "xcrun simctl help (launch --console/--stdout/--stderr, spawn, diagnose, get_app_container) and axe --help; each reference carries the per-command provenance"
  - https://developer.apple.com/documentation/os/logging
---

# iOS Simulator Triage (living failure catalog)

Classify first (which layer failed), then recover. Most fixes live in the sibling skills;
this skill routes you to them and supplies the logging tools that turn a symptom into a cause.

## Route by symptom

- **It never installs or launches** (xcodebuild, CocoaPods, or prebuild failed): a **build
  failure** -> `references/build-failures.md`.
- **It launches, then crashes or misbehaves**: a **runtime failure** ->
  `references/runtime-failures.md`, split into app-native and Expo / React-Native because
  the logs and the fixes differ.
- **It runs, but AXe cannot find or tap the element**: an **automation failure** ->
  `references/automation-failures.md`.

## Read the logs first

Every layer has a log that names the cause; guessing without it wastes a cycle.
`references/logging.md` is the cross-cutting tool, indexed by layer: the unified log
(`simctl spawn booted log stream`), the app's stdout and stderr (`simctl launch --console`),
crash reports, the diagnostic bundle (`simctl diagnose`), and the Metro terminal for the JS
layer.

## Rules

- Identify the layer before changing anything; a build fix will not cure a runtime crash.
- Pull the log before forming a hypothesis; the unified log or the crash report usually names
  the cause outright.
- Every factual claim here and in the references cites a primary source (the tools' own help,
  Apple); a prior-art skill is never a source.

## Out of scope

Happy-path driving -> **ios-simulator** and **expo-ios-simulator**. What makes an app
addressable -> **mobile-accessibility**.

## Where to go

- `references/build-failures.md`: code signing, CocoaPods, prebuild, and architecture.
- `references/runtime-failures.md`: native crashes and the Expo / RN failure modes.
- `references/automation-failures.md`: empty `describe-ui`, missed taps, and blocking overlays.
- `references/logging.md`: the unified log, console output, crash reports, and diagnose.