如何教 Claude Code 控制 iOS 模拟器
想象一下:你坐在终端前,与 Claude Code 聊天,无需手动打开 Xcode、在模拟器中寻找正确的按钮,或从控制台复制日志,你只需输入:"检查登录界面在 iPhone 15 上的显示效果,然后点击登录按钮。"AI 就会完成这一切。听起来像魔法,但实际上这是 ios-simulator- skill 脚本集合的功劳。
我在寻找将 AI 代理与移动开发集成的方法时偶然发现了这个仓库。项目作者 Conor Ladhy 编写了 22 个 Python 和 Bash 脚本,将 Claude 打造成一个成熟的 QA 工程师或开发助手,能够"看到"应用的界面并与之交互。
有了 Xcode 还需要这个吗
通常情况下,AI 代理与 iOS 项目的交互会因为大量的构建日志和沉重的截图而变成噩梦。如果你向 Claude 输入标准输出 xcodebuild,上下文窗口在几秒钟内就会被垃圾信息淹没。
这个项目优雅地解决了这个问题。脚本充当过滤器:只向神经网络提供必要的信息。Claude 收到的不是 400 行认证日志,而是 15 行干净的文本。这节省了 token,更重要的是,防止了模型因信息过载而"产生幻觉"。
这个工具集能做什么
该项目解决了两个主要任务:构建应用和操作模拟器。
智能构建,过滤噪音
build_and_test.py 脚本封装了标准的 Apple 工具。当你运行构建时,Claude 只看到一条简短的状态行和一个结果 ID。如果出现问题,模型可以专门请求该 ID 的错误或警告。这被称为渐进式数据披露——我们不会一次性倾倒所有内容,而是按需提供详细信息。
通过 Accessibility 进行导航
这可能是最酷的功能。脚本使用 iOS Accessibility API,而不是试图猜测截图上的按钮坐标(这通常会导致点击失败)。Claude 通过语义含义搜索元素。例如,找到"登录"文本并点击它的命令比点击坐标 x: 320, y: 400 更可靠。此外,元素树的文本描述比图像少几百倍的 token。
截图优化
如果你无法避免视觉验证(例如,你需要比较设计或查找布局错误),脚本会自动压缩和调整截图大小。这可以将上下文负载减少 90-95%。
底层工作原理
仓库包含大量调用 xcrun simctl 和 idb(Facebook 的 iOS 自动化工具)的 Python 脚本。
以下是列表中一些有趣的工具:
screen_mapper.py— 分析屏幕并编译所有交互元素的列表。gesture.py— 可以执行滑动、捏合,甚至下拉刷新。privacy_manager.py— 让你只需一条命令即可授予应用照片、联系人或位置的权限。这对于自动化测试非常方便,之前你必须手动点击系统弹窗。
有趣的是,作者甚至添加了 accessibility_audit.py 来检查应用对 WCAG 标准的合规性。Claude 可以遍历屏幕,告诉你哪里忘记了为 VoiceOver 添加标签。
如何自行运行
该项目被定位为 Claude Code 的"技能",但实际上它是一组独立的脚本,也可以单独使用。
如果你使用 Claude Code,安装方式如下:
你需要的依赖包括 Xcode Command Line Tools、Python 3,以及最好安装 idb(通过 brew 安装)。如果你计划比较截图,还需要通过 pip 安装 Pillow 库。
实际效益
这对谁有用?首先是那些想要自动化日常任务的人。例如,你可以让 Claude:
- "构建项目,在 iPhone 14 Pro 上启动,并为文档截取所有屏幕的截图。"
- "找出测试在授权阶段崩溃的原因,只显示最近 2 分钟的日志。"
- "检查应用在网络缓慢和禁用地理位置时的行为。"
在作者自己的测试中,Claude + ios-simulator- skill 组合实现了 100% 的场景完成率,而没有这些工具的"裸"Claude 成功次数不到一半。
值得一试吗
如果你是一名 iOS 开发者,并且已经开始将 AI 代理集成到你的工作流程中,那么这个项目是必备的。它消除了主要痛点:冗长的 Apple 工具与语言模型所需的简洁性之间的不兼容。
当然,这个项目需要环境设置,而且 idb 在新版本的 macOS 上有时可能比较挑剔,但通过语义元素树控制模拟器的想法正是现代自动化应该有的样子。脚本编写得很简单,很容易根据你的需求进行调整,或者你可以提取你需要的内容用于 CI/CD 流水线。
相关项目