早上到工位,打开 Xcode,在 SwiftUI 文件里敲下一个@Observable class,AI 自动把后面十几行属性、网络请求甚至单元测试的骨架都补了出来。这是我过去半年的真实工作状态。人工智能在 iOS 开发里,早就不是发布会上的 Demo,它正在从尝鲜工具变成日常帮手——帮我们写代码、跑测试,也帮我们的用户理解文字、图片和声音。
这篇内容想聊清楚两件事:一是 AI 怎么帮 iOS 开发者干活,从自动补全到能读项目、能改代码的智能体;二是 iOS 开发者怎么把 AI 能力真正塞进 App 里,以及这个背景下值得抓住的职业机会。无论你是刚入门 Swift 的新手,还是带团队的技术负责人,里面涉及的思路、代码和踩坑经验应该都能直接用上。
1. 先搞清楚:AI 在 iOS 开发里到底改变了什么
1.1 两条主线,别搞混
很多朋友一听到"AI + iOS"就往"接入 ChatGPT"上想,这其实只看到了冰山一角。从 iOS 开发者的视角看,AI 的价值分两条完全不同的主线。
第一条是AI 帮你开发。它出现在你写代码的过程中:补全 SwiftUI 视图、生成网络层模型、写单元测试、分析崩溃日志、改 bug。这条线的主角是 Copilot、通义灵码、Cursor、Codex 这类编程助手和智能体。它们改变的是开发效率,影响的是 iOS 工程师的日常节奏。
第二条是你开发 AI 能力。把图像识别、语音识别、文本理解、对话生成这些能力作为功能做进 App 里。这条线的主角是 Core ML、Create ML,以及云端大模型 API。它们改变的是产品的用户体验,影响的是 App 的核心竞争力。
两条主线能力要求不同,但机会都很大。过去半年我最大的感受是:只盯着其中一条线,都算错过了一半机会。
1.2 为什么是"现在"这个时间点
因为 AI 进入 iOS 开发的门槛,已经低到个人开发者可以一个人单挑了。
首先是大模型 API 的价格。两三年前调用顶级模型做一次完整对话,成本还高得离谱,现在主流模型的问答和生成成本已经降到可以按商业产品去核算的程度,个人开发者也敢做试水产品了。
其次是端侧推理能力的提升。苹果从好几年前就开始在芯片里塞 Neural Engine,现在哪怕是两年前的 iPhone,跑一个经过优化的图像分类模型、OCR 模型,基本可以做到离线、实时、不发热。Core ML 框架也成熟了,普通 iOS 开发者不需要懂深度学习,也能把训练好的模型接进 App。
再就是苹果自己的态度。苹果已经明确把整套 AI 能力当成系统级能力来推,全局和原生的结合做得越来越深。作为 iOS 开发者,现在入场正好能踩在基础设施逐步完善的节点上。
那句热词说得挺准——人工智能正从尝鲜工具变成日常帮手。我身边已经有越来越多的同行,默认把 AI 编码助手当成"键盘以外最常用的开发工具"了。
2. 从自动补全到智能体:AI 辅助编码的实战配置
2.1 每天都能用的 AI 编码助手
先说结论:Xcode 自带的代码补全只能帮你少打几个字母,真正的 AI 编码助手能帮你写一整个模块。
我用过的方案里有 GitHub Copilot、Cursor、通义灵码,还有最近讨论度很高的 Codex。它们在 Xcode 里的体验差异很大,这里说几个实测感受:
- Copilot for Xcode:官方有 Xcode 插件,能给出行内建议和自然语言生成代码。但 Xcode 的编辑器插件机制不如 VS Code 开放,补全的触发和展示体验要糙一些。我的做法是写清楚注释意图,比如
// 根据用户ID生成默认头像的URL,它给出来的命中率会高很多。 - Cursor:如果在编辑器里写 Swift 再拷回 Xcode,体验胜在重构能力强,但来回切换成本有点高。我一般只在做大段代码生成或跨文件重构时切过去。
- 通义灵码:对中文注释的理解比较友好,团队协作时我推荐过给新手用,学习成本低,配置也简单。
- Codex CLI:属于智能体范畴,不止补全几行,而是能跑整个任务,后面单独说。
实操配置上,我强烈建议统一格式化工具。AI 生成的 Swift 代码经常在换行、缩进、空格上各有风格,大家在个人项目中无所谓,进团队项目就会让 diff 变得很难看。我在项目里都会接 SwiftFormat,AI 生成完的代码跑一遍格式化再提交,Review 时的噪音会小一个量级。
注意:不管是哪家的编码助手,给出的代码都要当"实习生代码"看待。遇到网络请求、权限、解包、线程切换这类敏感逻辑,必须亲手过一遍。我自己就遇到过 AI 推荐的 URLSession 配置里没有设置超时时间,结果线上接口慢的时候,用户界面能卡半天。
2.2 智能体(Agent)开始干活了
自动补全还只是"帮你写下一行",智能体已经能做到"读整个项目、改代码、跑测试、回报结果"。
我实测下来的一个典型场景是这样的:让 Codex 看看项目里的一个 SwiftUI 首页,然后说"给这个页面加一个下拉刷新,并在刷新完成后更新时间标签"。它会自己去找 ViewModel、找到数据源方法、改视图代码,然后用 xcodebuild 编译跑一遍,把错误反馈回来。这个过程比我想象的成熟得多,已经是可以进日常工作流的状态了。
社区里有个很热的问题:Codex 目前有 iOS Simulator 的能力吗?按我的实测,它能调用 xcodebuild、能跑模拟器里的单元测试,也能通过命令行启动模拟器。但如果你指望说一句"打开模拟器,点这个按钮,截个图看看效果",它还做不到稳定的全自动操作。更合理的用法是,让它完成"改代码 + 编译 + 跑现有测试"这条链路,视觉层面的验证还是交给人类。
用 Agent 干活,我的经验是把任务拆碎。不要让它"重构整个项目的网络层",而是"把 LoginService 从回调改成 async/await,并保持对外接口不变"。任务越具体,它给出可接收代码的概率越高。本质上,它就是一个速度极快、但需要你持续把关的实习生。
2.3 Xcode 场景下的具体配置清单
如果你是团队负责人,想推 AI 编码助手,我建议按这个顺序来:
- 先统一格式化:装 SwiftFormat,配置成保存时自动格式化。
- 再统一注入:让团队在 Xcode 里装同一款 Copilot 或灵码插件,避免各自为战。
- 最后定规则:约定 AI 只能生成无状态 UI 和测试代码,涉及业务逻辑、鉴权、支付的必须人工写。
- 把"AI 使用规范"写进 Code Review 清单,重点看 AI 代码里容易出的三类问题:过度解包、忽略异常、没处理弱引用循环。
说实话,设备配置部分每家公司的网络环境、团队规模都不一样,但思路是通用的:AI 提升效率,规则保证质量。没有规则的 AI 代码仓库,三个月后会变成没人敢动的代码坟墓。
3. 把 AI 做进 App:端侧 Core ML 与云端大模型怎么选
3.1 端侧方案:Core ML、Create ML 与模型转换
如果你做的是隐私敏感型 App,或者用户经常在弱网、无网环境下使用,端侧推理是首选。端侧方案的核心是 Core ML,它能把 PyTorch、TensorFlow 训练好的模型转成 iOS 能离线运行的格式。
转换本身不复杂,核心工具是 Python 的 coremltools,一段典型的转换长这样:
import coremltools as ct # 以 PyTorch 模型为例,转成 .mlpackage model = ct.convert( "model.pt", source="pytorch", convert_to="mlprogram", minimum_deployment_target=ct.target.iOS16, ) model.save("MyModel.mlpackage")转换只是第一步。真正花时间的是模型压缩和适配。我转过一个开源的中文摘要模型,默认权重塞进包体直接多了 800MB,完全不可接受。后来做了量化、剪枝,才压到 180MB 左右。这还是在能接受一点精度损失的前提下。所以选型时要想清楚:你的场景能不能接受模型变笨一点点,换来包体减小一大截。
对于完全不懂深度学习的 iOS 开发者,苹果给了另一条路:Create ML。它可以在图形界面或 Playground 里,用标注好的文字、图片直接训练出分类器、情感分析器、图像识别器。我试过用 Create ML 训练一个"发票拍照分类器",从准备几百张样图到训练出模型,一晚上就够,非常适合做产品 Demo 和上架验证。
注意:端侧模型对部署版本的兼容性要求很高。我踩过坑:某模型用 iOS 16 的部署目标转换,结果线上用户还有不少停留在 iOS 15,Core ML 直接拒绝加载。建议把最低部署版本写清楚,并用真机 + 老系统模拟器各跑一遍再发布。
3.2 云端方案:LLM API 集成与对话体验
端侧解决了隐私和离线,但说到自然语言理解、开放问答、复杂指令执行,还得靠云端大模型。对 iOS 开发者来说,集成云端大模型的核心不是"调 API",而是处理几个工程问题。
第一个是流式输出。用户问问题,你要是不做流式响应,一个请求可能要干等 5 到 10 秒,用户体验会非常差。好在 URLSession 本身就支持响应流,配合 Swift 的异步序列处理起来很顺手,逻辑大概长这样:
var request = URLRequest(url: url) request.httpMethod = "POST" request.setValue("application/json", forHTTPHeaderField: "Content-Type") request.httpBody = httpBody // 参数略 let session = URLSession(configuration: .default) let (responseStream, _) = try await session.bytes(for: request) for try await line in responseStream.lines { // 把 JSON 行解析出来,提取增量内容,逐字刷新 UI // 示意代码,生产环境需要处理超时、重试和鉴权失败 }第二个是上下文管理。大模型没有记忆,你要自己维护对话历史。工程上一般是把近几轮消息打包发给云端,但消息越长,Token 成本越高、响应越慢。我的建议是设定一个"修剪策略":超过 8 轮对话就把更早的内容压缩成摘要,插到系统提示词里。
第三个是失败降级。云端大模型不是 100% 可用的,接口超时、限流都常见。我在产品里做了一套降级逻辑:本地已完成关键判断,云端只负责补充性回答;云端挂了,就退回本地模板答案,保证用户不会面对一个空白的对话页。
3.3 不是二选一,而是 Hybrid 架构
不少开发者会纠结:端侧还是云端?我的观点是,对大多数产品而言,正确答案是"都要"。
| 对比维度 | 端侧 Core ML | 云端 LLM API |
|---|---|---|
| 延迟 | 毫秒级,本地执行 | 秒级,受网络影响 |
| 隐私 | 数据不出设备,天然合规 | 数据要上传,慎重处理敏感内容 |
| 成本 | 一次性研发,运行成本低 | 按 Token 计费,需要精细化控制 |
| 能力上限 | 取决于模型大小和压缩程度 | 依赖云端模型版本,能力迭代快 |
| 离线可用 | 完全可用 | 不可用 |
| 包体影响 | 明显增大 | 几乎无影响 |
Hybrid 的黄金法则是:简单、稳定、隐私敏感的判断走端侧;复杂、开放、需要创造力的任务走云端。
举一个我参与过的智能助手例子。用户问"把亮度调到一半",端侧先用意图识别判断出这是"系统控制指令",本地直接执行,全程不上网。用户问"帮我把这段文字总结成本周待办",端侧判断自己干不了,转给云端总结,再把结果回传。这套架构跑下来,平均响应速度提升 60% 以上,云账单也好看很多。
4. 三个能直接落地的 AI 场景:OCR、文本、自动化测试
4.1 图像识别与 OCR:用 Vision 框架做拍照识别
图像识别是 AI 在 iOS 端落地最成熟的方向之一。苹果的 Vision 框架可以完成文字识别、条码识别、人脸检测、矩形检测,不需要你自己训练任何模型。
最常用的场景是 OCR(光学字符识别),比如拍照翻译、票据录入、名片扫描。用 Vision 识别图片里的文字,代码非常短:
import Vision import UIKit func recognizeText(from image: UIImage) { guard let cgImage = image.cgImage else { return } let request = VNRecognizeTextRequest { request, error in guard let observations = request.results as? [VNRecognizedTextObservation] else { return } for observation in observations { if let candidate = observation.topCandidates(1).first { print("文字:\(candidate.string),置信度:\(candidate.confidence)") } } } request.recognitionLevel = .accurate request.recognitionLanguages = ["zh-Hans", "en-US"] request.usesLanguageCorrection = true let handler = VNImageRequestHandler(cgImage: cgImage, options: [:]) try? handler.perform([request]) }这里有两个直接影响识别率的细节。一是recognitionLevel选.accurate,虽然会慢一点,但准确率提升明显。二是recognitionLanguages要写清楚中英文混排,我一开始没加中文,遇到票据上的"人民币"识别成了乱码。
如果你要做的是图像分类,比如判断用户上传的是猫还是狗、是电子发票还是纸质发票,直接用 Create ML 训练一个图像分类器最省力。把几类图片分别放进文件夹,Create ML 会自动做数据增强,训练完导出的模型在 App 里用VNCoreMLRequest就能跑。我见过不少团队一开始想自己搭 CNN,最后都绕回了这条"傻瓜路线",因为它真的够用。
4.2 语音与文本智能:从转写到意图识别
语音转文字能用苹果的 Speech 框架,文本理解能用 Natural Language 框架。这两个框架的好处在于是系统级能力,离线也能跑一段,不需要额外接云服务。
中文文本里常见的需求是分词、词性标注和情感倾向。Natural Language 一行调用就能拿到结果:
import NaturalLanguage let text = "这家餐厅的上菜速度很快,服务也很周到。" let tagger = NLTagger(tagSchemes: [.lexicalClass]) tagger.string = text tagger.enumerateTags(in: text.startIndex..<text.endIndex, unit: .word, scheme: .lexicalClass) { tag, tokenRange in print("\(text[tokenRange]): \(tag?.rawValue ?? "未知")") return true } // 情感倾向,返回 -1.0(消极)到 1.0(积极)之间的分数 let sentimentTagger = NLTagger(tagSchemes: [.sentimentScore]) sentimentTagger.string = text let (score, _) = sentimentTagger.tag(at: text.startIndex, unit: .paragraph, scheme: .sentimentScore) print("情感分:\(score?.rawValue ?? "0")")我做过的一个用户反馈分类功能就是靠它搭起来的:先用 Natural Language 判断文本的情感倾向是正面还是负面,负面的再走一层关键词规则,自动打上"服务""物流""退换"这种标签。整套东西没有用一个深度学习模型,但用户反馈的自动化处理率能到 70% 以上,维护成本还特别低。
当然,如果你想做的是开放式的智能客服问答,那还是得上云端大模型。我建议把 Natural Language 做意图识别、云端大模型做生成回复,两者搭配起来,既快又省钱。这跟前一节说的 Hybrid 架构是一回事。
4.3 AI 自动化测试:让测试代码自己长出来
传统的 UI 测试最耗时间的环节是写 XCUITest 脚本——页面元素一改,脚本就废一片。现在 AI 的大招是:把页面结构丢给它,让它直接生成可跑的测试脚本。
举个例子,我让 AI 看了登录页的实现代码,它生成的测试长这样:
func testLoginAndEnterHome() throws { let app = XCUIApplication() app.launch() let accountField = app.textFields["account"] XCTAssertTrue(accountField.waitForExistence(timeout: 5)) accountField.tap() accountField.typeText("tester") app.secureTextFields["password"].tap() app.secureTextFields["password"].typeText("123456") app.buttons["登录"].tap() XCTAssertTrue(app.staticTexts["欢迎回来"].waitForExistence(timeout: 8)) }生成出来的脚本骨架基本能跑,但有几个固定会踩的坑:一是 AI 喜欢用app.buttons["登录"]这种文本定位,一旦文案变成"登 录"或"Sign In",测试就挂;二是断言经常写得太宽松,比如毫无道理地给所有按钮加waitForExistence,或者太严格,把布局完全锁死,UI 微调就红。我的经验是:把 AI 生成的测试当草稿,重点补齐"定位方式的稳定性"和"断言的合理性"这两处,再合入仓库。
再进一步,现在已经有团队把 Agent 挂到 CI 上:每次 MR 构建完,智能体看 diff、生成对应的 UI 测试、跑完把失败截图贴到评论里。这就是热词里说的 AI 测试开发方向。我虽然还没做成全自动,但已经半自动跑了几个月,最大的收益不是省了多少脚本工时,而是逼着开发把每个页面元素的 accessibilityIdentifier 写清楚——这对测试和维护都是长期收益。
5. iOS 开发者真正的机会:技能清单与转型路径
5.1 需要补齐的五块拼图
很多 iOS 开发者问我要不要转行去做算法工程师。我的回答一直是:不用,但能力模型要升级。基于我和身边人的实践,iOS + AI 需要补齐的是这五块:
- 端侧推理能力:能看懂 Core ML 模型结构,会做模型量化、压缩、内存评估。不要求你手写神经网络,但要知道模型为什么大、为什么慢。
- 大模型工程能力:对 Prompt 有手感,能设计系统提示词;理解 RAG(检索增强生成)的基本链路,知道什么时候该引入向量库;Fine-tuning 不用精通,但得知道它能解决什么、不能解决什么。
- 产品化能力:把模型能力翻译成用户语言。模型输出一个 JSON,你要能包装成用户看得懂的界面和交互。这是 iOS 开发者的传统强项,不要丢。
- 安全与质量意识:热词里提到人工智能偏见、人工智能应用与安全工程师,这些方向的本质问题是:模型输出可能错、可能偏、可能不安全。作为上架 App 的负责人,你至少要建立"AI 内容审核"的概念,包括敏感词过滤、生成内容标识、用户反馈闭环。
- 数据与评测思维:AI 训练师为什么越来越重要?因为模型效果好不好,不能靠感觉,要靠数据集和指标。你在开发 AI 功能时,至少要能定义一个"什么样的回答算好回答",并拉一个小样本集反复验证。
这五块拼图,不需要一次全补。按我个人的经验,先补 1 和 2,因为它们直接对应你能做什么功能。
5.2 从今天就能开始的行动清单
不用等公司给你 AI 项目,个人就能起手,我按难度从小到大排:
- 把 Create ML 文本分类器塞进一个 Swift Playground,对一小段中文做情感判断。半天。
- 给一个已有 App 加"拍照识别名片"的新功能,用 Vision 框架实现。一两天。
- 用 AI 编码助手把项目里一段 200 行的旧代码重构成 Swift 并发风格,然后交给同事 Review。一天。
- 选一个云厂商的模型 API,在 App 里实现一个支持流式输出的问答页面,包括上下文修剪和超时降级。一周。
- 把 AI 生成的 XCUITest 接入 CI,至少跑通"登录→首页→退出"这条冒烟链路。几天到两周。
做完这些,你对 AI 在 iOS 开发里的应用就有了完整手感,再谈机会就都是真话。
5.3 说点实在的:别焦虑,但别停在原地
每次聊 AI 替代开发者,都会有人慌。从我这些年的经验看,iOS 开发本身的基本功依然是稀缺资源:SwiftUI 的布局思维、并发编程的细节、内存和性能优化、对 App Store 审核规则的熟悉,这些都不是模型能轻易替代的。AI 反而让"会用 AI 的 iOS 工程师"更值钱了——因为你一个人能干的活变多了。
我个人在项目里最有体感的变化是,过去要一个后端工程师配合写接口文档,现在我可以让 AI 直接生成 Swift 的 Codable 模型和 Mock 数据;过去要等测试同学排期写 UI 用例,现在 AI 生成的草稿能直接把测试流程提前三天。人还是那两个人,但产出翻了一倍。
所以我的建议一直很简单:别焦虑它会不会取代你,去把它当成你的实习生。你依然是那个决定方向、把关质量、对结果负责的人。最后再分享一个小技巧,所有 AI 能力接入 App 之前,先在本地用文本测试把输入输出录一批快照,跑通之后再接 UI。这样排查问题时,你永远知道是模型理解错了,还是自己的逻辑错了。