ios-qa

Runs vision-driven QA loops against SwiftUI apps on a physical iPhone over USB.

1|Updated Jul 23, 2026
One-click install
npx skills add https://github.com/sanjanb/my-agent-harness --skill ios-qa-sanjanb
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: ios-qa
Source: https://github.com/sanjanb/my-agent-harness/tree/main/skills/ios-qa
Command: npx skills add https://github.com/sanjanb/my-agent-harness --skill ios-qa-sanjanb

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Testing SwiftUI apps on a real device normally requires manual tapping or heavyweight UI test frameworks. This Skill connects to a physical iPhone over a USB CoreDevice tunnel and lets an AI agent autonomously explore screens, tap elements, and find bugs through a screenshot-analyze-act-verify loop. ## Core Features & Use Cases - Live-device agent loop: Connects via CoreDevice IPv6 tunnel, reads Swift source to understand screens, then iterates screenshot → analyze → decide → act → verify against the running app. - Embedded HTTP StateServer: Ships Swift/Objective-C templates (StateServer, DebugBridge, touch synthesis) that expose screenshots, accessibility elements, and tap/swipe/type mutations over authenticated loopback HTTP. - Remote QA over Tailscale: Optionally exposes the device so remote HTTP-capable agents can run iOS QA without physical access to the hardware. - Use Case: Ask the agent to "qa the iOS app" after a feature change; it drives the real device, exercises each screen, and reports bugs with screenshot evidence. ## Quick Start Ask the agent to run iOS QA on my iPhone app and find bugs on the connected device.

Frequently Asked Questions about ios-qa

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I run automated QA on a real iPhone app?

Connect the iPhone via USB, embed the DEBUG-only DebugBridge package in your SwiftUI app, and invoke the skill. It opens a CoreDevice IPv6 tunnel and runs a screenshot-analyze-act-verify loop against the app's embedded HTTP StateServer.

How does the agent tap buttons in a SwiftUI app?

Taps go through the MutationBridge, which first tries accessibility activation and falls back to KIF-derived UITouch synthesis with IOHIDEvent. On iOS 18+ it uses _UIHitTestContext so SwiftUI Buttons receive real touch events.

Can remote agents run iOS QA without the physical device?

Yes. The skill can expose the device over Tailscale so remote HTTP-capable agents such as OpenClaw or Codex can drive QA from anywhere. All device interaction still flows through the authenticated StateServer endpoints.

Does the debug bridge ship in App Store release builds?

No. Every bridge file is gated behind #if DEBUG, and the SPM package uses .when(configuration: .debug) conditional dependencies so Release builds never link DebugBridge code. A CI invariant verifies no DebugBridge symbols appear in release binaries.

How is the embedded StateServer secured?

The server binds only to loopback and the CoreDevice ULA range, requires a bearer token that is rotated within seconds of boot, and enforces a per-device session lock on all mutating endpoints. Unauthenticated requests receive 401 responses.