Platforms overview
iOS 앱
배포 가능 여부: iPhone 앱 빌드는 릴리스에서 활성화된 경우 Apple 채널을 통해 배포됩니다. 로컬 개발 빌드는 소스에서 실행할 수도 있습니다.
기능
- WebSocket을 통해 Gateway(LAN 또는 tailnet)에 연결합니다.
- 노드 기능을 제공합니다: Canvas, 화면 스냅샷, 카메라 캡처, 위치, 대화 모드, 음성 호출 및 선택적으로 활성화하는 건강 요약.
node.invoke명령을 수신하고 노드 상태 이벤트를 보고합니다.- 에이전트 화면(Files)에서 선택한 에이전트의 워크스페이스를 읽기 전용으로 탐색합니다. 디렉터리 드릴다운, 구문 강조 텍스트 미리보기, 이미지 미리보기 및 공유 시트를 통한 내보내기를 지원합니다. 쓰기 작업은 지원하지 않으며, 미리보기 크기는 Gateway에서 제한됩니다.
- 페어링된 Gateway별로 최근 채팅 세션과 대화 기록의 소규모 읽기 전용 오프라인 캐시를 유지합니다. 콜드 오픈 시 마지막으로 알려진 대화 기록을 즉시 표시하고 Gateway가 응답하면 새로 고치며, 연결이 끊긴 동안에도 최근 채팅을 탐색할 수 있고, 재설정/삭제 시 보호된 로컬 캐시를 제거합니다.
- 연결이 끊긴 동안 전송한 텍스트 메시지를 Gateway별 내구성 있는 보낼 편지함에 대기시킵니다(최대 50개). 대기 중인 말풍선은 대화 기록에 표시되며, 재연결 시 멱등성 재시도와 함께 순서대로 전송되고, 정규 기록에서 전송을 확인할 때까지 유지됩니다. 재시도/삭제 작업을 표시하기 전에는 백오프를 적용해 재시도하며, 오프라인 상태가 48시간을 초과하면 전송하지 않고 만료됩니다. 재설정/삭제 시 캐시와 함께 대기열도 지워집니다.
- 요청 시 어시스턴트 메시지를 음성으로 읽습니다. Chat에서 메시지를 길게 누르고 Listen을 선택하십시오. 앱은 구성된 TTS 공급자를 사용하여 Gateway에서 지원하는
tts.speak클립을 재생하고, Gateway 오디오를 사용할 수 없거나 재생할 수 없는 경우 기기 내 음성으로 대체합니다. 세션을 전환하거나 앱이 백그라운드로 이동하면 재생이 중지됩니다.
요구 사항
- 다른 기기에서 실행 중인 Gateway(macOS, Linux 또는 WSL2를 통한 Windows).
- 네트워크 경로:
- Bonjour를 사용하는 동일한 LAN, 또는
- 유니캐스트 DNS-SD를 사용하는 Tailnet(예시 도메인:
openclaw.internal.), 또는 - 수동 호스트/포트(대체 경로).
빠른 시작(페어링 + 연결)
- 휴대전화에서 접근할 수 있는 경로를 사용하여 인증된 Gateway를 시작합니다. 권장 원격 경로는 Tailscale Serve입니다.
openclaw gateway --port 18789 --tailscale serve신뢰할 수 있는 동일 LAN 구성에서는 대신 인증된 gateway.bind: "lan"을
사용하십시오. 기본 루프백 바인딩에는 휴대전화에서 접근할 수 없습니다.
Gateway를 아직 구성하지 않았다면 먼저 openclaw onboard를 실행하여 설정 코드
생성 시 토큰 또는 비밀번호 인증 경로를 사용할 수 있도록 하십시오.
-
Control UI를 열고 Nodes를 선택한 다음 Devices 페이지에서 Pair mobile device를 클릭합니다.
-
iOS 앱에서 Settings -> Gateway를 열고 QR 코드를 스캔하거나 설정 코드를 붙여 넣은 다음 연결합니다.
설정 코드에 LAN 경로와 Tailscale Serve 경로가 모두 포함되어 있으면 앱은 해당 경로를 순서대로 검사하고 처음으로 접근 가능한 엔드포인트를 저장합니다.
-
공식 앱은 자동으로 연결됩니다. Pending approval에 요청이 표시되면 승인하기 전에 역할과 범위를 검토하십시오.
Control UI 버튼을 사용하려면 operator.admin으로 이미 페어링된 세션이 필요합니다.
터미널 대체 방법으로 iOS 앱에서 검색된 Gateway를 선택하거나 Manual Host를
활성화하고 호스트/포트를 입력한 다음, Gateway 호스트에서 요청을 승인하십시오.
openclaw devices listopenclaw devices approve <requestId>앱이 변경된 인증 세부 정보(역할/범위/공개 키)로 페어링을 재시도하면 이전 대기 중 요청은 대체되고 새 requestId가 생성됩니다. 승인하기 전에 openclaw devices list를 다시 실행하십시오.
선택 사항: iOS 노드가 항상 엄격하게 제어되는 서브넷에서 연결되는 경우 명시적인 CIDR 또는 정확한 IP를 사용하여 최초 노드 자동 승인을 선택적으로 활성화할 수 있습니다.
{ gateway: { nodes: { pairing: { autoApproveCidrs: ["192.168.1.0/24"], }, }, },}이 기능은 기본적으로 비활성화되어 있습니다. 요청된 범위가 없는 새로운 role: node 페어링에만 적용됩니다. 운영자/브라우저 페어링과 역할, 범위, 메타데이터 또는 공개 키 변경에는 여전히 수동 승인이 필요합니다.
- 연결을 확인합니다.
openclaw nodes statusopenclaw gateway call node.list --params "{}"건강 요약
iOS 노드는 today에 대한 읽기 전용 기기 내 집계 정보를 반환할 수 있습니다. 고정된
요약에는 걸음 수, 수면 시간, 평균 안정 시 심박수 및 운동 횟수/시간이 포함됩니다.
개별 HealthKit 샘플, 출처, 메타데이터, 임상 기록 또는 쓰기 권한은 절대
반환하지 않습니다.
이 기능에는 서로 독립적인 두 가지 선택적 활성화가 필요합니다.
- iOS 앱에서 Settings -> Permissions -> Privacy & Access -> Health Summaries를 열고 Enable & Share Summaries를 탭합니다. 안내문에는 요청된 집계 정보가 사용자의 Gateway를 통해 휴대전화를 벗어나 구성된 AI 공급자에 전달되며 채팅 기록에 남을 수 있다는 점이 설명되어 있습니다.
gateway.nodes.allowCommands에health.summary를 추가한 다음 변경된 iPhone 노드 명령 화면을 거부하고 다시 승인합니다. Gateway는 로컬 또는 tailnet 전용으로 유지하십시오. 이 민감한 명령이 활성화되면 보안 감사에서 보고됩니다.
모델은 기존 nodes 도구에서 action: "invoke",
invokeCommand: "health.summary"를 사용하고 invokeParamsJson을
{"period":"today"}로 설정합니다.
HealthKit은 읽기 권한이 거부되었는지 의도적으로 공개하지 않습니다. 따라서 누락된 측정 항목은 읽을 수 있는 값이 반환되지 않았다는 의미일 뿐이며, 권한 거부 또는 건강 데이터 부재를 증명하지 않습니다. 제한된 과거 접근 기간 때문에 여러 날의 합계가 완전한 것처럼 보이지 않도록 OpenClaw는 요약을 현재 역일로 제한합니다. OpenClaw는 백그라운드에서 건강 데이터를 수집하지 않으며 진단이나 의료 조언에 요약을 사용하지 않습니다.
기본적으로 Apple Watch 컴패니언은 기존 iPhone 릴레이를 계속 사용하며 별도의 Gateway 페어링이 필요하지 않습니다. Apple의 Watch 앱에서 Watch를 iPhone과 페어링하고 Watch app -> My Watch -> Available Apps에서 OpenClaw를 설치한 다음 두 기기에서 각각 OpenClaw를 한 번씩 여십시오.
명령 승인 검토
operator.admin이 있는 운영자 연결 또는 Gateway가 명시적으로 대상으로 지정한
페어링된 operator.approvals 연결은 iPhone에서 대기 중인 실행 요청을 검토할 수
있습니다. 승인 카드에는 Gateway가 정제한 명령 미리보기, 경고, 호스트 컨텍스트,
만료 시간 및 해당 요청에서 제공하는 결정만 표시됩니다. 페어링된 Apple Watch는
기존 iPhone 릴레이를 통해 검토자에게 안전한 동일한 프롬프트를 수신하며, 간결한
1회 허용/거부 결정 하위 집합을 제공합니다. 직접 Watch Gateway 모드에서는 승인
프롬프트를 전달하지 않습니다.
승인 상태는 Control UI 및 지원되는 채팅 화면과 공유됩니다. 처음 확정된 응답이 적용됩니다. 다른 화면에서 요청을 처리한 후, 원격 처리 완료 알림 후, 그리고 처리 확인 응답이 손실되었을 가능성이 있을 때마다 iPhone과 Watch는 Gateway의 정규 최종 기록을 가져옵니다. 해당 읽기 결과에서 요청이 여전히 대기 중인지 확인할 때까지 작업은 사용할 수 없는 상태로 유지됩니다.
승인 소유권은 선택한 Gateway에 바인딩됩니다. Gateway를 전환해도 이전 프롬프트를 새 연결에 적용할 수 없습니다. 통합 승인 메서드보다 오래된 Gateway는 배포된 실행 전용 메서드로 대체합니다. 유지되는 최종 상태와 더 풍부한 화면 간 결과를 사용하려면 업데이트된 Gateway가 필요합니다.
선택적 직접 Apple Watch 노드
직접 모드에서는 Watch에 자체 서명된 노드 ID와 Gateway 연결을 부여합니다. OpenClaw가 활성 상태이면 페어링된 iPhone을 사용할 수 없는 경우에도 지원되는 노드 명령이 Watch Wi-Fi 또는 셀룰러를 통해 계속 작동합니다.
요구 사항:
- iPhone이
operator.admin범위로 Gateway에 연결되어 있어야 합니다. - 설정 코드는 watchOS가 신뢰하는 인증서를 사용하는
wss://Gateway 엔드포인트를 제공해야 하며, Watch는 이에 해당하는https://오리진을 폴링합니다. 일반 HTTP와 자체 서명 또는 지문 전용 신뢰는 지원되지 않습니다. 엔드포인트 구성은 Gateway 소유 페어링을 참조하십시오. 루프백, iPhone 전용 및 tailnet 전용 경로에는 Watch가 독립적으로 접근할 수 없습니다. - 셀룰러를 사용하려면 셀룰러를 지원하고 서비스가 활성화된 Apple Watch가 필요합니다.
- Watch에서 OpenClaw가 활성 상태여야 합니다. Apple은 일반 watchOS 앱이 범용 WebSocket/TCP 연결을 유지하는 것을 허용하지 않으므로 직접 노드는 짧은 HTTPS 폴링을 사용하고 앱이 포그라운드로 돌아오면 다시 연결합니다. Apple의 watchOS 저수준 네트워킹 지침을 참조하십시오.
설정:
- iPhone에서 Settings -> Apple Watch를 엽니다.
- Enable Direct Gateway Connection을 탭합니다.
- 수명이 짧은 설정 코드가 만료되기 전에 Watch에서 OpenClaw를 엽니다.
openclaw nodes status로 별도의 Apple Watch 행을 확인합니다.
설정 코드에는 수명이 짧은 노드 전용 부트스트랩 자격 증명이 포함되어 있으므로 만료될
때까지 비밀번호처럼 취급하십시오. iPhone에 저장된 Gateway 비밀번호나 토큰은 절대
포함되지 않습니다. 페어링 후 Watch는 자체 기기 토큰을 저장하고 부트스트랩 자격
증명을 삭제합니다. 직접 모드는 아래 명령만 지원합니다. Chat, Talk, 승인 및 기존
watch.* 알림 흐름은 계속 iPhone 릴레이 기능이며 페어링된 iPhone이 필요합니다.
직접 watchOS 노드 명령:
| 화면 | 명령 | 참고 |
|---|---|---|
| 기기 | device.info, device.status |
Watch ID, 배터리, 열 상태, 저장 공간 및 네트워크입니다. |
| 알림 | system.notify |
앱이 활성 상태일 때 사용 가능하며 Watch 권한이 필요합니다. |
watchOS는 서드 파티 앱에 WebKit을 제공하지 않으므로 직접 Watch 노드는 Canvas 명령을 제공하지 않습니다.
공식 빌드의 릴레이 기반 푸시
공식 배포 iOS 빌드는 원시 APNs 토큰을 Gateway에 게시하는 대신 외부 푸시 릴레이를 사용합니다. 공개 릴리스 경로의 공식 App Store 빌드는 https://ios-push-relay.openclaw.ai의 호스팅된 릴레이를 사용합니다. 이 기본 URL은 App Store 배포용으로 하드코딩되어 있으며 어떠한 재정의도 읽지 않습니다.
사용자 지정 릴레이 배포에는 릴레이 URL이 Gateway 릴레이 URL과 일치하는 별도의 의도적인 iOS 빌드/배포 경로가 필요합니다. App Store 릴리스 경로에서는 사용자 지정 릴레이 URL을 허용하지 않습니다. 사용자 지정 릴레이 빌드를 사용하는 경우 일치하는 Gateway 릴레이 URL을 설정하십시오.
{ gateway: { push: { apns: { relay: { baseUrl: "https://relay.example.com", }, }, }, },}흐름의 작동 방식:
- iOS 앱은 App Attest 및 StoreKit 앱 트랜잭션 JWS를 사용하여 릴레이에 등록합니다.
- 릴레이는 불투명한 릴레이 핸들과 등록 범위의 전송 권한을 반환합니다.
- iOS 앱은 페어링된 Gateway ID(
gateway.identity.get)를 가져와 릴레이 등록에 포함하므로, 릴레이 기반 등록이 해당 특정 Gateway에 위임됩니다. - 앱은 해당 릴레이 기반 등록을
push.apns.register를 사용하여 페어링된 Gateway로 전달합니다. - Gateway는 저장된 릴레이 핸들을
push.test, 백그라운드 깨우기 및 깨우기 신호에 사용합니다. - 나중에 앱이 다른 Gateway 또는 다른 릴레이 기본 URL을 사용하는 빌드에 연결되면 기존 바인딩을 재사용하지 않고 릴레이 등록을 새로 고칩니다.
이 경로에서 Gateway에 필요하지 않은 항목: 배포 전체에 적용되는 릴레이 토큰이나 공식 App Store 릴레이 기반 전송을 위한 직접 APNs 키가 필요하지 않습니다.
예상 운영자 흐름:
- 공식 iOS 앱을 설치합니다.
- 선택 사항: 의도적으로 분리된 사용자 지정 릴레이 빌드를 사용하는 경우에만 Gateway에
gateway.push.apns.relay.baseUrl을 설정합니다. - 앱을 Gateway와 페어링하고 연결이 완료될 때까지 기다립니다.
- 앱에 APNs 토큰이 있고 운영자 세션이 연결되어 있으며 릴레이 등록에 성공하면 앱이
push.apns.register를 게시합니다. - 이후
push.test, 재연결 깨우기 및 깨우기 신호에서 저장된 릴레이 기반 등록을 사용할 수 있습니다.
백그라운드 활성 상태 비콘
iOS가 무음 푸시, 백그라운드 새로 고침 또는 중요 위치 변경 이벤트로 앱을 깨우면, 앱은 짧은 Node 재연결을 시도한 다음 event: "node.presence.alive"로 node.event를 호출합니다. Gateway는 인증된 Node 기기 ID가 확인된 후에만 페어링된 Node/기기 메타데이터에 이를 lastSeenAtMs/lastSeenReason으로 기록합니다.
앱은 Gateway 응답에 handled: true가 포함된 경우에만 백그라운드 깨우기가 성공적으로 기록된 것으로 간주합니다. 이전 Gateway는 { "ok": true }로 node.event를 확인할 수 있습니다. 이 응답은 호환되지만 영구적인 마지막 확인 시각 업데이트로 간주되지 않습니다.
호환성 참고 사항:
OPENCLAW_APNS_RELAY_BASE_URL은 Gateway의 임시 환경 변수 재정의로 계속 작동합니다(gateway.push.apns.relay.baseUrl이 구성 우선 경로입니다).- App Store 릴리스 빌드의 푸시 모드는 호스팅 릴레이 호스트를 하드코딩하며 릴레이 URL 재정의를 읽지 않습니다.
OPENCLAW_PUSH_RELAY_BASE_URL빌드 시점 환경 변수는 로컬/샌드박스 iOS 빌드 모드에만 영향을 줍니다.
인증 및 신뢰 흐름
릴레이는 공식 iOS 빌드에서 Gateway가 APNs에 직접 연결하는 방식으로는 제공할 수 없는 두 가지 제약을 적용하기 위해 존재합니다.
- Apple을 통해 배포된 정품 OpenClaw iOS 빌드만 호스팅 릴레이를 사용할 수 있습니다.
- Gateway는 해당 Gateway와 페어링된 iOS 기기에만 릴레이 기반 푸시를 보낼 수 있습니다.
홉별 흐름은 다음과 같습니다.
iOS app -> gateway: 앱은 일반적인 Gateway 인증 흐름을 통해 Gateway와 페어링하여 인증된 Node 세션과 인증된 운영자 세션을 얻습니다. 운영자 세션은gateway.identity.get을 호출합니다.iOS app -> relay: 앱은 App Attest 증명과 StoreKit 앱 트랜잭션 JWS를 사용하여 HTTPS를 통해 릴레이 등록 엔드포인트를 호출합니다. 릴레이는 번들 ID, App Attest 증명, Apple 배포 증명을 검증하고 공식/프로덕션 배포 경로를 요구합니다. 로컬 빌드는 공식 Apple 배포 증명을 충족할 수 없으므로, 이를 통해 로컬 Xcode/개발 빌드가 호스팅 릴레이를 사용하지 못하도록 차단합니다.gateway identity delegation: 릴레이 등록 전에 앱은gateway.identity.get에서 페어링된 Gateway ID를 가져와 릴레이 등록 페이로드에 포함합니다. 릴레이는 해당 Gateway ID에 위임된 릴레이 핸들과 등록 범위 전송 권한을 반환합니다.gateway -> relay: Gateway는push.apns.register에서 받은 릴레이 핸들과 전송 권한을 저장합니다.push.test, 재연결 깨우기 및 깨우기 신호 시 Gateway는 자체 기기 ID로 전송 요청에 서명합니다. 릴레이는 저장된 전송 권한과 Gateway 서명을 모두 등록 시 위임된 Gateway ID와 대조하여 검증합니다. 다른 Gateway는 어떤 방식으로든 핸들을 획득하더라도 저장된 등록을 재사용할 수 없습니다.relay -> APNs: 릴레이는 프로덕션 APNs 자격 증명과 공식 빌드의 원시 APNs 토큰을 소유합니다. Gateway는 릴레이 기반 공식 빌드의 원시 APNs 토큰을 저장하지 않습니다. 릴레이는 페어링된 Gateway를 대신하여 최종 푸시를 APNs로 보냅니다.
이 설계를 만든 이유는 프로덕션 APNs 자격 증명이 사용자 Gateway에 저장되지 않도록 하고, 공식 빌드의 원시 APNs 토큰을 Gateway에 저장하지 않으며, 공식 OpenClaw iOS 빌드에서만 호스팅 릴레이를 사용할 수 있게 하고, 한 Gateway가 다른 Gateway 소유의 iOS 기기에 깨우기 푸시를 보내지 못하도록 하기 위해서입니다.
로컬/수동 빌드는 계속 APNs에 직접 연결합니다. 릴레이 없이 이러한 빌드를 테스트하는 경우에도 Gateway에 직접 APNs 자격 증명이 필요합니다.
export OPENCLAW_APNS_TEAM_ID="TEAMID"export OPENCLAW_APNS_KEY_ID="KEYID"export OPENCLAW_APNS_PRIVATE_KEY_P8="$(cat /path/to/AuthKey_KEYID.p8)"이는 Fastlane 설정이 아니라 Gateway 호스트 런타임 환경 변수입니다. apps/ios/fastlane/.env에는 APP_STORE_CONNECT_KEY_ID 및 APP_STORE_CONNECT_ISSUER_ID와 같은 App Store Connect 인증 정보만 저장됩니다. 로컬 iOS 빌드에 대한 직접 APNs 전송은 구성하지 않습니다.
~/.openclaw/credentials/ 아래의 다른 제공자 자격 증명과 일관된 권장 Gateway 호스트 저장 방식은 다음과 같습니다.
mkdir -p ~/.openclaw/credentials/apnschmod 700 ~/.openclaw/credentials/apnsmv /path/to/AuthKey_KEYID.p8 ~/.openclaw/credentials/apns/AuthKey_KEYID.p8chmod 600 ~/.openclaw/credentials/apns/AuthKey_KEYID.p8export OPENCLAW_APNS_PRIVATE_KEY_PATH="$HOME/.openclaw/credentials/apns/AuthKey_KEYID.p8".p8 파일을 커밋하거나 저장소 체크아웃 아래에 두지 마십시오.
검색 경로
Bonjour(LAN)
iOS 앱은 local.의 _openclaw-gw._tcp를 탐색하며, 구성된 경우 동일한 광역 DNS-SD 검색 도메인도 탐색합니다. 동일 LAN의 Gateway는 local.에서 자동으로 나타납니다. 네트워크 간 검색은 비콘 유형을 변경하지 않고 구성된 광역 도메인을 사용할 수 있습니다.
Tailnet(네트워크 간)
mDNS가 차단된 경우 유니캐스트 DNS-SD 영역을 사용하고(도메인 선택, 예: openclaw.internal.) Tailscale 분할 DNS를 사용하십시오. CoreDNS 예시는 Bonjour를 참조하십시오.
수동 호스트/포트
Settings에서 Manual Host를 활성화하고 Gateway 호스트와 포트(기본값 18789)를 입력하십시오.
여러 Gateway
앱은 페어링된 모든 Gateway의 레지스트리를 유지하므로 다시 페어링하지 않고도 Gateway 간에 전환할 수 있습니다.
- Settings -> Gateway에는 활성 Gateway가 표시된 Paired Gateways 목록이 나타납니다. 항목을 탭하여 전환하면 앱이 현재 세션을 종료하고 선택한 Gateway에 다시 연결합니다. 둘 이상의 Gateway가 페어링되어 있으면 연결 행 옆에 빠른 전환 메뉴가 나타납니다.
- 자격 증명, TLS 신뢰 결정, Gateway별 기본 설정 및 캐시된 채팅 기록은 Gateway별로 저장됩니다. 전환해도 Gateway 간 상태가 혼합되지 않으며, 푸시 등록은 활성 Gateway를 따릅니다.
- 페어링된 Gateway를 스와이프하거나 컨텍스트 메뉴를 사용하여 Forget하면 자격 증명, 기기 토큰, TLS 핀 및 캐시된 채팅이 제거됩니다.
- 검색된 Gateway로 전환하려면 네트워크에서 해당 Gateway가 보여야 합니다. 수동 Gateway는 저장된 호스트와 포트를 사용하여 다시 연결합니다.
Canvas + A2UI
iOS Node는 WKWebView Canvas를 렌더링합니다. node.invoke를 사용하여 제어하십시오.
openclaw nodes invoke --node "iOS Node" --command canvas.navigate --params '{"url":"http://<gateway-host>:18789/__openclaw__/canvas/"}'참고 사항:
- Gateway Canvas 호스트는 Gateway HTTP 서버(
gateway.port와 동일한 포트, 기본값18789)에서/__openclaw__/canvas/및/__openclaw__/a2ui/를 제공합니다. - iOS Node는 내장 스캐폴드를 연결 시 기본 보기로 유지합니다.
canvas.a2ui.push및canvas.a2ui.reset은 앱에 번들로 포함되고 앱이 소유한 A2UI 페이지를 사용합니다. - 원격 Gateway A2UI 페이지는 iOS에서 렌더링만 가능합니다. 네이티브 A2UI 버튼 동작은 앱에 번들로 포함되고 앱이 소유한 페이지에서만 허용됩니다.
canvas.navigate와{"url":""}를 사용하여 내장 스캐폴드로 돌아갑니다.
Computer Use와의 관계
iOS 앱은 모바일 Node 인터페이스이며 Codex Computer Use 백엔드가 아닙니다. Codex Computer Use와 cua-driver mcp는 MCP 도구를 통해 로컬 macOS 데스크톱을 제어합니다. iOS 앱은 canvas.*, camera.*, screen.*, location.*, talk.* 등의 OpenClaw Node 명령을 통해 iPhone 기능을 노출합니다.
에이전트는 Node 명령을 호출하여 OpenClaw를 통해 iOS 앱을 조작할 수 있지만, 이러한 호출은 Gateway Node 프로토콜을 거치며 iOS의 포그라운드/백그라운드 제한을 따릅니다. 로컬 데스크톱 제어에는 Codex Computer Use를 사용하고, iOS Node 기능에는 이 페이지를 사용하십시오.
Canvas 평가/스냅샷
openclaw nodes invoke --node "iOS Node" --command canvas.eval --params '{"javaScript":"(() => { const {ctx} = window.__openclaw; ctx.clearRect(0,0,innerWidth,innerHeight); ctx.lineWidth=6; ctx.strokeStyle=\"#ff2d55\"; ctx.beginPath(); ctx.moveTo(40,40); ctx.lineTo(innerWidth-40, innerHeight-40); ctx.stroke(); return \"ok\"; })()"}'openclaw nodes invoke --node "iOS Node" --command canvas.snapshot --params '{"maxWidth":900,"format":"jpeg"}'음성 깨우기 + 대화 모드
- 음성 깨우기와 대화 모드는 Settings에서 사용할 수 있습니다.
talk.realtime.transport가webrtc인 경우 OpenAI 실시간 Talk는 클라이언트 소유 WebRTC를 사용합니다. 명시적gateway-relay구성은 계속 Gateway가 소유합니다. 대화 모드를 참조하십시오.- Talk를 지원하는 iOS Node는
talk기능을 알리고talk.ptt.start,talk.ptt.stop,talk.ptt.cancel,talk.ptt.once를 선언할 수 있습니다. Gateway는 신뢰할 수 있고 Talk를 지원하는 Node에 대해 이러한 눌러서 말하기 명령을 기본적으로 허용합니다. - iOS는 백그라운드 오디오를 일시 중단할 수 있습니다. 앱이 활성 상태가 아닐 때는 음성 기능을 최선형 기능으로 간주하십시오.
일반적인 오류
NODE_BACKGROUND_UNAVAILABLE: iOS 앱을 포그라운드로 가져오십시오(Canvas/카메라/화면 명령에 필요).A2UI_HOST_UNAVAILABLE: 번들 A2UI 페이지에 앱 WebView에서 접근할 수 없습니다. Screen 탭에서 앱을 포그라운드 상태로 유지한 후 다시 시도하십시오.- 페어링 프롬프트가 나타나지 않음:
openclaw devices list를 실행하고 수동으로 승인하십시오. - Watch에 iPhone 상태가 표시되지 않음: iPhone이
watch.status에서watchPaired: true및watchAppInstalled: true를 보고하는지 확인하십시오. 페어링이 false이면 Apple의 Watch 앱에서 Watch를 페어링하십시오. 설치가 false이면 My Watch -> Available Apps에서 컴패니언 앱을 설치하십시오. 어느 쪽이든 변경한 후 Watch에서 OpenClaw를 한 번 여십시오. 즉시 연결하려면 여전히 두 앱이 모두 실행 중이어야 하지만, 대기 중인 업데이트는 나중에 백그라운드에서 도착할 수 있습니다. - 재설치 후 재연결 실패: Keychain 페어링 토큰이 삭제되었습니다. Node를 다시 페어링하십시오.