夜雨聆风学习资料网

ARTICLE · 1234577

Copy APP 0.2:让 AI 在虚拟 Mac 里复刻 App

Copy APP 0.2:让 AI 在虚拟 Mac 里复刻 App

封面:为本文制作的概念插画,表达 Copy APP 与 ChatComputer 的组合;右侧窗口是示意,不是实测截图。

前段时间,我开发了 Copy APP CopyAPP:用越狱 iPhone 复刻任意APP。最初的目标,是让 AI 在越狱 iPhone 上完成一套连续的工作:观察一个 App,采集界面和运行证据,分析选定功能,再写出一个独立、能运行的实现,装回手机做对照。

越狱环境提供了获取应用包、观察运行时和检查沙盒的条件。结合 Frida、反汇编和可选的反编译工具,Agent 可以把界面上看到的行为,与实际采集到的代码和数据证据联系起来。

做着做着,我想到:既然 iOS 上已经能这样工作,macOS 上是不是也可以?桌面系统有窗口、菜单、快捷键和辅助功能接口,也更方便编译和运行独立应用,值得沿着这条路试下去。

恰好,前段时间我还做了另一个项目——ChatComputerChat Computer:让 AI 在一台虚拟 Mac 里干活。它能在一台干净的 macOS 虚拟机里,让 AI 截图、点击、输入,操作完整的桌面环境。

这两个项目就接上了:让 Copy APP 借助 ChatComputer 操作虚拟 Mac,观察指定软件,再把独立实现放回虚拟机对照。 经过长时间、多轮的 Codex 自动开发和测试,这条路径已经有了可以运行的结果。

这次发布的 Copy APP 0.2.0 保留了越狱 iOS 支持,同时加入 macOS 支持。文末会展示我用它做出的 Stocks 股票应用原型,源码和运行截图都已公开。

Copy APP 项目 : https://github.com/everettjf/copyapp

ChatComputer 项目 : https://github.com/chatcomputer/chatcomputer

为什么要放进虚拟 Mac?

如果直接让 AI 操作我的主力桌面,它移动鼠标、切换窗口、输入文字时,就可能和我的日常工作抢同一套输入。观察一个 App 往往还要反复打开窗口、修改设置、退出重启,桌面状态很容易互相影响。

有了 ChatComputer,这些动作可以发生在另一张桌面里。目标 App、测试文件和新编译的应用放在虚拟 Mac 中,我自己的编辑器、浏览器和工作文件留在主力环境,减少操作上的干扰。

图 1:自制环境分工示意。同一台物理 Mac 上,将日常工作与客体测试分开;这表示操作和配置边界,不是绝对安全隔离的保证。

另一个原因是,我希望把安装软件、修改文件、调整配置这类试验,尽量放在可单独管理的客体系统里。即使某次尝试弄乱了测试环境,也更容易判断影响范围,减少对主力系统的改动。

干净的环境也有利于做对照:先确认是哪台虚拟 Mac、哪个 App 构建、怎样的窗口状态,再重放相同流程。出了问题,至少能知道需要检查哪一段。

当然,虚拟机仍然使用宿主的 CPU、内存和磁盘,也可能通过共享目录、网络接触外部资源。快照不会回滚共享文件夹或外部服务;因此,隔离范围和恢复后的 App 状态仍需检查。

两个项目分别做什么?

ChatComputer 解决的是电脑控制:给 Agent 一个虚拟 Mac,以及看屏幕、操作键鼠的能力。Copy APP 负责把这些操作组织成有来源的分析、实现和对照过程。

图 2:复用项目现有的唯一英文架构图,转为 PNG。图中同时展示 iOS 与 macOS 路径;组件关系不代表所有 App 均已通过验收。

图中左侧是当前运行的 Codex 或 Claude Code:它决定先观察什么、如何解释证据、写什么代码。Copy APP 提供采集、重放、对照和校验工具,ChatComputer 执行虚拟桌面上的操作。

观察界面时,两种信息很有用。截图告诉 Agent 页面长什么样;辅助功能树,也就是 AX,提供窗口、按钮、文本框等元素的结构,帮助它找到控件、确认文字和状态。

一次点击之后,要检查实际发生了什么,而不是只看输入命令有没有成功返回。采集到的 App 身份、截图、结构和操作记录会保留下来,让后面的报告与实现能追溯到具体观察。

接下来,Agent 根据审阅后的行为说明建立独立工程,把原版和新 App 分开安装,再用相同流程检查结果。Mac 这条路径使用单独的 copyapp mac 命令和虚拟机身份,iOS 继续使用 USB 真机与原来的命令。

这里还有一个边界:iOS 已有的原生函数调查与反编译证据链,没有全部接入 Mac 路径。目前 Mac 侧主要围绕应用包、界面结构和选定行为展开,不能把“操作并重建了界面”直接写成“完整还原了底层代码”。

自动开发,时间花在哪里?

这次接入不是加一个截图接口就结束了。虚拟机初始化、采集器权限、环境身份、窗口位置、输入后的状态判断,以及中断后的恢复,都需要在实际桌面里反复验证。

开发过程中,我把工作持续交给 Codex:实现工具、运行检查、查看失败记录,再修复和重试。能编译只是其中一步;能否采集正确窗口、是否真的触发了目标行为、保存的截图能否对应同一次操作,都要分别确认。

到 v0.2.0 发布时,本地回归通过了 410 项测试,并完成隔离的 wheel 构建与安装检查。这些验证工具本身的逻辑;虚拟机里的 App 行为检查有自己的记录,不能把两类测试混在一起。

