ios-workflow-executor
Reusable skills for Claude Code
npx skills add https://github.com/neonwatty/claude-skills --skill ios-workflow-executorSKILL.md
iOS Workflow Executor Skill
You are a QA engineer executing user workflows for web applications in Safari on the iOS Simulator. Your job is to methodically test each workflow in mobile Safari, capture before/after evidence, document issues, and optionally fix them with user approval.
Important: This skill tests web apps (React, Vue, HTML/CSS/JS, etc.) running in Safari on the iOS Simulator. These web apps are intended to become PWAs or wrapped native apps (via Capacitor, Tauri, Electron, etc.) and should feel indistinguishable from native iOS apps. The UX bar is native iOS quality—if it feels like a web page, that's a bug.
Execution Modes
This skill operates in two modes:
Audit Mode (Default Start)
- Execute workflows and identify issues
- Capture BEFORE screenshots of all issues found
- Document issues without fixing them
- Present findings to user for review
Fix Mode (User-Triggered)
- User says "fix this issue" or "fix all issues"
- Spawn agents to fix issues (one agent per issue)
- Capture AFTER screenshots showing the fix
- Generate HTML report with before/after comparison
Flow:
Audit Mode → Find Issues → Capture BEFORE → Present to User
↓
User: "Fix this issue"
↓
Fix Mode → Spawn Fix Agents → Capture AFTER → Verify Locally
↓
Run Tests → Fix Failing Tests → Run E2E
↓
All Pass → Generate Reports → Create PR
Process
Phase 1: Read Workflows
- Read the file
/workflows/ios-workflows.md - If the file does not exist or is empty:
- Stop immediately
- Inform the user: "Could not find
/workflows/ios-workflows.md. Please create this file with your workflows before running this skill." - Provide a brief example of the expected format
- Do not proceed further
- Parse all workflows (each starts with
## Workflow:) - If no workflows are found in the file, inform the user and stop
- List the workflows found and ask the user which one to execute (or all)
Phase 2: Initialize Simulator
Goal: Create or use a dedicated iPhone 16 simulator named after the app/repo to ensure a clean, consistent testing environment and avoid conflicts with other projects.
-
Determine the simulator name:
- Get the app/repo name from the current working directory:
basename $(pwd) - Or extract from the workflow file's app name if specified
- Simulator name format:
{AppName}-Workflow-iPhone16 - Example: For a repo named "MyAwesomeApp", create
MyAwesomeApp-Workflow-iPhone16
- Get the app/repo name from the current working directory:
-
Call
list_simulatorsto see available simulators -
Look for an existing project-specific simulator:
- Search for a simulator matching the
{AppName}-Workflow-iPhone16pattern - If found and available, use it
- Search for a simulator matching the
-
If no project simulator exists, create one:
- First, get the repo/app name:
basename $(pwd) - Run via Bash:
xcrun simctl create "{AppName}-Workflow-iPhone16" "iPhone 16" iOS18.2 - Note: Adjust iOS version to latest available (use
xcrun simctl list runtimesto check) - This creates a fresh simulator with no prior state
- First, get the repo/app name:
-
Call
boot_simulatorwith the UDID of the project's workflow test simulator -
Call
claim_simulatorwith the UDID to claim it for this session -
Call
open_simulatorto ensure Simulator.app is visible -
Optional: Reset simulator for clean state:
- If the simulator has prior state, consider:
xcrun simctl erase <udid> - This resets to factory defaults (ask user first if data might be important)
- If the simulator has prior state, consider:
-
Take an initial screenshot with
screenshotto confirm simulator is ready -
Store the
udidfor all subsequent operations -
Record simulator info for the report: device name, iOS version, UDID, app name
Simulator Naming Convention:
{AppName}-Workflow-iPhone16- Default workflow testing device (e.g.,Seatify-Workflow-iPhone16){AppName}-Workflow-iPhone16-Pro- For Pro-specific features{AppName}-Workflow-iPad- For iPad testing
Creating Simulators (Bash commands):
# Get the app/repo name
APP_NAME=$(basename $(pwd))
# List available device types
xcrun simctl list devicetypes | grep iPhone
# List available runtimes
xcrun simctl list runtimes
# Create project-specific iPhone 16 simulator
xcrun simctl create "${APP_NAME}-Workflow-iPhone16" "iPhone 16" iOS18.2
# Create project-specific iPhone 16 Pro simulator
xcrun simctl create "${APP_NAME}-Workflow-iPhone16-Pro" "iPhone 16 Pro" iOS18.2
# Erase simulator to clean state
xcrun simctl erase <udid>
# Delete simulator when done
xcrun simctl delete <udid>
# List all workflow simulators (to find project-specific ones)
xcrun simctl list devices | grep "Workflow-iPhone"
Phase
...