Loading...
Loading...
Replaces xcodebuild with remote XCode and Simulators. Use when the user wants to build or run an iOS app, test iOS UI, see their app on a simulator, or says 'run it', 'build it', 'test it', 'show me a screenshot', or 'launch on simulator'.
npx skill4agent add limrun-inc/skills xcode-and-ios-simulatorlimnpm install --global @limrun/clilimLIM_API_KEY# Add label selector depending on your identifiers. For example, Linear issue, repo name etc.
lim ios create --xcode \
--reuse-if-exists \
--label issue=<ISSUE ID> \
--label repo=<Repo Name> \
--label agent=<Your Agent Name>
# Example call: lim xcode create --reuse-if-exists --label issue=LIM-34 --label repo=sample-native-app --label agent=cursorxcodebuildlim xcode build .--scheme--workspacelim ios tap-element --ax-unique-id startButton
lim ios tap-element --ax-label "Save"
lim ios tap 201 450element-treelim ios type "hello world"lim ios element-treelim ios tap-element --ax-label Continuelim ios perform --action type=tap,x=100,y=200 --action "type=typeText,text=Hello World"
lim ios perform --action type=wait,durationMs=1000 --action type=pressKey,key=enterlim ios perform --file ./actions.yamllim ios perform --helplim ios record startlim ios record stop -o /tmp/recording.mp4ASSET_NAME="<bundle id/pr number/ or any session identifier>.zip"
lim xcode build . --upload ${ASSET_NAME}# Change ${ASSET_NAME} with asset name given above
https://console.limrun.com/preview?asset=${ASSET_NAME}&platform=ioslim ios deletetap-elementelement-treeelement-treegrepjqlim ios list-apps> lim ios
Execute any task on remote iOS Simulators: create, list, get, delete, info, list-apps, launch-app, terminate-app, app-log, syslog, sync, screenshot, tap, tap-element, element-tree, type, press-key, toggle-keyboard, scroll, open-url, install-app, record, perform, simctl, cp, xcrun, xcodebuild, lsof
USAGE
$ lim ios COMMAND
COMMANDS
ios app-log Stream or tail app logs from a running iOS instance
ios cp Copy a local file into the iOS sandbox
ios create Create a new iOS instance
ios delete Delete an iOS instance
ios element-tree Get the UI element tree from a running iOS instance
ios get Get details for a specific iOS instance
ios info Get device information from a running iOS instance
ios install-app Install an app on a running iOS instance
ios launch-app Launch an app on a running iOS instance
ios list List iOS instances
ios list-apps List installed apps on a running iOS instance
ios lsof List open files on a running iOS instance
ios open-url Open a URL on a running iOS instance
ios perform Perform multiple iOS actions in a single batch
ios press-key Press a key on a running iOS instance
ios record Start or stop video recording on a running iOS instance
ios screenshot Capture the current screen from a running Android instance and save the image to a file.
ios scroll Scroll on a running iOS instance
ios simctl Run simctl on a running iOS instance
ios sync Sync a built app bundle to a running iOS instance
ios syslog Stream syslog from a running iOS instance
ios tap Tap at coordinates on a running iOS instance
ios tap-element Tap an iOS element by accessibility selector
ios terminate-app Terminate an app on a running iOS instance
ios toggle-keyboard Toggle the iOS software keyboard
ios type Type text into the focused iOS input field
ios xcodebuild Run xcodebuild on a running iOS instance
ios xcrun Run xcrun on a running iOS instance> lim ios perform --help
Perform multiple iOS actions in a single batch
USAGE
$ lim ios perform [--api-key <value>] [--json] [--quiet] [--create]
[--id <value>] [--action <value>...] [-f <value>] [--timeout <value>]
FLAGS
-f, --file=<value>
Path to a YAML or JSON file containing an array of action objects.
JSON example:
[
{ "type": "tap", "x": 100, "y": 200 },
{ "type": "typeText", "text": "Hello World" }
]
YAML example:
- type: tap
x: 100
y: 200
- type: typeText
text: "Hello World"
--action=<value>...
Action definition as comma-separated key=value pairs; repeat for multiple
actions.
Available action types:
- Tap on coordinate: type=tap,x=100,y=200
- Tap on element by using a selector:
type=tapElement,selector={"AXLabel":"Submit"}
- Increment an element by using a selector:
type=incrementElement,selector={"AXLabel":"Volume"}
- Decrement an element by using a selector:
type=decrementElement,selector={"AXLabel":"Volume"}
- Set an element value by using a selector:
type=setElementValue,text=42,selector={"AXLabel":"Counter"}
- Type text into the focused field: type=typeText,text=Hello
World,pressEnter=true
- Press a key with optional modifiers:
type=pressKey,key=a,modifiers=["shift"]
- Scroll the screen:
type=scroll,direction=down,pixels=300,coordinate=[200,400],momentum=0.2
- Toggle the software keyboard: type=toggleKeyboard
- Open a URL or deep link: type=openUrl,url=https://example.com
- Set device orientation: type=setOrientation,orientation=Landscape
- Wait before the next action: type=wait,durationMs=1000
- Start a touch gesture: type=touchDown,x=100,y=200
- Move a touch gesture: type=touchMove,x=120,y=220
- End a touch gesture: type=touchUp,x=120,y=220
- Press a raw key code down: type=keyDown,keyCode=4
- Release a raw key code: type=keyUp,keyCode=4
- Press a hardware button down: type=buttonDown,button=home
- Release a hardware button: type=buttonUp,button=home
Use JSON values for complex fields like selector, modifiers, and coordinate.
--api-key=<value>
[env: LIM_API_KEY] API key to use for this command. Overrides the saved
login and can also be provided via LIM_API_KEY.
--[no-]create
Create a replacement instance automatically if the target instance is not
found.
--id=<value>
iOS instance ID to target. Defaults to the last created iOS instance.
--json
Output structured JSON instead of human-readable tables or plain text when
the command supports it.
--quiet
Suppress intermediate human-readable logs and only emit the final result.
--timeout=<value>
Override the total batch timeout in milliseconds. By default the CLI grows
the timeout based on waits and action count.
DESCRIPTION
Perform multiple iOS actions in a single batch
Run a batch of iOS actions in a single CLI invocation using repeated
`--action` flags or a JSON/YAML action file. This is the best choice for
agent-driven multi-step interactions that should execute without reconnecting
between steps.
EXAMPLES
$ lim ios perform --action type=tap,x=100,y=200 --action "type=typeText,text=Hello World"
$ lim ios perform --action type=wait,durationMs=1000 --action type=pressKey,key=enter
$ lim ios perform --file ./actions.yaml> lim xcode
Execute any task on remote XCode sandboxes: create, list, get, delete, sync, build, attach-simulator
USAGE
$ lim xcode COMMAND
COMMANDS
xcode attach-simulator Attach an iOS simulator to an Xcode instance
xcode build Run xcodebuild on an Xcode sandbox
xcode create Create a new Xcode instance
xcode delete Delete an Xcode instance
xcode get Get details for a specific Xcode instance
xcode list List Xcode instances
xcode sync Continuously sync local source code to an Xcode
sandbox