askill
qa-testing-ios

qa-testing-iosSafety 90Repository

Run and stabilize iOS tests (XCTest, XCUITest, Swift Testing) on simulators and devices with xcodebuild/simctl: choose destinations, manage simulator state, control flakes (locale/time/network/animations), configure CI, and collect/parse xcresult artifacts.

0 stars
1.2k downloads
Updated 2/5/2026

Package Files

Loading files...
SKILL.md

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

TaskCommand
List schemesxcodebuild -list -workspace MyApp.xcworkspace
List simulatorsxcrun simctl list devices
List devices (USB)xcrun xctrace list devices
Boot simulatorxcrun simctl boot "iPhone 15 Pro"
Wait for bootxcrun simctl bootstatus booted -b
Build appxcodebuild build -scheme MyApp -sdk iphonesimulator
Install appxcrun simctl install booted app.app
Run testsxcodebuild 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 simulatorsxcrun simctl shutdown all && xcrun simctl erase all
Take screenshotxcrun simctl io booted screenshot screenshot.png
Record videoxcrun 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

LayerFrameworkScope
UnitXCTest / Swift TestingBusiness logic (fast)
SnapshotXCTest + snapshot libsView rendering
IntegrationXCTestPersistence, networking
UIXCUITestCritical 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

ResourcePurpose
references/swift-testing.mdSwift Testing framework
references/simulator-commands.mdComplete simctl reference
references/xctest-patterns.mdXCTest/XCUITest patterns

Templates

TemplatePurpose
assets/template-ios-ui-test-stability-checklist.mdStability checklist

Related Skills

SkillPurpose
software-mobileiOS development
qa-testing-strategyTest strategy
qa-testing-mobileCross-platform mobile

Install

Download ZIP
Requires askill CLI v1.0+

AI Quality Score

95/100Analyzed 2/11/2026

A comprehensive and highly actionable guide for iOS testing using native Apple tools. It covers everything from basic commands to advanced CI integration and flake management.

90
95
95
95
98

Metadata

Licenseunknown
Version-
Updated2/5/2026
Publishermajiayu000

Tags

ci-cdgithubgithub-actionssecuritytesting