factory/skills/ios-simulator/SKILL.md
This skill MUST be invoked when the user says "simulator", "simülatör", "iOS test", "simulator boot", "simctl", "app launch", "ekran analiz", "screen map", "accessibility audit", "erişilebilirlik", "push notification", "visual diff", "build and test", "xcode build", "simulator oluştur", "simulator sil", "app yükle", or any variation requesting iOS simulator automation, app testing, building, or device management. Provides 21 production scripts for semantic UI navigation, build automation, accessibility testing, and simulator lifecycle management.
npx skillsauth add kilimcininkoroglu/cli-tweaks ios-simulatorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Build, test, and automate iOS applications using accessibility-driven semantic navigation. Find and interact with elements by meaning, not pixel coordinates.
# 1. Check environment
bash scripts/sim_health_check.sh
# 2. Launch app
node scripts/appLauncher.js --launch com.example.app
# 3. Map screen elements
node scripts/screenMapper.js
# 4. Tap button by text
node scripts/navigator.js --find-text "Login" --tap
# 5. Enter text in field
node scripts/navigator.js --find-type TextField --enter-text "[email protected]"
# 6. Check accessibility
node scripts/accessibilityAudit.js
All scripts support --help for options and --json for machine-readable output.
Always prefer the accessibility tree over screenshots:
| Method | Token Cost | Reliability | Use When |
|--------|-----------|-------------|----------|
| screenMapper.js | ~10 tokens | High | Default — see what's on screen |
| navigator.js --find-* | ~5 tokens | High | Interact with elements |
| Screenshot | 1,600-6,300 tokens | Medium | Visual verification, bug reports, diff only |
| Script | Purpose | Key Options |
|--------|---------|-------------|
| buildAndTest.js | Xcode build + test with result parsing | --project, --scheme, --clean, --test |
| logMonitor.js | Real-time log monitoring with filtering | --app, --severity, --follow, --duration |
| Script | Purpose | Key Options |
|--------|---------|-------------|
| screenMapper.js | Analyze current screen, list elements | --verbose, --hints |
| navigator.js | Find + interact with elements semantically | --find-text, --find-type, --find-id, --tap, --enter-text |
| gesture.js | Swipes, scrolls, pinches, long press | --swipe, --scroll, --pinch, --refresh |
| keyboard.js | Text input + hardware buttons | --type, --key, --button, --clear, --dismiss |
| appLauncher.js | App lifecycle (launch, terminate, install) | --launch, --terminate, --install, --open-url |
| Script | Purpose | Key Options |
|--------|---------|-------------|
| accessibilityAudit.js | WCAG compliance check | --verbose, --output |
| visualDiff.js | Screenshot pixel comparison | --threshold, --output, --details |
| testRecorder.js | Auto-document test execution | --test-name, --output |
| appStateCapture.js | Debugging snapshot (screen + logs + hierarchy) | --app-bundle-id, --output |
| sim_health_check.sh | Environment verification | (no options) |
| Script | Purpose | Key Options |
|--------|---------|-------------|
| clipboard.js | Clipboard management for paste testing | --copy, --expected |
| statusBar.js | Override status bar appearance | --preset, --time, --battery-level |
| pushNotification.js | Simulated push notifications | --bundle-id, --title, --body, --payload |
| privacyManager.js | Grant/revoke app permissions (13 services) | --bundle-id, --grant, --revoke, --reset |
| Script | Purpose | Key Options |
|--------|---------|-------------|
| simctlBoot.js | Boot simulator | --udid, --name, --wait-ready, --all, --type |
| simctlShutdown.js | Shutdown simulator | --udid, --name, --verify, --all |
| simctlCreate.js | Create new simulator | --device, --runtime, --name |
| simctlDelete.js | Delete simulator | --udid, --name, --yes, --old N |
| simctlErase.js | Factory reset (preserves UDID) | --udid, --name, --verify, --booted |
Auto-UDID: Most scripts auto-detect the booted simulator. No need to specify --udid unless multiple are booted.
Device name: Use names instead of UDIDs: --name "iPhone 16 Pro" — scripts resolve automatically.
Batch operations: --all for all simulators, --type iPhone for device type filtering.
Output modes:
--verbose: full details--json: machine-readable for CI/CDScreenshot sizing: half (default, ~1.6K tokens), quarter (~800 tokens), full (~5K tokens). Use quarter for quick checks.
node scripts/appLauncher.js --launch com.example.app
node scripts/screenMapper.js
node scripts/navigator.js --find-type TextField --index 0 --enter-text "[email protected]"
node scripts/navigator.js --find-type SecureTextField --enter-text "password"
node scripts/navigator.js --find-text "Login" --tap
node scripts/accessibilityAudit.js
node scripts/privacyManager.js --bundle-id com.example.app --grant camera,location
# Test app with permissions...
node scripts/privacyManager.js --bundle-id com.example.app --revoke camera,location
DEVICE_ID=$(node scripts/simctlCreate.js --device "iPhone 16 Pro" --json | jq -r '.new_udid')
node scripts/buildAndTest.js --project MyApp.xcodeproj --test
node scripts/simctlDelete.js --udid $DEVICE_ID --yes
| Problem | Solution |
|---------|----------|
| Script can't find simulator | Run sim_health_check.sh — is any simulator booted? |
| Navigator can't find element | Run screenMapper.js --verbose to see all elements |
| Build fails with scheme error | Check --scheme matches Xcode exactly (case-sensitive) |
| Permission grant fails | Use exact service names: camera, location, photos, contacts |
| Screenshot too expensive | Use --screenshot-size quarter for minimal token cost |
| IDB commands fail | IDB is optional — install with brew tap facebook/fb && brew install idb-companion |
xcode-select --install)brew tap facebook/fb && brew install idb-companion)pip3 install pillow for visualDiff.js)| Document | Topic |
|----------|-------|
| references/simctl_quick.md | simctl command reference |
| references/idb_quick.md | IDB command reference |
| references/accessibility_checklist.md | WCAG compliance checklist |
| references/test_patterns.md | Testing patterns and strategies |
| references/troubleshooting.md | Common issues and fixes |
Semantic navigation: Find elements by meaning (text, type, accessibility ID) not pixel coordinates. Survives UI redesigns.
Token efficiency: 96% reduction vs raw tools. Default output is 3-5 lines.
Accessibility-first: Built on iOS accessibility APIs. More reliable than pixel coordinates and better for all users.
Zero configuration: Works immediately on any macOS with Xcode installed.
Structured output: JSON and formatted text, not raw logs. Easy to parse in CI/CD.
development
This skill MUST be invoked when the user says "version update skill oluştur", "create version update skill", "versiyon skill'i oluştur", "update-version skill", "version-update skill yap" or any variation requesting creation of a project-local version update skill. SHOULD also invoke when user mentions "versiyon güncelleme skill'i kur", "setup version bumping", or asks to automate version management for the current project. Scans the project for version files, build commands, and changelog, then generates a tailored version-update skill in .factory/skills/.
development
This skill MUST be invoked when the user says "task-plan", "görev planla", "break down this PRD", "create tasks from spec", "PRD'yi parçala", "görevleri oluştur" or any variation requesting task breakdown from a specification document. SHOULD also invoke when user mentions "feature breakdown", "sprint planning", "task tracking", or wants to manage a structured development workflow with features and tasks.
testing
This skill MUST be invoked when the user says "commit tarihlerini değiştir", "redate commits", "spread commits", "backdate" or any variation requesting git commit date rewriting across a date range. Rewrites both author and committer dates using git filter-branch, distributing commits realistically across the specified period.
development
This skill MUST be invoked when the user says "UIKit", "iOS geliştirme", "programmatic UI", "table view", "collection view", "Auto Layout", "UIViewController", "UINavigationController", "Core Animation", "UIKit review", "UIKit build", "iOS view controller", "UIKit pattern", "programmatic layout", or any variation requesting UIKit development, review, or improvement. Covers programmatic UIKit with Auto Layout, table/collection views, navigation, animation, networking, architecture, and 20 reference documents with production-ready patterns.