用 Claude Code 开发 iPhone 应用教程
作者:Mehdi Azizi
更新于 ,15分钟
安装 Claude Code,创建 Expo 项目,编写 CLAUDE.md,逐屏写提示词,再用 EAS 发到 TestFlight。
用 Claude Code 开发应用:简短回答
要用 Claude Code 开发应用,你需要付费的 Claude Code 使用权限(兼容的订阅,或按用量计费的 Console)、Node.js、一台装了 Expo Go 的 iPhone,以及一个 Expo 项目。你写一个 CLAUDE.md 文件,说明技术栈和规则;每次只让它做一个界面,每个界面都在 iPhone 上测试;最后用 EAS 把应用发到 TestFlight。
这篇教程是我那篇用 AI 开发 iOS 应用指南的补充,那篇讲的是 AI 擅长什么、会搞砸什么。这里直接动手:命令、文件、提示词。
我每天都用 Claude Code 和 Cursor 写 iOS 应用。我的技术栈:React Native、Expo、EAS、RevenueCat 和 Supabase。Solys(一款带小游戏的闹钟)和 TradaZen(一款交易练习应用)已经上架 App Store。Nolera 和 Clic 曾被 Apple 拒审,后来改好了。下面的内容都来自这些实践。
想看这套方法用在一款已上架应用上的样子,我记录了 TradaZen 从第一次提交到被 Apple 拒审、再到几次转向的全过程。这份经验总结可以和本教程的步骤对照着看。
第 1 步:准备好前提条件
在敲第一条命令之前,确认你已经准备好下面这些。
一个付费的 Claude 账号
claude.ai 的免费版不包含 Claude Code。根据 Anthropic 的文档,你需要 Pro、Max、Team、Enterprise 或 Console 账号。Pro 版就够入门,但有使用额度限制。
Node.js 和终端
Expo 需要 LTS 版本的 Node.js,macOS、Windows、Linux 都可以。Claude Code 支持 macOS 13 及以上、Windows 10 及以上,以及主流 Linux 发行版。
一台 iPhone 和 Expo Go
在 iPhone 上从 App Store 安装 Expo Go,这样不用编译自己的应用就能试第一批界面。创建项目之前,先在 Expo Go 页面上确认与你的安装兼容的 SDK 版本。最新 SDK 和 App Store 上分发的版本不一定同时可用:Expo 就专门说明过 2026 年 5 月出现的这种不同步。所以别照搬旧教程里的版本号。如果要用你自己的原生模块,就得准备一个开发构建(development build)。
Mac?不是必须的
iOS 构建由 EAS Build 在 Expo 的服务器上编译,使用的 Xcode 版本由你的 Expo SDK 决定(ITMS-90725),而且 EAS Submit 在 macOS、Linux 和 Windows 上都能用。所以用 PC 也能一路走到 TestFlight。没有 Mac 也能发布 iOS 应用这篇指南详细讲了整个流程。
Apple Developer 账号,晚点再说
写代码、在 App Store 版 Expo Go 里测试,都不需要它。等到要把应用发到 TestFlight 时才必须有。第 7 步会再讲。
第 2 步:安装 Claude Code
在 macOS、Linux 或 WSL 上,Anthropic 推荐用原生安装程序:
curl -fsSL https://claude.ai/install.sh | bash
在 Windows 上,打开 PowerShell:
irm https://claude.ai/install.ps1 | iex
然后确认安装成功:
claude --version
如果你更喜欢 npm,命令是 npm install -g @anthropic-ai/claude-code。前面别加 sudo,文档明确不建议这样做。
第一次运行 claude 时,会打开浏览器让你登录账号。之后你直接用中文写就行:Claude 会读取你的文件、提出修改建议、运行命令,前提是你同意。
第 3 步:创建 Expo 项目
进入你存放项目的文件夹,运行:
npx create-expo-app@latest my-app
cd my-app
npx expo start
如果工具让你在“兼容 App Store 版 Expo Go”和“最新 SDK”之间选择,这次练习就选兼容。无论如何,继续之前都要确认创建出来的版本受你 iPhone 上安装的 Expo Go 支持。等项目需要时,再准备开发构建。
终端里会出现一个二维码。用 iPhone 的相机扫描它,应用就会在 Expo Go 里打开。第一次经常卡在一个细节上:只有当 Expo CLI 和 Expo Go 登录的是同一个 Expo 账号时,Expo Go 才会打开你的项目。在电脑上运行 npx expo login,再在应用里登录同一个账号。
为什么选 Expo 而不是 Swift?Claude 非常熟悉 React Native,而且不用 Mac 就能测试。我在 用 React Native 和 Expo 开发移动应用这个页面里解释了这个选择。
记住 Expo Go 的一个限制:它只包含自带的那些原生模块。一旦你加了它不认识的原生库,比如应用内购买,就需要开发构建。做前几个界面时这不是问题。
选对测试环境
Expo Go、开发构建和 TestFlight 证明的东西不一样。Expo 把开发构建描述为你自己的测试版应用,带有项目需要的原生模块。
| 你想验证什么 | 在哪里测试 | 这种测试证明不了什么 |
|---|---|---|
| 显示第一个界面,试试导航 | Expo Go,SDK 版本兼容 | Expo Go 中没有的原生模块的表现 |
| 使用项目里新加的原生库 | 包含这个库的开发构建 | 正式分发的版本,以及 Apple 是否会通过 |
| 走一遍给测试者的应用,再测试内购 | 发到 TestFlight 的构建,加上配置正确的商品 | 真实客户付款,以及上架销售是否获批 |
加依赖之前,先问 Claude:“它和我的 SDK 以及当前测试环境兼容吗?需要重新编译应用吗?请以文档为依据回答。”这样你就不会花一整晚去修一个 Expo Go 根本加载不了的模块,或者一个因为非公开 API 在上传时被拒的 SDK。
第 4 步:编写项目的 CLAUDE.md 文件
这是回报最高的一步。Claude Code 可以保留项目记忆,但规则得你写明白。放在项目根目录的 CLAUDE.md 文件,为每次会话提供统一的指令。Claude 猜不到的东西,就写在这里。
在项目文件夹里运行 claude,然后输入 /init。根据文档,Claude 会分析项目,并根据找到的命令和约定生成第一版 CLAUDE.md。之后你再补上自己的规则。Anthropic 建议控制在 200 行以内:文件越长,指令越不容易被遵守。
下面是一个简短的例子,和我实际用的差不多:
# 我的应用
## 技术栈
- Expo(create-expo-app 生成的 SDK)、React Native、严格模式 TypeScript
- 导航:Expo Router,app/ 下每个界面一个文件
- 数据:Supabase(以后再接),应用里绝不放密钥
## 规则
- 一次只做一个界面。不要改动请求范围之外的文件。
- 不使用以 point 为单位的固定高度:尺寸相对于屏幕,
内容可能超出时使用 ScrollView。
- 每个界面处理 3 种状态:加载中、空、错误。
- 界面文字使用法语,保留重音符号。
- 改动超过 2 个文件之前:先给出计划,等我同意。
## 命令
- 启动:npx expo start
- 测试:使用 package.json 中实际存在的脚本。
如果还没有,就说明这一点;不要宣称测试已通过。
- 类型检查:npx tsc --noEmit
- 每次修改后:运行测试和类型检查,然后告诉我
改了什么,以及如何在 iPhone 上验证。
关于固定高度的那条规则不是随便写的。第 6 步会再讲。
第 5 步:一次只为一个界面写提示词
“给我做一个带订阅的习惯追踪应用”会产出一个庞大、脆弱、根本没法审阅的项目。有效的做法正好相反:一个请求,一个界面,一个五分钟内就能测试的结果。
先做计划
凡是涉及多个文件的改动,都切到计划模式。按 Shift+Tab,直到状态栏出现 plan mode on。在这个模式下,Claude 会读文件并提出计划,但在你同意之前什么都不改。你审阅、修正,然后确认。
第一个用来定范围的提示词大概是这样:
我想做一个习惯追踪应用。第 1 版:只有一个功能,
勾选当天的习惯。请列出需要的界面和
文件夹结构。暂时不要写代码。
描述界面、状态和边界情况
接下来,每个界面一个提示词。边界情况你点得越明确,Claude 越不容易漏掉:
创建界面 app/index.tsx,列出当天的习惯。
- 每一行:习惯名称、复选框、当前连续天数。
- 空状态:一段文字和一个“添加习惯”按钮。
- 加载状态,以及带“重试”按钮的错误状态。
- 数据暂时来自一个本地数组。
- 在 iPhone SE 和最大尺寸的 iPhone 上都要显示正常:
不用固定高度,列表可以滚动。
最后运行测试和类型检查。
修正时别让它全部重写
某个细节不对时,说得具体一点,并限定范围:
在我的 iPhone 上,列表很长时,“添加习惯”按钮会被
底部栏挡住。只修复 app/index.tsx 里的这个问题,
不要动其他文件。请解释原因。
你也可以把截图粘贴到终端里:Claude 能看懂。
练习:重启后依然保持勾选的习惯
这是一个在你自己的项目里完成的教学练习,不是某个已交付功能的截图。目标是从一个生成出来的界面,走到一个可验证的行为。它不需要用户账号,也不需要应用内购买。
- 只保留一个本地习惯,名为“阅读 10 分钟”。
- 要求一个复选框,以及与你的 Expo 项目兼容的本地存储。
- 要求智能体说明改了哪些文件、可能新增的依赖,以及实际执行过的命令。
- 在 iPhone 上安装或打开应用,然后完成下面的检查。
基于现有界面,让“阅读 10 分钟”这个习惯可以勾选,
并在关闭再重新打开应用后保留它的状态。
使用与项目依赖兼容的本地存储。
不要创建账号、服务器、订阅或额外的统计功能。
写代码之前,先说明你会如何处理加载,以及读取或保存
失败的情况。然后做一次范围有限的修改。
最后列出:改动的文件、执行的命令、未测试的限制,
以及在 iPhone 上验证结果的具体步骤。
| 在 iPhone 上的操作 | 预期结果 | 如果失败 |
|---|---|---|
| 第一次打开应用 | 习惯和复选框可见,没有报错 | 检查初始状态和存储的加载 |
| 勾选后关闭并重新打开应用 | 习惯仍是勾选状态 | 检查同一个键的写入和读取 |
| 取消勾选后重启 | 习惯仍是未勾选状态 | 确认 false 值也被保存了 |
| 在飞行模式下重走一遍流程 | 本地功能仍然可用 | 找出无故添加的网络依赖 |
| 调大字体 | 名称和控件仍然可以使用 | 去掉会截断文字或遮住操作的约束 |
某一行失败时,别直接说“全部重写”。描述操作、预期结果和实际结果。比如:“重启后,我之前勾选的复选框又变空了。请解释原因,并在不改设计的前提下修复持久化。”
下载 CLAUDE.md 模板和检查清单(.md)。用你的编辑器或笔记应用打开。交给智能体之前,先把里面的命令改成适合你项目的。
第 6 步:审阅和测试
Claude Code 写出的代码看起来都是对的。到底对不对,只有你的测试和 iPhone 说了算。
用测试防止弄坏已经能用的功能
应用越大,每次请求就越可能弄坏一个已经验证过的界面。Expo 创建的项目没有测试:先让 Claude 按 Expo 文档的建议,安装 Jest 和 jest-expo。然后让它为重要逻辑写测试(计算连续天数、校验表单),并在每次修改后运行。这就是要把测试命令写进 CLAUDE.md 的原因:Claude 会自动执行,不用你每次提醒。有了规则文件和测试,AI 弄坏原有功能的情况会少很多。
审阅每一次修改
你不需要看懂每一行。但你得知道改了哪些文件、为什么改。如果 Claude 动了一个不相关的文件,接受之前先问原因。然后再问一句:“这里有什么可能出问题?”
在小屏和大屏 iPhone 上都检查
这是我付出代价最大的一课。Solys 曾因第 2.1 条被 Apple 拒审:在 iPad Air 上,应用以 iPhone 兼容模式运行,引导流程里的演示根本赢不了。原因是:高度用固定的 point 值写死了,没有相对屏幕尺寸。在我的 iPhone 上一切正常。代码审阅过,测试也全绿。但没有任何工具在另一种尺寸下看过这个界面。
从那以后,每个界面我至少在最小和最大的 iPhone 上各检查一遍。如果你只有一部手机,用 Mac 上的 Xcode 模拟器,或者找个用别的机型的朋友帮忙就行。特别注意长文本、表单弹出键盘时的样子,以及固定在底部的按钮。
Claude Code 做不好的事
Claude Code 在界面和逻辑上表现出色。出了你的项目文件夹,它就没那么可靠了。
签名和证书
如果没有获得授权连接你的 Apple 账号,Claude 不知道账号的状态。它可能会编出一套把 Xcode 和 Expo 混在一起的证书流程。签名交给 EAS 处理:Expo 的文档说明,连接你的 Apple Developer 账号后,EAS CLI 可以帮你生成并保存这些文件。
App Store Connect
商品页、隐私声明、截图和法律链接,都是需要在 App Store Connect 里核对的数据。现在 Claude Code 可以通过它的 Chrome 集成,在已登录的浏览器里操作,前提是有相应权限。但这不能保证字段都正确:你要自己核对信息、检查使用的账号,并亲自确认各项承诺和提交审核。
订阅
写一个付费墙只要十分钟。让 App Store Connect 里的商品、它们在 RevenueCat 里的配置和代码三者对上,就是另一回事了。标识符差一个字符,审核人员看到的付费墙就是空的。最常见的坑都列在新手常犯的 iOS 付费墙错误里。
边界情况
没有指令时,Claude 只处理正常流程。没网、列表为空、购买中断:这些得你自己点出来。
Supabase 安全
Claude 在 Supabase 里建表时,检查行级安全(RLS)是否已开启,并且有策略把每个用户限制在自己的数据范围内。还要检查应用代码里没有出现任何密钥。一接上数据库,就把这两条禁令写进你的 CLAUDE.md。
第 7 步:用 EAS 发到 TestFlight
根据用到的模块,你的界面已经在 Expo Go 或开发构建里验证过了。现在来做要分发给测试者的构建。
准备 EAS
现在你需要一个付费的 Apple Developer 账号:Expo 也提醒过,向 App Store 提交应用必须有它。然后安装 Expo 的工具并配置项目:
npm install --global eas-cli
eas login
eas build:configure
在 app.json 的 ios.bundleIdentifier 下添加一个唯一的 bundle 标识符,例如 com.yourname.myapp。
编译并上传
eas build --platform ios --profile production
eas submit --platform ios
第一条命令在 Expo 的服务器上编译应用。第一次运行时,EAS 会提议连接你的 Apple 账号来创建证书。第二条命令把构建上传到 App Store Connect。你也可以用 eas build --platform ios --auto-submit 一次完成。
构建要先经过 Apple 处理才会出现在 TestFlight 里,而这个处理过程也可能拒绝它,比如图标透明会报 ITMS-90717。所以上传成功不代表已经可以安装:去 App Store Connect 里查看它的状态。内部测试者、外部测试者和 Beta 版审核,我在 用 TestFlight 测试 iPhone 应用这篇指南里都讲了。
在这个构建上重做一遍第 6 步的检查。在 Expo Go 里能跑的应用,到了生产环境仍可能崩溃,比如缺少某个原生模块时。
实际要花多少钱
以下是各服务公布的价格,于 2026 年 9 月 27 日核实,单位为美元。实际扣费还取决于你所在的地区、税费和用量:订阅前请先确认方案。
- Claude 订阅:Pro 方案每月 20 美元,按年付费为每月 17 美元。Max 方案每月 100 美元起,用量更多。
- Apple Developer 账号:每年 99 美元,使用 TestFlight 和 App Store 必须有。
- EAS:Expo 的免费方案每月包含 15 次 iOS 构建,排在低优先级队列里。Starter 方案每月 19 美元,超出部分另按用量计费。
对一个小原型来说,只要不超出额度,Pro 加 EAS 免费方案就可以作为起点。上 TestFlight 之前加上 Apple 账号,然后把真正需要的服务单独算钱:数据库、存储或付费 API。第一款应用的预算模板可以帮你列出这些项目。你花在配置和验证上的时间也要算进去。
实话实说的局限,以及大家卡在哪里
Claude Code 改变了谁能做 iPhone 应用。但它没有改变 Apple 对上架的要求。被拒来得很快:Solys 被拒过,Nolera 和 Clic 也是。最常见的原因我写在了 Apple 为什么拒绝你的应用里。
照着这篇教程,你可以独自走到 TestFlight。大家最常卡住的地方在那之后:接入订阅、给审核人员准备材料、看懂拒审原因。想了解整个流程的全貌,可以看开发 iPhone 应用这个页面。
这部分内容,iOS Kit 汇集了我的应用的起步代码(包括订阅)、每一步的 Claude Code 技能,以及 Apple Review Kit。完整路径在用 Claude Code 开发 iOS 应用培训页面上。
已经卡住了,又不知道卡在哪?免费诊断会告诉你真正拖住你的是什么,并把我的 Apple 防拒审清单发给你。
常见问题
不会写代码,能用 Claude Code 做 iPhone 应用吗?
做界面和简单逻辑可以,前提是每一步都审阅和测试。但如果你希望什么都不用懂,那不行。你得会看错误信息、运行命令、检查 Claude 改了什么。这些边做边学,很快就能掌握。
Claude Code 免费吗?
不免费。Claude Code 需要 Pro、Max、Team、Enterprise 或 Console 账号。claude.ai 的免费版不包含它。Pro 方案可以入门,但要留意使用额度。
用 Claude Code 开发 iOS 应用需要 Mac 吗?
不需要。你可以在任何电脑上写代码,在 iPhone 上用 Expo Go 测试,再由 EAS 在 Expo 的服务器上编译和上传应用。Mac 用来跑模拟器还是挺方便的,但不是必须的。
开发 React Native 应用,用 Claude Code 还是 Cursor?
两个我每天都在用。Claude Code 在终端里工作,能自己连续完成修改和测试。Cursor 是一个编辑器。方法比工具更重要:定好规则,一次一个界面,写测试。
用 Claude Code 发布第一款应用要多久?
取决于应用的规模和你投入的时间。只有一个功能的应用会快得多。最难预测的部分仍然是 Apple 的审核。
Claude Code 能配置应用内订阅吗?
它可以写付费墙和 RevenueCat 的代码。在接入工具并获得相应权限后,它也可以在各个后台里操作。但千万别因为代码写好了,就认定商品已经配置好:核对标识符、价格和购买后的权益,然后在 TestFlight 上测试购买和恢复购买。iOS 付费墙的常见错误列出了需要检查的要点。