为什么 AI 写 iOS,质量还是不太行
行业里经常出现一组看似矛盾的数据:AI 生成的代码占比越来越高,研发效率却没有按同样比例增长。
原因并不神秘。AI 写出“语法正确、局部可用”的代码已经不难,难的是从正确代码走到可维护、可验证、能上线的代码。中间隔着一整套软件工程。
这不是 iOS 独有的问题。但落到 iOS,每一条都会被放大。
理解债:代码生成了,理解没有交接
人写代码时,写的人天然理解实现过程。AI 一次吐出几百行代码,那份理解不会跟着代码交到你手上。
理解成本没有消失,只是从“写代码的人”转移到评审者和维护者身上。产出越快,读懂它、验证它、确认它没有破坏既有架构的压力越大。
因此,代码生成占比高并不等于交付效率同样高。AI 接手的主要是“写”这一段,而需求拆解、方案判断、测试、评审、集成和发布仍然存在。整条链路的速度由最慢的一环决定。
iOS 的工具链是封闭的
iOS 开发强依赖 Xcode、签名、模拟器和真机。整条链路只能在 macOS 上完整运行,很多环节也没有真正等价的第三方替代品。
这意味着通用 AI 编程工具即使很擅长读写代码,也不一定天然具备以下能力:
- 识别正确的 workspace、scheme 和构建配置;
- 处理签名、证书和设备状态;
- 编译并安装到模拟器或真机;
- 拉起指定业务页面;
- 获取运行日志、界面层级和截图;
- 判断改动是否真的解决了问题。
问题不是模型不会写 Swift,而是模型的手伸不到完整工具链里。
模型学习 iOS,公开教材本来就少
大模型的能力来自公开语料。JavaScript、TypeScript、Python 等语言拥有更大量的公开项目、问答和修复记录;Swift 与 Objective-C 的公开代码规模明显更小。
同一道工程题,模型可能在前端生态里见过成千上万次,在 iOS 生态里只见过很少的变体。数据规模的差异最终会体现在:
- 对框架惯例不够稳定;
- 容易使用过时 API;
- 对大型工程约束理解不足;
- 面对 Objective-C 与 Swift 混编时更容易误判。
这类差距需要整个生态长期积累,很难靠某个团队短期补齐。
iOS 很多问题,静态读代码读不透
Objective-C 的动态派发、Runtime 替换、分类、协议注入和大量历史兼容代码,让“源码看起来会执行什么”与“运行时实际执行什么”之间存在距离。
不少问题只有程序真正跑起来才能判断:
- 某个方法最后落到哪个实现;
- 某个页面为什么没有出现;
- 下发数据是否经过多层转换;
- 布局是没有创建,还是创建后被隐藏;
- 崩溃来自本次改动,还是历史运行状态。
静态分析可以提出假设,但不能代替运行证据。
iOS 的反馈循环太贵
AI 编程真正有效,依赖的是一个循环:
写一点 → 跑一遍 → 看反馈 → 修正 → 再跑
前端改完代码,浏览器往往能很快热更新。iOS 的完整循环通常包含编译、签名、安装、启动、进入目标页面和收集证据。大型工程里,一轮可能需要几分钟。
反馈越慢,Agent 在相同时间里能完成的纠错轮数越少。它不是只“写得慢”,而是缺少足够多的机会发现自己错了。
这几件事还会互相加强:
- 工具链封闭,Agent 难以获得完整工程状态;
- 公开语料少,模型对 iOS 本就更不熟;
- 运行时动态,静态推理更容易偏;
- 真跑一轮又很贵,自我纠错次数不足;
- 质量不稳定,团队更不敢放权。
最终形成一个自我强化的循环。
能修的不是模型,而是闭环
有些限制短期改不了,例如公开语料规模。但工具接入和反馈链路是可以工程化的。
与其等模型突然更懂 iOS,不如把以下能力接进它的工作流:
- 自动发现并验证工程配置;
- 编译、安装和启动应用;
- 用 URL Scheme 或自动化路径进入目标页面;
- 按问题选择日志、UI 层级、截图或 crash report;
- 把证据与验收目标对照;
- 失败后根据新证据调整方案,而不是重复猜测。
这时 Agent 才从“会写 Swift 的文本生成器”变成“能在工程里做事的执行者”。
关键也不在于工具越多越好,而是要按“这轮需要验证什么”来选择工具:
- 验证数据,优先看日志或接口;
- 验证控件存在,优先看视图层级;
- 验证最终视觉结果,再看截图;
- 验证崩溃,必须看 crash report 与进程状态。
反馈闭环不是把所有工具都跑一遍,而是让每次动作都能得到可用于下一步决策的证据。
iOS 难啃,卡点更多在工具而不是脑子
AI 写 iOS 质量不稳定,并不能简单归结为“模型不够聪明”。
真正的问题是:它面对更少的训练数据、更动态的运行机制、更封闭的工具链和更昂贵的反馈循环。如果 Agent 只能读代码、改代码,却不能编译、运行和观察结果,它自然只能闭着眼睛猜。
把闭环接起来之后,模型没有变,结果却会明显变化。
iOS 这块骨头难啃,卡点更多在工具这头,不只在模型的脑子。