[BUG] Claude can no longer control MacOS Simulator after 27 update

Status Open
Maintainer reply None cached
Activity 0 comments · opened Sep 17, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

Summary

iOS Simulator control in Claude Code (desktop app) receives no synthetic input (tap/swipe) after upgrading to macOS 27.0 / Xcode 27.0. Screenshot capture, hardware button presses, and launch all work correctly — only touch/gesture injection into the simulator is affected.

Environment

  • macOS 27.0 (build 26A428)
  • Xcode 27.0 (build 27A266a)
  • Device tested: iPhone 17 Pro simulator (iOS 26.5 runtime)
  • Also reproduces on iPhone 17 Pro Max / other iOS 26.5-paired devices in the same runtime

Symptom

  • screenshot succeeds reliably and reflects real, current simulator state (clock ticks forward, app content is correct).
  • button (hardware HOME) works — backgrounds the app as expected.
  • launch (both via the tool and via xcrun simctl launch) succeeds and the app UI renders correctly.
  • tap and swipe calls return success (no error from the tool) but produce no effect whatsoever in the simulator — no visual change, no state change, confirmed via before/after screenshot diffing across dozens of attempts.
  • Fails on the very first interaction of a completely fresh app/simulator state, not just after prolonged use.

What's been ruled out

  1. Stale simulator/app state — reproduces identically on a freshly booted simulator with the app freshly installed (not just relaunched).
  2. Multiple competing booted simulators — reproduces with only one simulator booted at a time.
  3. App-level session/cache state — reproduces on a completely fresh install with no prior data.
  4. Claude app process state — reproduces after quitting and relaunching the Claude desktop app.
  5. Simulator daemon state — reproduces after a full simctl shutdown + simctl boot cycle.
  6. Full machine restart — reproduces identically immediately after a full macOS restart.
  7. macOS Privacy & Security permission — Device Control and Data Access (the renamed successor to the old Accessibility permission in macOS 27) already had Claude granted; toggled off and back on, restarted Claude, reproduces identically.
  8. Coordinate/calibration error — tried many different coordinates across the full screen (not just one region), including known-good reference points (e.g., search bar tap that worked in a prior session before this issue began); all fail identically post-upgrade.

Working theory

This began immediately after updating macOS and Xcode to the versions above (same session, prior interactions with the identical simulator/tool worked normally before the update). Given screenshot capture and hardware-button injection still work but touch/gesture injection does not, this looks like a compatibility break between the Claude app's touch-injection mechanism (likely CGEvent-based or a CoreSimulator IO framework call) and something that changed in macOS 27 / Xcode 27 — a private API signature change, a new entitlement requirement, or a CoreSimulator protocol version bump — rather than a permissions or environment-state issue.

Impact

Blocks all live UI testing/interaction with iOS apps in the Simulator via Claude Code. Screenshot-only verification and code review remain possible but cannot substitute for interactive testing (tapping buttons, filling forms, confirming dialogs, etc.).

What Should Happen?

What should happen

tap/swipe calls to the iOS Simulator should register real touch events in the simulator, the same as they did before the macOS 27 / Xcode 27 update — e.g., tapping "Accept" on a Terms-of-Service screen should dismiss it and reveal the next screen, and tapping a tab-bar item should switch tabs. Screenshot output should reflect that state change on the next call.

Concretely: tapping the "Accept" button at its correct on-screen coordinates (verified via screenshot) should complete the terms-acceptance flow and give visible feedback in the following screenshot, either terms accepted and the underlying app usable, or a new UI. Instead the screen is bit-for-bit identical after the tap.

Error Messages/Logs

Steps to Reproduce

Steps to reproduce

  1. Update macOS and Xcode to the versions in the Environment section above (macOS 27.0 build 26A428, Xcode 27.0 build 27A266a).
  2. In Claude Code, boot an iOS Simulator device (e.g. xcrun simctl boot <iPhone 17 Pro UDID>, or let the tool boot it).
  3. Attach to it via the iOS Simulator tool's attach action.
  4. Call screenshot — confirm it returns a correct, current image of the simulator (e.g. the Home Screen or whatever app is in front).
  5. Note the on-screen coordinates (in device points) of any visible, tappable control — for example, an app icon on the Home Screen, or a button inside an app.
  6. Call tap with those exact coordinates.
  7. Call screenshot again.

Actual result

The second screenshot (step 7) is identical to the first (step 4) — the tapped control shows no effect: no app launched, no button state change, no navigation. This holds regardless of which control is tapped, which app is in front, or whether the simulator/app was freshly booted/installed moments before.

Other input types remain unaffected for comparison:

  • button with name: HOME correctly backgrounds the front app (visible in the next screenshot).
  • launch correctly installs/launches an app (visible in the next screenshot).
  • swipe shows the same failure as tap — no scroll, no gesture effect.

Minimal isolation already performed

Repeating steps 2–7 after each of the following still reproduces the identical failure:

  • A freshly booted simulator (simctl shutdown + simctl boot) with no other simulator concurrently booted.
  • A freshly installed app with no prior data/session state.
  • Restarting the Claude desktop app.
  • A full macOS restart.
  • Toggling Device Control and Data Access off and back on in System Settings → Privacy & Security (was already granted to Claude beforehand).

None of the above changes the outcome — steps 4–7 fail identically every time.

Claude Model

None

Is this a regression?

Yes, this worked in a previous version

Last Working Version

_No response_

Claude Code Version

Claude 2.110.1 (ae8d2a) 2026-09-17T03:04:01.000Z

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Terminal.app (macOS)

Additional Information

_No response_

View original on GitHub ↗