feat(apple): admit two-finger gestures on physical iOS devices

CA
2h ago
+109-90

Summary

Allow pinch, rotate, transform and two-finger pan on physical iOS/iPadOS through the Apple runner. WebDriver iOS remains unsupported. Updates admission, tests, help and documentation: 16 files. Refs #582.

Validation

Retested unmodified e8445822fe66329619e26e3b9ff44b6ad0682548 on 2026-10-19: clean checkout, freshly rebuilt CLI, isolated daemon/session, no axis patch. Device: physical iPhone 12 (iPhone13,2), iOS 27.0.1 (24A446), Xcode 26.6 (17F113), wired CoreDevice; fiddl’s Loose strings open.

From that checkout, with $UDID selecting the test phone:

ad() { node bin/agent-device.mjs "$@" --platform ios --udid "$UDID" --session pr3838 --state-dir /private/tmp/ad-reverify-3838-state --json; }
ad gesture pinch 2.0 195 420
ad gesture rotate 30 195 420
ad gesture pan 195 420 60 0 500 --pointer-count 2
ad gesture transform 195 420 20 0 1.2 15 500

All four exited 0, returned success: true, pointerCount: 2, and runner gesture start/end timestamps. Responses, respectively:

  • Pinched to scale 2
  • Rotated gesture 30 degrees
  • Panned (195, 420) by (60, 0)
  • Requested transform gesture by (20, 0), scale 1.2, rotate 15 degrees

Previously recorded before, 507ef237, same pinch: UNSUPPORTED_OPERATION: gesture pinch is not supported on physical iOS devices.

pnpm check:affected --run --head 4ca831f3: passed, Node 22.20, exactCommit=true; GitHub-only/manual lanes skipped. Node 24 symlink-test failures also reproduce on base. The device runs above are at e8445822; 4ca831f3 only changes a refusal message and its test.

This replaces the earlier patched-tree evidence. It proves device dispatch/completion, not independent per-finger app telemetry. No iPad or gesture-lab run. Private XCTest API and default vertical finger geometry remain.