QA — Visual Validation via iOS Simulator

VerifiedSafe

Validate UI changes by building, installing, and inspecting the app in the iOS Simulator using the ios-simulator MCP server.

Sby Skills Guide Bot
TestingIntermediate
7/30/2026
Claude Code
#ios-simulator#visual-testing#qa#xcodebuild#accessibility-tree

Recommended for

Automated summary

Builds, installs and launches the iOS app in the Simulator, then visually verifies the change using screenshots and the accessibility tree.

Strengths

  • Runs the full loop: Tuist generation, xcodebuild, .app discovery, install and launch before screenshotting.
  • Uses the accessibility tree to locate elements and their frame coordinates when they are unknown.
  • Reports observed problems clearly without attempting to fix the code on its own.

Limitations

  • Workspace, scheme, bundle id and .app name are hardcoded for the Ruckus project.
  • Requires an already-booted simulator and a configured ios-simulator MCP server.
  • Purely visual validation, with no automated assertions or baseline image comparison.
When to use it

Use it after an iOS UI change to quickly confirm how it renders and behaves in the Simulator.

When not to use it

Avoid it for automated CI testing, non-visual code changes, or when no simulator or MCP server is available.

Security analysis

Safe
Quality score86/100

The skill is a straightforward local visual-QA workflow: regenerate the project, build with xcodebuild, locate the .app in DerivedData, install/launch it in the simulator, and inspect screenshots and the accessibility tree. There is no obfuscation, no curl|sh, no rm -rf, no reading of credentials or environment secrets, no network exfiltration, and it explicitly tells the agent not to auto-fix issues. The only execution risk is the ordinary one of running a project's own build tooling and an MCP simulator server, both local and non-destructive.

Findings
  • •Instructs running local build tooling (tuist generate, xcodebuild) which executes repo-local project definitions and build scripts — inherent to any build skill but worth noting
  • •Uses `find` over ~/Library/Developer/Xcode/DerivedData to locate build artifacts (read-only, no data leaves the machine)
  • •Depends on an external `ios-simulator` MCP server for install/launch/screenshot/UI automation; trust depends on that server's implementation
  • •Hardcoded workspace/scheme/destination/bundle id means the commands are fixed rather than user-supplied, limiting injection surface
How this analysis is made

Examples

Verify a UI tweak
I just changed the toggle colors on the settings screen — build and run the app in the simulator and show me a screenshot so I can confirm it looks right.
Check a new screen
Validate the new onboarding flow on iPhone 17 Pro: launch the app, navigate to the onboarding, and describe what the accessibility tree and screenshots show.
Post-change visual check
I refactored the profile header layout. Do a visual QA pass in the iOS Simulator and tell me if the labels, colors and spacing look correct.

name: qa description: | Use after making changes to visually validate the app in the iOS Simulator. Builds, installs, launches the app, then uses screenshots and accessibility descriptions to verify the change looks and behaves correctly. user-invocable: true

QA — Visual Validation via iOS Simulator

Validate changes by building, installing, and inspecting the app in the iOS Simulator using the ios-simulator MCP server.

Prerequisites

The iOS Simulator must be booted before starting. Use mcp__ios-simulator__get_booted_sim_id to confirm. If no simulator is booted, use mcp__ios-simulator__open_simulator first.

Workflow

  1. Regenerate the Tuist project so the workspace reflects any file changes:

    tuist generate --no-open
    
  2. Build for simulator using the workspace (required for dependency resolution):

    xcodebuild build -workspace Ruckus.xcworkspace -scheme Ruckus \
      -destination 'platform=iOS Simulator,name=iPhone 17 Pro'
    

    This uses Xcode's default DerivedData location. If the build fails, fix the errors before continuing.

  3. Find the built .app bundle. After a successful build, locate it in Xcode's DerivedData:

    find ~/Library/Developer/Xcode/DerivedData \
      -name "Ruckus.app" \
      -path "*/Debug-iphonesimulator/*" \
      -maxdepth 5 \
      -newer Ruckus.xcworkspace \
      2>/dev/null | head -1
    

    Use the most recently modified match.

  4. Install the app.

    Use mcp__ios-simulator__install_app with the .app path found in the previous step.

  5. Launch the app.

    Use mcp__ios-simulator__launch_app with bundle_id: io.defn.Ruckus and terminate_running: true to ensure a fresh start.

  6. Take a screenshot and describe the UI.

    • Use mcp__ios-simulator__screenshot to capture the current state.
    • Use mcp__ios-simulator__ui_describe_all to get the accessibility tree for the visible screen.
    • Read the screenshot to visually inspect the result.
  7. Navigate to the relevant screen. If the change is not on the initial screen, use taps, swipes, and text input to navigate there:

    • mcp__ios-simulator__ui_tap — tap coordinates
    • mcp__ios-simulator__ui_swipe — scroll or swipe
    • mcp__ios-simulator__ui_type — enter text

    After each navigation action, take another screenshot and describe the UI to confirm you reached the right screen.

  8. Validate the change. Compare what you see against the expected behavior:

    • Does the UI reflect the change?
    • Are labels, colors, and layout correct?
    • Is the accessibility tree reasonable?

    Report your findings — what looks correct and what (if anything) looks wrong.

  9. If something is wrong, describe the issue clearly. Do NOT attempt to fix it automatically unless the caller asks you to.

Tips

  • When you don't know the coordinates of a UI element, use mcp__ios-simulator__ui_describe_all to find it in the accessibility tree — elements include their frame coordinates.
  • Take screenshots liberally. They are the ground truth for visual QA.
  • If the app crashes on launch, check the build logs and simulator system log for clues.

From the file to a first result

The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.

View the source and supporting files

This download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.

1. Download the file

Download SKILL.md

From the root of a test project, save the file as .skill-downloads/qa-visual-validation-via-ios-simulator-ms71b2wj/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.

Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.

mkdir -p '.skill-downloads/qa-visual-validation-via-ios-simulator-ms71b2wj' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/qa-visual-validation-via-ios-simulator-ms71b2wj/download' --output '.skill-downloads/qa-visual-validation-via-ios-simulator-ms71b2wj/SKILL.md.part' && mv '.skill-downloads/qa-visual-validation-via-ios-simulator-ms71b2wj/SKILL.md.part' '.skill-downloads/qa-visual-validation-via-ios-simulator-ms71b2wj/SKILL.md'

2. Check prerequisites

Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.

Original excerpt: Prerequisites

The iOS Simulator must be booted before starting. Use mcp__ios-simulator__get_booted_sim_id to confirm. If no simulator is booted, use mcp__ios-simulator__open_simulator first.

The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.

3. Load the skill

After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.

Claude Code
test -f '.skill-downloads/qa-visual-validation-via-ios-simulator-ms71b2wj/SKILL.md' && test -s '.skill-downloads/qa-visual-validation-via-ios-simulator-ms71b2wj/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/qa' && cp -R '.skill-downloads/qa-visual-validation-via-ios-simulator-ms71b2wj' '.claude/skills/qa'

OpenSkills

OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.

Official OpenSkills installation
openskills install './.skill-downloads/qa-visual-validation-via-ios-simulator-ms71b2wj'

openskills read 'qa-visual-validation-via-ios-simulator-ms71b2wj'

Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.

For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.

openskills sync

Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.

4. Try a first task

Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:

Read .skill-downloads/qa-visual-validation-via-ios-simulator-ms71b2wj/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.

Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.

Related skills