把一排真机装进Mac:用开源框架跑起iOS群控
prod-FARM-IOS-Core一周拿到574颗星,把真实iPhone做成可调度、可观测、可自托管的群控农场。看完这篇,你能在20分钟内判断它值不值得塞进你的自动化栈。

适合:需要在Mac上批量调度多台真iPhone、且不愿把数据交给云控厂商的开发者与运营团队。
先说结论
prod-FARM-IOS-Core是个把真实iPhone变成可脚本化设备的开源群控框架。它跑在Mac上,靠Appium把设备接进来,再用Postgres当调度中枢,配上针对TikTok这类App的现成工作流。对需要批量操作、又不放心把数据扔给第三方云控的人来说,这是一条值得认真看的路子。
它不是“装上就能月入十万”的神装,也不是另一个被吹上天的云手机。它的价值很朴素:用开源代码,把你能摸到的真机,变成一台台能听指挥的数字员工。
真正的问题
把一堆iPhone摞在桌上不难,难的是三件事。
第一,谁来调度。插着20台手机的Hub拔下来再插回去,脚本就崩了。框架必须能认出哪台在线、哪台卡住、哪台没电。
第二,谁来存状态。哪条视频发到第几个账号了、哪台机器上一次跑完是几点钟,这些数据如果只活在内存里,重启一次就全乱。Postgres在这里不是噱头,是给整个农场留一本账。
第三,出了事怎么收场。云手机厂商跑路是新闻,自托管方案崩了是你自己的事。Apache-2.0协议意味着代码摆在那里,但部署、升级、备份都得自己写剧本。
这三个问题不解决,买再多真机也是摆件。
怎么做更省力
第一步,先把Mac环境理顺。Xcode命令行工具、Node、libimobiledevice这几样是绕不开的。别急着接10台手机,先拿1台跑通启动脚本,确认Mac能看到设备、能用Appium握手。
第二步,引入Postgres做调度底座。每个设备对应一条状态记录,脚本执行前先抢锁、执行中持续心跳、执行完写回结果。这样哪怕中途拔线,恢复时也能知道任务卡在哪一步。
第三步,先跑官方给的TikTok工作流作为参考实现。这套工作流展示了如何把“打开App—滑动—发布”这种动作序列拆成可复用的步骤,比自己从零写要省力得多。理解清楚之后,再替换成你自己的业务动作。
第四步,搭建监控。设备掉线、温度过高、App崩溃,这些信号得有人看着。Mac自带的控制台日志加上简单的健康检查脚本,初期够用。
写自动化脚本前,先用AI短视频口播/演讲教练把要执行的业务流程口述一遍,它能帮你把模糊动作拆成有节奏的步骤清单,比直接动键盘更稳。
| 阶段 | 关键动作 | 容易踩的坑 |
|---|---|---|
| 环境准备 | 安装依赖、连接首台设备 | Xcode工具链版本错位 |
| 调度接入 | 部署Postgres、定义状态字段 | 忽略设备断线后的锁释放 |
| 工作流移植 | 参考TikTok示例替换动作 | 坐标硬编码,机型一变就废 |
| 稳定运行 | 心跳监控、失败重试 | 没有日志归档,出问题只能猜 |
哪些坑要避开
iOS版本号是第一个坑。每个大版本都可能调整权限模型,去年能跑的脚本今年就给你弹窗。写代码时别假设某个弹窗永远不出现。
USB带宽是第二个坑。Hub接太多设备会出现间歇性断连,不是脚本写错了,是物理层撑不住。必要时用带供电的独立Hub,别贪便宜。
App签名是第三个坑。批量操作TikTok这类App,账号风控和设备指纹绑得很紧。自托管不代表没有风控,只是风控规则由你亲眼看见,而不是藏在某个云厂商的黑盒里。
数据备份是第四个坑。Postgres里存的是调度状态,丢了就要重跑所有任务。哪怕一周一次,也比不备强。
现在就能动手
打开终端,确认Mac的系统版本在官方支持列表里。如果你的Mac是Apple Silicon,先跑Rosetta兼容模式测一次。
克隆仓库后,先别急着跑完整工作流。找到examples目录里最简单的一个脚本,只做“识别设备—截图—退出”这一件事。能跑通,就往里加Postgres;不能跑通,就回头检查依赖。
接着,准备一台备用iPhone,专门用来做冒烟测试。每次升级框架或iOS,先在这台机器上验证一遍,再推到生产设备组。
最后,给调度脚本写一份重启脚本。机器难免要维护,重启脚本能让你半夜被叫醒时,三分钟内恢复现场。