Community코딩 & 개발github.com

iOS E2E

iOS 시뮬레이터에서 앱을 빌드, 실행하고, 격리된 Gateway와 페어링하여 UI를 구동하고, 스크린샷, 로그, 크래시를 수집하며, 집중 테스트 및 종단 간 검증을 수행합니다.

iOS E2E란 무엇인가요?

이 스킬은 iOS 시뮬레이터에서 모바일 앱의 종단 간(E2E) 테스트를 자동화합니다. `mobilebuildmcp` CLI를 사용하여 앱을 빌드하고, 시뮬레이터에 설치 및 실행하며, UI 요소의 스냅샷을 캡처하고, 탭, 텍스트 입력, 길게 누르기, 스와이프 등의 동작을 수행할 수 있습니다. 또한 시뮬레이터 로그와 크래시 보고서를 수집하고, 특정 테스트 스위트를 실행하며, 격리된 로컬 Gateway와 페어링하여 실제 네트워크 환경과 분리된 상태에서 변경 사항을 검증할 수 있습니다. 이 스킬은 Claude Code, Cursor, Codex와 같은 AI 에이전트가 개발자 대신 반복적인 E2E 테스트 작업을 수행하도록 설계되었으며, `pnpm` 스크립트와 `xcrun simctl` 명령어를 활용합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/clawdbot/clawdbot/tree/main/.agents/skills/ios-e2e

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

iOS E2E은(는) 무엇을 하나요?

체크아웃 루트에서 작업합니다. 로컬 .mobilebuildmcp/config.yaml(설정)에 프로젝트, 스킴 및 DerivedData가 제공되므로 mobilebuildmcp 명령어에 프로젝트 플래그가 필요하지 않습니다.

두 개의 값이 반복 사용됩니다:

  • $sim: 시뮬레이터 UDID (pnpm ios:sim:pair가 출력합니다). 모든 mobilebuildmcp 호출에 --simulator-id "$sim"을 전달하세요; 이 값이 없으면 구성 기본값이 iPhone 17이라는 시뮬레이터를 대상으로 합니다.
  • $bundle: 번들 ID로, 서명 팀에 따라 달라집니다. 빌드에서 읽어옵니다: bundle=$(/usr/libexec/PlistBuddy -c 'Print :CFBundleIdentifier' apps/ios/build/DerivedData/Build/Products/Debug-iphonesimulator/OpenClaw.app/Info.plist).

빌드 및 실행

  1. 빌드: mobilebuildmcp simulator build. apps/ios/project.yml을 편집한 후 먼저 pnpm ios:gen을 실행하세요.

  2. simctl로 설치 및 실행합니다. 이 명령어는 실행 인수를 받습니다 (pnpm ios:run은 인수를 받지 않음):

    xcrun simctl install "$sim" apps/ios/build/DerivedData/Build/Products/Debug-iphonesimulator/OpenClaw.app
    xcrun simctl launch --terminate-running-process "$sim" "$bundle" --openclaw-reset-onboarding
    

    mobilebuildmcp simulator build-and-run 및 launch-app은 종료되지 않는 로그 캡처를 연결합니다.

  3. 디버그 실행 인수 확인: grep -rhoE '"--openclaw-[a-z-]+"' apps/ios/Sources | sort -u. --openclaw-screenshot-mode와 --openclaw-*-fixture 플래그를 함께 사용하면 Gateway 없이 픽스처 화면을 표시합니다; -AppleLanguages "(de)" -AppleLocale de_DE는 다른 언어로 실행합니다. 디버그 URL 스킴은 openclaw-debug://입니다.

UI 구동

  1. mobilebuildmcp ui-automation snapshot-ui --style minimal은 탭 가능한 대상을 ref|action|role|label|value|id 형식으로 나열합니다. 컨트롤이 아닌 텍스트(채팅 버블, 행 제목)는 --output json을 사용할 때만 표시됩니다.
  2. ref에 대해 tap, type-text, long-press(--duration은 밀리초), swipe 또는 gesture로 동작을 수행합니다. wait-for-ui로 대기합니다: 요소의 경우 --predicate exists --label '…' --role button, 텍스트의 경우 --predicate textContains --text '…'. 여러 요소와 일치하는 대기 선택자는 실패합니다; --role 또는 --identifier를 추가하세요. --timeout-ms를 30000 미만으로 유지하세요: 데몬은 30초 후에 모든 요청을 DAEMON_TRANSPORT_FAILED로 종료합니다; 더 오래 대기하려면 반복하세요.
  3. ref는 하나의 스냅샷에 속합니다; 화면이 변경될 때마다 새 스냅샷을 찍으세요.
  4. 화면 보기: mobilebuildmcp simulator screenshot, 그런 다음 출력된 JPEG를 읽으세요.

