{"id":28604610,"url":"https://github.com/cameroncooke/AXe","last_synced_at":"2025-06-11T18:03:02.747Z","repository":{"id":294745444,"uuid":"987946887","full_name":"cameroncooke/AXe","owner":"cameroncooke","description":"AXe is a CLI tool for interacting with Simulators using Apple's Private Accessibility APIs.","archived":false,"fork":false,"pushed_at":"2025-06-08T11:28:03.000Z","size":5729,"stargazers_count":233,"open_issues_count":1,"forks_count":3,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-06-08T12:28:06.828Z","etag":null,"topics":["automation-framework","command-line-tool","idb","ios","simulators","swift","ui-automation"],"latest_commit_sha":null,"homepage":"https://www.async-let.com","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cameroncooke.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"cameroncooke","buy_me_a_coffee":"cameroncooke"}},"created_at":"2025-05-21T20:32:50.000Z","updated_at":"2025-06-08T05:36:34.000Z","dependencies_parsed_at":"2025-06-08T12:33:48.235Z","dependency_job_id":null,"html_url":"https://github.com/cameroncooke/AXe","commit_stats":null,"previous_names":["cameroncooke/axe"],"tags_count":45,"template":false,"template_full_name":null,"purl":"pkg:github/cameroncooke/AXe","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cameroncooke%2FAXe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cameroncooke%2FAXe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cameroncooke%2FAXe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cameroncooke%2FAXe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cameroncooke","download_url":"https://codeload.github.com/cameroncooke/AXe/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cameroncooke%2FAXe/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259311533,"owners_count":22838736,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation-framework","command-line-tool","idb","ios","simulators","swift","ui-automation"],"created_at":"2025-06-11T18:01:11.736Z","updated_at":"2025-06-11T18:03:02.741Z","avatar_url":"https://github.com/cameroncooke.png","language":"Objective-C","funding_links":["https://github.com/sponsors/cameroncooke","https://buymeacoffee.com/cameroncooke"],"categories":["개발 도구","Objective-C","automation-framework","Development"],"sub_categories":["개발자 유틸리티","iOS / macOS"],"readme":"\u003cimg src=\"banner.png\" alt=\"AXe\" width=\"600\"/\u003e\n\nAXe is a comprehensive CLI tool for interacting with iOS Simulators using Apple's Accessibility APIs and HID (Human Interface Device) functionality.\n\n[![CI](https://github.com/cameroncooke/AXe/actions/workflows/build-and-release.yml/badge.svg)](https://github.com/cameroncooke/AXe/actions/workflows/build-and-release.yml)\n[![Licence: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n![AxeDemo](https://github.com/user-attachments/assets/9eafa5d5-3cef-4e39-82c5-7b9d41fe4548)\n\n- [Features](#features)\n  - [Touch \\\u0026 Gestures](#touch--gestures)\n  - [Input \\\u0026 Text](#input--text)\n  - [Hardware Buttons](#hardware-buttons)\n  - [Timing Controls](#timing-controls)\n  - [Accessibility](#accessibility)\n- [Quick Start](#quick-start)\n  - [Installation](#installation)\n    - [Install via Homebrew](#install-via-homebrew)\n    - [Build from source](#build-from-source)\n  - [Basic Usage](#basic-usage)\n- [Commands Overview](#commands-overview)\n  - [**Touch \\\u0026 Gestures**](#touch--gestures-1)\n  - [**Gesture Presets**](#gesture-presets)\n  - [**Text Input**](#text-input)\n  - [**Hardware Buttons**](#hardware-buttons-1)\n  - [**Keyboard Control**](#keyboard-control)\n  - [**Accessibility \\\u0026 Info**](#accessibility--info)\n- [Architecture](#architecture)\n  - [Why AXe?](#why-axe)\n- [Gesture Presets Reference](#gesture-presets-reference)\n- [Contributing](#contributing)\n- [Licence](#licence)\n\n\n## Features\n\nAXe provides complete iOS Simulator automation capabilities:\n\n### Touch \u0026 Gestures\n- **Tap**: Precise touch events at specific coordinates with timing controls\n- **Swipe**: Multi-touch gestures with configurable duration and delta\n- **Touch Control**: Low-level touch down/up events for advanced gesture control\n- **Gesture Presets**: Common gesture patterns (scroll-up, scroll-down, scroll-left, scroll-right, edge swipes)\n\n### Input \u0026 Text\n- **Text Input**: Comprehensive text typing with automatic shift key handling\n- **Key Presses**: Individual key presses by HID keycode\n- **Key Sequences**: Multi-key sequences with timing control\n- **Multiple Input Methods**: Direct text, stdin, or file input\n\n### Hardware Buttons\n- **Home Button**: iOS home button simulation\n- **Lock/Power Button**: Power button with duration control\n- **Side Button**: iPhone X+ side button\n- **Siri Button**: Siri activation button\n- **Apple Pay Button**: Apple Pay button simulation\n\n### Timing Controls\n- **Pre/Post Delays**: Configurable delays before and after actions\n- **Duration Control**: Precise timing for gestures and button presses\n- **Sequence Timing**: Custom delays between key sequences\n- **Complex Automation**: Multi-step workflows with precise timing\n\n### Accessibility\n- **UI Description**: Extract accessibility information from any point or full screen\n- **Simulator Management**: List available simulators\n\n## Quick Start\n\n### Installation\n\n#### Install via Homebrew\n\n```bash\n# Install via Homebrew\nbrew tap cameroncooke/axe\nbrew install axe\n\n# Or single liner\nbrew install cameroncooke/axe/axe\n\n# Use directly\naxe --help\n```\n\n\u003e [!NOTE]\n\u003e You may see errors when using `brew install`, like `Failed to fix install linkage`; these can be safely ignored. This is because the binaries are already codesigned and Homebrew is attempting to resign them, which is not necessary.\n\n#### Build from source\n\nFor development work:\n\n```bash\n# Clone the repository\ngit clone https://github.com/cameroncooke/AXe.git\ncd AXe\n\n# Run directly with Swift (frameworks handled automatically)\nswift run axe --help\nswift run axe list-simulators\n\n# Build for development\nswift build\n.build/debug/axe --help\n```\n\n### Basic Usage\n\n```bash\n# List available simulators\naxe list-simulators\n\n# Get simulator UDID\nUDID=\"B34FF305-5EA8-412B-943F-1D0371CA17FF\"\n\n# Basic interactions\naxe tap -x 100 -y 200 --udid $UDID\naxe type 'Hello World!' --udid $UDID\naxe swipe --start-x 100 --start-y 300 --end-x 300 --end-y 100 --udid $UDID\naxe button home --udid $UDID\n\n# Gesture presets\naxe gesture scroll-up --udid $UDID\naxe gesture swipe-from-left-edge --udid $UDID\n\n# With timing controls (NEW!)\naxe tap -x 100 -y 200 --pre-delay 1.0 --post-delay 0.5 --udid $UDID\naxe gesture scroll-down --pre-delay 0.5 --post-delay 1.0 --udid $UDID\n```\n\n## Commands Overview\n\n### **Touch \u0026 Gestures**\n\n```bash\n# Tap at coordinates\naxe tap -x 100 -y 200 --udid SIMULATOR_UDID\naxe tap -x 100 -y 200 --pre-delay 1.0 --post-delay 0.5 --udid SIMULATOR_UDID\n\n# Swipe gestures\naxe swipe --start-x 100 --start-y 300 --end-x 300 --end-y 100 --udid SIMULATOR_UDID\naxe swipe --start-x 50 --start-y 500 --end-x 350 --end-y 500 --duration 2.0 --delta 25 --udid SIMULATOR_UDID\n\n# Advanced touch control\naxe touch -x 150 -y 250 --down --udid SIMULATOR_UDID\naxe touch -x 150 -y 250 --up --udid SIMULATOR_UDID\naxe touch -x 150 -y 250 --down --up --delay 1.0 --udid SIMULATOR_UDID\n```\n\n### **Gesture Presets**\n\n```bash\n# Scrolling gestures\naxe gesture scroll-up --udid SIMULATOR_UDID\naxe gesture scroll-down --udid SIMULATOR_UDID\naxe gesture scroll-left --udid SIMULATOR_UDID\naxe gesture scroll-right --udid SIMULATOR_UDID\n\n# Navigation gestures\naxe gesture swipe-from-left-edge --udid SIMULATOR_UDID\naxe gesture swipe-from-right-edge --udid SIMULATOR_UDID\naxe gesture swipe-from-top-edge --udid SIMULATOR_UDID\naxe gesture swipe-from-bottom-edge --udid SIMULATOR_UDID\n\n# With custom screen dimensions\naxe gesture scroll-up --screen-width 430 --screen-height 932 --udid SIMULATOR_UDID\n\n# With timing controls\naxe gesture scroll-down --pre-delay 1.0 --post-delay 0.5 --udid SIMULATOR_UDID\n```\n\n### **Text Input**\n\n```bash\n# Simple text input (use single quotes for special characters)\naxe type 'Hello World!' --udid SIMULATOR_UDID\n\n# From stdin (best for automation)\necho \"Complex text\" | axe type --stdin --udid SIMULATOR_UDID\n\n# From file\naxe type --file input.txt --udid SIMULATOR_UDID\n```\n\n### **Hardware Buttons**\n\n```bash\n# Available buttons: home, lock, side-button, siri, apple-pay\naxe button home --udid SIMULATOR_UDID\naxe button lock --duration 2.0 --udid SIMULATOR_UDID\naxe button siri --udid SIMULATOR_UDID\n```\n\n### **Keyboard Control**\n\n```bash\n# Individual key presses (by HID keycode)\naxe key 40 --udid SIMULATOR_UDID                    # Enter key\naxe key 42 --duration 1.0 --udid SIMULATOR_UDID    # Hold Backspace\n\n# Key sequences\naxe key-sequence --keycodes 11,8,15,15,18 --udid SIMULATOR_UDID    # Type \"hello\"\n```\n\n### **Accessibility \u0026 Info**\n\n```bash\n# Get accessibility information\naxe describe-ui --udid SIMULATOR_UDID                    # Full screen\naxe describe-ui --point 100,200 --udid SIMULATOR_UDID    # Specific point\n\n# List simulators\naxe list-simulators\n```\n\n## Architecture\n\n### Why AXe?\n\nAXe directly utilises the lower-level frameworks provided by [idb](https://github.com/facebook/idb), Facebook's open-source suite for automating iOS Simulators and Devices.\n\nWhile `idb` offers a powerful client/server architecture and a broad set of device automation features via an RPC protocol, **AXe takes a different approach**:\n\n- **Single Binary:** AXe is distributed as a single, standalone CLI tool—no server or client setup required.\n- **Focused Scope:** AXe is purpose-built for UI automation, streamlining accessibility testing and automation tasks.\n- **Simple Integration:** With no external dependencies or daemons, AXe can be easily scripted and embedded into other tools or systems running on the same host.\n- **Complete HID Coverage:** Full feature parity with idb's HID functionality plus gesture presets and timing controls.\n- **Intelligent Automation:** Built-in gesture presets and coordinate helpers for common use cases.\n\nThis makes AXe a lightweight and easily adoptable alternative for projects that need direct, scriptable access to Simulator automation.\n\n## Gesture Presets Reference\n\n| Preset | Description | Use Case |\n|--------|-------------|----------|\n| `scroll-up` | Scroll up in center of screen | Content navigation |\n| `scroll-down` | Scroll down in center of screen | Content navigation |\n| `scroll-left` | Scroll left in center of screen | Horizontal scrolling |\n| `scroll-right` | Scroll right in center of screen | Horizontal scrolling |\n| `swipe-from-left-edge` | Left edge to right edge | Back navigation |\n| `swipe-from-right-edge` | Right edge to left edge | Forward navigation |\n| `swipe-from-top-edge` | Top to bottom | Dismiss/close |\n| `swipe-from-bottom-edge` | Bottom to top | Open/reveal |\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## Licence\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcameroncooke%2FAXe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcameroncooke%2FAXe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcameroncooke%2FAXe/lists"}