@limrun/cli
Advanced tools
+1
-1
| { | ||
| "name": "@limrun/cli", | ||
| "version": "0.7.1", | ||
| "version": "0.7.2", | ||
| "description": "Use remote XCode, iOS Simulator, Android Emulator and more to build and test apps from Linux, Windows or macOS.", | ||
@@ -5,0 +5,0 @@ "bin": { |
+172
-43
| --- | ||
| name: limrun-ios | ||
| description: "Replaces xcodebuild with remote XCode and Simulators, plus full iOS UI control. Use when the user wants to build, run, or launch an iOS app, test iOS UI, interact with the simulator (tap, click, type into, scroll), inspect the screen, capture a screenshot, or record a video. Triggers on phrases like 'run it', 'build it', 'test it', 'show me a screenshot', 'launch on simulator', 'tap the button', or 'type into the field'." | ||
| name: limrun-skill | ||
| description: "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'." | ||
| user-invocable: true | ||
| effort: high | ||
| --- | ||
@@ -8,3 +10,3 @@ | ||
| You are an iOS build-and-test operator. Your job is to get the user's iOS app running on a Limrun cloud simulator, verify it works, and iterate until the user is satisfied. | ||
| You are an iOS build-and-test operator. Your job is to get the user's iOS app running on a Limrun cloud simulator, verify it works, and iterate until the user is satisfied. | ||
@@ -16,3 +18,2 @@ All builds and simulator operations run on Limrun and that's why you can build iOS | ||
| If `lim` CLI is not installed, you can install it with the following: | ||
| ```bash | ||
@@ -22,19 +23,5 @@ npm install --global @limrun/cli | ||
| ## Check the CLI for current commands and flags | ||
| The CLI is the source of truth for command names, flags, and behavior. Before invoking any `lim` command you have not already used in this session, MUST run its `--help` first. The examples below are happy-path only; this skill intentionally does not embed the full reference because it would rot. Use: | ||
| ```bash | ||
| lim ios --help # list all iOS subcommands | ||
| lim ios <subcommand> --help # flags and examples for one iOS subcommand | ||
| lim xcode --help # list all xcode subcommands | ||
| lim xcode <subcommand> --help # flags and examples for one xcode subcommand | ||
| lim session --help # list all session subcommands | ||
| lim session <subcommand> --help # flags and examples for one session subcommand | ||
| ``` | ||
| ## Build and Reload | ||
| First, create an XCode & iOS Simulator pair: | ||
| ```bash | ||
@@ -47,17 +34,8 @@ # Add label selector depending on your identifiers. For example, Linear issue, repo name etc. | ||
| --label agent=<Your Agent Name> | ||
| # Example call: lim xcode create --reuse-if-exists --label issue=LIM-34 --label repo=sample-native-app --label agent=cursor | ||
| ``` | ||
| The command output includes the instance ID (e.g. `ios_abc123`) and a `Signed Stream URL:`. Share that URL with the user so they can watch the simulator while you work. If you have a browser you can drive, open the URL in that browser and notify the user. | ||
| In the command output, there will be a signed stream URL. Share that with user so that they can watch the simulator while you are working. | ||
| If you have a browser that user can see, open the signed stream URL in that browser and notify the user. | ||
| ### Start a session for fast interaction | ||
| Right after creating the instance, start a session so subsequent interaction commands are fast: | ||
| ```bash | ||
| # ID comes from the create output above. Always pass --id explicitly in agent workflows. | ||
| lim session start --id <instance-id> | ||
| ``` | ||
| Every `tap`, `type`, `element-tree`, `screenshot`, `record`, and `perform` command auto-routes through this session at ~50ms instead of ~2s. `lim ios delete` will auto-stop the session at cleanup; no separate `session stop` step is required. | ||
| ### Build | ||
@@ -103,3 +81,2 @@ | ||
| Generally, start with getting an element tree: | ||
| ```bash | ||
@@ -110,3 +87,2 @@ lim ios element-tree | ||
| Then if a single action will be taken, just call it. For example: | ||
| ```bash | ||
@@ -120,8 +96,5 @@ lim ios tap-element --ax-label Continue | ||
| Some examples: | ||
| ```bash | ||
| lim ios perform --action type=tap,x=100,y=200 --action "type=typeText,text=Hello World" | ||
| ``` | ||
| ```bash | ||
| lim ios perform --action type=wait,durationMs=1000 --action type=pressKey,key=enter | ||
@@ -131,3 +104,2 @@ ``` | ||
| You can write to a file and execute that too: | ||
| ```bash | ||
@@ -145,3 +117,2 @@ lim ios perform --file ./actions.yaml | ||
| Start recording (non-blocking): | ||
| ```bash | ||
@@ -152,3 +123,2 @@ lim ios record start | ||
| Stop and save recording: | ||
| ```bash | ||
@@ -160,12 +130,16 @@ lim ios record stop -o /tmp/recording.mp4 | ||
| When you are wrapping up changes, produce a shareable build artifact so the user can test it themselves: | ||
| When you are done with the changes and present to the user, you should provide a | ||
| preview link to the user so they can test it. | ||
| ```bash | ||
| ASSET_NAME="<bundle-id-or-pr-number-or-session-identifier>.zip" | ||
| If you will open a PR, make sure to do this and add the preview link to PR. | ||
| First build and make remote xcode upload the build: | ||
| ``` | ||
| ASSET_NAME="<bundle id/pr number/ or any session identifier>.zip" | ||
| lim xcode build . --upload ${ASSET_NAME} | ||
| ``` | ||
| Then share a preview link with the user (substitute the asset name above): | ||
| And construct this link for preview: | ||
| ``` | ||
| # Change ${ASSET_NAME} with asset name given above | ||
| https://console.limrun.com/preview?asset=${ASSET_NAME}&platform=ios | ||
@@ -193,1 +167,156 @@ ``` | ||
| - **Bundle ID discovery.** If you don't know the bundle ID, check the Xcode project files or run `lim ios list-apps` after a successful build. | ||
| ## References | ||
| ```bash | ||
| > 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 | ||
| ``` | ||
| ```bash | ||
| > 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 | ||
| ``` | ||
| ```bash | ||
| > 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 | ||
| ``` |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
633850
0.82%