Loading...
Loading...
Executes web app workflows in Safari on the iOS Simulator from /workflows/ios-workflows.md. Use this when the user says "run ios workflows", "execute ios workflows", or "test ios workflows". Tests each workflow step by step in mobile Safari, captures before/after screenshots, documents issues, and generates HTML reports with visual evidence of fixes.
npx skill4agent add neonwatty/claude-skills ios-workflow-executor[Workflow Task] "Execute: User Onboarding Flow"
└── [Issue Task] "Issue: Hamburger menu (iOS anti-pattern)"
└── [Issue Task] "Issue: FAB button (Material Design)"
[Workflow Task] "Execute: Settings Screen"
└── [Issue Task] "Issue: Web dropdown instead of iOS picker"
[Fix Task] "Fix: Hamburger menu → Tab bar" (created in fix mode)
[Verification Task] "Verify: Run test suite"
[Report Task] "Generate: HTML report"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 PRTaskListin_progresspending/workflows/ios-workflows.md/workflows/ios-workflows.md## Workflow:For each workflow to execute, call TaskCreate:
- subject: "Execute: [Workflow Name]"
- description: |
Execute iOS workflow: [Workflow Name]
Steps: [count] steps
File: /workflows/ios-workflows.md
Steps summary:
1. [Step 1 brief]
2. [Step 2 brief]
...
- activeForm: "Executing [Workflow Name]"basename $(pwd){AppName}-Workflow-iPhone16MyAwesomeApp-Workflow-iPhone16list_simulators{AppName}-Workflow-iPhone16basename $(pwd)xcrun simctl create "{AppName}-Workflow-iPhone16" "iPhone 16" iOS18.2xcrun simctl list runtimesboot_simulatorclaim_simulatoropen_simulatorxcrun simctl erase <udid>screenshotudidTaskUpdate:
- taskId: [first workflow task ID]
- metadata: {
"simulatorUdid": "[UDID]",
"simulatorName": "[AppName]-Workflow-iPhone16",
"iosVersion": "18.2",
"appName": "[App name]"
}{AppName}-Workflow-iPhone16Seatify-Workflow-iPhone16{AppName}-Workflow-iPhone16-Pro{AppName}-Workflow-iPad# 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"TaskUpdate:
- taskId: [workflow task ID]
- status: "in_progress"launch_appcom.apple.mobilesafariopen_urlui_describe_allui_tapui_typeui_swipeui_describe_allui_viewscreenshot({ output_path: "workflows/screenshots/ios-audit/wfNN-stepNN.png" })wf{workflow_number:02d}-step{step_number:02d}.png<img>TaskCreate:
- subject: "Issue: [Brief issue description]"
- description: |
**Workflow:** [Workflow name]
**Step:** [Step number and description]
**Issue:** [Detailed description]
**Severity:** [High/Med/Low]
**iOS Anti-Pattern:** [What's wrong - e.g., "hamburger menu"]
**iOS-Native Alternative:** [What it should be - e.g., "bottom tab bar"]
**Screenshot:** [Path to before screenshot]
- activeForm: "Documenting iOS issue"
Then link it to the workflow task:
TaskUpdate:
- taskId: [issue task ID]
- addBlockedBy: [workflow task ID]TaskUpdate:
- taskId: [workflow task ID]
- status: "completed"
- metadata: {"issuesFound": [count], "stepsPassed": [count], "stepsFailed": [count]}Task tool parameters:
- subagent_type: "general-purpose"
- model: "opus" (thorough research and evaluation)
- prompt: |
You are evaluating a web app for iOS HIG (Human Interface Guidelines) compliance.
The app should feel indistinguishable from a native iOS app.
## Screen Being Evaluated
[Include current screen description and context]
## Quick Checklist - Evaluate Each Item
**Navigation (must feel native):**
- Uses tab bar for primary navigation (not hamburger menu)
- Back navigation feels native (swipe gesture or back button)
- No breadcrumb navigation
- Modals slide up from bottom like native iOS sheets
**Touch & Interaction:**
- All tap targets are at least 44x44pt
- No hover-dependent interactions
- Animations feel native (spring physics, smooth)
- Forms work well with the on-screen keyboard
**Components (should match native iOS):**
- Uses iOS-style pickers, not web dropdowns
- Toggle switches, not checkboxes
- No Material Design components (FAB, snackbars, etc.)
- Action sheets and alerts follow iOS patterns
**Visual Design:**
- Typography follows iOS conventions (SF Pro feel)
- Subtle shadows and rounded corners (not Material elevation)
- Safe area insets respected on notched devices
- Doesn't look like a "website" - feels like an app
## Reference Comparison
Search for reference examples using WebSearch:
- "iOS [screen type] design Dribbble"
- "[well-known iOS app like Airbnb/Spotify/Instagram] [screen type] screenshot"
- "iOS Human Interface Guidelines [component]"
Visit 2-3 reference examples and compare:
- Navigation placement and style (tab bar position, back button)
- Component types (iOS pickers vs web dropdowns)
- Layout and spacing (iOS generous whitespace)
- Animation and transition patterns
## Return Format
Return a structured report:
```
## iOS HIG Evaluation: [Screen Name]
### Checklist Results
| Check | Pass/Fail | Notes |
|-------|-----------|-------|
### Reference Comparison
- Reference apps compared: [list]
- Key differences found: [list]
### Issues Found (iOS Anti-Patterns)
- [Issue 1]: [Description] (Severity: High/Med/Low)
- Anti-pattern: [What's wrong]
- iOS-native alternative: [What it should be]
### Recommendations
- [Recommendation 1]
```.claude/plans/ios-workflow-findings.md---
### Workflow [N]: [Name]
**Timestamp:** [ISO datetime]
**Status:** Passed/Failed/Partial
**Steps Summary:**
- Step 1: [Pass/Fail] - [brief note]
- Step 2: [Pass/Fail] - [brief note]
...
**Issues Found:**
- [Issue description] (Severity: High/Med/Low)
**Platform Appropriateness:**
- iOS conventions followed: [Yes/Partially/No]
- Issues: [List any platform anti-patterns found]
- Reference comparisons: [Apps/screens compared, if any]
**UX/Design Notes:**
- [Observation]
**Technical Problems:**
- [Problem] (include crash logs if any)
**Feature Ideas:**
- [Idea]
**Screenshots:** [list of screenshot paths captured]TaskCreate:
- subject: "Generate: HTML Audit Report"
- description: "Generate HTML report with screenshots for all iOS workflow results"
- activeForm: "Generating HTML audit report"
TaskUpdate:
- taskId: [report task ID]
- status: "in_progress"TaskList.claude/plans/ios-workflow-findings.mdworkflows/ios-audit-report.html<!-- Required sections: -->
<h1>iOS/Mobile Workflow Audit Report</h1>
<p>Date: [timestamp] | Device: [simulator info] | URL: [app URL]</p>
<!-- Summary table -->
<table>
<tr><th>#</th><th>Workflow</th><th>Status</th><th>Steps</th><th>Notes</th></tr>
<!-- One row per workflow with PASS/FAIL/SKIP badge -->
</table>
<!-- Per-workflow detail sections -->
<h2>Workflow N: [Name]</h2>
<p>Status: PASS/FAIL/SKIP</p>
<h3>Steps</h3>
<ol>
<li>Step description — PASS/FAIL
<br><img src="screenshots/ios-audit/wfNN-stepNN.png" style="max-width:400px; border:1px solid #ddd; border-radius:8px; margin:8px 0;">
</li>
</ol><img>screenshots/ios-audit/wfNN-stepNN.pngmax-width: 400px## iOS Audit Complete
**Device:** [Simulator name] (iOS [version])
**Workflows Executed:** [completed count]/[total count]
**Issues Found:** [issue task count]
- High severity: [count]
- Medium severity: [count]
- Low severity: [count]
**Report:** workflows/ios-audit-report.html
What would you like to do?
- "fix all" - Fix all issues
- "fix 1,3,5" - Fix specific issues by number
- "done" - End sessionTaskUpdate:
- taskId: [report task ID]
- status: "completed"workflows/
├── screenshots/
│ ├── {workflow-name}/
│ │ ├── before/
│ │ │ ├── 01-hamburger-menu.png
│ │ │ ├── 02-fab-button.png
│ │ │ └── ...
│ │ └── after/
│ │ ├── 01-tab-bar-navigation.png
│ │ ├── 02-no-fab.png
│ │ └── ...
│ └── {another-workflow}/
│ ├── before/
│ └── after/
├── ios-workflows.md
└── ios-changes-report.html{NN}-{descriptive-name}.png01-hamburger-menu.png01-tab-bar-navigation.png02-fab-button-visible.png02-fab-removed.pngworkflows/screenshots/{workflow-name}/before/workflows/screenshots/{workflow-name}/after/Call TaskList to get all issue tasks (subject starts with "Issue:")
Display to user:
Issues found:
1. [Task ID: X] Hamburger menu (iOS anti-pattern) - BEFORE: 01-hamburger-menu.png
Anti-pattern: hamburger menu → Fix: bottom tab bar
2. [Task ID: Y] FAB button (Material Design) - BEFORE: 02-fab-button.png
Anti-pattern: FAB → Fix: contextual action in nav bar
3. [Task ID: Z] Web dropdown (not iOS picker) - BEFORE: 03-web-dropdown.png
Anti-pattern: web dropdown → Fix: iOS picker wheel
Fix all issues? Or specify which to fix: [1,2,3 / all / specific numbers]For each issue the user wants fixed:
TaskCreate:
- subject: "Fix: [Anti-pattern] → [iOS solution]"
- description: |
Fixing issue from task [issue task ID]
**Issue:** [Issue name and description]
**Severity:** [High/Med/Low]
**iOS Anti-Pattern:** [What's wrong]
**iOS-Native Solution:** [What it should be]
**Screenshot reference:** [Path to before screenshot]
- activeForm: "Fixing [anti-pattern]"
TaskUpdate:
- taskId: [fix task ID]
- addBlockedBy: [issue task ID] # Links fix to its issue
- status: "in_progress"Task tool parameters (for each issue):
- subagent_type: "general-purpose"
- model: "opus" (thorough code analysis and modification)
- prompt: |
You are fixing a specific iOS UX issue in a web application.
The app should feel indistinguishable from a native iOS app.
## Issue to Fix
**Issue:** [Issue name and description]
**Severity:** [High/Med/Low]
**iOS Anti-Pattern:** [What's wrong - e.g., "hamburger menu"]
**iOS-Native Solution:** [What it should be - e.g., "bottom tab bar"]
**Screenshot reference:** [Path to before screenshot]
## Your Task
1. **Explore the codebase** to understand the implementation
- Use Glob to find relevant files
- Use Grep to search for related code
- Use Read to examine files
2. **Plan the fix**
- Identify which files need changes
- May need to create new iOS-style components
- Consider side effects
3. **Implement the fix**
- Make minimal, focused changes
- Follow existing code patterns
- Create iOS-native components if needed
- Do not refactor unrelated code
4. **Return a summary:**
```
## Fix Complete: [Issue Name]
### iOS Anti-Pattern Replaced
- Before: [What was wrong]
- After: [iOS-native solution]
### Changes Made
- [File 1]: [What changed]
- [File 2]: [What changed]
### Files Modified
- src/components/IOSTabBar.tsx (NEW)
- src/components/Navigation.tsx (MODIFIED)
### Testing Notes
- [How to verify the fix works]
```
Do NOT run tests - the main workflow will handle that.For each completed fix:
TaskUpdate:
- taskId: [fix task ID]
- status: "completed"
- metadata: {
"filesModified": ["src/components/IOSTabBar.tsx", "src/components/Navigation.tsx"],
"afterScreenshot": "workflows/screenshots/{workflow}/after/{file}.png",
"antiPatternRemoved": "[what was removed]",
"iosNativeSolution": "[what was added]"
}TaskUpdate:
- taskId: [issue task ID]
- status: "completed"
- metadata: {"fixedBy": [fix task ID], "fixedAt": "[ISO timestamp]"}TaskCreate:
- subject: "Verify: Run test suite"
- description: |
Run all tests to verify iOS fixes don't break existing functionality.
Fixes applied: [list of fix task IDs]
Files modified: [aggregated list from fix task metadata]
Anti-patterns fixed: [list from fix task metadata]
- activeForm: "Running verification tests"
TaskUpdate:
- taskId: [verification task ID]
- status: "in_progress"Task tool parameters:
- subagent_type: "general-purpose"
- model: "opus" (thorough test analysis and fixing)
- prompt: |
You are verifying that code changes pass all tests.
## Context
Recent changes were made to fix iOS UX issues. You need to verify the codebase is healthy.
## Your Task
1. **Run the test suite:**
```bash
# Detect and run appropriate test command
npm test # or yarn test, pnpm test
```
2. **If tests fail:**
- Analyze the failing tests
- Determine if failures are related to recent changes
- Fix the broken tests or update them to reflect new behavior
- Re-run tests until all pass
- Document what tests were updated and why
3. **Run linting and type checking:**
```bash
npm run lint # or eslint, prettier
npm run typecheck # or tsc --noEmit
```
4. **Run end-to-end tests locally:**
```bash
npm run test:e2e # common convention
npx playwright test # Playwright
npx cypress run # Cypress
```
5. **If E2E tests fail:**
- Analyze the failures (may be related to UI changes)
- Update E2E tests to reflect new UI behavior
- Re-run until all pass
- Document what E2E tests were updated
6. **Return verification results:**
```
## Local Verification Results
### Test Results
- Unit tests: ✓/✗ [count] passed, [count] failed
- Lint: ✓/✗ [errors if any]
- Type check: ✓/✗ [errors if any]
- E2E tests: ✓/✗ [count] passed, [count] failed
### Tests Updated
- [test file 1]: [why updated]
- [test file 2]: [why updated]
### Status: PASS / FAIL
[If FAIL, explain what's still broken]
```TaskUpdate:
- taskId: [verification task ID]
- status: "completed"
- metadata: {
"result": "PASS" or "FAIL",
"unitTests": {"passed": N, "failed": N},
"e2eTests": {"passed": N, "failed": N},
"lint": "pass" or "fail",
"typecheck": "pass" or "fail"
}TaskCreate:
- subject: "Generate: HTML Report"
- description: "Generate HTML report with iOS before/after screenshot comparisons"
- activeForm: "Generating HTML report"
TaskUpdate:
- taskId: [html report task ID]
- status: "in_progress"Task tool parameters:
- subagent_type: "general-purpose"
- model: "haiku" (simple generation task)
- prompt: |
Generate an HTML report for iOS HIG compliance fixes.
## Data to Include
**App Name:** [App name]
**Date:** [Current date]
**Device:** [Simulator device name and iOS version]
**Issues Fixed:** [Count]
**Issues Remaining:** [Count]
**Fixes Made:**
[For each fix:]
- Issue: [Name]
- iOS Anti-Pattern: [What was wrong]
- iOS-Native Fix: [What it is now]
- Before screenshot: workflows/screenshots/{workflow}/before/{file}.png
- After screenshot: workflows/screenshots/{workflow}/after/{file}.png
- Files changed: [List]
- Why it matters: [Explanation of iOS HIG compliance]
## Output
Write the HTML report to: workflows/ios-changes-report.html
Use this template structure:
- Executive summary with stats
- Before/after screenshot comparisons for each fix
- iOS anti-pattern → iOS-native fix explanation
- Files changed section
- "Why this matters for iOS users" explanations
Style: Clean, professional, Apple-style design (SF Pro fonts feel, iOS blue accents).
Return confirmation when complete.TaskUpdate:
- taskId: [html report task ID]
- status: "completed"
- metadata: {"outputPath": "workflows/ios-changes-report.html"}TaskCreate:
- subject: "Generate: Markdown Report"
- description: "Generate Markdown documentation for iOS fixes"
- activeForm: "Generating Markdown report"
TaskUpdate:
- taskId: [md report task ID]
- status: "in_progress"Task tool parameters:
- subagent_type: "general-purpose"
- model: "haiku"
- prompt: |
Generate a Markdown report for iOS HIG compliance fixes.
## Data to Include
[Same data as HTML report]
## Output
Write the Markdown report to: workflows/ios-changes-documentation.md
Include:
- Executive summary
- Before/after comparison table with iOS anti-pattern and fix columns
- Detailed changes for each fix
- Files changed
- Technical implementation notes
- Testing verification results
Return confirmation when complete.TaskUpdate:
- taskId: [md report task ID]
- status: "completed"
- metadata: {"outputPath": "workflows/ios-changes-documentation.md"}TaskCreate:
- subject: "Create: Pull Request"
- description: |
Create PR for iOS UX compliance fixes.
Fixes included: [list from completed fix tasks]
Anti-patterns removed: [list from fix task metadata]
Files modified: [aggregated from fix task metadata]
- activeForm: "Creating pull request"
TaskUpdate:
- taskId: [pr task ID]
- status: "in_progress"git checkout -b fix/ios-ux-compliancegit add .
git commit -m "fix: iOS UX compliance improvements
- [List key fixes made]
- Updated tests to reflect new behavior
- All local tests passing"git push -u origin fix/ios-ux-compliance
gh pr create --title "fix: iOS UX compliance improvements" --body "## Summary
[Brief description of fixes]
## Changes
- [List of changes]
## Testing
- [x] All unit tests pass locally
- [x] All E2E tests pass locally
- [x] Manual verification in iOS Simulator complete
## Screenshots
See workflows/ios-changes-report.html for before/after comparisons"TaskUpdate:
- taskId: [pr task ID]
- metadata: {
"prUrl": "https://github.com/owner/repo/pull/123",
"ciStatus": "running" | "passed" | "failed"
}TaskUpdate:
- taskId: [pr task ID]
- status: "completed"
- metadata: {"prUrl": "...", "ciStatus": "passed", "merged": false}PR created: https://github.com/owner/repo/pull/123
CI status: Running... (or Passed/Failed)Call TaskList to generate final summary:
## iOS Session Complete
**Simulator:** [Device name] (iOS [version])
**Workflows Executed:** [count completed workflow tasks]
**iOS Anti-Patterns Found:** [count issue tasks]
**Anti-Patterns Fixed:** [count completed fix tasks]
**Tests:** [from verification task metadata]
**PR:** [from pr task metadata]
All tasks completed successfully.list_simulators()claim_simulator({ udid? })get_claimed_simulator()boot_simulator({ udid })open_simulator()ui_describe_all({ udid? })ui_describe_point({ x, y, udid? })ui_view({ udid? })ui_tap({ x, y, duration?, udid? })ui_type({ text, udid? })ui_swipe({ x_start, y_start, x_end, y_end, duration?, delta?, udid? })screenshot({ output_path, type?, udid? })record_video({ output_path?, codec?, udid? })stop_recording()install_app({ app_path, udid? })launch_app({ bundle_id, terminate_running?, udid? })com.apple.mobilesafarilaunch_app({ bundle_id: "com.apple.mobilesafari" })ui_typeui_describe_allframeui_typeui_describe_allSwipe Up: x_start=200, y_start=600, x_end=200, y_end=200
Swipe Down: x_start=200, y_start=200, x_end=200, y_end=600
Swipe Left: x_start=350, y_start=400, x_end=50, y_end=400
Swipe Right: x_start=50, y_start=400, x_end=350, y_end=400ui_describe_allTaskListin_progresspendingTaskList shows:
├── All workflow tasks completed, no fix tasks
│ └── Ask user: "iOS audit complete. Want to fix anti-patterns?"
├── All workflow tasks completed, fix tasks in_progress
│ └── Resume fix mode, check agent status
├── Some workflow tasks pending
│ └── Resume from first pending workflow
│ └── Reclaim simulator using UDID from task metadata
├── Workflow task in_progress
│ └── Read findings file to see which steps completed
│ └── Resume from next step in that workflow
└── No tasks exist
└── Fresh start (Phase 1)list_simulatorsclaim_simulator.claude/plans/ios-workflow-findings.mdResuming from interrupted iOS session:
- Simulator: [name] ([UDID]) - [reclaimed/recreated]
- Workflows completed: [list from completed tasks]
- iOS anti-patterns found: [count from issue tasks]
- Current state: [in_progress task description]
- Resuming: [next action]