生成模型 :Claude Opus 4.6 (anthropic/claude-opus-4-6) Token 消耗 :输入 ~180k tokens,输出 ~5k tokens(本节)
OpenClaw 的 iOS 应用与 macOS 应用有本质区别:macOS 应用是一个控制端 (operator),而 iOS 应用是一个节点 (node)。节点不运行 Gateway,而是连接到局域网中的 Gateway 实例,将 iPhone/iPad 的硬件能力(摄像头、屏幕、麦克风、位置)暴露给 AI 代理使用。
28.2.1 Bonjour 配对
iOS 应用启动后的第一个任务是找到局域网中的 Gateway。这通过 Apple 的 Bonjour (mDNS/DNS-SD)协议实现:
Copy // apps/ios/Sources/Gateway/GatewayConnectionController.swift
@ MainActor
@ Observable
final class GatewayConnectionController {
private let discovery = GatewayDiscoveryModel ()
private ( set ) var gateways: [ GatewayDiscoveryModel.DiscoveredGateway ] = []
init ( appModel : NodeAppModel, startDiscovery : Bool = true ) {
GatewaySettingsStore. bootstrapPersistence ()
self . updateFromDiscovery ()
self . observeDiscovery ()
if startDiscovery { self . discovery . start () }
}
// 场景生命周期感知
func setScenePhase ( _ phase : ScenePhase ) {
switch phase {
case . background : self . discovery . stop () // 后台时停止发现
case . active , . inactive : self . discovery . start ()
}
}
} 衍生解释 — Bonjour (mDNS/DNS-SD)
Bonjour 是 Apple 对两个 IETF 标准的实现:mDNS(多播 DNS,RFC 6762)和 DNS-SD(基于 DNS 的服务发现,RFC 6763)。设备在局域网中通过 UDP 多播(224.0.0.251:5353)广播和发现服务,无需中央 DNS 服务器。例如,Gateway 广播一个 _openclaw._tcp 服务,iOS 应用通过 NWBrowser 发现它并获取 IP 和端口。
发现到 Gateway 后,用户可以选择连接。连接参数包括主机地址、端口、TLS 配置和认证凭据:
iOS 应用的入口非常简洁:
NodeAppModel 是应用的核心状态模型,管理与 Gateway 的会话、设备能力、语音唤醒等。
28.2.2 Canvas 表面
iOS 应用的主界面是一个 Canvas 表面 ——它不仅是聊天界面,更是 AI 代理可以直接操控的"画布"。代理可以发送 Canvas 命令来控制界面内容,实现诸如展示图表、动画、交互式控件等能力。
源码结构:
Canvas 命令由共享库 OpenClawKit 定义(见 28.4 节),包括 DOM 操作、文件显示、A2UI(Agent-to-UI)动作等。
28.2.3 Voice Wake / Talk Mode
iOS 节点同样支持语音唤醒和对话模式,实现方式与 macOS 类似(共享自 OpenClawKit),但有以下适配:
后台限制 :iOS 不允许应用在后台无限制运行音频捕获。语音唤醒在应用进入后台时暂停(setScenePhase(.background) → 停止发现和录音)
音频会话管理 :需要正确配置 AVAudioSession 的 category 和 mode,确保与系统音频(如电话、音乐)和平共处
权限模型 :iOS 的权限弹窗是一次性的——如果用户拒绝了麦克风权限,只能引导到系统设置中手动开启
28.2.4 摄像头与屏幕录制
iOS 节点的独特价值在于将移动设备的传感器暴露给 AI 代理:
摄像头 (Camera/):代理可以请求拍照或实时视频帧,用于视觉分析。摄像头能力通过 AVCaptureSession 实现。
屏幕录制 (Screen/):代理可以请求屏幕截图或录制。iOS 使用 ReplayKit 框架提供屏幕内容捕获。
这些能力在连接 Gateway 时通过 caps(capabilities)字段声明:
Gateway 根据节点声明的能力来决定哪些工具可以使用——例如,只有连接了具备 camera 能力的节点时,代理才能调用拍照工具。
iOS 应用是"节点"角色 ,不运行 Gateway,而是通过 Bonjour 发现并连接到局域网中的 Gateway 实例。
服务发现 基于 mDNS/DNS-SD 协议,应用自动感知场景生命周期(前台/后台)来启停发现。
Canvas 表面 是主界面,AI 代理可以通过命令直接操控界面内容。
语音唤醒 共享自 OpenClawKit,但受 iOS 后台执行限制。
摄像头和屏幕录制 是节点的核心硬件能力,通过 capabilities 声明让 Gateway 知晓可用工具。