axiom-ios-testing

Use when writing ANY test, debugging flaky tests, making tests faster, or asking about Swift Testing vs XCTest. Covers unit tests, UI tests, fast tests without simulator, async testing, test architecture.

16 stars

Best use case

axiom-ios-testing is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Use when writing ANY test, debugging flaky tests, making tests faster, or asking about Swift Testing vs XCTest. Covers unit tests, UI tests, fast tests without simulator, async testing, test architecture.

Teams using axiom-ios-testing should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/axiom-ios-testing/SKILL.md --create-dirs "https://raw.githubusercontent.com/diegosouzapw/awesome-omni-skill/main/skills/testing-security/axiom-ios-testing/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/axiom-ios-testing/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How axiom-ios-testing Compares

Feature / Agentaxiom-ios-testingStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Use when writing ANY test, debugging flaky tests, making tests faster, or asking about Swift Testing vs XCTest. Covers unit tests, UI tests, fast tests without simulator, async testing, test architecture.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# iOS Testing Router

**You MUST use this skill for ANY testing-related question, including writing tests, debugging test failures, making tests faster, or choosing between testing approaches.**

## When to Use

Use this router when you encounter:
- Writing new unit tests or UI tests
- Swift Testing framework (@Test, #expect, @Suite)
- XCTest or XCUITest questions
- Making tests run faster (without simulator)
- Flaky tests (pass sometimes, fail sometimes)
- Testing async code reliably
- Migrating from XCTest to Swift Testing
- Test architecture decisions
- Condition-based waiting patterns

## Routing Logic

This router invokes specialized skills based on the specific testing need:

### 1. Unit Tests / Fast Tests → **swift-testing**

**Triggers**:
- Writing new unit tests
- Swift Testing framework (`@Test`, `#expect`, `#require`, `@Suite`)
- Making tests run without simulator
- Testing async code reliably
- `withMainSerialExecutor`, `TestClock`
- Migrating from XCTest
- Parameterized tests
- Tags and traits
- Host Application: None configuration
- Swift Package tests (`swift test`)
- Tests take >5 seconds for pure logic
- Want TDD with fast feedback loop

**Why swift-testing**: Modern Swift Testing framework with parallel execution, better async support, and the ability to run without launching simulator.

**Invoke**: Read the `axiom-swift-testing` skill

---

### 2. UI Tests / XCUITest → **ui-testing**

**Triggers**:
- Recording UI Automation (Xcode 26)
- XCUIApplication, XCUIElement
- Flaky UI tests
- Tests pass locally, fail in CI
- `sleep()` or arbitrary timeouts
- Condition-based waiting
- Cross-device testing
- Accessibility-first testing

**Why ui-testing**: XCUITest requires simulator and has unique patterns for reliability.

**Invoke**: Read the `axiom-ui-testing` skill

---

### 3. Flaky Tests / Race Conditions → **test-failure-analyzer** (Agent)

**Triggers**:
- Tests fail randomly in CI
- Tests pass locally but fail in CI
- Flaky tests (pass sometimes, fail sometimes)
- Race conditions in Swift Testing
- Missing `await confirmation` for async callbacks
- Missing `@MainActor` on UI tests
- Shared mutable state in `@Suite`
- Tests pass individually, fail when run together

**Why test-failure-analyzer**: Specialized agent that scans for patterns causing intermittent failures in Swift Testing.

**Invoke**: Launch `test-failure-analyzer` agent

---

### 4. Async Testing Patterns → **testing-async**

**Triggers**:
- Testing async/await functions
- `confirmation` for callbacks (Swift Testing)
- `expectedCount` for multiple callbacks
- Testing MainActor code with `@MainActor @Test`
- Migrating XCTestExpectation → confirmation
- Parallel test execution concerns
- Test timeout configuration

**Why testing-async**: Dedicated patterns for async code in Swift Testing framework.

**Invoke**: Read the `axiom-testing-async` skill

---

### 5. Test Crashes / Environment Issues → **xcode-debugging**

**Triggers**:
- Tests crash before assertions run
- Simulator won't boot for tests
- Tests hang indefinitely
- "Unable to boot simulator" errors
- Clean test run differs from incremental

**Why xcode-debugging**: Test failures from environment issues, not test logic.

**Invoke**: Read the `axiom-xcode-debugging` skill

---

### 6. Running XCUITests from Command Line → **test-runner** (Agent)

**Triggers**:
- Run tests with xcodebuild
- Parse xcresult bundles
- Export failure screenshots/videos
- Code coverage reports
- CI/CD test execution

**Why test-runner**: Specialized agent for command-line test execution with xcresulttool parsing.

**Invoke**: Launch `test-runner` agent

---

### 7. Closed-Loop Test Debugging → **test-debugger** (Agent)

**Triggers**:
- Fix failing tests automatically
- Debug persistent test failures
- Run → analyze → fix → verify cycle
- Need to iterate until tests pass
- Analyze failure screenshots

**Why test-debugger**: Automated cycle of running tests, analyzing failures, suggesting fixes, and re-running.

**Invoke**: Launch `test-debugger` agent

---

### 8. Recording UI Automation (Xcode 26) → **ui-recording**

**Triggers**:
- Record user interactions in Xcode
- Test plans for multi-config replay
- Video review of test runs
- Xcode 26 recording workflow
- Enhancing recorded test code

**Why ui-recording**: Focused guide for Xcode 26's Record/Replay/Review workflow.

**Invoke**: Read the `axiom-ui-recording` skill

---

### 9. Test Quality Audit → **testing-auditor** (Agent)

**Triggers**:
- Want to audit test quality
- Find flaky test patterns (sleep calls, shared mutable state)
- Speed up test execution
- Migrate from XCTest to Swift Testing
- Check tests for Swift 6 concurrency issues

**Why testing-auditor**: Scans for sleep() calls, shared mutable state, missing assertions, XCTest to Swift Testing migration opportunities, and Swift 6 concurrency issues in tests.

**Invoke**: Launch `testing-auditor` agent or `/axiom:audit testing`

---

### 10. UI Automation Without XCUITest → **simulator-tester** + **axe-ref**

**Triggers**:
- Automate app without test target
- AXe CLI usage (tap, swipe, type)
- describe-ui for accessibility tree
- Quick automation outside XCUITest
- Scripted simulator interactions

**Why simulator-tester + axe-ref**: AXe provides accessibility-based UI automation when XCUITest isn't available.

**Invoke**: Launch `simulator-tester` agent (uses axiom-axe-ref)

---

## Decision Tree

1. Writing unit tests / Swift Testing? → swift-testing
2. Writing UI tests / XCUITest? → ui-testing
3. Testing async/await code? → testing-async
4. Flaky tests / race conditions (XCUITest)? → ui-testing
5. Flaky tests / race conditions (Swift Testing)? → test-failure-analyzer (Agent)
6. Tests crash / environment wrong? → xcode-debugging (via ios-build)
7. Tests are slow / want swift test? → swift-testing (Strategy 1: Package extraction)
8. Run tests from CLI / parse results? → test-runner (Agent)
9. Fix failing tests automatically? → test-debugger (Agent)
10. Want test quality audit (flaky patterns, migration)? → testing-auditor (Agent)
11. Record UI interactions (Xcode 26)? → ui-recording
12. Automate without XCUITest / AXe CLI? → simulator-tester + axe-ref

## Swift Testing vs XCTest Quick Guide

| Need | Use |
|------|-----|
| Unit tests (logic, models) | Swift Testing |
| UI tests (tap, swipe, assert screens) | XCUITest (XCTest) |
| Tests without simulator | Swift Testing + Package/Framework |
| Parameterized tests | Swift Testing |
| Performance measurements | XCTest (XCTMetric) |
| Objective-C tests | XCTest |

## Anti-Rationalization

| Thought | Reality |
|---------|---------|
| "Simple test question, I don't need the skill" | Proper patterns prevent test debt. swift-testing has copy-paste solutions. |
| "I know XCTest well enough" | Swift Testing is significantly better for unit tests. swift-testing covers migration. |
| "Tests are slow but it's fine" | Fast tests enable TDD. swift-testing shows how to run without simulator. |
| "I'll fix the flaky test with a sleep()" | sleep() makes tests slower AND flakier. ui-testing has condition-based waiting patterns. |
| "I'll add tests later" | Tests written after implementation miss edge cases. swift-testing makes writing tests first easy. |

## Example Invocations

User: "How do I write a unit test in Swift?"
→ Invoke: axiom-swift-testing

User: "My UI tests are flaky in CI"
→ Check codebase: XCUIApplication/XCUIElement patterns? → ui-testing
→ Check codebase: @Test/#expect patterns? → test-failure-analyzer

User: "Tests fail randomly, pass sometimes fail sometimes"
→ Invoke: test-failure-analyzer (Agent)

User: "Tests pass locally but fail in CI"
→ Invoke: test-failure-analyzer (Agent)

User: "How do I test async code without flakiness?"
→ Invoke: testing-async

User: "How do I test callback-based APIs with Swift Testing?"
→ Invoke: testing-async

User: "What's the Swift Testing equivalent of XCTestExpectation?"
→ Invoke: testing-async

User: "How do I use confirmation with expectedCount?"
→ Invoke: testing-async

User: "I want my tests to run faster"
→ Invoke: axiom-swift-testing (Strategy 1: Package extraction)

User: "My unit tests take 25 seconds to run"
→ Invoke: axiom-swift-testing (Strategy 1: Package extraction)

User: "How do I use swift test instead of xcodebuild test?"
→ Invoke: axiom-swift-testing (Fast Tests section)

User: "Should I use Swift Testing or XCTest?"
→ Invoke: axiom-swift-testing (Migration section) + this decision tree

User: "Tests crash before any assertions"
→ Invoke: axiom-xcode-debugging

User: "Run my tests and show me what failed"
→ Invoke: test-runner (Agent)

User: "Help me fix these failing tests"
→ Invoke: test-debugger (Agent)

User: "Parse the xcresult from my last test run"
→ Invoke: test-runner (Agent)

User: "Export failure screenshots from my tests"
→ Invoke: test-runner (Agent)

User: "How do I record UI automation in Xcode 26?"
→ Invoke: axiom-ui-recording

User: "How do I use test plans for multi-language testing?"
→ Invoke: axiom-ui-recording

User: "Can I automate my app without writing XCUITests?"
→ Invoke: simulator-tester (Agent) + axiom-axe-ref

User: "How do I tap a button using AXe?"
→ Invoke: axiom-axe-ref (via simulator-tester)

User: "Audit my tests for quality issues"
→ Invoke: `testing-auditor` agent

User: "Should I migrate to Swift Testing?"
→ Invoke: `testing-auditor` agent

Related Skills

e2e-testing

16
from diegosouzapw/awesome-omni-skill

End-to-end testing workflow with Playwright for browser automation, visual regression, cross-browser testing, and CI/CD integration.

e2e-testing-patterns

16
from diegosouzapw/awesome-omni-skill

Master end-to-end testing with Playwright and Cypress to build reliable test suites that catch bugs, improve confidence, and enable fast deployment. Use when implementing E2E tests, debugging flaky tests, or establishing testing standards.

dotnet-uno-testing

16
from diegosouzapw/awesome-omni-skill

Tests Uno Platform apps. Playwright for WASM, platform-specific patterns, runtime heads.

cve-testing

16
from diegosouzapw/awesome-omni-skill

CVE vulnerability testing coordinator that identifies technology stacks, researches known vulnerabilities, and tests applications for exploitable CVEs using public exploits and proof-of-concept code.

cui-javascript-unit-testing

16
from diegosouzapw/awesome-omni-skill

Jest unit testing standards covering configuration, test structure, testing patterns, and coverage requirements

configure-ux-testing

16
from diegosouzapw/awesome-omni-skill

Check and configure UX testing infrastructure (Playwright, accessibility, visual regression)

comprehensive-unit-testing-with-pytest

16
from diegosouzapw/awesome-omni-skill

Aims for high test coverage using pytest, testing both common and edge cases.

Burp Suite Web Application Testing

16
from diegosouzapw/awesome-omni-skill

This skill should be used when the user asks to "intercept HTTP traffic", "modify web requests", "use Burp Suite for testing", "perform web vulnerability scanning", "test with Burp Repeater", "analyze HTTP history", or "configure proxy for web testing". It provides comprehensive guidance for using Burp Suite's core features for web application security testing.

burp-suite-testing

16
from diegosouzapw/awesome-omni-skill

This skill should be used when the user asks to "intercept HTTP traffic", "modify web requests", "use Burp Suite for testing", "perform web vulnerability scanning", "test with Burp ...

backtesting-frameworks

16
from diegosouzapw/awesome-omni-skill

Build robust backtesting systems for trading strategies with proper handling of look-ahead bias, survivorship bias, and transaction costs. Use when developing trading algorithms, validating strateg...

asyncredux-testing-view-models

16
from diegosouzapw/awesome-omni-skill

Test StoreConnector view-models in isolation. Covers creating view-models with `Vm.createFrom()`, testing view-model properties, testing callbacks that dispatch actions, and verifying state changes from callbacks.

asyncredux-testing-basics

16
from diegosouzapw/awesome-omni-skill

Write unit tests for AsyncRedux actions using the Store directly. Covers creating test stores with initial state, using `dispatchAndWait()`, checking state after actions, verifying action errors via ActionStatus, and testing async actions.