mirror of
https://github.com/openclaw/openclaw.git
synced 2026-02-19 18:39:20 -05:00
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: 7beb794a06
Co-authored-by: ngutman <1540134+ngutman@users.noreply.github.com>
Co-authored-by: ngutman <1540134+ngutman@users.noreply.github.com>
Reviewed-by: @ngutman
OpenClaw iOS (Super Alpha)
NO TEST FLIGHT AVAILABLE AT THIS POINT
This iPhone app is super-alpha and internal-use only. It connects to an OpenClaw Gateway as a role: node.
Distribution Status
NO TEST FLIGHT AVAILABLE AT THIS POINT
- Current distribution: local/manual deploy from source via Xcode.
- App Store flow is not part of the current internal development path.
Super-Alpha Disclaimer
- Breaking changes are expected.
- UI and onboarding flows can change without migration guarantees.
- Foreground use is the only reliable mode right now.
- Treat this build as sensitive while permissions and background behavior are still being hardened.
Exact Xcode Manual Deploy Flow
- Prereqs:
- Xcode 16+
pnpmxcodegen- Apple Development signing set up in Xcode
- From repo root:
pnpm install
./scripts/ios-configure-signing.sh
cd apps/ios
xcodegen generate
open OpenClaw.xcodeproj
- In Xcode:
- Scheme:
OpenClaw - Destination: connected iPhone (recommended for real behavior)
- Build configuration:
Debug - Run (
Product->Run)
- Scheme:
- If signing fails on a personal team:
- Use unique local bundle IDs via
apps/ios/LocalSigning.xcconfig. - Start from
apps/ios/LocalSigning.xcconfig.example.
- Use unique local bundle IDs via
Shortcut command (same flow + open project):
pnpm ios:open
APNs Expectations For Local/Manual Builds
- The app calls
registerForRemoteNotifications()at launch. apps/ios/Sources/OpenClaw.entitlementssetsaps-environmenttodevelopment.- APNs token registration to gateway happens only after gateway connection (
push.apns.register). - Your selected team/profile must support Push Notifications for the app bundle ID you are signing.
- If push capability or provisioning is wrong, APNs registration fails at runtime (check Xcode logs for
APNs registration failed). - Debug builds register as APNs sandbox; Release builds use production.
What Works Now (Concrete)
- Pairing via setup code flow (
/pairthen/pair approvein Telegram). - Gateway connection via discovery or manual host/port with TLS fingerprint trust prompt.
- Chat + Talk surfaces through the operator gateway session.
- iPhone node commands in foreground: camera snap/clip, canvas present/navigate/eval/snapshot, screen record, location, contacts, calendar, reminders, photos, motion, local notifications.
- Share extension deep-link forwarding into the connected gateway session.
Known Issues / Limitations / Problems
- Foreground-first: iOS can suspend sockets in background; reconnect recovery is still being tuned.
- Background command limits are strict:
canvas.*,camera.*,screen.*, andtalk.*are blocked when backgrounded. - Background location requires
Alwayslocation permission. - Pairing/auth errors intentionally pause reconnect loops until a human fixes auth/pairing state.
- Voice Wake and Talk contend for the same microphone; Talk suppresses wake capture while active.
- APNs reliability depends on local signing/provisioning/topic alignment.
- Expect rough UX edges and occasional reconnect churn during active development.
Current In-Progress Workstream
Automatic wake/reconnect hardening:
- improve wake/resume behavior across scene transitions
- reduce dead-socket states after background -> foreground
- tighten node/operator session reconnect coordination
- reduce manual recovery steps after transient network failures
Debugging Checklist
- Confirm build/signing baseline:
- regenerate project (
xcodegen generate) - verify selected team + bundle IDs
- regenerate project (
- In app
Settings -> Gateway:- confirm status text, server, and remote address
- verify whether status shows pairing/auth gating
- If pairing is required:
- run
/pair approvefrom Telegram, then reconnect
- run
- If discovery is flaky:
- enable
Discovery Debug Logs - inspect
Settings -> Gateway -> Discovery Logs
- enable
- If network path is unclear:
- switch to manual host/port + TLS in Gateway Advanced settings
- In Xcode console, filter for subsystem/category signals:
ai.openclaw.iosGatewayDiagAPNs registration failed
- Validate background expectations:
- repro in foreground first
- then test background transitions and confirm reconnect on return