Problem
Direct iOS providers such as Limrun currently need a provider-specific interactor because the Apple interactor is coupled to local XCTest runner and simctl execution. Android already has the desired shape: providers supply an AndroidAdbProvider transport and reuse the shared Android interactor.
Scope
Introduce a provider-neutral Apple runner/interaction transport seam that lets a remote provider supply the primitives needed by the shared Apple interaction stack. Keep local XCTest and simctl behavior unchanged behind the default implementation.
Do not move Limrun-specific SDK calls, asset handling, or session lifecycle into core. The target is reusable interaction composition for future providers such as Revyl.
Acceptance criteria
- Provider-owned iOS sessions can reuse the shared selector, tap, fill, scroll, snapshot, and response-guarantee paths where the provider exposes equivalent primitives.
- Local iOS/macOS behavior and runner ownership remain unchanged.
- The seam remains provider-neutral and does not import Limrun SDK code into Apple core.
- Contract and provider-integration tests cover the provider-backed path.
Problem
Direct iOS providers such as Limrun currently need a provider-specific interactor because the Apple interactor is coupled to local XCTest runner and simctl execution. Android already has the desired shape: providers supply an AndroidAdbProvider transport and reuse the shared Android interactor.
Scope
Introduce a provider-neutral Apple runner/interaction transport seam that lets a remote provider supply the primitives needed by the shared Apple interaction stack. Keep local XCTest and simctl behavior unchanged behind the default implementation.
Do not move Limrun-specific SDK calls, asset handling, or session lifecycle into core. The target is reusable interaction composition for future providers such as Revyl.
Acceptance criteria