feat: drive development-signed apps on physical iOS devices - #99
Open
onevcat wants to merge 3 commits into
Open
Conversation
Adds `sim-use ios-device` (devices / ui / tap), a third backend alongside the simulator and Android ones. A connected iPhone or iPad is reached through `com.apple.accessibility.axAuditDaemon.remoteserver` over usbmux lockdown, so no XCUITest runner is installed, nothing is code signed and no Developer Disk Image is mounted — the device only has to be unlocked. The channel exposes no element geometry, so this surface deliberately omits coordinate taps, swipes and gestures and interacts through accessibility actions instead; the outline is ordered by the accessibility reading order rather than by screen position. Notable details, all measured against iOS 27: - The daemon wants the DTX stream in plaintext once lockdown has started the service. `FBAMDServiceConnection` send/receive push bytes through the connection's SSL context, so the transport talks to the raw socket instead; encrypted frames make the device hang up on the first message. - `FBDeviceSet` receives AMDevice attachment through CFRunLoop sources on the main queue, so discovery pumps the main run loop. Without that a CLI only ever sees the restorable half of the device. - AMDevice does not publish the lockdown UDID before a session, so a device is addressable by ECID as well. - Sessions must release the daemon's inspector state on the way out. Skipping it leaves the device answering every element query with nothing, which is easy to misread as a locked screen. Requests are pipelined over one connection, which is worth about 1.4x; past that the daemon serialises, so `--fast` trades roughly a quarter of the elements for 40% off the wall clock. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: yuta.ooka <yuta.ooka@lycorp.co.jp>
PR #93 widens the SKILL.md description to cover physical iPhone/iPad driving, so the substring the init test pins no longer matches. Claude-Session: https://claude.ai/code/session_01Tfc7gDbW9yPgmGW9g3QZb4 Signed-off-by: onevcat <onevcat@gmail.com>
Scope the accessibility-audit backend to development-signed target apps and fail clearly when the device exposes no usable hierarchy. Align tap selectors with the regular label vocabulary and reject missing or ambiguous targets without usage-error noise. Wait for multi-device discovery to quiesce, route DTX replies by conversation index as well as identifier, preserve operation errors across session cleanup, and cover the behavior with focused tests and updated documentation. Signed-off-by: onevcat <onevcat@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Follow-up replacement for #93 that preserves the original feature commit (
92801fd) and @subdiox's authorship.sim-use ios-device devices/ui/tapsurface over the accessibility audit daemon.get-task-allow=true; Release-configuration builds remain supported when installed with a Development profile.tap --textwith the existing--label,--label-contains, and--element-typevocabulary.0 elements, choosing the first match, or showing usage for a runtime miss.conversationIndex, preventing unsolicited events from satisfying unrelated pending requests.Supported scope
get-task-allow=trueentitlement.Verification
make build— passed with 0 warnings.make test— 1311 tests passed with 0 warnings.ui --fast: passed.ui --connections 2: passed.get-task-allow=false) failed on both OS versions with exit 1 and the entitlement diagnostic; neither path printed0 elementsor action success.