These commits are when the Protocol Buffers files have changed: (only the last 100 relevant commits are shown)
| Commit: | 7a182ef | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Document the order of install request frames Summary: No behavioral change. Documents the shape of an install request stream in `idb.proto`: the destination first, then each option at most once, then the payload, with the compression frame counting as an option. It records that current companions accept the options in any order while older ones accept only one, which is the order clients send. Differential Revision: D123006880 fbshipit-source-id: 014095c684b106662fcd2b8fb7820531deefb64a
| Commit: | 18d0c4a | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Report a simulator's displays in describe Summary: `describe` on a booted simulator now lists every display it reports: the display's unique ID, the runtime's name for it, whether the guest is presenting on it, whether it is built in, and its pixel size and density in the current orientation. A size that is not a whole, non-negative number of pixels is reported as 0. This is how a client finds the display to name when it needs a specific one, such as the cover or inner display of an iPhone Duo. The displays are read from the simulator on each `describe`. A failed read is logged and leaves the list empty rather than failing the description, and any other target, or a companion that predates the field, reports none. The client does not print them yet. Reviewed By: mavitalemeta Differential Revision: D122367988 fbshipit-source-id: 0556332d61e03dfed7099a6d83dedf8ca59259b9
| Commit: | 93375d8 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Accept zstd compressed zip app streams Summary: A companion with `pzstd` on its `PATH` now accepts an `.ipa` (or any zip) streamed as zstd, and advertises this with the new `CompanionInfo.zstd_zip_streams` field. Previously a streamed zip was always sent raw: zstd was only negotiated for tars of `.app` bundles. Stored (uncompressed) `.ipa` files are common since `ditto`-style deflate is slow, so a streamed zip of mostly-compressible Mach-O data is sent as-is over the wire. The stream is recognised by a leading zstd skippable frame carrying the tag `idb-zip`. A companion that sees it pipes the stream through `pzstd -d` into the spooled `.ipa`, then installs it exactly as an uncompressed zip. `pzstd` skips the frame itself, and a companion without this change would reject the stream rather than mis-install it. Receive telemetry still counts wire bytes, since the decompressor reads from the same stream the payload writer fills. The reviewed `CompanionService` schema golden now includes field 8, `zstd_zip_streams`. Reviewed By: williamtwilson Differential Revision: D122231487 fbshipit-source-id: 267d442f6ca02ca3ce221408b316cc1003df2dae
| Commit: | 74ea8bc | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Advertise the compressions a companion can extract Summary: The companion now reports which compressions it can extract an app stream from, in a new `supported_compressions` field on `CompanionInfo`, returned from `connect` and `describe`. GZIP is always listed. ZSTD is listed only when `pzstd`, which zstd extraction runs, is on the companion's `PATH`: macOS does not ship it, so a companion without it cannot extract the `--compression ZSTD` stream it would otherwise accept. No client acts on the field yet, so installs are unchanged. A companion that predates the field leaves it empty, which a client should read as GZIP only; that keeps the capability backwards compatible and free, since every client already calls `connect` before its first command. Reviewed By: williamtwilson Differential Revision: D122213763 fbshipit-source-id: 0cbba768194427d59315d1436008c53dd418de04
| Commit: | e2a6d7b | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Expose play/pause, volume and eject buttons Summary: `idb ui button` now accepts `PLAY_PAUSE`, `VOLUME_UP`, `VOLUME_DOWN` and `EJECT` alongside the existing `APPLE_PAY`, `HOME`, `LOCK`, `SIDE_BUTTON` and `SIRI`. The same values are available as `HIDButtonType` members to Python clients, in the Rust CLI grammar, and as new `HIDEvent.HIDButtonType` values on the wire. The companion already knew how to press these buttons; this makes them reachable over gRPC. `EJECT` is the HID Consumer Eject key: pressing it with a text field focused hides or shows the software keyboard without ending editing. The new enum values are appended, so existing clients and companions are unaffected. A new client that sends one of them to an older companion gets `INVALID_ARGUMENT` ("Unrecognized hid button type") rather than a silent no-op. Differential Revision: D121794607 fbshipit-source-id: 7193872d7e6823dcfcc15c4763f47c0330fb5534
| Commit: | c91b5c5 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
accessibility_quiescence gRPC stream Summary: The companion now streams an application's UI quiescence over a new server-streaming RPC, `accessibility_quiescence`. Each response carries the pid it is about and one event: a state change (`BUSY` with the unanswered signals, `SETTLING`, or `QUIET`), a completed touch sequence, a change of target when following the frontmost application, or the application exiting, which is the last response. The stream runs until the client cancels, and cancelling closes the guest that measures it. - The request names an application by `pid` or `bundle_id`; naming neither follows the frontmost application. - `busy_threshold_ms` and `quiet_window_ms` are optional, and an unset tunable takes the companion's default. Each sits in its own oneof so that presence is on the wire, because zero is a meaningful quiet window: it answers as soon as nothing is busy. - Only simulator targets are supported, measured on the companion's own axbridge guest. The Rust wire-contract pins (schema golden, method counts, generated-surface test, and fake companion) and the companion's telemetry method-name list now include the new RPC. Reviewed By: williamtwilson Differential Revision: D121773181 fbshipit-source-id: 8faad9841c1ca43c525927ba235fc57dbb2a07f1
| Commit: | 3541eac | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
clear_delivered_notifications RPC on the companion Summary: The companion gains a unary `clear_delivered_notifications` RPC, taking a `bundle_id` and answering an empty response once every notification the simulator holds for that app has been withdrawn. It is served by `SimulatorNotificationCommands.clearDeliveredNotifications(forBundleID:)`, the counterpart of the existing `delivered_notifications` RPC. The Rust schema inventory, generated-surface check and fake companion are updated for the new method; the fake answers it `UNIMPLEMENTED`, as it does every method no client test has needed yet. The fake companion's README had fallen behind at 48 methods, so its count moves to 52 rather than 49. Differential Revision: D121242962 fbshipit-source-id: 78e281ea65c3a41b300c8f65ec73da6e844f9fe3
| Commit: | e220a37 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Add `idb rotation` Summary: Expose `idb rotation [ORIENTATION]`: omit the argument to read physical device orientation, or supply `PORTRAIT`, `PORTRAIT_UPSIDE_DOWN`, `LANDSCAPE_LEFT`, or `LANDSCAPE_RIGHT` to set it. Reads support plain text and `--json`, including unknown and face-up/down states. Use separate physical-orientation RPCs so the existing `idb ui rotate` and HID landscape convention remain compatible. Forward the native orientation commands through the companion and OneWorld, and update the Rust schema, parser grammar, and compatibility inventories. Hinge CLI support is in D120983978 below this diff. Reviewed By: mavitalemeta Differential Revision: D121017722 fbshipit-source-id: afcb98752aae9aa2c499119141a79fbd002f3e1b
| Commit: | d314843 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Add `idb hinge` Summary: Expose `idb hinge [ANGLE]`: no angle reads the current measured hinge angle, and one angle sets it. Reads support plain text and `--json`; writes accept finite values from 0 (closed) to 180 (flat). Delegate to the native hinge commands through the existing HID stream for writes and a unary hinge-angle RPC for reads. Forward the API through OneWorld and keep the Rust schema and generated parser inventories consistent. The Jest serialization configuration is isolated in its own prerequisite to respect the per-commit Jest change boundary. Reserve HID field 7, which the earlier experimental display-selection client used. Rotation CLI support is a separate follow-up. Reviewed By: mavitalemeta Differential Revision: D120983978 fbshipit-source-id: 9a4348be04b533b0d7842d6a41741fccb99c90db
| Commit: | de12834 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Add structured wait responses Summary: Add a wait-specific response message that keeps the outcome, explanation, and diagnostics together while retaining the existing enum field for older clients. | Contract | Before | After | | --- | --- | --- | | Wait outcome | `wait_result = 1` reports found or timed out. | The existing field is unchanged; optional `wait = 2` contains `result`, `message`, and `diagnostics`. | | Diagnostics | Not represented. | `wait.diagnostics` carries `unmatched_values`, `truncated`, and `read_error`. Absence remains distinct from an empty sample. | | Runtime behavior | Producers emit the original response. | Unchanged in this schema-only diff; endpoint adoption follows separately. | Push safety: field 1 retains its enum type and values. Older readers ignore `wait`; new readers can fall back to field 1 when `wait` is absent. The companion will populate both outcomes from the same value. Empty `read_error` means no reported read failure, following proto3 string defaults. Update the schema inventory golden with the contract. Reviewed By: williamtwilson Differential Revision: D120985678 fbshipit-source-id: 43155b9f36e700ba613891f7c9d1e5311a452985
| Commit: | 5dd505e | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Serve accessibility actions from the requested backend Summary: `tap`, `scroll`, `set_value` and `drag` are now served by the backend the request names, instead of always by the host accessibility backend. The companion has been able to tap, set a value and scroll through the guest reader since that backend landed — `AXBridgeUIAutomation` implements all of them — but `IDBCommandExecutor` passed a literal host backend at every call site, so none of it was reachable over gRPC. The visible symptom is a marker that a read finds and an action cannot: web content inside Safari lives in its own process, which only the guest reader can see, so `describe --api axbridge` resolves a link and a tap of the same marker fails with `elementNotFound`. The only way through was to read the frame and tap its centre by coordinate, which is exactly what addressing an element semantically is meant to replace. The request-level `backend` decides for every action, including wait. `Wait.backend` is read only when the request-level field is unset, so a client older than that field keeps selecting a backend for wait and a client that sets both is not given a merge of the two. An unrecognized backend is refused rather than quietly served by the default, matching how an unrecognized scroll direction and match key are already treated. Reviewed By: bryanyantx Differential Revision: D120710572 fbshipit-source-id: 84800e9d445a224c66ae9cf9ba01f969505406a4
| Commit: | 86b52bc | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Pin the backend dropped from accessibility actions Summary: No behavioural change. Adds `backend` to `AccessibilityActionRequest` so a client can say which accessibility backend should serve an action, and pins the fact that the companion currently ignores it. `AccessibilityInfoRequest` has carried a `backend` since reads became selectable, and `AccessibilityActionRequest.Wait` has its own copy, but tap, scroll, set_value and drag have no way to express one at all. The new field sits on the request rather than on each action, so it covers wait too; `Wait.backend` is marked deprecated and stays on the wire, since a client older than the request-level field still uses it. Nothing reads the new field yet. The tests here assert the current behaviour — every action but wait drops the requested backend in translation, and wait reads only its own field — each marked as pinning a bug, so the commit that honours the field has something to flip. They also cover the untargeted scroll that resolves to the frontmost application, which is the case a backend switch is most likely to break. `AccessibilityActionMethodHandlerTests` is new: the handler had no unit coverage before the seam it is written against existed. Reviewed By: bryanyantx Differential Revision: D120710571 fbshipit-source-id: 8c9bddad7f2d7f355e315187ab3a8d025b4a3865
| Commit: | 0ed0b33 | |
|---|---|---|
| Author: | Chris White | |
| Committer: | meta-codesync[bot] | |
delivered_notifications RPC on the companion Summary: Exposes the delivered-notification read over the companion's gRPC surface `delivered_notifications` is a unary RPC taking a bundle id and answering with the records the system retained for that app: identifier, title, subtitle, body, thread identifier, and a date. `date` is carried in an ordinary `oneof` -- explicit presence, so a record that carried no date is distinguishable from one dated at the epoch, without requiring proto3-optional support from the code generators. The existing Python build floors therefore remain unchanged. The handler only sets `date` when the value is there, and the strings are always present, empty where the notification had nothing. Reviewed By: lawrencelomax Differential Revision: D120003399 fbshipit-source-id: 91f647df4ab992cfe8577e0d45c722277dacecc7
| Commit: | 0905d92 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Expose native accessibility waits through `ui wait` Summary: Add `idb ui wait MARKER` and the Python client's `accessibility_wait` API, using the simulator's native accessibility polling. The command matches the existing simulator CLI options and defaults: case-sensitive substring matching, `--match-key AXLabel`, `--api axbridge`, `--timeout 10`, and `--poll-interval 0.5`. With `--json`, a match reports `{"found": true}` and a timeout reports `{"found": false}` with a nonzero exit. Invalid requests, cancellation, and operation failures remain errors rather than being converted to timeout results. This waits for element presence; it does not establish visibility or hittability. Reviewed By: williamtwilson Differential Revision: D119696153 fbshipit-source-id: e8530bee1b141af4f7c9dc5014c0536e6a63eacd
| Commit: | 15a9694 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Drop the deprecated bundle_id install request Summary: The install stream no longer accepts the bare `bundle_id` form of linking a dSYM to a bundle. That oneof case was marked for removal in March 2022 when `link_dsym_to_bundle` replaced it, and the client has sent the replacement ever since, so no request reaching the companion carries it. Tag 5 and the name are reserved so nothing can reuse them. Differential Revision: D119092114 fbshipit-source-id: 45d0c798968ae166207e292a6228f6169a002304
| Commit: | ef0f7e0 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Carry ignore-case on accessibility action requests Summary: AccessibilityActionRequest gains an ignore_case field covering the source marker and, on a drag, the destination marker; the abstract Client protocol declares it and the four python action methods accept and forward it. The field defaults to false, so older clients match case-sensitively as before and older companions ignore it. Behavioral coverage lands with the companion translation and CLI flag commits, which assert the wire-to-query and flag-to-client seams. No behavioral change. ___ Differential Revision: D118479170 fbshipit-source-id: 972aaddceaf62e3d0e5505c9860c11755955ae03
| Commit: | 69ff22f | |
|---|---|---|
| Author: | Will Wilson | |
| Committer: | meta-codesync[bot] | |
--match, --ignore-case and --filter on idb ui describe-all Summary: Second of five. Wires `FBAccessibilityMatch` — added in the previous diff — to the wire, so a caller can ask the companion for the elements they want instead of asking for the whole tree and narrowing it themselves. `idb ui describe-all` gains: --match TEXT report only the elements whose --match-key value contains TEXT --match-key KEY which attribute --match searches (AXLabel by default; the same vocabulary `describe` uses) --ignore-case compare --match case-insensitively --filter {all,interactable} which elements the read reports (all by default) `--filter` is not new behaviour, only newly reachable: `FBAccessibilityElementFilter` has had an `.interactable` case since it was written, and nothing on the wire could ever select it. A match is not a marker. `describe MARKER` resolves to exactly one element and fails when there is none; `--match` reports every element that matches, and matching nothing is an empty result rather than an error. Setting both on one request is `INVALID_ARGUMENT` — there is no reading of "both" that is not a guess at which the caller meant — and the Python client refuses a match combined with a marker or point target before the call leaves the machine. Two ordering decisions are worth naming. The filter runs before the match, in one shared helper (`FBAccessibilityElementRetention.narrowing`) rather than at each call site, because both hoist and the order is observable. And both run before the interactable refinement, which is per-element guest work there is no reason to spend on an element that is about to be dropped. The Python request construction moved out of `client.py` into `idb/grpc/accessibility.py`, matching `idb/grpc/screenshot.py`: the branching is now a pure function over (target, options) and is unit-tested without a stub. Compatibility: `match`, `ignore_case` and `filter` are new proto3 scalars, so an older companion silently drops them and serves a full, correct-looking tree. The client-side re-filter and warning that closes that gap is the fifth diff in this stack; until it lands, `--match` against an old companion under-narrows rather than misreports. `FILTER_ALL` is zero, so a request that does not ask and a dropped field are the same read. Reviewed By: bryanyantx Differential Revision: D117753208 fbshipit-source-id: 3f81168d68667b6ae1b18a9b08d22e75776ed382
| Commit: | 5b115a6 | |
|---|---|---|
| Author: | Will Wilson | |
| Committer: | meta-codesync[bot] | |
Encode options on RecordRequest.Start Summary: `idb video` records at a fixed 30fps, full size, with whatever bitrate the encoder picks. `idb video-stream` has taken fps, compression quality, scale factor, average bitrate and key frame rate since it was written. Same framebuffer, same encoder, same configuration type -- the record path just never plumbed them. Adds those fields to `RecordRequest.Start`, reusing `VideoStreamRequest.Start`'s field names and numbers so the two messages read identically. Field 3 is left unallocated: that is `format` on the sibling, and a recording is always H.264 in an mp4. One deliberate divergence. Zero means "use the default" for both messages, but record's default `fps` is 30 rather than the stream's nil, because `FBSimulatorVideoRecordingCommands.recordingConfiguration` pins `framesPerSecond: 30`. That is what makes an all-zero request -- everything the current client sends -- record exactly as it does today. Also adds `RecordResponse.Applied`, the resolved options echoed back. A scalar field added to an existing message is invisible when it is dropped: a companion older than this change ignores `scale_factor` and records full size, successfully. The echo is the detector. It is sent only when the request set at least one of the new fields, so the response stream shape changes only for requests an old client could not have produced. No behaviour change: nothing reads the new fields yet. Reviewed By: lawrencelomax Differential Revision: D117613118 fbshipit-source-id: 7cd754426969806095db27c50186e9fbd27cb718
| Commit: | 98df804 | |
|---|---|---|
| Author: | Will Wilson | |
| Committer: | meta-codesync[bot] | |
Add a drag action to the accessibility gRPC API Summary: Adds `AccessibilityActionRequest.Drag`, a new member of the existing `action` oneof, describing a press-and-drag gesture: press and hold the request's target, move to a destination, and release. The destination reuses the shape the request already has for its source -- a marker with its own match key and depth, a point, or nothing for the frontmost element -- so no existing message changes. The three durations and the interpolation delta each read zero as "use the server default", which is how the HID messages already treat their optional timings. Proto only. The companion and the client follow in this stack. Reviewed By: lawrencelomax Differential Revision: D117613111 fbshipit-source-id: 1ca46bcb4cde92948349f8024a8a10771c0b51d9
| Commit: | d616be5 | |
|---|---|---|
| Author: | Will Wilson | |
| Committer: | meta-codesync[bot] | |
Give ScreenshotRequest the fields callers already want Summary: First diff of a stack adding a real `screenshot` API to idb. This one is proto only: no behaviour changes, nothing reads the new fields yet. `ScreenshotRequest` has been an empty message since it was written, so the RPC can only ever return a full-size PNG. A client that wants anything else -- a different format, a quality setting, a crop, or a smaller image -- has to do it itself, after the full-size PNG has already been encoded and shipped over the wire. Client-side scaling in particular saves no bytes at all: it shrinks the file on disk long after the cost of transferring the full-size one was paid. This fills the request message in. Every knob is named after the equivalent on `VideoStreamRequest.Start`, which already has `format`, `compression_quality` and `scale_factor` with these exact semantics -- including `compression_quality == 0` meaning "server default", as in VideoStreamMethodHandler.swift. The `oneof scale` follows the shape of `RecordRequest.control` and `VideoStreamRequest.control`, and the `POINTS` unit is the coordinate space `tap`, `swipe` and `describe` already use. Transforms are specified to apply crop -> scale -> encode, so the scaler never touches pixels that are about to be discarded and the encoder never sees a full-size bitmap. Later diffs implement that ordering companion-side, before rasterisation, rather than resizing an image that has already been rendered. `ScreenshotResponse.image_format` has been declared and never populated since the message was written. Later diffs populate it, which doubles as a version handshake: proto3 silently ignores unknown fields, so a new client talking to an old companion would otherwise get a full-size PNG back with no error. A companion that leaves `image_format` empty predates this change and has ignored every request field, which the client can detect and refuse. Every field is new and every default reproduces today's behaviour byte for byte, so an unmodified client against a new companion sees no change. Reviewed By: lawrencelomax Differential Revision: D117231687 fbshipit-source-id: 87ed0f18633a7fe242cac871b140e25d6fc36a7b
| Commit: | 09b5ecd | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Request profiling and frame coverage on accessibility reads Summary: `ui describe-all` and `ui describe-point` gain `--profile` (element counts and timings) and `--collect-frame-coverage` (upper-region frame coverage), carried on the wire as two request booleans. The results are reported by `--format complete` only, in the document's always-present `profile` and `coverage` slots — the legacy formats collect but have nowhere to report, so their output is byte-unchanged whether or not the enrichers are requested. No conditional response shape is introduced; the output format remains solely the caller's `--format` choice. An older server ignores the unknown request fields and serves the read unenriched, consistent with the rest of the request surface. ___ Differential Revision: D115049152 fbshipit-source-id: 45da00e835e425b5b68c9ed2c72a77bda5844b55
| Commit: | 08a4eb3 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Serve the complete accessibility output format Summary: `AccessibilityInfoRequest.Format` gains `COMPLETE`: a consolidated document carrying the element tree plus the read's provenance — which backend served it, what was targeted, screen bounds, truncation, and any blocking modal — with every key always present, so consumers parse one shape regardless of verb or backend. The server maps it straight onto the format-aware encoder introduced in the previous change; the legacy formats are byte-untouched. Compatibility follows the same rules as the backend selector: a server that predates this value falls back to the legacy format via its existing unrecognized-value handling, and because the complete document is shape-detectable (an object naming its `backend`), a client can tell the downgrade apart from the real thing. Server-side only: nothing sends the value yet; the client flag follows separately. Reviewed By: williamtwilson Differential Revision: D115028625 fbshipit-source-id: e041a65c3d62fd4f07434bc8274b0ab799642cfa
| Commit: | 2fec6df | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Select the accessibility read backend over the wire Summary: `AccessibilityInfoRequest` gains a `Backend` enum (`AX`, `AXBRIDGE`, `AXBRIDGE_PERSISTENT`) selecting which backend serves the read. `AXBRIDGE` reads via a guest accessibility reader spawned per read; `AXBRIDGE_PERSISTENT` keeps that reader alive on the server, amortizing repeated reads. The output schema is identical across backends, so a caller switching backends sees the same shape. Compatibility is explicit in the wire design: `BACKEND_UNSPECIFIED` (an older client, or one that does not ask) and an unrecognized value from a newer client both preserve the historical read path, and an older server ignores the field entirely — a new client against an old server gets exactly the old behaviour. When the selected backend cannot run (e.g. the guest reader binary is missing from the server's resources), the call fails with a clear error rather than silently downgrading. Server-side only: nothing sends the field yet; the client flag follows separately. Reviewed By: williamtwilson Differential Revision: D114915998 fbshipit-source-id: 705cfe1a7b1f7af2af49eb66da4e846038df3400
| Commit: | bb719ac | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Add accessibility key selection to ui describe-all Summary: `idb ui describe-all` (and `describe-point`) now accept `--key <name>` (repeatable) to restrict the described accessibility keys to a chosen set; omitting it returns the default key set. An all-invalid `--key` list is rejected with `invalidArgument` rather than silently falling back to the defaults and masking a typo. The response shape is unchanged — the historical bare elements array. Reviewed By: xgerrit Differential Revision: D112597925 fbshipit-source-id: d256b65cd1557d2bb0285878253911923d51237b
| Commit: | 6b8a220 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Add ui set-value by accessibility element Summary: Adds `idb ui set-value <marker|x y> --value <v>`, which sets the accessibility value of a resolved element (a marker or a point). `--match-key` and `--depth` control marker resolution. The write goes through the consolidated `accessibility_action` RPC: a `SetValue` variant (carrying the value) is added to its `action` oneof. The companion resolves the target and sets the value via the shared `FBSimulatorControl` path, and the Python client gains `accessibility_set_value`. Reviewed By: xgerrit Differential Revision: D113216216 fbshipit-source-id: 12293211f39aeaf82d0af0e0920cea4659faf651
| Commit: | 13f42dd | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Add ui scroll by accessibility element Summary: Adds `idb ui scroll <direction> [<marker|x y>]`, which scrolls a resolved accessibility element — a marker, a point, or (when no target is given) the frontmost app. Directions are up/down/left/right/visible. The write goes through the consolidated `accessibility_action` RPC: a `Scroll` variant (carrying the direction) is added to its `action` oneof. The companion resolves the target and scrolls via the shared `FBSimulatorControl` path, and the Python client gains `accessibility_scroll`. Reviewed By: xgerrit Differential Revision: D112597926 fbshipit-source-id: 8614bc6d865dc45b9a01d3669ca8baabaabee2e0
| Commit: | 1f6943f | |
|---|---|---|
| Author: | Gerrit Goossen | |
| Committer: | meta-codesync[bot] | |
Use the default app when no bundle id is specified for `app` context Summary: ### This diff * Updates `idb-repl` to accept an `app` context with no bundle id. * Adds app installation for the default `ReplHost` app when no other app is specified for the `app` context. Reviewed By: bryanyantx Differential Revision: D113353092 fbshipit-source-id: ae99adf16097576cca97f1968576458e42e7df64
| Commit: | fa6bd47 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Add ui describe by accessibility marker Summary: Adds `idb ui describe <marker>`, which resolves the accessibility element whose value contains the marker and prints its serialized subtree. `--match-key` selects the searchable key (AXLabel default), `--depth` bounds the search, and `--nested` selects the nested format. Rather than a new RPC, this extends the existing `accessibility_info` read: `AccessibilityInfoRequest` gains an optional marker target (plus match key and depth), and the companion resolves and serializes it via the shared `FBSimulatorControl` describe path. `describe-all` (whole screen) and `describe-point` (point) are unchanged; the Python client's `accessibility_info` gains the marker target and the `describe` CLI command routes through it. Reviewed By: xgerrit Differential Revision: D112597919 fbshipit-source-id: 46c46e57dba2b07e8692098907604583b6091630
| Commit: | 23da9bc | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Support accessibility tap by marker, point, key and expected value Summary: Extends `idb ui tap` beyond coordinate HID taps with a first-class accessibility (AXPress) path: - `idb ui tap <x> <y> --api ax` resolves the accessibility element at the point and presses it instead of sending a coordinate touch. - `idb ui tap <marker>` resolves an element whose accessibility value contains the marker and presses it. `--match-key` selects the searchable key (AXLabel default, plus AXUniqueId/AXValue/title/role/...), `--depth` bounds the tree search, and `--expected-value`/`--expected-key` assert the element's value before pressing. `idb ui tap <x> <y>` (coordinate HID tap) is unchanged. Introduces the `accessibility_action` RPC: its request carries a marker-or-point target, match key and depth, plus an `action` oneof whose `Tap` variant holds the optional expected value/key. The companion resolves the target and presses via the shared `FBSimulatorControl` accessibility path, and the Python client gains `accessibility_tap`. Reviewed By: xgerrit Differential Revision: D112597920 fbshipit-source-id: 4e0f8be21b821c2b727eaf9502048f4b38e7db92
| Commit: | 6b4df7f | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Add ui rotate gesture Summary: Adds `idb ui rotate <ORIENTATION>`, which sets the device orientation (PORTRAIT, PORTRAIT_UPSIDE_DOWN, LANDSCAPE_LEFT, LANDSCAPE_RIGHT). It rides the existing `hid` streaming RPC: a `HIDOrientation` member is added to the `HIDEvent` oneof, the companion maps it to the `FBSimulatorControl` device-orientation HID event, and the Python client gains a `rotate` method plus the `ui rotate` CLI command. Reviewed By: xgerrit Differential Revision: D112597923 fbshipit-source-id: 29c3ea15fdccdb961693d6864a0ad3ba9012b0c7
| Commit: | 82682b6 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | meta-codesync[bot] | |
Add ui shake gesture Summary: Adds `idb ui shake`, which shakes the device. It rides the existing `hid` streaming RPC: an empty `HIDShake` member is added to the `HIDEvent` oneof, the companion maps it to the `FBSimulatorControl` shake HID event, and the Python client gains a `shake` method plus the `ui shake` CLI command. Reviewed By: xgerrit Differential Revision: D113216217 fbshipit-source-id: c8f0f2767f3f412bfd0e3504c4496a480e40bcfb
| Commit: | ebc6ac7 | |
|---|---|---|
| Author: | Gerrit Goossen | |
| Committer: | meta-codesync[bot] | |
Add session report appending Summary: ### This diff * Adds a session id to link invocations that run code in the same session. * Adds session report appending so multiple one-shot runs can be combined into a session report. Reviewed By: bryanyantx Differential Revision: D113052532 fbshipit-source-id: da5803016558d4da32968abe1e350811c693c9f3
| Commit: | 8989ac3 | |
|---|---|---|
| Author: | Gerrit Goossen | |
| Committer: | meta-codesync[bot] | |
Transfer captured artifacts back to the client Summary: ### This diff Moves artifacts captured from repl code from the companion back to `idb-repl`. Reviewed By: bryanyantx Differential Revision: D113017950 fbshipit-source-id: dc5e18162f50a3f728fde53e1d59662c0ce16007
| Commit: | 6121dd0 | |
|---|---|---|
| Author: | Gerrit Goossen | |
| Committer: | meta-codesync[bot] | |
Add `--enable-repl` flag when launching an app Summary: ### Context Currently `idb-repl` has to launch an app for it to be available for code injection. It would be great if we could use multiple tools on the same app instance. (For ex. Driving an app with `idb` then using `idb-repl` to pull app state.) ### This diff Adds a new flag to `idb` when launching an app that enables REPL in the app. This makes it possible to prepare an app for `idb-repl` before it's ever needed. Reviewed By: bryanyantx Differential Revision: D112843990 fbshipit-source-id: 5840f1b889ea9562944e43930f22f692e4c74e6c
| Commit: | 7ea5964 | |
|---|---|---|
| Author: | Gerrit Goossen | |
| Committer: | meta-codesync[bot] | |
Make `app` context sessions reattachable Summary: ### Context Currently `idb-repl` relaunches the app for every session when using the `app` context. The problem with this is that agents seem to prefer one-shot sessions and one-shot sessions relaunch the app every time, but resetting the app on every execution is extremely limiting. ### This diff Changes `app` context sessions so they will by default look for any existing session and attempt to connect to it. Using a new CLI flag (`--fresh`) it's possible to still force an app relaunch. Reviewed By: bryanyantx Differential Revision: D112630600 fbshipit-source-id: 5e0d04db80d117e0709fcb7f65dc4f050feeb884
| Commit: | 6ebb6d1 | |
|---|---|---|
| Author: | Gerrit Goossen | |
| Committer: | meta-codesync[bot] | |
Match the targeted OS version to the runtime OS version Summary: ### Context When building repl code, it can't use or link against symbols that are for a newer version of iOS than what is available in the iOS simulator. ### This diff * Sends the runtime OS version back in the "repl ready" message at the start of the session, and uses the OS version to cap the OS version used for building. * Adds tests for the OS version resolution used when generating the target triple. Reviewed By: bryanyantx Differential Revision: D112584181 fbshipit-source-id: b1d88cbac31c06372e8fe0dcbba48486bc36c07d
| Commit: | 8a4a725 | |
|---|---|---|
| Author: | Gerrit Goossen | |
| Committer: | meta-codesync[bot] | |
Add the `app` context to `idb-companion` and `idb-repl` Summary: ### Context Currently we can inject code into a bare simulator process or an `xctest` process. It would be useful to inject code into a running app, so we'll create a new context to do that. ### This diff Adds the `app` context option to `idb-companion` and `idb-repl`. Differential Revision: D110426036 fbshipit-source-id: c42d68f09f86bf2ef433ba7575b506ffa17d57b5
| Commit: | 2076c5b | |
|---|---|---|
| Author: | Gerrit Goossen | |
| Committer: | meta-codesync[bot] | |
Transfer `IDB` Swift interface from companion to client Summary: ### Context It would useful if repl code can actually use `idb` commands from within the code and use the results to make decisions at runtime. This means we need to expose an API to the repl code to call `idb` commands, then link that into the ReplExecutor and send those commands back to the companion. ### This diff Updates the Repl Ready command to contain the actual `.swiftinterface` for the `IDB` API supported by repl commands, instead of just a file path. (This will support remote connections better down the road.) Reviewed By: lawrencelomax Differential Revision: D110232228 fbshipit-source-id: 00af9fae11b8421d24b95b1156efa6e7b832c627
| Commit: | ae1069d | |
|---|---|---|
| Author: | Gerrit Goossen | |
| Committer: | meta-codesync[bot] | |
Pass .swiftinterface files back to client Summary: ### Context In order to link from user repl code to functions and types in a test binary, the MVP required the module map that was an artifact of building the test binary. This is problematic for a lot of reasons, so we need another way to extract the functions and types users may want to link to. ### This stack Adds runtime generation of a `.swiftinterface` that can be used to link to test binary code. ### This diff Adds passing of the generated `.swiftinterface`s from the shim to `idb-repl`. Reviewed By: lawrencelomax Differential Revision: D110008579 fbshipit-source-id: 8d44a44da3962036e46b314f813f51d34ec95785
| Commit: | 3308a1e | |
|---|---|---|
| Author: | Gerrit Goossen | |
| Committer: | meta-codesync[bot] | |
Use the simulator device family to select the build platform Summary: ### This stack Expands on `idb-repl` to simplify its setup and use by integrating it more with `idb`. ### This diff * Adds the simulator device family to the `repl ready` response. * Uses the device family to select the build platform. Reviewed By: lawrencelomax Differential Revision: D108571571 fbshipit-source-id: 68a111a0a55d4f34dfc70df50b9c355be5d1e52f
| Commit: | 728daa9 | |
|---|---|---|
| Author: | Gerrit Goossen | |
| Committer: | meta-codesync[bot] | |
Create separate repl execution contexts Summary: ### This stack Starts cleaning up and addressing the rough edges and gaps from the `idb-repl` MVP. ### Context The are advantages and disadvantages to running code in different environments, so ideally, this should be a user selectable option. For ex. Instead of running code in a test environment (like in the MVP), it could be useful to run code inside an actual app or even a bare simulator process. ### This diff * Replaces the `idb-repl` `dylib` command (which previously specified the method of injecting code) with two new commands: `simulator` and `test`, which specify the context code should execute in. * Updates communication between `idb-repl` and `idb` to include the selected context. (Hooking this up will happen in a later diff in the stack.) Reviewed By: lawrencelomax Differential Revision: D107780981 fbshipit-source-id: cbdf896344d3027f429dc11b2cfc65cfe5f005e7
| Commit: | 790fc4b | |
|---|---|---|
| Author: | Gerrit Goossen | |
| Committer: | meta-codesync[bot] | |
Create separate repl execution contexts Summary: ### This stack Starts cleaning up and addressing the rough edges and gaps from the `idb-repl` MVP. ### Context The are advantages and disadvantages to running code in different environments, so ideally, this should be a user selectable option. For ex. Instead of running code in a test environment (like in the MVP), it could be useful to run code inside an actual app or even a bare simulator process. ### This diff * Replaces the `idb-repl` `dylib` command (which previously specified the method of injecting code) with two new commands: `simulator` and `test`, which specify the context code should execute in. * Updates communication between `idb-repl` and `idb` to include the selected context. (Hooking this up will happen in a later diff in the stack.) Reviewed By: lawrencelomax Differential Revision: D107780981 fbshipit-source-id: cbdf896344d3027f429dc11b2cfc65cfe5f005e7
| Commit: | d144f4a | |
|---|---|---|
| Author: | Gerrit Goossen | |
| Committer: | meta-codesync[bot] | |
Add the `repl` gRPC command Summary: ### This stack Integrates the `idb-repl` MVP into the `idb` codebase. The MVP is based on injecting code into the machinery that is currently used by test execution. ### This diff Adds an empty `repl` command for gRPC clients. Reviewed By: cpepin Differential Revision: D107197686 fbshipit-source-id: ec9567091733c61a2e0ed4d20efe354d8ed1023f
| Commit: | 8bc5db9 | |
|---|---|---|
| Author: | Gerrit Goossen | |
| Committer: | meta-codesync[bot] | |
Add the `repl` gRPC command Summary: ### This stack Integrates the `idb-repl` MVP into the `idb` codebase. The MVP is based on injecting code into the machinery that is currently used by test execution. ### This diff Adds an empty `repl` command for gRPC clients. Reviewed By: cpepin Differential Revision: D107197686 fbshipit-source-id: ec9567091733c61a2e0ed4d20efe354d8ed1023f
| Commit: | 5cc0c3d | |
|---|---|---|
| Author: | meta-codesync[bot] | |
| Committer: | GitHub | |
Re-sync with internal repository (#921) The internal and external repositories are out of sync. This Pull Request attempts to brings them back in sync by patching the GitHub repository. Please carefully review this patch. You must disable ShipIt for your project in order to merge this pull request. DO NOT IMPORT this pull request. Instead, merge it directly on GitHub using the MERGE BUTTON. Re-enable ShipIt after merging. fbshipit-source-id: 9c54fc4d98215197c5e51e0109e5e7ffc2b2ef4d Co-authored-by: Facebook Community Bot <6422482+facebook-github-bot@users.noreply.github.com>
| Commit: | 1cd3212 | |
|---|---|---|
| Author: | Facebook Community Bot | |
Re-sync with internal repository The internal and external repositories are out of sync. This Pull Request attempts to brings them back in sync by patching the GitHub repository. Please carefully review this patch. You must disable ShipIt for your project in order to merge this pull request. DO NOT IMPORT this pull request. Instead, merge it directly on GitHub using the MERGE BUTTON. Re-enable ShipIt after merging. fbshipit-source-id: 9c54fc4d98215197c5e51e0109e5e7ffc2b2ef4d
| Commit: | 006cc30 | |
|---|---|---|
| Author: | Arsh Malhotra | |
| Committer: | meta-codesync[bot] | |
Handle HIDPinch gRPC events Summary: Add gRPC support for the pinch gesture in the idb companion. - idb.proto: add `HIDPinch` message (center, scale, duration, radius) to `HIDEvent.oneof` - HidMethodHandler.swift: handle `.pinch` case, forwarding to `FBSimulatorHIDEvent.pinchAt()` - CompanionServiceProvider.swift, CompanionServiceInterceptors.swift: add `FBControlCore` import Reviewed By: lawrencelomax Differential Revision: D101644851 fbshipit-source-id: be3ee0dc6d9d9a4c4f1e7916b0e7ac296fffdddd
| Commit: | d8f4d18 | |
|---|---|---|
| Author: | Arsh Malhotra | |
| Committer: | meta-codesync[bot] | |
Handle HIDPinch gRPC events Summary: Add gRPC support for the pinch gesture in the idb companion. - idb.proto: add `HIDPinch` message (center, scale, duration, radius) to `HIDEvent.oneof` - HidMethodHandler.swift: handle `.pinch` case, forwarding to `FBSimulatorHIDEvent.pinchAt()` - CompanionServiceProvider.swift, CompanionServiceInterceptors.swift: add `FBControlCore` import Reviewed By: lawrencelomax Differential Revision: D101644851 fbshipit-source-id: be3ee0dc6d9d9a4c4f1e7916b0e7ac296fffdddd
| Commit: | d3d509f | |
|---|---|---|
| Author: | Arsh Malhotra | |
| Committer: | Gerrit Goossen | |
Handle HIDPinch gRPC events Summary: Add gRPC support for the pinch gesture in the idb companion. - idb.proto: add `HIDPinch` message (center, scale, duration, radius) to `HIDEvent.oneof` - HidMethodHandler.swift: handle `.pinch` case, forwarding to `FBSimulatorHIDEvent.pinchAt()` - CompanionServiceProvider.swift, CompanionServiceInterceptors.swift: add `FBControlCore` import Reviewed By: lawrencelomax Differential Revision: D101644851 fbshipit-source-id: be3ee0dc6d9d9a4c4f1e7916b0e7ac296fffdddd
| Commit: | 6dc520f | |
|---|---|---|
| Author: | Chris White | |
| Committer: | meta-codesync[bot] | |
Add ability to clear photo library within idb companion Summary: SimulatorFrameworkBridge can be used to clear the photo library. This is similar to the capability added to clear contacts. This uses the Photos framework to access the photo library and clear it. The `kTCCServicePhotos` entitlement is needed for this to work even though it clears photos using private APIs. Private APIs needed to be used for this as the Photos framework will always show a destructive alert when we try to delete photos/videos from the device. Differential Revision: D87447670 Privacy Context Container: L1246528 fbshipit-source-id: 15b9bd13795abfcacf55be3c176a93d12a2820c2
| Commit: | 21a86be | |
|---|---|---|
| Author: | Chris White | |
| Committer: | meta-codesync[bot] | |
Add ability to clear contacts using Contacts framework within idb companion Summary: WhatsApp iOS jest tests exhibit flakiness when prepopulating the simulator's address book with contacts. The root cause is that simulators may retain contacts from previous test runs, and the current approach of directly manipulating `AddressBook.sqlite` causes database corruption and synchronization issues. This leaves the simulator in an inconsistent state where subsequent contact additions fail silently. Direct SQLite manipulation bypasses the Contacts framework's internal consistency checks, leading to sqlite errors which go unnoticed during test runs. `simctl` provides a way to add contacts, but it doesn't provide a way to specifically clean up contacts. **Whats New** -------- Clear contacts using the official `CNContactStore` API from Apple's Contacts framework, which maintains data integrity and properly synchronizes internal state. **Implementation** -------------- Since the Contacts framework requires special entitlements (`com.apple.private.tcc.allow` for `kTCCServiceAddressBook`) and must execute within the simulator's security context, I've created `SimulatorFrameworkBridge` - a helper binary that: 1. Targets iOS Simulator SDK and links against iOS frameworks 2. Contains required entitlements to bypass TCC permission dialogs 3. Executes via `simctl spawn` to run inside the simulator's process space 5. Built as a universal binary supporting both arm64 and x86_64 architectures This approach ensures contacts are cleared through the official API, preventing database corruption and eliminating test flakiness related to address book state. This also would make it possible to clean up the photo library between test runs, which would also be beneficial for the flakiness of tests. Reviewed By: xgerrit Differential Revision: D86180965 fbshipit-source-id: ccacb83225c1925c48296f86fe7d9368c8993a21
| Commit: | b930660 | |
|---|---|---|
| Author: | Maru Berezin | |
| Committer: | Facebook GitHub Bot | |
Rename option to --enable-continuous-coverage-collection Summary: Renamed the option to `--enable-continuous-coverage-collection` to avoid leaking too many implementation details of idb_companion to the idb client API. Reviewed By: jbardini Differential Revision: D48605430 fbshipit-source-id: 202f72309e49ce48739c4dae25027daecea481dd
The documentation is generated from this commit.
| Commit: | 011e53a | |
|---|---|---|
| Author: | Maru Berezin | |
| Committer: | Facebook GitHub Bot | |
Add --coverage-file-suffix option Summary: Added the option `--coverage-file-suffix` to add a suffix to the .profraw coverage file names generated after a test run. Reviewed By: Nekitosss Differential Revision: D48095797 fbshipit-source-id: d51104a711050d62d501c8b5cc2df2a92b526cf3
| Commit: | 70fb9cb | |
|---|---|---|
| Author: | Ron Mordechai | |
| Committer: | Facebook GitHub Bot | |
Allow configuring key frame rate for video streams Summary: Jest E2E videos are setting some terrible corruption mid stream: https://www.internalfb.com/intern/testinfra/diagnostics/5348024748728738.844425029855635.1691590430/. Probably a result of a missing frame or something—increasing the frequency of key frames should alleviate the issue. Reviewed By: Nekitosss Differential Revision: D48195347 fbshipit-source-id: cdd8de5f9c58d3ae06a97d710e7e8b83559810f3
| Commit: | 9550c4c | |
|---|---|---|
| Author: | Ivan Smetanin | |
| Committer: | Facebook GitHub Bot | |
Add an option to skip signing xctest bundles Reviewed By: jbardini, Nekitosss Differential Revision: D45392837 fbshipit-source-id: 7aaefedb7c1fab32c886f18f29c7578644b1e14e
| Commit: | a8239a0 | |
|---|---|---|
| Author: | Mark Bridges | |
| Committer: | Facebook GitHub Bot | |
Reporting Additional Test Failure Assertions Summary: See D42416051 Reviewed By: Nekitosss Differential Revision: D42412171 fbshipit-source-id: 7fff78ababf0e2f4f3b3aa67330f0443e6a3e1ab
| Commit: | f05a91e | |
|---|---|---|
| Author: | Alex Beals | |
| Committer: | Facebook GitHub Bot | |
Add in new command to revoke permissions Summary: This adds in the ability to reset permissions as a complement to `approve`. This naming mirrors the similar `adb` command `pm revoke` which is the opposite of `pm grant`. While this more closely mirrors `xcrun simctl privacy reset` than `xcrun simctl privacy revoke`, `reset` is a little too vague to be used as a top-level `idb` command, so here we are. Reviewed By: Nekitosss Differential Revision: D37928629 fbshipit-source-id: 4495baf39163209a3bd927a892c60e701ee3e9f8
| Commit: | 631f47d | |
|---|---|---|
| Author: | Nikita Patskov | |
| Committer: | Facebook GitHub Bot | |
Add userInfo to XCTAttachment in proto Summary: Created new property to pass attachment user info Reviewed By: lawrencelomax Differential Revision: D37454753 fbshipit-source-id: 9171c9b57c7d770e20fbb14611e19edcfbd8dad3
| Commit: | b8d8837 | |
|---|---|---|
| Author: | Jakub Grzmiel | |
| Committer: | Facebook GitHub Bot | |
Allow not returning bundle results from running xctest Summary: Do not send back the bundle results if client does not want to fetch it. Reviewed By: Nekitosss Differential Revision: D36494548 fbshipit-source-id: da11a608abd145457750d4465b405352b29a9b0e
| Commit: | dcd17cf | |
|---|---|---|
| Author: | Johnny Souza | |
| Committer: | Facebook GitHub Bot | |
Add flag to app install to ignore mtime in .ipa archives Summary: The instalation process of an `.ipa` on a simulator consists of idb decompressing the archive (ipa is a zip) and then calling `-[SimDevice installApplication:withOptions:error:]` which in turn will request the installation to `installd` (a process that belongs to the simulator). When a previous version of the app is already installed in the simulator, `installd` performs an "incremental install" (or "Delta patch update" as it shows in the logs). Since `installd` incremental patch update seems to be based on each file's modified date and size, it not work well when your `.ipa` is produced by a building system that normalises the timestamps of files contained in archive-like artefacts (all the content of all `.ipa`s have mtime set to a specific date in the past -- regardless of _when_ the build actually happened). This often results on a corrupted app installation with some files from the previous version and some files of the newer version. The files that are not updated are files which had their content changed but without a change in size. As the files from both builds have the same mtime, `installd` skip them. So we mitigate this issue by ignoring the mtime stored within the `.ipa` when decompressing it. So all the files in the app bundle have the current time as mtime, which will differ from the files previously installed, and `installd` will be able to install the newer version of the app properly. Since we are, in theory, forcing a full install, it can result in longer install times. There is also the possibility of unforeseen issues with applications that happen to depend on the mtime of specific resources within it's bundle, so we are making this new behaviour opt-in. Reviewed By: ronmrdechai, Nekitosss Differential Revision: D36341632 fbshipit-source-id: 53e48ae7b915c9a4e67a6ebe92dac507f27e3da8
| Commit: | 82a6701 | |
|---|---|---|
| Author: | Ruijie Chen | |
| Committer: | Facebook GitHub Bot | |
Adding support for test bundle_id Summary: Adding support for test bundle in idb_companion when installing dsym and link next to xctest bundle Reviewed By: Nekitosss Differential Revision: D34523586 fbshipit-source-id: 208c0c85a794fad2bd4bc1467acb091b291477d2
| Commit: | d0ca124 | |
|---|---|---|
| Author: | Andrey Kateshov | |
| Committer: | Facebook GitHub Bot | |
add microphone permissions in cli Summary: this adds a new future: support for granting microphone permissions. Reviewed By: jbardini Differential Revision: D34445262 fbshipit-source-id: 29370eeb66738f8183a603ce2e7d19a311682429
| Commit: | ad2d747 | |
|---|---|---|
| Author: | Yerken Tussupbekov | |
| Committer: | Facebook GitHub Bot | |
Add avg_bitrate to VideoStream request Summary: This will allow us to control encoder bitrate for IDB companion video-streaming through GRPC API Reviewed By: jamescoggan Differential Revision: D34213517 fbshipit-source-id: 4c04f33e1181ab5e618e44ea9842bb5b0ec6e3e4
| Commit: | 33147af | |
|---|---|---|
| Author: | Andrea Tullis | |
| Committer: | Facebook GitHub Bot | |
Support non string values for default values Summary: This diff adds support for non string values to the `idb set` family of commands. Reviewed By: ideahitme Differential Revision: D34144910 fbshipit-source-id: 7cef44beb521833dc2a1398fe320d6e9bc70b12b
| Commit: | 84ff882 | |
|---|---|---|
| Author: | Stefan Petrov | |
| Committer: | Facebook GitHub Bot | |
Add I420 video format flag to IDB companion GRPC Summary: Add I420 as a video format that can be requested from IDB companion through GRPC. Reviewed By: ideahitme Differential Revision: D34110642 fbshipit-source-id: af3d527476159ec0ff6a924e250b295e93d8698f
| Commit: | fea9e0f | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | Facebook GitHub Bot | |
Add FileContainer.SYMBOLS for idb companion Summary: Now that we have a base implementation, this can be wrapped up in a file container Reviewed By: jbardini Differential Revision: D33187470 fbshipit-source-id: aab304581b83d7bf764316804d2797e21efb7ffd
| Commit: | 43a3ecc | |
|---|---|---|
| Author: | Andres Suarez | |
| Committer: | Facebook GitHub Bot | |
Update copyright headers from Facebook to Meta Reviewed By: aaronabramov Differential Revision: D33357161 fbshipit-source-id: 3e27660d7eb63fd4a40c366d6b226cac694396d5
| Commit: | 11cfdd7 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | Facebook GitHub Bot | |
Add grpc interface for inspecting the companion's internal storage Summary: Another file container, this time for the files that idb uses to internally manage a number of different mechanisms. These only exist within idb itself, rather than the underlying frameworks Reviewed By: fgasperij Differential Revision: D32696566 fbshipit-source-id: 84fa4e8a6745a967adbee5a49aab541dbae22b7d
| Commit: | a02bf34 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | Facebook GitHub Bot | |
Remove deprecated fields from LaunchResponse proto Summary: No longer used and has been unused for over two weeks in D31992199 (https://github.com/facebook/idb/commit/a47216f0cc943c94696d636af7921176b5e388af) , let's remove it from the protocol since it's no longer used and increasing transfer size due to the doubnling up. Reviewed By: jamescoggan Differential Revision: D31992217 fbshipit-source-id: 90bfe9e6cd4e27d74b8fb85b3c4b8d93dd94ba6d
| Commit: | 0ed5f89 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | Facebook GitHub Bot | |
Add AUXILLARY container Summary: This is going to be helpful for commands that wish to use the aux dir internally Differential Revision: D32022253 fbshipit-source-id: 80a371dd69208d4f5ba1d03b85ec868cadf2fa2d
| Commit: | a3254fa | |
|---|---|---|
| Author: | Yerken Tussupbekov | |
| Committer: | Facebook GitHub Bot | |
Add bundle_id to InstallRequest Reviewed By: fgasperij Differential Revision: D32098488 fbshipit-source-id: b21accb16ae2cc75684822bb303ee00fa8a404c3
| Commit: | 560a67f | |
|---|---|---|
| Author: | Juan Chaparro | |
| Committer: | Facebook GitHub Bot | |
Add simulate memory warning command Reviewed By: jbardini Differential Revision: D32203544 fbshipit-source-id: 3b7d90fa929b4e469ac148aa881d2fc3c08d067e
| Commit: | 8f0914b | |
|---|---|---|
| Author: | Ruijie Chen | |
| Committer: | Facebook GitHub Bot | |
Implement dap command in idb companion Summary: Implement dap command to spawn a dap protocol server for remote debugging. Reviewed By: jbardini Differential Revision: D31856353 fbshipit-source-id: 7e1931e7761b50e23cdc6b6faf0df372ebb7cbfa
| Commit: | c99d071 | |
|---|---|---|
| Author: | Callum Ryan | |
| Committer: | Facebook GitHub Bot | |
Send notification command Reviewed By: jbardini Differential Revision: D32019332 fbshipit-source-id: f597bedbbe1ce55fc69785345795171e9a5292a1
| Commit: | e3ba6f1 | |
|---|---|---|
| Author: | Yerken Tussupbekov | |
| Committer: | Facebook GitHub Bot | |
Add and populate DebuggerInfo in LaunchResponse Summary: This is required for implementing debugging for apps, where we launch a suspended app and use return process id to attach via lldb A follow-up is processing DebuggerInfo to be printed as a JSON struct via idb cli Reviewed By: jbardini Differential Revision: D32054698 fbshipit-source-id: a559f06f9b7432c5d4c397d6215b3eaafbe773cb
| Commit: | e5cb063 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | Facebook GitHub Bot | |
Make app debuggability optional on install, off by default Summary: Right now we "persist" apps, even if we don't wish to debug them. This is hideously suboptimal and a waste of storage space in the general case. So I'm making this have to be flagged on the install, the default is off. Reviewed By: jbardini Differential Revision: D31685386 fbshipit-source-id: e00bfe259146898e0739c7e757bcf63d05cace79
| Commit: | 7c3fb9d | |
|---|---|---|
| Author: | Andres Suarez | |
| Committer: | Facebook GitHub Bot | |
Enable CLANGFORMAT Differential Revision: D31464478 fbshipit-source-id: 7bd403f6faef8eec8565621c6814032afe0f897f
| Commit: | c598e69 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | Facebook GitHub Bot | |
Add Application Container Support for Simulators Summary: The way that group containers are implemented has a number of advantages that I want to use in Application containers also. This approach will eventually replace the usage of `--bundle-id` in file commands: - The root of the application container-of-containers allows discovery of all application containers that can be interacted with. - We can use this as a way of getting rid of the `:` syntax for `--bundle-id` that's inconsistent with every other container - It allows for copying across containers, without pulling then pushing. Reviewed By: fgasperij Differential Revision: D30535532 fbshipit-source-id: 4c7a34077cbbf63dbff751085d8a448fc77326cb
| Commit: | dc72b3d | |
|---|---|---|
| Author: | Johnny Souza | |
| Committer: | Facebook GitHub Bot | |
Add code coverage format to GRPC definition Summary: API changes to specify code coverage data format idb_companion should return. Reviewed By: lawrencelomax Differential Revision: D30961625 fbshipit-source-id: 557abafcfe3cfc5538b3c699e04cfc1493743787
| Commit: | 5385c72 | |
|---|---|---|
| Author: | Yerken Tussupbekov | |
| Committer: | Facebook GitHub Bot | |
idb.proto: add Setting.ANY and allow to pass preference name,domain Summary: This diff introduced necessary parameters into Get and Set requests for supporting random name,value preferences Reviewed By: lawrencelomax Differential Revision: D30768086 fbshipit-source-id: b0a16e99834af3470075c5175da84e52a872b096
| Commit: | d4cbc74 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | Facebook GitHub Bot | |
Add -[FBFileCommands fileCommandsForGroupContainers] Summary: Adds the necessary definitions and wiring into a new file container type. Reviewed By: jbardini Differential Revision: D30219099 fbshipit-source-id: d2775abb7e859ea0a3469e26f1a6fa7f0292d585
| Commit: | 259bb58 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | Facebook GitHub Bot | |
Add ProcessOutput so that it can be used elsewhere Summary: This factors out a `ProcessOutput` message that can then be used in a `spawn` call. At the moment this means that we need to send both the old and the new way of representing a process's output in `LaunchResponse`. Once this has been rolled out fully, we can remove this handling within the companion Reviewed By: jamescoggan Differential Revision: D30097348 fbshipit-source-id: 8508c8bf1e83bc951bdfafd72311453cb299cc99
| Commit: | 99cdb39 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | Facebook GitHub Bot | |
Add tail grpc call & companion implementation Summary: Now that we have an interface for this it is implementable. Using a bidirectional stream, since stopping writing based on a client hangup is very error prone (see the implementation of the `log` command). This means that we can immediately detect that a client is gone and teardown afterwards. Reviewed By: fgasperij Differential Revision: D30015732 fbshipit-source-id: 41a70a98ec3679e224270ccdf1611b9902b80cd3
| Commit: | 4a2f063 | |
|---|---|---|
| Author: | Ruijie Chen | |
| Committer: | Facebook GitHub Bot | |
Change grpc definition for debugger integration Summary: XCTestRunRquest: Addding wait_for_debugger field XCTestRunResponse: Adding debugger message to return pid or debugger server host and port. Reviewed By: jamescoggan Differential Revision: D29160632 fbshipit-source-id: 840dca74af85e8850bf21a2a3bb42f3ad0058b41
| Commit: | 03e8f14 | |
|---|---|---|
| Author: | Yerken Tussupbekov | |
| Committer: | Facebook GitHub Bot | |
Add Compression option to InstallRequest Summary: This is to add ZSTD compression support for idb install command and corresponding support on the companion side. Right now we only support GZIP (and gzip-like) compression algorithm, however according to my tests ZSTD outperforms it when working on large files, for example it could give a large boost when doing `idb install Facebook.app` over the wire Reviewed By: c-ryan747 Differential Revision: D27846177 fbshipit-source-id: b6b2bcbc37fe19d4323990c2f0c0c0810b866929
| Commit: | 26204f2 | |
|---|---|---|
| Author: | Johnny Souza | |
| Committer: | Facebook GitHub Bot | |
Add 'log_directory' to grpc definiton Summary: As title Reviewed By: fgasperij Differential Revision: D27361185 fbshipit-source-id: fbcad3a67a58bd182229ce053c54ee83fae08327
| Commit: | 3390002 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | Facebook GitHub Bot | |
Remove client side sending of bundle_id (D24078439 Redux) Summary: We originally needed to revert D24078439 (https://github.com/facebook/idb/commit/3cb4a89e8f66ce37db03ff188dec3caa42101b70) due to a breakage elsewhere. Re-doing it now Reviewed By: zeyadsalloum Differential Revision: D24215531 fbshipit-source-id: ab6d7dcf0f280a4e25d0ff5e2d6de17e0ea3a3b0
| Commit: | 09f1d6c | |
|---|---|---|
| Author: | Cheng Chang | |
| Committer: | Facebook GitHub Bot | |
add `xctrace record` command Summary: The Instruments CLI tool is deprecated in Xcode 12. Apple released the `xctrace` command instead. The `record` subcommand outputs a .trace file and `xctrace record` could replace the deprecated Instruments CLI. So in this diff, add the `xctrace record` command. The goal is to make `idb xctrace record` a remote version of the official `xctrace record` command. The options for `idb xctrace record` should be a superset of `xctrace record` so that users could simply append `idb` in front of `xctrace record <options>` and it would work properly. The hope is that `xctrace record` is more stable than the old Instruments CLI tool, so the "launch retry timeout" and the "launch error timeout" hacks in `idb instruments` are not implemented in `idb xctrace record`. I did see from local testing that xctrace got stuck when stopping recording so the "stop timeout" is reserved. We will test `idb xctrace record` in Mobile Lab and see how it works. ``` $ xcrun xctrace help usage: xctrace <command> [options] global options: -q, --quiet commands: record perform new recording using specified template import import file of a supported format into .trace file export export .trace file content to an external format list [devices|templates] list capabilities of the current running environment version print version of the tool further help: xctrace help <command> $ xcrun xctrace help record usage: xctrace record [<options>] [--attach | --all-processes | --launch -- command ] description: Perform a new recording on the specified device and target with the given template options: --output <path> Output .trace file to the given path --append-run Appends a new run to an existing trace file --template <path|name> Record using given trace template name or path --device <name|UDID> Record on device with the given name or UDID --time-limit <time[ms|s|m|h]> Limit recording time to the specified value --package <file> Load Instruments Package from given path for duration of the command --all-processes Record all processes --attach <pid|name> Attach and record process with the given name or pid --launch < -- command [arguments] Launch process with the given name or path --target-stdin <name> Redirect standard input of the launched process --target-stdout <name> Redirect standard output of the launched process --env <VAR=value> Set specified environment variable for the launched process notes: If an output path is not specified, a uniquely named file will be created in the current directory. If the output path is a directory, then a unique file is created in it. If the path contains the .trace extension, a file will be created at the specified path. If trace file already exists, then --append-run needs to be specified to add a run to it. In this case, specified template will be ignored and the one used to record original trace file will be used. If target device UDID or name is not specified — host device is used for the recording Specifying environment variables or stream redirection is only available when using launch option examples: xctrace record --template 'Time Profiler' --all-processes --time-limit 5s xctrace record --template 'Time Profiler' --all-processes --output 'recording.trace' xctrace record --all-processes --append-run --output 'existing.trace' xctrace record --template 'System Trace' --attach 4215 xctrace record --template 'Time Profiler' --device-name "Chad's iPhone" --attach 'Trailblazer' xctrace record --template 'Allocations' --env KEY=VALUE --launch -- MyApp.app xctrace record --template 'Time Profiler' --target-stdout - --launch -- /tmp/tool arg1 arg2 ``` Reviewed By: lawrencelomax Differential Revision: D26194417 fbshipit-source-id: 6ab5f27dd34f86a6b09410403e4cac280dfe8a6c
| Commit: | d4baf66 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | Facebook GitHub Bot | |
Add Locale Set/Get/List to Companion Summary: Adds the ability to set/get/list locale identifiers for an iOS Simulator. This means a number of new APIs. The methodology here is to use the defaults commands directly rather than using plists. This is vastly preferable as it doesn't require reading and writing of files. The listing is convenient as it means that it's possible to understand what is supported before sending a request. Reviewed By: c-ryan747 Differential Revision: D25974670 fbshipit-source-id: 7e9320f931237e90a1dcbe1ce155a9ea2573a127
| Commit: | 80e7a46 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | Facebook GitHub Bot | |
Add scaling to proto and configuration Summary: Adds a scale factor to the proto and configuration Reviewed By: ideahitme Differential Revision: D25923927 fbshipit-source-id: e66b18299bbb80221f61ead53bc78aa54ec6db0e
| Commit: | 59315ed | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | Facebook GitHub Bot | |
Add CompressionQuality to FBVideoStreamConfiguration Summary: Adds a compression quality value to the configuration. Also adds it to the idb grpc definition. Here the value is always defaulted to 0.2 if not provided. This is done because we can't guarantee that clients are sending this value yet. In time we will be able to remove the nullability in the constructor Reviewed By: ideahitme Differential Revision: D24724914 fbshipit-source-id: ec4aa892290f5f335cb247e6ae23af6ad0851592
| Commit: | 140cc6d | |
|---|---|---|
| Author: | Aleksandr Sasha Sergeev | |
| Committer: | Facebook GitHub Bot | |
Add idb "--wait-for-debugger" argument for `launch` command Summary: idb "--wait-for-debugger" argument for launch command suspends application right after the launch to facilitate attaching of a debugger (ex, lldb). Example, `idb --companion localhost:10882 launch -w com.facebook.Wilde` Reviewed By: lawrencelomax Differential Revision: D25669812 fbshipit-source-id: 8c57f5ecfa491b8c2d263cf7adb72d9af3e5af48
| Commit: | 463517b | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | Facebook GitHub Bot | |
Add File Container for Disk Images Summary: Exposes a new FileContainer for Disk Images. The semantics are as follows: - Listing will list all of the available disk images that should be mounted - If a disk is mounted it will be exposed as "Developer" - Listing "Developer" will expose the path of the mounted disk - rm on "Developer" will unmount the drive. - mv to "Developer" will mount the drive. Reviewed By: c-ryan747 Differential Revision: D24702412 fbshipit-source-id: d4788742713d5e377466e119148ee898c6b89065
| Commit: | 41536c3 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | Facebook GitHub Bot | |
Add Minicap for Devices Summary: Implementing the minicap protocol is very easy indeed https://github.com/openstf/minicap, it's essentially a stream of JPEGs with some header information sent out first. Based on this, this implementation becomes not so hard. We're just re-using the MJPEG approach, but with the additional headers Reviewed By: c-ryan747 Differential Revision: D24502720 fbshipit-source-id: 8701768457a2aaf41c34542108797f1145092b07
| Commit: | 595a5ae | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | Facebook GitHub Bot | |
Add MJPEG for Devices Summary: Implementing MJPEG is pretty easy since there is support for JPEGs in the encoder, and the wire format is just a stream of JPEGs itself. This is vastly more efficient when compared to using CoreImage with RGBA in-memory buffers. Here we get a JPEG back in the buffer itself, so which results in using substantially less memory overall. To do this we just need to configure the video output correctly and then enumerate the block buffer that we get from it. Reviewed By: c-ryan747 Differential Revision: D24475330 fbshipit-source-id: 65aebe8fc73d096e94a2bd0637e0e92552be3f05
| Commit: | b8e105f | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | Facebook GitHub Bot | |
Optionally avoid fetching process state Summary: This is useful if you only care about whether is installed rather than installed and running. For devices this can be quicker since there's no dev image mounting. We need to have the default case in the proto mean "please fetch" as this is the default for older clients that aren't yet providing this information. Reviewed By: c-ryan747 Differential Revision: D24358710 fbshipit-source-id: 9b7498b9264ea7f1d1a030b7e5c5ecdef2e657c5
| Commit: | 9cd0148 | |
|---|---|---|
| Author: | Jakub Grzmiel | |
| Committer: | Facebook GitHub Bot | |
Revert D24078439: Remove client side sending of bundle_id Differential Revision: D24078439 (https://github.com/facebook/idb/commit/3cb4a89e8f66ce37db03ff188dec3caa42101b70) Original commit changeset: c480222df39a fbshipit-source-id: 927a711425d5813dff857f1136f77f4ebd00734a
| Commit: | 42deaf2 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | Facebook GitHub Bot | |
Add Icon Container, MDM Profiles & Wallpaper to idb grpc interface Summary: Now that we have 3 new file containers defined, this just hooks them up over GRPC. Reviewed By: c-ryan747 Differential Revision: D24014003 fbshipit-source-id: a54de4c026ac7cf91b34bf35a3b286ec1ca07fc9
| Commit: | 3cb4a89 | |
|---|---|---|
| Author: | Lawrence Lomax | |
| Committer: | Facebook GitHub Bot | |
Remove client side sending of bundle_id Summary: This is now no longer present in the companion handling, so let's remove it from the proto Reviewed By: c-ryan747 Differential Revision: D24078439 fbshipit-source-id: c480222df39a7232b2793862ac6b59bd9b6ee0bc
| Commit: | 9e4a8b6 | |
|---|---|---|
| Author: | Dmytro Kasianchuk | |
| Committer: | Facebook GitHub Bot | |
ls supports multiple files on the backend Summary: `ls` now support listing of multiple files at the same time, bringing it inline with the other commands and `ls` more generally. In this case we have to preserve compatibility with older clients sending a single path and populate this data. The data is populated for both, so newer clients can do the multi-listing Reviewed By: c-ryan747 Differential Revision: D24078335 fbshipit-source-id: 2d378eb063c9b8ace7002099105eca3a5d89b0fd