Skip to content

Abstract devicectl lifecycle/transport seam so iOS 15+ physical devices work without CoreDevice #1361

Description

@devin-ai-integration

Problem

#1355 showed an iPhone 8 Plus (iOS 16.7.16) that is visible to xcdevice/xctrace but absent from devicectl/CoreDevice. #1360 fixed discovery parsing, but opening a session still fails because the physical-device lifecycle and artifact paths are hard-coded to devicectl.

We need an abstraction seam around devicectl so that devices running iOS 15+ (which still receive security patches) can be used even when Apple’s CoreDevice stack does not enumerate them.

Affected paths (all currently devicectl-only)

  • src/daemon/device-ready.ts — readiness checks (devicectl device info)
  • src/platforms/apple/core/devicectl.ts — app inventory (device info apps) and process lookup (device info processes)
  • src/platforms/apple/core/app-launch.ts and app-install.ts — app install/launch lifecycle
  • src/platforms/apple/core/runner/runner-transport.ts — transport address lookup
  • src/platforms/apple/core/screenshot.ts — screenshots and file copy

Possible fallback(s)

  • xcodebuild build-for-testing / test-without-building with the agent-device XCTest runner already reaches AGENT_DEVICE_RUNNER_LISTENER_READY on these devices.
  • MobileDevice/libimobiledevice-style commands (ideviceinfo, ideviceinstaller, idevicedebug, ifuse/screenshot) are another proven fallback.
  • The seam should select the backend based on capability detection, not just iOS version, so newer CoreDevice-visible devices keep using the existing fast path.

Acceptance criteria

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions