arul28/ade/ade-apple

Claude Code and agent skill by arul28/ade

Trust tier 3
  • community
Source check pending

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-apple

SKILL.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 ade can 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 … screenshot or

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>):

TopicFile
Extra devices, runtimes, device lifecycle, idle power-off, per-device leases, the desktop panereferences/devices-and-runtimes.md
iPad windows: apple window layouts, sizes, movesreferences/ipad-windows.md
Rotation, iPhone Duo folding, duo-skill, 3D rendersreferences/rotation-fold-and-render.md
Element query edge cases; closing an app with the App Switcherreferences/driving-details.md
apple test output, --only, DerivedDatareferences/tests.md
Why captures go through ade apple; external drives; how a recording becomes a demoreferences/recording-and-proof-details.md
Device settings, the device log, previews, live view flagsreferences/device-settings-and-logs.md
Every error code and what to doreferences/troubleshooting.md

Common tasks

Use these directly; you do not need --help for them. A="$ADE_CLI_PATH".

TaskCommand
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 recordingadd --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, foreground can still say null for 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.

  • launch builds Debug. Pass --configuration Release when 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

bash
"$ADE_CLI_PATH" apple status --text

status is the gate and the map.

  • supported: false means the runtime is not a Mac. Stop and say so.
  • capabilities lists every action you may call on this device, by name. Read

it instead of guessing verbs or reading source.

  • device tells you whether this lane already owns a simulator, its origin

(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

bash
"$ADE_CLI_PATH" apple launch --follow --open-drawer --text

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

bash
"$ADE_CLI_PATH" apple test --scheme <scheme> --text
"$ADE_CLI_PATH" apple test --target <id> --only ADETests/SyncTests --text

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

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
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/arul28/ade/ade-apple/badge)](https://verified-skill.com/skills/arul28/ade/ade-apple)

Something wrong with this skill or its page? Tell us.