Documentation Index
Fetch the complete documentation index at: https://mintlify.com/openclaw/openclaw/llms.txt
Use this file to discover all available pages before exploring further.
iOS App
What it does
The OpenClaw iOS app connects to a Gateway as a mobile node:- Connects to Gateway over WebSocket (LAN or Tailscale)
- Exposes node capabilities: Canvas, Camera, Screen snapshot, Location, Talk mode, Voice wake
- Receives
node.invokecommands from agents - Shares chat history with other clients via Gateway sessions
Requirements
- Gateway: Running on macOS, Linux, or Windows (WSL2)
- Network path:
- Same LAN via Bonjour discovery, or
- Tailscale tailnet with unicast DNS-SD (e.g.,
openclaw.internal.), or - Manual host/port configuration
- iOS: iPhone running iOS 17+ (foreground-first; background limits apply)
Installation
TestFlight
Build from source
Requirements:- Xcode 16+
- pnpm
- xcodegen
- Apple Development signing identity
- Select scheme: OpenClaw
- Select destination: Connected iPhone (recommended for real behavior)
- Build configuration: Debug
- Product → Run
Signing with personal team
If signing fails on a personal team:- Copy
apps/ios/LocalSigning.xcconfig.exampletoapps/ios/LocalSigning.xcconfig - Edit
LocalSigning.xcconfigto use unique local bundle IDs - Regenerate project:
xcodegen generate
Node pairing
Quick start
- Start the Gateway:
- In iOS app Settings, select a discovered gateway (or enable Manual Host and enter host/port)
- Approve pairing on gateway host:
- Verify connection:
Discovery
Bonjour (LAN): Gateway advertises_openclaw-gw._tcp on local.. iOS app lists these automatically.
Tailnet (cross-network): If mDNS is blocked, use unicast DNS-SD:
- Set up DNS-SD zone (e.g.,
openclaw.internal.) on gateway host - Publish
_openclaw-gw._tcprecords via CoreDNS - Configure Tailscale split DNS for the domain
Canvas support
The iOS node renders a WKWebView canvas:- Gateway canvas host serves
/__openclaw__/canvas/and/__openclaw__/a2ui/ - Auto-navigates to A2UI on connect when canvas host URL is advertised
- Return to built-in scaffold:
canvas.navigatewith{"url":""} - Canvas commands blocked when app is backgrounded
Camera and screen sharing
Camera capture
Requires Camera permission (Settings → Privacy & Security → Camera).Screen recording
Voice wake and talk mode
Voice wake:- “Hey OpenClaw” hands-free activation
- Uses on-device speech recognition (iOS Speech framework)
- Configurable in Settings → Voice
- Best-effort when app is backgrounded (iOS may suspend audio)
- Push-to-talk voice input
- Voice Wake and Talk contend for microphone (Talk suppresses wake while active)
- Foreground-first reliability
Chat integration
iOS node uses Gateway’s main session key by default:- History shared with WebChat, macOS app, and other clients
- Commands:
chat.history,chat.send,chat.subscribe - Push updates via
event:"chat"subscription
Node capabilities
Foreground-only commands:canvas.*(navigate, eval, snapshot, a2ui)camera.*(snap, clip)screen.*(record)talk.*(start, stop)
location.current(requires “Always” location permission for background)contacts.list,contacts.searchcalendar.eventsreminders.listphotos.recentmotion.currentsystem.notify(local notifications)
node.list response.
Push notifications (APNs)
The app registers for APNs at launch:- Development builds: APNs sandbox
- Release builds: APNs production
- Token sent to Gateway after connection:
push.apns.register - Requires Push Notifications capability in provisioning profile
- Check Xcode console for “APNs registration failed”
- Verify Push Notifications enabled in app bundle ID
- Ensure provisioning profile supports Push
apps/ios/Sources/OpenClaw.entitlements sets aps-environment to development.
Known issues and limitations
Current limitations:- Background command blocks:
canvas.*,camera.*,screen.*,talk.*returnNODE_BACKGROUND_UNAVAILABLE - Background location requires “Always” permission
- Pairing/auth errors pause reconnect loop until fixed manually
- Voice Wake and Talk contend for microphone
- APNs reliability depends on signing/provisioning/topic alignment
- Expect rough UX edges during active development
Troubleshooting
Build/signing baseline
- Regenerate project:
- Verify selected team and bundle IDs in Xcode
Gateway connection
-
In app Settings → Gateway:
- Confirm status text, server, remote address
- Check if pairing/auth is gating connection
- If pairing required:
-
If discovery is flaky:
- Enable “Discovery Debug Logs” in Settings
- Inspect Settings → Gateway → Discovery Logs
-
If network path unclear:
- Switch to Manual Host + port in Gateway Advanced settings
- Test with explicit IP:
http://192.168.1.x:18789
Node commands fail
Error:NODE_BACKGROUND_UNAVAILABLE
- Bring iOS app to foreground
- Canvas/camera/screen commands require active app
A2UI_HOST_NOT_CONFIGURED
- Gateway didn’t advertise canvas host URL
- Check
gateway.canvasHostin Gateway configuration
- Run
openclaw nodes pendingon gateway host - Approve manually:
openclaw nodes approve <requestId>
- Keychain pairing token cleared
- Re-pair the node from Settings
Debugging logs
In Xcode console, filter for:- Subsystem:
ai.openclaw.ios - Category:
GatewayDiag - Search: “APNs registration failed”
- Reproduce in foreground first
- Test background transitions
- Confirm reconnect on return to foreground
Current development focus
Automatic wake/reconnect hardening:- Improve wake/resume across scene transitions
- Reduce dead-socket states after background → foreground
- Tighten node/operator session reconnect coordination
- Reduce manual recovery steps after transient network failures

