arul28/ade/ade-apple
Claude Code and agent skill by arul28/ade
- community
Checking that the SKILL.md file is still in the repository.
Use this skill when you need to see an iOS or SwiftUI change actually running on a simulator — finding or creating the lane's device, booting and streaming it, driving it by element query, screenshotting, recording, capturing proof, or rendering a SwiftUI preview — via `ade apple`.
Install
npx vskill@latest install arul28/ade/ade-appleSKILL.md
ADE Apple Development
This skill is for iOS apps and iOS SwiftUI views. For a macOS app, a dev Electron app or a web page, the ade-computer-use skill picks the right surface.
Drive the lane's Apple simulator with "$ADE_CLI_PATH" apple <command>. $ADE_CLI_PATH is the CLI of the ADE that launched you and already targets its brain, so your calls and the desktop's Apple Development tool share one session. A bare ade goes through PATH and can reach a different ADE.
The pixels come from a vendored Swift helper (ade-sim-helper) reading the device framebuffer. There is no Screen Recording grant, no Simulator window to keep open, and no backend to choose. If you find advice about idb, window capture, live-start or a --backend flag, it is describing a version of this feature that no longer exists.
Four rules before your first command
- Always call `"$ADE_CLI_PATH"`, never a bare `ade`. A bare
adecan be
an older install or another ADE's CLI. That shows up as "Unknown command 'apple'", "Domain 'apple' is unavailable", or a runtime version mismatch. Do not add --socket: "$ADE_CLI_PATH" already names the right one.
- Never open or script the Simulator app. No
open -a Simulator, no
AppleScript or System Events. ADE drives the device directly; the Simulator window is not needed and adds nothing.
- **Never capture proof with
xcrun simctl io … screenshotor
recordVideo.** apple screenshot and apple record-start / record-stop file proof to the lane automatically. See below for why the owner matters.
- Check each step before you report it. A tap, swipe, button or type
that returns ok only means ADE sent the input. It does not mean the app did what you wanted. After each step that matters, confirm it: apple foreground (which app is in front), apple assert-visible or apple wait-for-element (what is on screen), or apple snapshot. Report only what you confirmed. If a step failed, say which step, and do not describe the result you meant to get. Before record-stop, confirm the final state, so the video ends on it.
Detail files
Rarely needed detail lives next to this file. Read one when its topic comes up (or ade skill show ade-apple references/<file>):
| Topic | File | |
|---|---|---|
| Extra devices, runtimes, device lifecycle, idle power-off, per-device leases, the desktop pane | references/devices-and-runtimes.md | |
iPad windows: apple window layouts, sizes, moves | references/ipad-windows.md | |
Rotation, iPhone Duo folding, duo-skill, 3D renders | references/rotation-fold-and-render.md | |
| Element query edge cases; closing an app with the App Switcher | references/driving-details.md | |
apple test output, --only, DerivedData | references/tests.md | |
Why captures go through ade apple; external drives; how a recording becomes a demo | references/recording-and-proof-details.md | |
| Device settings, the device log, previews, live view flags | references/device-settings-and-logs.md | |
| Every error code and what to do | references/troubleshooting.md |
Common tasks
Use these directly; you do not need --help for them. A="$ADE_CLI_PATH".
| Task | Command | |
|---|---|---|
| Open an installed app | "$A" apple relaunch --bundle-id com.apple.mobilesafari --text | |
| Open a web page or deep link | "$A" apple open-url "https://www.google.com" --text | |
| Tap a control by its label | "$A" apple tap-element --label "Address" --text | |
| Long press (a context menu) | "$A" apple long-press 120 420 --duration-ms 1000 --text, or tap-element --label "Everything" --hold-ms 1000 | |
| Type, then press Return | "$A" apple type "reddit" --submit --text | |
| Press one key | "$A" apple key return --text (also escape, delete, space, arrows up/down/left/right, letters; hold --cmd/--shift/--alt/--ctrl: apple key f --cmd) | |
| Wait for something to appear | "$A" apple wait-for-element --label "Cancel" --timeout-ms 8000 --text | |
| Which app is in front | "$A" apple foreground --text (--wait 10 right after a launch) | |
| Open an app with launch arguments | "$A" apple relaunch --bundle-id com.ade.ios --text -- -adePreviewScreen duo-home | |
| Take turns with other agents on this device | "$A" apple lease --wait 300 --text, later "$A" apple lease release --token <t> --text (--device <udid> for an extra) | |
| Put the lane's app on an extra device | "$A" apple install --device <udid> --launch --text | |
| Lay out an iPad window | "$A" apple window --left --text (also --right, --top, --bottom, --fill, --split, --thirds, --quarters, --slide-over, --size 600x800; bare window reads it) | |
| Input without a recording | add --no-record to tap, type, swipe, tap-element, … | |
| What is on screen | "$A" apple snapshot --text | |
| Go home / app switcher | "$A" apple button home --text / "$A" apple button app-switcher --text | |
| Close an app (no gesture) | "$A" apple terminate --bundle-id com.apple.mobilesafari --text | |
| Show the device to the user | "$A" apple show --text (tools pane) or --floating |
- Right after
relaunch,foregroundcan still saynullfor a moment.
Use foreground --wait 10, or wait for an element of that app.
- Tap, drag and scroll coordinates are the screenshot's and the snapshot's
points, upright, whichever way the device is held (the Duo's inner display included): ADE turns them onto the framebuffer for you. Prefer tap-element anyway.
launchbuilds Debug. Pass--configuration Releasewhen the app's
configurations differ in more than speed (ADE's own iOS app signs into a test backend in Debug); the summary names the configuration it built. Arguments after -- reach the app, for launch and relaunch.
- One agent should drive the device. Let it do the taps, screenshots and
recordings; other agents hand it work, or wait for its results. That is simpler and faster than several agents taking turns. When agents truly must drive the same device in parallel, take a lease before a run of builds, rotates and shots (it queues behind whoever has it) and release it after. It is advisory, so it only works if every agent uses it. Device commands do not renew it: renew with the token before --ttl ends. It also ends when its chat is archived or deleted. Each device has its own lease. Tokens, renewing, and --holder for subagents: references/devices-and-runtimes.md.
- A simulator signed in to an Apple Account can show an "Apple Account
Verification" alert over every app. Dismiss it with tap-element --label "Not Now", then continue.
Start here: ask what you can do
status is the gate and the map.
supported: falsemeans the runtime is not a Mac. Stop and say so.capabilitieslists every action you may call on this device, by name. Read
it instead of guessing verbs or reading source.
devicetells you whether this lane already owns a simulator, itsorigin
(created or the older clone for ADE's own, attached for the user's), and its laneId.
tools.helper(present,path,version) is the check when every device
call fails at once.
"Start the app on a simulator" is one command
launch does the whole chain: find or make the lane's device, boot it, resolve the target, build it with xcodebuild, install it, start it, and claim the drawer session. Add --open-drawer when a human asked to watch. --follow announces the wait up front for a cold build.
So you do not run xcodebuild by hand to put an app on a screen, and you do not need to know the scheme. Run "$ADE_CLI_PATH" apple apps --text first only when you must choose between several targets, then pass --target <id>.
Use --no-build when the app is already installed and you only want it in front. Use relaunch or terminate for an app that is already there.
Use this lane's own device
Use this lane's own device. `ade apple start` (or `device-create`) gives the lane its own; do it without asking.
start with no arguments does this for you: when the lane has no device it makes a new, empty one from the newest installed runtime, boots it, and streams it. Other simulators in apple devices belong to someone else: another lane, an xcodebuild test run, or the user.
- You may make the lane's ONE device without asking, and you never make a
simulator with xcrun simctl create or simctl clone — ADE cannot see or delete a device made that way.
- Need a second model too (an iPad beside an iPhone Duo)? Give the lane an
extra device: device-create --extra --device-type "<model>" (at most 2), then reach it from any command with --device <udid|name>. An extra cannot stream, record, launch or run tests. Extras, install --device and device-promote: references/devices-and-runtimes.md.
- You may attach an installed simulator only when the user names it
(device-attach --simulator <name> or start --udid <udid>). ADE refuses a simulator another lane holds, with APPLE_DEVICE_NOT_LANE_OWNED.
--device <udid>on any other command must be this lane's device or one of
its extra devices. With no device yet, the command tells you to run ade apple start.
A busy device is not a blocker, and it is not a reason to ask a human. Make the lane's own with start. It takes seconds (see "The lane's device").
This is worth saying plainly because the failure looks reasonable from the inside: you find a booted simulator, the guard tells you another chat owns it, and stopping to ask seems polite. It is not. It blocks the work for no reason and hands the human a decision they should never have been given.
Tests run on the lane's device
apple test runs xcodebuild test on this lane's device, one run at a time on the Mac. A failing test comes back as passed: false with the failures; it is not an error. Output, --only names and DerivedData: references/tests.md.
Do not run xcodebuild test by hand against a simulator you made. If you must run xcodebuild yourself, pass -derivedDataPath .ade/cache/ios-simulator/DerivedData from the lane worktree, never /tmp or ~/Library/Developer/Xcode/DerivedData.
And when the request was for simulator proof, simulator proof is what you owe. A passing unit test is not a substitute for a screen. If you cannot reach the screen, say exactly what stopped you rather than offering evidence of a different kind and calling it done.
The lane's device
One simulator per lane. ADE creates one on first ask, or binds one you already have. Creating a device never downloads anything. With no runtime installed you get APPLE_NO_INSTALLED_SIMULATORS: run ade apple runtimes to see what this Xcode needs, and ade apple runtimes install to fetch it (about 8 GB per runtime, in the background; re-run ade apple runtimes for progress). Tell the user before you start a download. Removing a runtime erases or moves every simulator on it, so it is the user's call, from the Apple Development panel's Runtimes section; agents cannot do it.
A runtime (the iOS image, about 8 GB) is a download; a device made from one is cheap, and a device that is Shutdown only needs a boot. So "no device free" is almost never true. Runtimes and devices in full: references/devices-and-runtimes.md.
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingapps/desktop/resources/agent-skills/ade-apple/SKILL.md
Popularity
- Repository stars
- 120
- Repository forks
- 14
- 7-day trend score
- 5
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/arul28/ade/ade-apple)