Orca iOS Simulator Control
stablyai/orca
iOS Simulator control from inside Orca, with the live device view in Orca's emulator pane. Use when driving a booted Apple Simulator on macOS: taps, gestures…
XCTest and XCUITest execution workflows and flaky test detection patterns
$ npx skills add conorluddy/xclaude-plugin --skill ios-testing-patterns -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install conorluddy/xclaude-plugin ios-testing-patterns --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/conorluddy/xclaude-plugin.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/ios-testing-patterns .claude/skills/ios-testing-patterns && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "ios-testing-patterns" agent skill from https://github.com/conorluddy/xclaude-plugin/tree/main/skills/ios-testing-patterns into .claude/skills/ios-testing-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ios-testing-patterns", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/conorluddy/xclaude-plugin/tree/main/skills/ios-testing-patternsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add conorluddy/xclaude-plugin --skill ios-testing-patterns -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install conorluddy/xclaude-plugin ios-testing-patterns --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/conorluddy/xclaude-plugin.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/ios-testing-patterns .agents/skills/ios-testing-patterns && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ios-testing-patterns" agent skill from https://github.com/conorluddy/xclaude-plugin/tree/main/skills/ios-testing-patterns into .agents/skills/ios-testing-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ios-testing-patterns", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add conorluddy/xclaude-plugin --skill ios-testing-patterns -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install conorluddy/xclaude-plugin ios-testing-patterns --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/conorluddy/xclaude-plugin.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/ios-testing-patterns .cursor/skills/ios-testing-patterns && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "ios-testing-patterns" agent skill from https://github.com/conorluddy/xclaude-plugin/tree/main/skills/ios-testing-patterns into .cursor/skills/ios-testing-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ios-testing-patterns", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/conorluddy/xclaude-plugin.git --path skills/ios-testing-patterns--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add conorluddy/xclaude-plugin --skill ios-testing-patterns -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install conorluddy/xclaude-plugin ios-testing-patterns --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/conorluddy/xclaude-plugin.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/ios-testing-patterns .gemini/skills/ios-testing-patterns && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "ios-testing-patterns" agent skill from https://github.com/conorluddy/xclaude-plugin/tree/main/skills/ios-testing-patterns into .gemini/skills/ios-testing-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ios-testing-patterns", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install conorluddy/xclaude-plugin ios-testing-patternsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add conorluddy/xclaude-plugin --skill ios-testing-patterns -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/conorluddy/xclaude-plugin.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/ios-testing-patterns .github/skills/ios-testing-patterns && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "ios-testing-patterns" agent skill from https://github.com/conorluddy/xclaude-plugin/tree/main/skills/ios-testing-patterns into .github/skills/ios-testing-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ios-testing-patterns", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add conorluddy/xclaude-plugin --skill ios-testing-patterns -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install conorluddy/xclaude-plugin ios-testing-patterns --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/conorluddy/xclaude-plugin.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/ios-testing-patterns .opencode/skills/ios-testing-patterns && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "ios-testing-patterns" agent skill from https://github.com/conorluddy/xclaude-plugin/tree/main/skills/ios-testing-patterns into .opencode/skills/ios-testing-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ios-testing-patterns", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
ios-testing-patternsXCTest and XCUITest execution workflows and flaky test detection patterns
iOS Testing Patterns is an agent skill from conorluddy/xclaude-plugin. XCTest and XCUITest execution workflows and flaky test detection patterns
Its SKILL.md is about 4.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA, covering Failing and flaky tests, Test strategy and Mobile testing and debugging. It works with iOS, Xcode and Model Context Protocol. The repository describes itself as: iOS development ClaudeCode plugin for mindful token and context usage. Contains modular MCPs that group various Xcode/IDB tools based on your current workflow. The licence is MIT.
12 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 6de4b2c. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are json, swift and bash).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
iOS Testing Patterns loads about 4.5k tokens when it runs. Until then it costs about 24 tokens; SKILL.md has 1,219 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from conorluddy/xclaude-plugin at commit 6de4b2c, republished under its MIT licence (© conorluddy). 1,219 words, ~4,519 tokens.
.claude/skills/ios-testing-patterns/SKILL.md (or your agent's skills folder).Comprehensive guide to XCTest and XCUITest execution, analysis, and flaky test detection
This skill provides patterns and workflows for executing iOS tests using XCTest and XCUITest frameworks. It covers test execution strategies, result analysis, flaky test detection, and troubleshooting common test failures.
Use this skill when:
| Task | Operation | Key Parameters |
|---|---|---|
| Run all tests | test | scheme, destination |
| Run specific test | test | scheme, only_testing |
| Skip tests | test | scheme, skip_testing |
| Use test plan | test | scheme, test_plan |
| Parallel execution | test | destination (multiple) |
Use ios-testing-patterns when:
Related Skills:
XCTest (Unit/Integration Tests):
XCUITest (UI Tests):
Sequential Execution:
Parallel Execution:
Test Sharding:
Basic Unit Test Execution:
{
"operation": "test",
"scheme": "MyApp",
"destination": "platform=iOS Simulator,name=iPhone 15,OS=18.0"
}Note: The destination parameter now supports auto-resolution! You can omit the OS version (e.g., "platform=iOS Simulator,name=iPhone 15") and the tool will automatically select the latest available OS version for that device.
Run Specific Test Class:
{
"operation": "test",
"scheme": "MyApp",
"destination": "platform=iOS Simulator,name=iPhone 15,OS=18.0",
"options": {
"only_testing": ["MyAppTests/NetworkTests"]
}
}Run Specific Test Method:
{
"operation": "test",
"scheme": "MyApp",
"destination": "platform=iOS Simulator,name=iPhone 15,OS=18.0",
"options": {
"only_testing": ["MyAppTests/NetworkTests/testAPIRequest"]
}
}Basic UI Test Execution:
{
"operation": "test",
"scheme": "MyAppUITests",
"destination": "platform=iOS Simulator,name=iPhone 15"
}UI Tests with Specific Device:
{
"operation": "test",
"scheme": "MyAppUITests",
"destination": "platform=iOS Simulator,name=iPad Pro (12.9-inch)"
}UI Tests with Test Plan:
{
"operation": "test",
"scheme": "MyApp",
"destination": "platform=iOS Simulator,name=iPhone 15",
"options": {
"test_plan": "SmokeTests"
}
}Multiple Destinations:
Run tests on multiple simulators simultaneously:
{
"operation": "test",
"scheme": "MyApp",
"destination": [
"platform=iOS Simulator,name=iPhone 15",
"platform=iOS Simulator,name=iPhone SE (3rd generation)"
],
"options": {
"parallel": true
}
}Parallel Test Benefits:
Parallel Test Considerations:
Skip Specific Tests:
{
"operation": "test",
"scheme": "MyApp",
"destination": "platform=iOS Simulator,name=iPhone 15",
"options": {
"skip_testing": [
"MyAppUITests/SlowTests",
"MyAppTests/NetworkTests/testLargeDownload"
]
}
}Run Only Fast Tests:
{
"operation": "test",
"scheme": "MyApp",
"destination": "platform=iOS Simulator,name=iPhone 15",
"options": {
"only_testing": ["MyAppTests/UnitTests"],
"skip_testing": ["MyAppTests/UnitTests/testSlowOperation"]
}
}Success Response:
{
"success": true,
"tests_run": 45,
"tests_passed": 45,
"tests_failed": 0,
"execution_time": "12.4s",
"scheme": "MyApp"
}Failure Response:
{
"success": false,
"tests_run": 45,
"tests_passed": 43,
"tests_failed": 2,
"failures": [
{
"test": "MyAppTests.LoginTests.testInvalidPassword",
"message": "XCTAssertEqual failed: (\"error\") is not equal to (\"invalid\")",
"file": "LoginTests.swift",
"line": 42
},
{
"test": "MyAppUITests.CheckoutTests.testPaymentFlow",
"message": "Failed to find button \"Confirm\"",
"file": "CheckoutTests.swift",
"line": 78
}
],
"execution_time": "18.7s"
}Analyzing Test Results:
success statustests_failed countfailures array for detailsexecution_time for performance issuesWhat are Flaky Tests?
Tests that intermittently pass or fail without code changes:
Detection Strategy 1: Multiple Runs
Run tests multiple times to detect flakiness:
# Run tests 5 times and compare results
for i in {1..5}; do
execute_xcode_command(test, scheme, destination)
# Record results
doneDetection Strategy 2: Pattern Analysis
Look for common flaky test patterns:
{
"operation": "test",
"scheme": "MyApp",
"destination": "platform=iOS Simulator,name=iPhone 15",
"options": {
"only_testing": ["MyAppTests/SuspectedFlakyTest"]
}
}Flaky Test Indicators:
Flaky Test Workflow:
1. Identify suspect test (intermittent failures)
2. Run test 10+ times in isolation
3. Analyze failure patterns
4. Check for:
- Hard-coded waits (sleep/wait)
- Expectation timeouts too short
- Shared mutable state
- Network dependencies
- Animation timing assumptions
5. Fix root cause
6. Verify with repeated runsClean State Before Tests:
{
"operation": "test",
"scheme": "MyApp",
"destination": "platform=iOS Simulator,name=iPhone 15",
"options": {
"clean_before_build": true
}
}Reset Simulator State:
# Use simulator-workflows skill
execute_simulator_command(operation: "erase", udid: <device-udid>)Test Isolation Best Practices:
setUp() and tearDown() methodsTypical Test Scheme Setup:
Multiple Test Plans:
UnitTests.xctestplan → Fast unit tests only
UITests.xctestplan → UI automation tests
SmokeTests.xctestplan → Critical path tests
RegressionTests.xctestplan → Full test suitePattern 1: Test Fixtures
class TestData {
static let validUser = User(name: "Test", email: "test@example.com")
static let invalidUser = User(name: "", email: "invalid")
}Pattern 2: Factory Methods
extension User {
static func makeTestUser(name: String = "Test") -> User {
return User(name: name, email: "\(name)@test.com")
}
}Pattern 3: Test Database
class TestDatabase {
func setupTestData() {
// Create known test data
}
func teardownTestData() {
// Clean up after tests
}
}UI Test Screenshot Pattern:
override func setUp() {
continueAfterFailure = false
}
override func tearDown() {
if let testRun = testRun, testRun.failureCount > 0 {
let screenshot = XCUIScreen.main.screenshot()
let attachment = XCTAttachment(screenshot: screenshot)
attachment.lifetime = .keepAlways
add(attachment)
}
}Execute Tests with Screenshots:
{
"operation": "test",
"scheme": "MyAppUITests",
"destination": "platform=iOS Simulator,name=iPhone 15",
"options": {
"result_bundle_path": "./TestResults.xcresult"
}
}XCTest Performance Measurement:
func testPerformance() {
measure {
// Code to measure
performExpensiveOperation()
}
}Performance Test Execution:
{
"operation": "test",
"scheme": "MyApp",
"destination": "platform=iOS Simulator,name=iPhone 15",
"options": {
"only_testing": ["MyAppTests/PerformanceTests"]
}
}Causes:
Solutions:
Causes:
Solutions:
Example Fix:
// Bad: Immediate query may fail
app.buttons["Submit"].tap()
// Good: Wait for element
let submitButton = app.buttons["Submit"]
XCTAssert(submitButton.waitForExistence(timeout: 5))
submitButton.tap()Causes:
Solutions:
Example Fix:
// Bad: May timeout
wait(for: [expectation], timeout: 1.0)
// Good: Reasonable timeout
wait(for: [expectation], timeout: 10.0)Causes:
Solutions:
UI Test Timeouts:
{
"operation": "test",
"scheme": "MyAppUITests",
"destination": "platform=iOS Simulator,name=iPhone 15",
"options": {
"test_timeout": 600
}
}Common Timeout Scenarios:
App Launch Timeout: App takes too long to launch
Element Query Timeout: UI element not found
Network Timeout: API requests fail
Animation Timeout: Waiting for animation
Symptom: Tests fail due to simulator state
Common Issues:
Solutions:
# Erase simulator before tests
execute_simulator_command({
"operation": "erase",
"udid": "<simulator-udid>"
})
# Then run tests
execute_xcode_command({
"operation": "test",
"scheme": "MyApp",
"destination": "platform=iOS Simulator,name=iPhone 15"
})Symptom: Tests pass individually but fail in suite
Causes:
Solutions:
override func setUp() {
super.setUp()
// Reset all shared state
AppState.shared.reset()
clearDatabase()
}// Bad: Shared state
class APIManager {
static let shared = APIManager()
}
// Good: Dependency injection
class APIManager {
// Inject per test
}{
"operation": "test",
"scheme": "MyApp",
"options": {
"test_order": "random"
}
}Always isolate tests:
tearDown()Example:
class UserTests: XCTestCase {
var sut: UserManager!
override func setUp() {
super.setUp()
sut = UserManager()
}
override func tearDown() {
sut = nil
super.tearDown()
}
func testCreateUser() {
// Test uses fresh sut instance
}
}Optimize test speed:
UI Test Speed:
// Disable animations for faster tests
app.launchArguments += ["DISABLE_ANIMATIONS"]Use descriptive test names:
// Bad
func test1() { }
// Good
func testLoginWithValidCredentialsSucceeds() { }
func testLoginWithInvalidPasswordShowsError() { }
func testCheckoutWithEmptyCartDisplaysWarning() { }Structure tests clearly:
func testAddItemToCart() {
// Arrange
let cart = ShoppingCart()
let item = Product(name: "Test", price: 10)
// Act
cart.add(item)
// Assert
XCTAssertEqual(cart.items.count, 1)
XCTAssertEqual(cart.total, 10)
}Use consistent test data:
struct TestFixtures {
static let validEmail = "test@example.com"
static let invalidEmail = "invalid"
static let testUser = User(name: "Test", email: validEmail)
}CI Test Workflow:
1. Clean build environment
2. Build app for testing
3. Boot fresh simulator
4. Run test suite
5. Collect code coverage
6. Parse test results
7. Archive test artifacts
8. Report resultsCI Test Command:
{
"operation": "test",
"scheme": "MyApp",
"destination": "platform=iOS Simulator,name=iPhone 15",
"options": {
"clean_before_build": true,
"code_coverage": true,
"result_bundle_path": "./TestResults.xcresult"
}
}Maintain proper test distribution:
/\
/UI\ ← Few, slow, broad
/----\
/Integ\ ← Some, medium, focused
/------\
/ Unit \ ← Many, fast, isolated
/----------\Recommended ratio:
Enable coverage collection:
{
"operation": "test",
"scheme": "MyApp",
"destination": "platform=iOS Simulator,name=iPhone 15",
"options": {
"code_coverage": true
}
}Coverage goals:
Track test metrics:
When to investigate:
xc://operations/test: Complete test operations referencexc://reference/xctest: XCTest framework documentationxc://reference/xcuitest: XCUITest framework documentationxc://patterns/flaky-tests: Flaky test detection patternsTip: Isolate tests, mock dependencies, and run tests frequently during development.
© conorluddy, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/ios-testing-patterns of conorluddy/xclaude-plugin.
Open the folder on GitHubat commit 6de4b2c
iOS Testing Patterns next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| iOS Testing Patterns this skillconorluddy/xclaude-plugin | 183 | — | ~4.5k | Automated safety check: Pass | MIT | |
| Orca iOS Simulator Controlstablyai/orca | 87k | 1 repos | ~584 | Automated safety check: Pass | Apache-2.0 | |
| Limrun iOS Simulatorsuperset-sh/superset | 15k | — | ~5.2k | Automated safety check: Notes | Custom licence | |
| Xcode Simulator TestEveryInc/compound-engineering-plugin | 25k | — | ~519 | Automated safety check: Pass | MIT | |
| Apple Crash Log .NET Symbolicationdotnet/skills | 5.6k | 1 repos | ~2.4k | Automated safety check: Pass | MIT | |
| Update Swiftui APIsAvdLee/SwiftUI-Agent-Skill | 3.7k | — | ~1.2k | Automated safety check: Pass | MIT |
stablyai/orca
iOS Simulator control from inside Orca, with the live device view in Orca's emulator pane. Use when driving a booted Apple Simulator on macOS: taps, gestures…
superset-sh/superset
Drives an app on a Limrun cloud iOS simulator from any OS: launch, tap, type, read the accessibility tree and logs, take screenshots, record video and reach local services.
EveryInc/compound-engineering-plugin
Builds an iOS app, exercises it on a simulator with XcodeBuildMCP and reports PASS, FAIL or PARTIAL with screenshots, logs and per-screen evidence.
dotnet/skills
Resolves .NET runtime frames in Apple .ips crash logs to function names, source files and line numbers using dSYM symbols, atos and the Microsoft symbol server.
AvdLee/SwiftUI-Agent-Skill
Scan Apple's SwiftUI documentation for deprecated APIs and update the SwiftUI Expert Skill with modern replacements.
conorluddy/ios-simulator-skill
29 production-ready scripts for iOS app testing, building, and automation.
conorluddy/xclaude-plugin
Guides WCAG 2.1 and VoiceOver accessibility testing for iOS apps, working from the accessibility tree and not from screenshots.
conorluddy/xclaude-plugin
Walks through retrieving, symbolicating and diagnosing iOS crash logs, turning a cryptic stack trace into the function names that actually failed.
conorluddy/xclaude-plugin
Manages iOS Simulator devices and apps through the execute_simulator_command MCP tool instead of raw simctl: boot, create and delete devices, install and launch apps, screenshots and diagnostics.
conorluddy/xclaude-plugin
Teaches how xc-plugin saves tokens with progressive disclosure, cached responses and consistent configuration, so large device lists and build logs arrive as summaries first.
conorluddy/xclaude-plugin
Accessibility-first UI automation using IDB. An agent skill from conorluddy/xclaude-plugin.
conorluddy/xclaude-plugin
Directs iOS build, test and clean operations through the execute_xcode_command MCP tool instead of raw xcodebuild in the shell, with parameter-level retries on failure.
Works with
Categories
XCTest and XCUITest execution workflows and flaky test detection patterns. iOS Testing Patterns is an agent skill from conorluddy/xclaude-plugin.
iOS Testing Patterns fits situations like: tasks that involve Failing and flaky tests; tasks that involve Test strategy; tasks that involve Mobile testing and debugging.
Run `npx skills add conorluddy/xclaude-plugin --skill ios-testing-patterns -a claude-code`. Or copy the skill folder (skills/ios-testing-patterns in conorluddy/xclaude-plugin) into .claude/skills/ios-testing-patterns in your project. Claude Code loads it when a task matches its description.
Run `npx skills add conorluddy/xclaude-plugin --skill ios-testing-patterns -a codex`. Or copy the skill folder (skills/ios-testing-patterns in conorluddy/xclaude-plugin) into .agents/skills/ios-testing-patterns in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add conorluddy/xclaude-plugin --skill ios-testing-patterns -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ios-testing-patterns, .gemini/skills/ios-testing-patterns, .github/skills/ios-testing-patterns and .opencode/skills/ios-testing-patterns in your project.
SKILL.md names no scripts, command-line tools or credentials: iOS Testing Patterns is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
iOS Testing Patterns is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.5k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with iOS Testing Patterns: Orca iOS Simulator Control (stablyai/orca, 87k stars), Limrun iOS Simulator (superset-sh/superset, 15k stars), Xcode Simulator Test (EveryInc/compound-engineering-plugin, 25k stars) and Apple Crash Log .NET Symbolication (dotnet/skills, 5.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
conorluddy (a GitHub user) maintains it in conorluddy/xclaude-plugin, which has 183 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on September 12, 2026.
Source: conorluddy/xclaude-plugin on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.