用编程智能体测试 iOS 应用
本页由英文自动翻译。
阅读英文版编程智能体可以像真人一样测试你的应用的注册流程:构建应用,在 iOS Simulator 中运行,用 Proxy Mail QA 测试地址填写表单,然后输入验证码或打开邮件中的链接。Proxy Mail QA 为智能体提供地址以及邮件中的验证码或链接;智能体用自己的工具操控模拟器。
下面每种设置都要先把 Proxy Mail QA 连接到智能体:粘贴一句提示词设置,或手动连接 MCP server。
在让智能体测试你自己的应用之前,可以先用 iOS 示例试一试:一个带邮件激活、不需要服务器的小型注册应用。你从自己的邮箱账号亲自发送它的激活邮件,智能体从 Proxy Mail QA 获取验证码。
Claude Code Desktop 的 iOS Simulator 面板
Section titled “Claude Code Desktop 的 iOS Simulator 面板”Mac 上的 Claude Code Desktop 可以在对话旁边的模拟器中运行你的应用,点按操作并读取屏幕内容(Anthropic 的指南)。它需要安装了 iOS 平台的 Xcode,并且每个模拟器都需要你允许 Claude 使用一次。
在连接了 Proxy Mail QA 的 Claude Code Desktop 会话中打开你的 iOS 项目,然后输入:
构建应用并在模拟器中运行。用一个新的 Proxy Mail QA 测试地址注册,使用它给你的密码,然后输入邮件中的验证码,并检查应用是否显示账号已验证。
然后 Claude 会:
- 构建应用并在模拟器中启动。
- 调用
create_address(带password: true),获取一个新地址和密码。 - 点按进入注册表单并输入它们。
- 调用
wait_for_code(或wait_for_link)获取邮件中的验证码或链接。 - 输入验证码,或在模拟器上打开链接,让应用处理它。打开链接遵循你会话的权限模式。
如果链接应该打开应用,就明确要求这个链接:“在应用中打开邮件里的验证链接”。如果邮件中同时有网页链接和应用链接(myapp://…),网页链接排在前面;wait_for_link 带 app: true(或 REST API 的 app=true)会获取应用链接。应用链接打开应用前,iOS 会询问“在你的应用中打开?”,Claude 会点按 打开。
模拟器屏幕显示某个步骤可能会稍有延迟,所以 Claude 在点按按钮前会通过截图确认输入的内容,并在判定步骤失败前再截一张图。
模拟器面板的截图和对话的其他内容一样会发送给 Anthropic,所以在该模拟器上只使用测试账号。Proxy Mail QA 的地址和密码本身就是测试账号。
Claude Code 或 Codex 搭配 Xcode 的工具
Section titled “Claude Code 或 Codex 搭配 Xcode 的工具”Xcode 可以通过 Xcode 自带的 MCP server,把它的构建和项目工具共享给你在它之外运行的智能体(Apple 的指南):
-
在 Xcode 中选择 Xcode → Settings → Intelligence,在 Model Context Protocol 下打开 Allow external agents to use Xcode tools。
-
把 Xcode 的工具添加到智能体:
claude mcp add --transport stdio xcode -- xcrun mcpbridge对于 Codex:
codex mcp add xcode -- xcrun mcpbridge -
在 Xcode 中打开你的项目,然后按上面的方式向智能体发出提示。
两个服务器都连接后,智能体通过 Xcode 构建,并通过 Proxy Mail QA 获取测试地址和邮件。
Xcode 自带的智能体
Section titled “Xcode 自带的智能体”Xcode 的内置智能体(Claude Agent、Codex 和 Gemini)可以从 ~/Library/Developer/Xcode/CodingAssistant/ 下的配置文件夹(ClaudeAgentConfig、codex 和 gemini)读取额外的 MCP 服务器,也可以从 Intelligence settings → Plug-ins → Add Plug-in 安装智能体插件(Apple 的指南)。
我们的 Claude Code 插件 包含 MCP server 和一个描述注册流程的技能;在那里通过 URL 添加它,应该能让 Xcode 的 Claude Agent 获得同样的工具。我们还没有测试 Xcode 的插件支持,如果不可用,请改用 Claude Code 或 Codex 搭配 Xcode。
还可以让它做什么
Section titled “还可以让它做什么”无论智能体以哪种方式连接,它都能覆盖流程的更多部分:
- 分格输入的验证码。 很多应用每位数字一个输入框。智能体点按第一个框并输入完整验证码,大多数应用会自动分配到各个框中,然后在继续前检查每一位都已填入:不完整的验证码会算作一次错误尝试。
- 更长的注册表单。 如果表单还要求填写有规则的用户名、出生日期或国家,
form_values会从为它新建的地址中为每个字段给出一个值。 - 邮件本身。 收到验证码或链接后,
check_email在expect_host设为你应用链接打开的域名(例如它的 Universal Link 域名)时,会检查链接是否指向那里,并检查 SPF、DKIM、DMARC 以及注明的有效期。count_emails能发现误发的第二封邮件。 - Mac 上的开发服务器。 模拟器通过
localhost访问你的 Mac,所以开发构建中指向localhost:3000的链接是正常的。让智能体把它标记为开发环境(mark_dev_host),或在项目设置中添加,check_email就会让这些链接通过,而不是判定失败。 - 下次使用同一个账号。 让智能体在创建账号时记录账号的使用位置(
environment,例如staging,以及ios这样的标签),这样list_addresses就能再次找到它。如果 API 密钥 允许读取已保存的密码,get_sign_in一次调用即可返回账号及其密码。 - 报告。 要求生成运行报告:智能体先调用
start_run,最后调用finish_run,它会以 Markdown 返回报告。
优惠和营销邮件
Section titled “优惠和营销邮件”同样的工具也能测试应用在注册后发送的内容:
- 优惠券。 在应用中注册某个优惠后,智能体用
wait_for_code和kind: coupon等待,它会返回优惠券及其折扣、截止日期和到达用时(after_seconds)。智能体把优惠券输入应用的优惠码字段,分格输入的方式与验证码相同。 - 结账,只在沙盒中进行。 使用 Xcode 中的 StoreKit 测试或应用自带的测试模式,绝不使用真实卡片或进行真实购买。智能体用
record_coupon_result记录应用的处理结果:accepted、rejected或error,以及应用的提示信息。再次使用同一个码可以检查一次性码是否会被拒绝。 - 以打开应用的链接形式提供的优惠券,例如
myapp://redeem?code=…:wait_for_link带app: true会返回它,智能体用xcrun simctl openurl booted和该链接在模拟器上打开它。 - 每人限一次的优惠。 用同一地址的变体(
get_address_variants会列出,例如name+promo1@…)再次注册,然后用check_offers查看应用是否给了两次优惠。 - 特殊的名字和密码。
get_name_variants和get_password_variants为表单的其他字段提供值(撇号、重音、其他文字、各类符号、字段长度上限);智能体逐一输入并报告应用的行为。 - 同意设置。 对于注册时的开关和通知设置,智能体用
record_consent记录它的选择(以及开关初始是否打开),check_email按用户画像所在地的规则判断之后的营销邮件。 - 退订,从应用的设置页面,或在模拟器上打开邮件中的链接:智能体随后调用
mark_unsubscribed,之后check_unsubscribe会列出之后收到的所有营销邮件。收据类邮件应该仍会继续收到。
关于 Android,请参阅 用编程智能体测试 Android 应用。
如果要把这项检查保留为在 CI 中运行的 UI 测试,请参阅 iOS(XCUITest),或参阅 Maestro 了解同时覆盖 Android 的流程。它们的辅助函数在测试中做同样的事:检查并统计邮件,以已保存的账号登录或借用一个账号,并把每个测试添加到拉取请求的报告中。
对本页有疑问?
可以用任何语言提问。文档可以立即回答,你也可以把问题发给 Proxy Mail QA 团队,他们会用英文回复。