주의사항:

  • 온보딩 및 시트는 그 뒤에 있는 화면도 함께 나열합니다; 레이블이나 id로 일치시키고 마지막 일치 항목을 선택하세요.
  • iPhone에서 사이드바가 콘텐츠를 덮습니다: 행 앞에 RootTabs.Sidebar.Show를 탭하세요.
  • xcrun simctl openurl은 호출당 시스템 "OpenClaw에서 열기?" 알림을 큐에 넣습니다; 각 알림에 대해 Open 또는 Cancel을 탭하세요.
  • 앱 프로세스 외부의 시스템 UI(사진 선택기, 공유 시트)는 스냅샷에서 누락됩니다. MobileBuildMCP에 번들된 AXe 바이너리로 좌표를 사용하여 탭하세요: "$(brew --prefix mobilebuildmcp)/libexec/bundled/axe" tap -x <x> -y <y> --udid "$sim". 좌표는 포인트입니다: 스크린샷 픽셀 × 화면 너비(포인트) ÷ 스크린샷 너비.

로그 및 크래시

먼저 동작을 수행한 다음, 제한된 시간 창을 읽으세요:

xcrun simctl spawn "$sim" log show --last 2m --style compact --predicate 'subsystem BEGINSWITH "ai.openclaw"'

크래시는 ~/Library/Logs/DiagnosticReports/OpenClaw-*.ips에 저장됩니다; triggered 스레드의 첫 번째 OpenClaw 프레임이 원인을 식별합니다. 앱 환경설정 및 데이터베이스는 앱 컨테이너에 있습니다 (xcrun simctl get_app_container "$sim" "$bundle" data); simctl spawn … defaults read로는 볼 수 없습니다. LLDB 및 xctrace: DEBUG.md.

테스트

  1. 수정된 스위트 실행: pnpm ios:test <Suite> (선택자 및 IOS_SIM: apps/ios/README.md).
  2. 기준(base)에서 회귀 테스트가 실패함을 증명: 변경 사항을 커밋하고, 변경된 소스 파일의 기준 버전을 체크아웃 (git checkout <base> -- <paths>), 스위트 실행, 그런 다음 git checkout HEAD -- <paths>.

완료 조건: 수정된 스위트가 통과하고, 각 새로운 회귀 테스트가 기준에서 실패합니다.

변경 사항 종단 간 증명

  1. 격리된 Gateway 시작 (일회성 프로필, 설정 참조)을 장기 실행 서비스로: node scripts/run-node.mjs --profile ios-sim gateway --bind loopback. 운영자의 Gateway나 ~/.openclaw에 영향을 주지 않습니다. 실행 중인 동안 CLI를 node openclaw.mjs --profile ios-sim …으로 호출하세요; run-node는 실행 중인 Gateway 아래에서 재빌드하지 않습니다.
  2. 실제 온보딩 UI를 통해 새 시뮬레이터 페어링: sim=$(pnpm --silent ios:sim:pair | tail -1) (--app로 다른 빌드, --profile로 다른 프로필 지정).
  3. 보이는 컨트롤을 통해 변경 사항을 실행합니다. 채팅 왕복: chat-message-input에 입력, chat-send-message 탭, 그런 다음 응답에만 포함된 단어를 기다립니다.
  4. 빌드 비교: main 브랜치와 변경 사항에서 각각 새 시뮬레이터에서 동일한 단계를 수행하고, 일치하는 스크린샷을 찍습니다.
  5. Gateway 중지 및 시뮬레이터 삭제.

노드 명령어, 권한, 인증 실패, 중단, 전송 거부, 업그레이드 및 iPad 레이아웃: PROOF.md. 여기에는 실제 기기에서만 증명할 수 있는 항목도 나열되어 있습니다.

완료 조건: 스크린샷 또는 기록된 출력이 변경 사항에서의 동작과 main에서의 부재를 보여주며, Gateway 포트가 닫혀 있고 openclaw-pair-* 시뮬레이터가 남아 있지 않습니다.

설정

