fix(limrun): opt into XCTest snapshots for native iOS testIDs

Draft
EN
2d ago
+187-17

Summary

Add an opt-in Limrun iOS XCTest snapshot for React Native views whose testID is missing from the accessibility tree. Preserve the existing default, including separate-process web content.

CLI: set LIMRUN_IOS_ELEMENT_TREE_SOURCE=xcuitest before starting the daemon. Node: new LimrunRuntime({ apiKey, iosElementTreeSource: 'xcuitest' }). The option reaches both created and attached instances.

14 files; scope includes runtime configuration, CLI help/docs, regression tests, and the bundled SDK dependency. Prerequisites: https://github.com/limrun-inc/typescript-sdk/pull/572 and https://github.com/limrun-inc/limrun/pull/1692.

Draft until the SDK release: the dependency is pinned to reviewed SDK commit 83370dfd for validation. Replace that Git pin and its prepare permission with the released npm version before merging.

Validation

Head: 341ba4e62f6223b22644bd339ed92c73b5c4a6bf.

  • pnpm check:affected --run --head HEAD: passed, exactCommit: true; receipt run-uDul8P. All runnable checks pass; 17,266 related tests pass, one existing skip. GitHub-owned coverage/device/provider lanes remain CI obligations.
  • Same command, pnpm exec vitest run --project unit-core packages/provider-limrun/src/ios-interactor-snapshot.test.ts -t 'XCTest snapshot retains': base 45125d7 fails (testID absent); head passes.
  • Independent review: no remaining findings.
  • Server/SDK/CLI iOS 27 staging proof passes. Live consumer validation passes on iOS 27.0: this exact head finds the non-accessible React Native view by testID, clicks id="xcuitest-only-view", observes Touches: 1, and cleans up its session and daemon.