원클릭으로
ios-device-interaction
Verify iOS app behavior on device or simulator via screenshots, UI hierarchy, and touch interactions.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Verify iOS app behavior on device or simulator via screenshots, UI hierarchy, and touch interactions.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
Use when writing, editing, or reviewing Swift code in any Swift project: apps, frameworks, packages, extensions, or CLIs. Enforces pragmatic modern Swift conventions: structured concurrency, InfomaniakConcurrency, InfomaniakDI, actors, Sendable, typed errors, Swift Testing, clear boundaries, and testable design. Trigger keywords: Swift, async/await, actor, Sendable, InfomaniakConcurrency, InfomaniakDI, Swift Testing, XCTest, Package.swift, xcodebuild.
Infomaniak house conventions for modular SwiftUI apps built with Tuist (multi-module App/Core/CoreUI/Features/Resources architecture, DI via InfomaniakDI, Realm via Transactionable, InfomaniakCoreUI paddings, view declaration order, view naming conventions, sheet/modal presentation patterns, Swift 6 concurrency). Use when creating, structuring, scaffolding or reviewing SwiftUI/Tuist code in Infomaniak iOS repos (authenticator, SwissTransfer, kMail…).
Infomaniak house conventions for UIKit iOS apps built with Tuist (flat App/Core/Resources target layout, UI organized by domain under UI/Controller & UI/View, MVVM view models with Combine, AppRouter coordinator, DI via InfomaniakDI/CoreTargetAssembly, Realm via Transactionable + schema migrations, UIConstants paddings). Use when creating, structuring, scaffolding or reviewing UIKit/Tuist code in Infomaniak iOS repos (kDrive…).
SOC 직업 분류 기준
| name | ios-device-interaction |
| description | Verify iOS app behavior on device or simulator via screenshots, UI hierarchy, and touch interactions. |
TRIGGER when: user asks to verify/test/check if the app works on device, after implementing a UI-affecting feature that needs device verification, user says "does it work", "test this", "check on device", user reports UI doesn't work as expected, need to debug touch/interaction issues. DO NOT TRIGGER when: user asks about unit tests only, build-only requests without device testing, code review without device testing, simulator configuration questions, changes that don't affect UI (e.g. comments, refactors, non-UI logic).
This is a SUBAGENT skill. Invoke it via the Agent tool when device verification is needed.
Agent tool:
- subagent_type: "general-purpose"
- description: "Verify login feature works"
- prompt: "Using the device-interaction skill, verify that the login feature works correctly on session <device-interaction-session>. Launch the app, capture screenshot and UI hierarchy, check that the login button is visible and tappable, and report if the implementation is working correctly."
After implementing a UI-affecting feature, invoke this skill to verify the implementation works on a device.
DeviceInteractionStartSession (do this early, runs in the background)
→ DeviceInteractionInstallAndRun (after each code change; includes building)
→ DeviceEventSynthesize (interact + observe, repeatable)
→ DeviceInteractionEndSession (when done — keeping sessions open is resource-heavy)
When opening a new device interaction session, pass a device identifier to select a device, or omit it to use the current destination. Pass any non-matching value to get a list of available targets.
commandLineArguments — arguments passed to the app at launch. Use $(inherited) as a token to preserve the scheme's existing arguments (e.g. ["$(inherited)", "--reset-state"] to add an extra argument at the end).environmentVariables — key/value pairs set in the app's environment at launch. Use "$(inherited)" as a key to preserve the scheme's existing environment variables (e.g. {"$(inherited)": "", "DEBUG_MODE": "1"}).Omit both parameters to leave the scheme's arguments and environment unchanged.
Prefer these parameters over editing the scheme directly. They are applied only for that one run and have no lasting effect on the user's configuration.
ALWAYS report UI issues that might be caused by code: overlapping or unreadable text, unexpectedly cropped image/text, wrong colors etc.
This tool allows performing an interaction and observing the state of a device.
The hierarchy files include calculated center positions for each element:
UIView {{100, 200}, {50, 30}}, center: {125.0, 215.0}
UIButton "Login" {{110, 205}, {30, 20}}, center: {125.0, 215.0}
{100, 200} - origin position{50, 30} - width and heightcenter: {125.0, 215.0} - calculated center point (best for tapping)Always prefer the center coordinates for touch events.
The interactionCommand parameter accepts a command syntax:
| Command | Description |
|---|---|
t <x> <y> [duration] | Tap at coordinates with optional hold duration |
d <x> <y> | Double tap |
t <x1> <y1> f <x2> <y2> [duration] | Swipe from (x1,y1) to (x2,y2) |
b h/p/u/d [duration] | Hardware button: h=Home, p=Power, u=VolUp, d=VolDown |
sender keyboard kbd <text> | Type text; must be the last command in the chain — all content after kbd is taken verbatim (multiple spaces preserved). For special characters use \u{XXXX} Unicode escapes: \u{000A} (return/newline), \u{0009} (tab) |
w duration | Wait for a duration without any work |
orientation faceDown/faceUp/landscapeLeft/landscapeRight/portrait/portraitUpsideDown | Set device orientation |
Examples:
"t 100 200" - Tap at (100, 200)"d 200 300" - Double tap at (200, 300)"t 200 600 f 200 200 0.3" - Swipe up (scroll to the content below)"t 200 200 f 200 600 0.3" - Swipe down (scroll to the content above)"b h" - Press home button"b h b h" - Press home button twice to go to the app switcher"b h w 0 b h" - Wake and unlock a device (non-passcode devices only)"sender keyboard kbd hello world" - Type text with spaces"sender keyboard kbd hello world" - Type text preserving multiple spaces"sender keyboard kbd submit\u{000A}" - Type text then press Return/submit"w 0.3" - Wait for 0.3s"orientation landscapeLeft" - Rotate device to landscapeBefore any interaction, always capture and read the hierarchy (and screenshot). After any interaction, capture again and verify the result. For complex components (like toggles or switches), look at nested elements (like Switch or Slider) — nearby elements might correspond to the actual control. When done, report findings to the main agent.
When verifying, distinguish between these categories:
print statements in the relevant code may help diagnose the issue.