qa-testing-ios

📁 vasilyu1983/ai-agents-public 📅 Jan 23, 2026
28
总安装量
28
周安装量
#7303
全站排名
安装命令
npx skills add https://github.com/vasilyu1983/ai-agents-public --skill qa-testing-ios

Agent 安装分布

claude-code 18
opencode 16
cursor 15
codex 15
gemini-cli 14
github-copilot 13

Skill 文档

QA Testing (iOS)

Use xcodebuild + Xcode Simulator (simctl) to build, run, and stabilize iOS tests.

Primary docs: XCTest, Swift Testing, simctl, Xcode testing

Inputs to Confirm

  • Xcode entrypoint: -workspace or -project
  • -scheme (and optional -testPlan)
  • Destination(s): simulator name + iOS runtime (or OS=latest), and whether real devices are required
  • UI-test hooks: launch arguments/env toggles (stubs, demo data, auth bypass, disable animations)
  • Artifact needs: xcresult, coverage, screenshots/video, logs

Quick Commands

Task Command
List schemes xcodebuild -list -workspace MyApp.xcworkspace
List simulators xcrun simctl list devices
List devices (USB) xcrun xctrace list devices
Boot simulator xcrun simctl boot "iPhone 15 Pro"
Wait for boot xcrun simctl bootstatus booted -b
Build app xcodebuild build -scheme MyApp -sdk iphonesimulator
Install app xcrun simctl install booted app.app
Run tests xcodebuild test -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 15 Pro,OS=latest' -resultBundlePath TestResults.xcresult
Run tests (device) xcodebuild test -scheme MyApp -destination 'platform=iOS,id=<UDID>' -resultBundlePath TestResults.xcresult
Reset simulators xcrun simctl shutdown all && xcrun simctl erase all
Take screenshot xcrun simctl io booted screenshot screenshot.png
Record video xcrun simctl io booted recordVideo recording.mov

Workflow

  1. Resolve build inputs (workspace/project, scheme, testPlan, destinations).
  2. Make simulator state repeatable: shutdown/erase as needed, boot, and wait for boot.
  3. Run tests with artifacts enabled (-resultBundlePath); parallelize and retry only when appropriate.
  4. Triage failures from the xcresult bundle; confirm flakes with repetition; quarantine with an owner and reproduction steps.

xcodebuild Patterns

  • Select tests to reproduce: -only-testing:TargetTests/ClassName/testMethod and -skip-testing:TargetTests/FlakyClass.
  • Prefer test plans for large suites: -testPlan <plan> (keeps device/config/runs consistent).
  • Enable parallel testing when suites are isolation-safe: -parallel-testing-enabled YES (+ -maximum-parallel-testing-workers N).
  • Always write a result bundle in automation: -resultBundlePath TestResults.xcresult.
  • For reruns, split build and test: xcodebuild build-for-testing ... then xcodebuild test-without-building ....
  • Inspect results locally: open TestResults.xcresult or xcrun xcresulttool get --path TestResults.xcresult --format json.

Flake Triage (Repetition and Retry)

  • Prefer repetition to prove flake rate before adding retries.
  • Use targeted reruns before suite-wide retries.

Common patterns (flags vary by Xcode version):

  • Retry failing tests once in CI: -retry-tests-on-failure -test-iterations 2
  • Measure flakiness until first failure: -test-iterations 50 -test-repetition-mode until-failure
  • Run a single test repeatedly: -only-testing:TargetTests/ClassName/testMethod -test-iterations 20

Testing Layers

Layer Framework Scope
Unit XCTest / Swift Testing Business logic (fast)
Snapshot XCTest + snapshot libs View rendering
Integration XCTest Persistence, networking
UI XCUITest Critical user journeys

Device Matrix

  • Default: simulators for PR gates; real devices for release
  • Cover: one small phone, one large phone, iPad if supported
  • Add OS versions only for multiple major release support

Flake Control

Use these defaults unless the project requires otherwise:

  • Disable or reduce animations in UI-test builds.
  • Fix locale/timezone (via launch arguments or app-level configuration).
  • Stub network at the boundary (avoid real third-party calls in UI tests).
  • Reset app state between tests (fresh install, deep-link reset, or explicit teardown).
  • Prefer state-based waits (waitForExistence, expectations) over sleeps.
  • Pre-grant/reset permissions where possible (simulators): xcrun simctl privacy booted grant ....

CI Integration (GitHub Actions)

name: iOS CI
on: [push, pull_request]
jobs:
  test:
    runs-on: macos-15
    steps:
      - uses: actions/checkout@v4
      - uses: maxim-lobanov/setup-xcode@v1
        with:
          xcode-version: "16.0"
      - run: |
          set -euo pipefail
          xcodebuild test \
            -scheme MyApp \
            -sdk iphonesimulator \
            -destination 'platform=iOS Simulator,name=iPhone 15 Pro,OS=latest' \
            -resultBundlePath TestResults.xcresult
      - uses: actions/upload-artifact@v4
        if: always()
        with:
          name: test-results
          path: TestResults.xcresult

Do / Avoid

Do

  • Make UI tests independent and idempotent
  • Use test data builders and dedicated test accounts
  • Collect xcresult bundles on failure
  • Use accessibilityIdentifier, not labels

Avoid

  • Relying on test ordering or global state
  • UI tests requiring real network
  • Thread.sleep() for synchronization
  • Accepting AI-proposed selectors without validation

Resources

Resource Purpose
references/swift-testing.md Swift Testing framework
references/simulator-commands.md Complete simctl reference
references/xctest-patterns.md XCTest/XCUITest patterns

Templates

Template Purpose
assets/template-ios-ui-test-stability-checklist.md Stability checklist

Related Skills

Skill Purpose
software-mobile iOS development
qa-testing-strategy Test strategy
qa-testing-mobile Cross-platform mobile