复刻本身也需要停止条件。为了避免一直微调边距、字体和动画,现在默认先约定 80/100 分、最多三轮实现/检查,首轮计入。用户可以改目标,但要先固定选定范围,检查核心行为并逐张审阅截图。

这个分数是范围内的审阅评分,不是“整个 App 有 80% 一样”。到达目标或轮数耗尽,就交付当前源码、可运行产物和剩余差异,把下一步是否继续的决定交回给用户。

最后的结果:一个能运行的 Stocks 原型

我选了 macOS 自带的 Stocks,也就是“股票”,作为这次的例子。现在仓库里已经有一个独立的 AppKit 工程,可以构建成自己的 .app,看到股票列表、详情和图表。

图 3:仓库公开的实际窗口截图,原样引用。画面是独立 Stocks 原型在宿主 Mac 上运行,价格和曲线为离线演示数据;不是 Apple 原版,也不是本文新增的虚拟机对照测试。

这次选定了三类行为:

  • 搜索股票代码,进入对应详情。
  • 切换图表周期,退出再打开后保留选择。
  • 创建、管理本地命名自选列表。

这些功能都有独立实现。工程使用自己的数据与存储,股票目录有限,价格、曲线和内容是离线演示,没有实时行情或 iCloud 同步,也没有附带 Apple 原版二进制、素材和账户数据。

实际验证到了哪一步?版本 7 在指定的 ChatComputer 0.9.11、macOS 27.0.1 客体里,对三条选定流程各跑三轮,9/9 组行为对照通过。

视觉上还有明显距离:207 对截图全部审阅过,每对都保留了明显差异判断,涉及内容替代、菜单、悬停反馈和样式等。Stocks 的严格交付验收仍未通过,它目前是选定行为的离线原型。

对我来说,这个结果证明了值得继续做的部分:Agent 能在虚拟 Mac 里观察原 App,写出独立工程,再回到同样的环境检查选定行为。现有源码也把做到了哪里、还有哪些差异展示出来,大家可以直接看代码和运行效果。

Stocks 示例源码与构建方法 : https://github.com/everettjf/copyapp/tree/main/examples/macos/Stocks

macOS 实施与验收记录 : https://github.com/everettjf/copyapp/blob/v0.2.0/docs/macos-implementation-plan.md

想试试,从自己的目标 App 开始

Stocks 是这次的成果与源码参考。实际使用的入口,是把你想分析或复刻的 App 告诉当前的 Coding Agent,让它先检查环境,再开始观察。

截至 2026-10-22,ChatComputer 官方的宿主要求是 Apple Silicon、macOS 27、至少 16GB 内存和约 70GB 可用空间。Copy APP 另外需要 Python 3.9+、Swift 编译器与 macOS SDK;构建 Xcode 工程时需要完整 Xcode。

图 4:依据官方说明与仓库安装脚本制作的安装卡,要求于 2026-10-22 核对;这是上手参考,不是本次新做的干净机器安装记录。

已有 Homebrew 时,可以使用图中的命令安装 ChatComputer;也可以下载官方 ZIP,将 App 放入“应用程序”,再到 Settings → Coding agents 配置命令行入口。Copy APP 则从仓库运行安装脚本,建立本地 CLI 环境。

在能执行本地命令的 Codex 或 Claude Code 中,替换下面的 App 名称,把整段任务复制进去即可:

请使用 Copy APP 和 ChatComputer,分析并独立复刻 macOS 上「App 名称」的选定行为。仓库 : https://github.com/everettjf/copyapp检出或复用仓库,先阅读 AGENTS.md、skills/copyapp-mac/SKILL.md 和 docs/macos-support.zh-CN.md。检查宿主与开发工具,需要时运行 sh scripts/bootstrap-macos.sh 安装 CLI,并从官方渠道安装 ChatComputer。引导我完成虚拟 Mac 初始化和必要授权,检查传输、采集器及准确客体身份。确认目标 App 已在客体中安装并能观察,再发现流程、编写报告和实现独立 App。全程使用当前 Agent 会话;按 docs/fidelity.md 约定选定范围,默认 80 分、最多三轮实现/检查。对照相同流程并逐张审阅截图,在 output/ 的唯一任务目录中分别保存 project/ 和 evidence/,交付源码、可运行产物、已验证范围及剩余差异。

首次配置中,系统权限和目标 App 状态仍需要确认。完成配置后,电脑控制由 ChatComputer 提供,规划和开发由当前 Agent 完成,不需要额外启动 ChatComputer 内置聊天模型。

如果只想研究一个功能,可以把任务改成“分析并交付行为报告,先不复刻”。从几条自己熟悉、能判断结果的流程开始,更容易看清这套工具能帮上什么忙。

Copy APP 网站与上手入口 : https://xnu.app/copyapp/

macOS 安装与使用指南 : https://github.com/everettjf/copyapp/blob/main/docs/macos-support.zh-CN.md

资料与源码

本文按我的开发经历整理;测试数字引用项目已有记录,没有新增设备验收。以下上游资料于 2026-10-22 核对。

Copy APP 源码 : https://github.com/everettjf/copyapp

Copy APP 0.2.0 发布说明 : https://github.com/everettjf/copyapp/releases/tag/v0.2.0

Stocks 独立示例 : https://github.com/everettjf/copyapp/tree/main/examples/macos/Stocks

有界复刻评分规则 : https://github.com/everettjf/copyapp/blob/v0.2.0/docs/fidelity.md

ChatComputer 项目与安装要求 : https://github.com/chatcomputer/chatcomputer

ChatComputer 下载 : https://github.com/chatcomputer/chatcomputer/releases

ChatComputer 隔离与数据说明 : https://github.com/chatcomputer/chatcomputer/blob/main/PRIVACY.md

相关学习资料