移动开发 AI 栈 — iOS + Android
Swift / Kotlin / React Native / Flutter 工程师真要上 App Store + Play 时会用的十个:Mobile App Developer agent、iOS Developer agent、Flutter Expert agent、Expo、Flutter、Swift、Kotlin、XcodeBuildMCP、Maestro E2E、Fastlane。按 框架 → AI UI → 构建 → 测试 → 上架 顺序装。
这个 pack 包含什么
移动工程师真要让 AI 把 app 推到 App Store + Play那一刻会用的栈 — 不是「2026 全 IDE 大全」那种列表。每个 pick 覆盖同一条阶梯的一格:先选你要写的框架,给 agent 足够的上下文在那个框架里 scaffold 真正的 UI,给它能编译并启动模拟器的构建工具,通过 E2E driver 在真机上验证屏幕能用,最后把签名好的产物推到商店、不用自己点上传按钮。
Pack 是故意多框架的 — Swift 走原生 iOS、Kotlin 走原生 Android、Expo + React Native 给 JavaScript 团队、Flutter + Dart 给想单代码库的团队。无论选哪个,五层(框架 → AI UI → 构建 → 测试 → 上架)都是一样的,变化的是每层下面的具体工具。把框架那几个 pick 当菜单 — 装你真要写的那一两个,再把外面包的四层流水线套上。
| # | 资产 | 层 | 做什么 |
|---|---|---|---|
| 1 | Claude Code Agent: Mobile App Developer | AI 编排 | 跨平台 agent,读仓库、调用合适的框架 agent、跑构建 |
| 2 | Claude Code Agent: iOS Developer | AI UI(iOS) | Swift / SwiftUI / UIKit 专家,写屏幕、导航、Core Data |
| 3 | Claude Code Agent: Flutter Expert | AI UI(Flutter) | Flutter 3+ 专家,写 widget、状态管理、platform channel |
| 4 | Expo | 框架(RN) | 通用 React Native 运行时 — iOS、Android、Web 同一代码库 |
| 5 | Flutter | 框架(跨平台) | Google 出品的跨平台 UI 套件,Dart + Impeller 渲染 |
| 6 | Swift | 框架(iOS) | Apple 现代语言,iOS / macOS / watchOS / visionOS |
| 7 | Kotlin | 框架(Android) | JetBrains 语言,Android 优先,也跨 JVM 和多平台 |
| 8 | XcodeBuildMCP | 构建(iOS) | 把 xcodebuild / simctl / 设备列表暴露给 agent 的 MCP server |
| 9 | Maestro | E2E 测试 | 声明式 YAML flow,iOS + Android,模拟器和真机都跑 |
| 10 | Fastlane | 上架 | TestFlight 上传、App Store Connect 元数据、Play Store 发布、证书 |
按这个顺序装(框架 → AI UI → 构建 → 测试 → 上架)
- 先选框架(第 4–7 件)。流水线其余部分依赖这个选择。Flutter (#1070) 适合想一份代码 + Google 级渲染、app 主要是自己写 UI 的场景。Expo (#1002) 适合 TypeScript 团队、需要 OTA 更新、能接受 JavaScript bridge 的场景。Swift (#1071) + Kotlin (#1072) 适合原生优先、每一个平台特性都重要的 app — 跨平台抽象就在这些地方漏。多数团队装两个 — 一个跨平台、一个原生 — 跨平台抽象漏的时候能下钻到原生。
- Mobile App Developer agent (#4377) — 编排器。读项目结构、判断改动是 iOS、Android 还是两边都要、然后转给专家 agent。日常驱动器;下面所有动作都从它走。
- iOS Developer agent (#4376) — Swift / SwiftUI / UIKit 专家。原生 iOS 屏幕、Core Data schema、AVFoundation 管道、SwiftUI modifier 套六层都靠它。它懂
@StateObject、@Observable、navigation stack、还有你忘掉的Info.plist隐私 key。 - Flutter Expert agent (#4522) — Flutter 3+ 专家。widget 树、状态管理(Riverpod / Bloc / Provider — 选一个就别换)、调原生 API 的 platform channel、
pubspec.yaml那套。和上面的 Flutter 框架(#1070)配对装。 - XcodeBuildMCP (#3065) — 给 agent 的构建 + 模拟器工具。没它,agent 写完 Swift 代码不能编译;有它,agent 能调
xcodebuild、列模拟器、boot 一个、装.app、读 log 回来。把写 iOS 代码的 agent 和能发布的 agent 之间的缺环补上。 - Maestro (#2950) — agent 能写的 E2E 测试。声明式 YAML(
tapOn、assertVisible、swipe)跑在 iOS 模拟器、Android 模拟器、USB 真机上。把 Appium / Detox / Espresso 的争论换成一个 agent 30 秒就能写 flow 的工具。 - Fastlane (#3074) — 上架层。自动化代码签名、TestFlight 上传、App Store Connect 元数据、Play Store 发布、截图生成。agent 写
Fastfile,你跑fastlane beta,下一个版本就进 TestFlight,你不用打开 Xcode Organizer。
它们怎么拼起来
产品想法 / Figma
│
▼
┌──────────────────────────────────┐
│ Mobile App Developer Agent │
│ (#4377) — 懂仓库的编排器 │
└──────┬───────────────────────────┘
│ 按平台分流
├──────────────┬──────────────┐
▼ ▼ ▼
┌────────────┐ ┌─────────────┐ ┌──────────────┐
│ iOS Dev │ │ Flutter │ │ Expo / RN │
│ Agent │ │ Expert │ │ (#1002) │
│ (#4376) │ │ (#4522) │ │ + JS / TS │
│ + Swift │ │ + Flutter │ │ │
│ (#1071) │ │ (#1070) │ │ │
└─────┬──────┘ └──────┬──────┘ └──────┬───────┘
│ │ │
▼ ▼ ▼
┌────────────┐ ┌─────────────┐ ┌──────────────┐
│ Kotlin │ │ XcodeBuild │ │ Metro / EAS │
│ (#1072) │ │ MCP (#3065) │ │ build │
│ Android │ │ build + sim │ │ │
└─────┬──────┘ └──────┬──────┘ └──────┬───────┘
└───────────────┼───────────────┘
▼
┌──────────────────┐
│ Maestro E2E │
│ (#2950) │
│ iOS + Android │
└────────┬─────────┘
│
▼
┌──────────────────┐
│ Fastlane (#3074) │
│ 证书 · TestFlight │
│ App Store · Play │
└────────┬─────────┘
│
▼
App Store / Play
关键连接点是 Mobile App Developer Agent + XcodeBuildMCP + Maestro:agent 写 Swift 或 Dart,XcodeBuildMCP 编译并 boot 模拟器,Maestro 证明屏幕真的能响应点击。没 XcodeBuildMCP,agent 发的代码在脑子里编译过;没 Maestro,TestFlight 才发现登录按钮在 Android 12 小屏不触发。
取舍(实话部分)
- 跨平台 vs 原生。Flutter / Expo 能做到 70% 的原生体验;最后 30%(触觉反馈、自定义键盘、share extension、平台隐私弹窗、Live Activities、App Clips、Wear OS tile)是抽象漏的地方。一个产品同时上两端、要快,选跨平台;某一个平台的深度集成就是产品本身,选原生。真实团队主 app 走 Flutter,那 5% 需要的功能写原生模块。
- Expo vs 裸 React Native。Expo 给你 OTA 更新、EAS Build、预打包原生模块、更快的本地循环。裸 RN 给你完整 Xcode / Gradle 访问、任意第三方 SDK。默认 Expo,撞墙再 eject — 多数团队永远不用 eject。
- Maestro vs Appium vs Detox。Maestro 在这个 pack 里是因为 agent 30 秒就能用 YAML 写 flow。Appium 更成熟、支持任何框架,但 WebDriver 那套很痛。Detox 给 RN 跑得快。Agent 驱动的测试场景,Maestro 在写作成本上赢。
- XcodeBuildMCP vs 自己跑 xcodebuild。你能从终端调
xcodebuild;MCP 把它包成 agent 能直接调的形式,你不用每次迭代都复制粘贴。价值在于agent 自主、不是构建更快。 - AI 生成 UI 的质量。第一稿 SwiftUI 从 agent 出来形状对、但导航模式经常错(NavigationStack vs NavigationView、sheet vs fullScreenCover、键盘避让方向)。合并前必须在模拟器跑一遍;reviewer 会抓到 agent 没看见的。
- Apple 审核风险。Apple 审核 4.2「最低功能」拒得比两年前狠。AI 拼出来的 MVP 如果就是 API 的薄壳一定挂。先做出真功能、再提交,不要在模型上面套一个聊天 UI。
- Fastlane vs Xcode Cloud vs EAS。Fastlane 哪都跑(本机、GitHub Actions、Bitrise)、保持可移植。Xcode Cloud 方便但只 iOS、锁定 Apple。EAS 给 Expo 用方便。Fastlane 是通用语言。
常见踩坑
- Apple 审核 4.2 被拒。「应用功能太少」— AI scaffold 出来的 MVP 最常见的拒因。包装 ChatGPT 的 wrapper、单屏工具、「AI 改照片」克隆都首次提交挂。先做一个真功能:离线状态、设置、账号、至少三个有意义的屏幕,再提交。
- Android 碎片化。Pixel 8 模拟器上看着漂亮,发出去,三星中端机 3:2 屏幕 + 非标密度上炸。至少三种真机形态测(小手机、大手机、平板)— Maestro 接设备农场是最便宜的方式。
- 缺隐私权限说明。iOS 5.1.1 拒原因:访问相机 / 麦克风 / 定位 / 相册而
Info.plist的NSCameraUsageDescription等缺失或太泛。agent 老忘这个;加一份提交前 checklist 把每个隐私 key 都 grep 一遍。 - IAP 沙箱测试漏掉。App Store Connect 3.1.1 拒原因:订阅 / IAP 流没用 sandbox tester 跑过。Sandbox 是另一个世界(独立 Apple ID、receipt 不同、跑得慢),迭代时容易跳。每次发版前用 Maestro flow 在 sandbox 账号上跑一遍 IAP 购买全流程。
- 没签名的包推 TestFlight。Fastlane 会处理证书和 provisioning profile(用
match共享 key)。手动做的话半夜 11:59 证书过期就来了。第一天就把match配好、key 存私有仓库、再不操心。 - 让 agent 把平台特定代码写进共享文件。Expo / Flutter 里到处
Platform.OS === 'ios'是维护税。把平台特定逻辑推到*.ios.tsx/*.android.tsx文件(Expo)或 platform channel(Flutter),共享层保持干净。 - 「模拟器看着没问题」就跳 Maestro。AI 移动开发最常见的回退是按钮 iOS 上 40pt(手指能点)而 agent 在 Android 上写成 20pt(鼠标能点、手指点不准);无障碍扫一次能抓到、手测永远抓不到。Maestro
tapOn用明确坐标 30 秒就暴露。 - 把 MCP 当可有可无的管道。没 XcodeBuildMCP,agent 只能让你跑
xcodebuild把输出贴回来。先把 MCP 接好(一个下午),后面整个 pack 天天受益。
跟这些 pack 搭配
这个 pack 是移动端。配 Frontend Engineer AI Toolkit — 设计交接和组件生成的套路完全能搬到移动端。配 AI Test Generation + E2E — 把 Maestro 的 mobile 闭环扩展到 web 和桌面端。配 Backend Engineer AI Toolkit — app 终归要接 API,那一栈和这一栈共用一套观测和发布工具。
10 个资产打包就绪
常见问题
Flutter vs React Native vs 原生 — 应该选哪个?
实话:看团队和你需要的平台特性。Flutter — 想要一份代码、固定意见的工具链(Dart、pubspec、Material/Cupertino widget 分流)、Google 级渲染,最适合 app 主要是自己写 UI 的场景。React Native + Expo — 团队 TypeScript 优先、需要 OTA 不走商店重审、能接受 JS bridge。原生 Swift + Kotlin — 平台特性就是产品(App Clips、Live Activities、Wear OS tile、复杂相机管道、watch app),跨平台抽象恰好在这些点上漏。真实团队 v1 跑 Flutter 或 Expo,热屏幕用量起来了再用原生重写那几屏。
Cursor / Claude Code 真能写 Swift 吗,还需要 Xcode 吗?
两个都要。Claude Code(通过 iOS Developer agent #4376)写 Swift / SwiftUI 写得不错 — 它懂 @StateObject、navigation stack、Combine vs async/await、Core Data schema、常见的 Info.plist 隐私 key。但 Xcode 还是要的,因为有些事只有 Xcode 能做:provisioning profile 签名、模拟器 runtime 下载、Instruments 性能分析、老项目的 Interface Builder、Apple 提交工具。能跑通的工作流:agent 在编辑器里写代码 + 跑单测,你切到 Xcode 做签名和上架那几步,XcodeBuildMCP (#3065) 让 agent 能跑构建和 boot 模拟器、你不用每次迭代都切窗口。
Apple 把我的包拒了 — 怎么让 AI scaffold 的 app 过审?
三类拒因覆盖 AI app 大约 80% 的拒:(1) 4.2 最低功能 — app 就是个壳,修法是加真功能(离线状态、账号、设置、≥3 个有意义的屏幕,不只是模型外面套聊天 UI)。(2) 5.1.1 隐私 — NSCameraUsageDescription / NSLocationWhenInUseUsageDescription 缺失或太泛;修法是写具体理由(「用于扫描发票做支出追踪」)+ 每个隐私敏感 API 都要有充分理由。(3) 3.1.1 IAP 没测 — 订阅流没在 sandbox tester 上走过;修法是每次提交前在 sandbox Apple ID 上测一次 IAP。建提交前 checklist 专门 grep 这三类;reviewer 是在模式匹配已知的坏形状、agent 不懂你的业务理由。
测 IAP 最便宜的方式是什么、不用花真钱?
Apple sandbox tester(免费,在 App Store Connect 建)和 Google Play license tester(免费,在 Play Console 配)是标准答案。两边都能用假卡跑完 IAP 全流程并立刻退款。踩坑:sandbox 订阅时长是分钟、不是月 — 1 年订阅在前 6 个续费周期里每 5 分钟续一次,然后停。测脚本要按压缩时间线写。自动化层面,RevenueCat 出免费 SDK 抽象两边 store 的 receipt 校验、自带 sandbox helper;配一个 Maestro flow (#2950) 在每次发版前用 sandbox 账号跑一遍购买循环。没有至少一次真 sandbox 购买 + 恢复测试不要上 IAP 包 — App Store Connect 3.1.1 拒是最贵的 bug 因为吃一个审核周期(1–3 天)。
AI 工具能搞定 push notification 吗,还是手动配?
配置那部分(iOS APNs key、Android FCM service account)还是一次性手动坑 — 没 agent 能帮你修 Apple Developer Account 证书。但集成那边越来越 agent 友好:Mobile App Developer agent (#4377) 能 scaffold APNs / FCM 客户端注册、写服务端发送代码(Firebase Admin SDK、OneSignal SDK、自己的 APNs HTTP/2 stack)、改 Xcode 项目的 entitlement 和 capability。发送侧,无聊但靠谱的开源选项(个人推送 Apprise #1871、跨渠道编排带模板和分群的 Novu #449)覆盖多数需求。不要自己撸 push 重试逻辑、选一个让 agent 接上。测试用模拟器的 notification payload 工具加真机 — APNs payload 在设备锁屏、被杀、低电量模式下表现不同、模拟器复现不全。