기기당 한 번만 수행; 각 단계는 확인으로 끝납니다.

  1. Xcode, 시뮬레이터 런타임, xcodegen 및 Watch Rust 툴체인: apps/ios/README.md 필수 조건. 확인: xcrun simctl list devices available에 iPhone 17이 표시됩니다.

  2. SwiftFormat 및 SwiftLint를 저장소 핀 버전으로: scripts/install-swift-tools.sh <PATH의 디렉토리>. 확인: scripts/check-swift-tools.sh가 0으로 종료됩니다.

  3. MobileBuildMCP, Sentry의 XcodeBuildMCP CLI: brew tap getsentry/xcodebuildmcp && brew install getsentry/xcodebuildmcp/mobilebuildmcp. 이 단계는 2.7.1 버전 기준으로 작성되었습니다. 확인: mobilebuildmcp --version.

  4. 체크아웃: pnpm install --frozen-lockfile, 그런 다음 pnpm ios:gen (Xcode 프로젝트는 생성되며 커밋되지 않음). 그런 다음 .mobilebuildmcp/config.yaml을 생성하고 /.mobilebuildmcp/를 .git/info/exclude에 추가하세요:

    schemaVersion: 1
    enabledWorkflows: [simulator, simulator-management, ui-automation, debugging]
    sentryDisabled: true
    sessionDefaults:
      projectPath: ./apps/ios/OpenClaw.xcodeproj
      scheme: OpenClaw
      configuration: Debug
      platform: iOS
      simulatorName: iPhone 17
      derivedDataPath: ./apps/ios/build/DerivedData # pnpm ios:run과 공유
    

    확인: mobilebuildmcp simulator list-schemes에 OpenClaw가 나열되고, mobilebuildmcp simulator build가 성공합니다.

  5. ios-sim Gateway 프로필, Gateway는 중지된 상태 (oc = node openclaw.mjs --profile ios-sim): oc config set gateway.mode local, oc config set gateway.port 19031, oc config set gateway.auth.mode token, oc config set gateway.auth.token "$(openssl rand -hex 24)". 채팅 응답에는 main 에이전트용 모델이 필요합니다: oc models auth login 또는 테스트 자격 증명으로 add. 확인: Gateway가 시작되고, pnpm ios:sim:pair가 채팅 화면에서 끝납니다.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

1password

Set up and use 1Password CLI for sign-in, desktop integration, and reading or injecting secrets.

acp-router

Route plain-language requests for Claude Code, Cursor, Copilot, OpenClaw ACP, OpenCode, Gemini CLI, Grok Build, Qwen, Kiro, Kimi, iFlow, Factory Droid, Kilocode, or explicit ACP harness work into either OpenClaw ACP runtime sessions or direct acpx-driven sessions ("telephone game" flow). For coding-agent thread requests, read this skill first, then use only `sessions_spawn` for thread creation. Codex chat binding defaults to the native Codex app-server plugin unless ACP is explicit or background spawn needs ACP.

add-model-provider

Add and live-prove a model provider with non-interactive config one-liners, without exposing credentials.

agent-transcript

Requested GitHub PR/issue agent transcripts: redact, trim, preview, and insert safely.

apple-notes

Create, view, edit, delete, search, move, or export Apple Notes via the memo CLI on macOS.

apple-reminders

List, add, edit, complete, or delete Apple Reminders and reminder lists via remindctl.

auto-qa

Run OpenClaw-wide autonomous QA and live/stress campaigns across independent subsystem lanes, with verified fixes and a resumable evidence report.

autoreview

Structured code review through the shared OpenClaw agent-skills installation.

bear-notes

Create, search, and manage Bear notes via grizzly CLI.

blacksmith-testbox

Run Blacksmith Testbox for CI-parity checks, secrets, hosted services, migrations, or builds local cannot reproduce.

block-kit

Use proactively for structured or interactive Slack replies, and when asked to author or validate native Slack Block Kit JSON.

blogwatcher

Monitor blogs and RSS/Atom feeds for updates using the blogwatcher CLI.

blucli

BluOS CLI (blu) for discovery, playback, grouping, and volume.

bluebubbles

Send and manage iMessages via BlueBubbles, including attachments, tapbacks, edits, replies, and groups.

browser-automation

Use when controlling web pages with the OpenClaw browser tool, especially multi-step flows, login checks, tab management, or recovery from stale refs/timeouts.

camsnap

Capture frames or clips from RTSP/ONVIF cameras and local webcams, including USB pan/tilt/zoom control.

canvas

Present HTML on connected OpenClaw node canvases, navigate/eval/snapshot, and debug canvas host URLs.

channel-message-flows

Use when running QA Lab channel message flow evidence.

clawdtributor

Clawtributor PRs here, last week or another window: discover conversation refs, recheck GitHub, rank by impact.

clawhub

Search ClawHub for plugins by default, or skills and agent Templates when requested; add Templates; install, verify, update, uninstall, publish, or sync skills.

관련 스킬