# 用 Claude Code 开发 iPhone 应用教程

> 安装 Claude Code，创建 Expo 项目，编写 CLAUDE.md，逐屏写提示词，再用 EAS 发到 TestFlight。

原始页面：[用 Claude Code 开发 iPhone 应用教程](https://devoria.fr/zh-hans/blog/claude-code-iphone-app-tutorial)
作者：[Mehdi Azizi](https://devoria.fr/zh-hans/mehdi-azizi)
发布：2026-09-23
内容最后修订：2026-10-09


## 用 Claude Code 开发应用：简短回答

要用 Claude Code 开发应用，你需要付费的 Claude Code 使用权限（兼容的订阅，或按用量计费的 Console）、Node.js、一台装了 Expo Go 的 iPhone，以及一个 Expo 项目。你写一个 `CLAUDE.md` 文件，说明技术栈和规则；每次只让它做一个界面，每个界面都在 iPhone 上测试；最后用 EAS 把应用发到 TestFlight。

这篇教程是我那篇[用 AI 开发 iOS 应用](https://devoria.fr/zh-hans/blog/build-ios-app-with-ai-pitfalls-checks)指南的补充，那篇讲的是 AI 擅长什么、会搞砸什么。这里直接动手：命令、文件、提示词。

我每天都用 Claude Code 和 Cursor 写 iOS 应用。我的技术栈：React Native、Expo、EAS、RevenueCat 和 Supabase。Solys（一款带小游戏的闹钟）和 TradaZen（一款交易练习应用）已经上架 App Store。Nolera 和 Clic 曾被 Apple 拒审，后来改好了。下面的内容都来自这些实践。

想看这套方法用在一款已上架应用上的样子，我记录了 [TradaZen 从第一次提交到被 Apple 拒审、再到几次转向的全过程](https://devoria.fr/zh-hans/blog/tradazen-case-study-launch-iphone-app)。这份经验总结可以和本教程的步骤对照着看。

## 第 1 步：准备好前提条件

在敲第一条命令之前，确认你已经准备好下面这些。

### 一个付费的 Claude 账号

claude.ai 的免费版不包含 Claude Code。[根据 Anthropic 的文档](https://code.claude.com/docs/en/setup)，你需要 Pro、Max、Team、Enterprise 或 Console 账号。Pro 版就够入门，但有使用额度限制。

### Node.js 和终端

Expo 需要 [LTS 版本的 Node.js](https://docs.expo.dev/get-started/create-a-project/)，macOS、Windows、Linux 都可以。Claude Code 支持 macOS 13 及以上、Windows 10 及以上，以及主流 Linux 发行版。

### 一台 iPhone 和 Expo Go

在 iPhone 上从 App Store 安装 Expo Go，这样不用编译自己的应用就能试第一批界面。创建项目之前，[先在 Expo Go 页面上确认与你的安装兼容的 SDK 版本](https://expo.dev/go)。最新 SDK 和 App Store 上分发的版本不一定同时可用：Expo 就专门说明过 [2026 年 5 月出现的这种不同步](https://expo.dev/changelog/expo-go-and-app-store-may-2026)。所以别照搬旧教程里的版本号。如果要用你自己的原生模块，就得准备一个开发构建（development build）。

### Mac？不是必须的

iOS 构建由 EAS Build 在 Expo 的服务器上编译，使用的 Xcode 版本由你的 Expo SDK 决定（ITMS-90725），而且 [EAS Submit 在 macOS、Linux 和 Windows 上都能用](https://docs.expo.dev/submit/ios/)。所以用 PC 也能一路走到 TestFlight。[没有 Mac 也能发布 iOS 应用](https://devoria.fr/zh-hans/blog/publish-ios-app-without-mac-expo-eas)这篇指南详细讲了整个流程。

### Apple Developer 账号，晚点再说

写代码、在 App Store 版 Expo Go 里测试，都不需要它。等到要把应用发到 TestFlight 时才必须有。第 7 步会再讲。

## 第 2 步：安装 Claude Code

在 macOS、Linux 或 WSL 上，Anthropic 推荐用原生安装程序：

```bash
curl -fsSL https://claude.ai/install.sh | bash
```

在 Windows 上，打开 PowerShell：

```powershell
irm https://claude.ai/install.ps1 | iex
```

然后确认安装成功：

```bash
claude --version
```

如果你更喜欢 npm，命令是 `npm install -g @anthropic-ai/claude-code`。前面别加 `sudo`，文档明确不建议这样做。

第一次运行 `claude` 时，会打开浏览器让你登录账号。之后你直接用中文写就行：Claude 会读取你的文件、提出修改建议、运行命令，前提是你同意。

## 第 3 步：创建 Expo 项目

进入你存放项目的文件夹，运行：

```bash
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 才会打开你的项目](https://docs.expo.dev/get-started/start-developing/)。在电脑上运行 `npx expo login`，再在应用里登录同一个账号。

为什么选 Expo 而不是 Swift？Claude 非常熟悉 React Native，而且不用 Mac 就能测试。我在 [用 React Native 和 Expo 开发移动应用](https://devoria.fr/zh-hans/expertise/react-native-expo-mobile-app)这个页面里解释了这个选择。

记住 Expo Go 的一个限制：它只包含自带的那些原生模块。一旦你加了它不认识的原生库，比如应用内购买，就需要开发构建。做前几个界面时这不是问题。

### 选对测试环境

Expo Go、开发构建和 TestFlight 证明的东西不一样。[Expo 把开发构建描述为](https://docs.expo.dev/develop/development-builds/introduction/)你自己的测试版应用，带有项目需要的原生模块。

| 你想验证什么                     | 在哪里测试                                 | 这种测试证明不了什么                  |
| -------------------------------- | ------------------------------------------ | ------------------------------------- |
| 显示第一个界面，试试导航         | Expo Go，SDK 版本兼容                      | Expo Go 中没有的原生模块的表现        |
| 使用项目里新加的原生库           | 包含这个库的开发构建                       | 正式分发的版本，以及 Apple 是否会通过 |
| 走一遍给测试者的应用，再测试内购 | 发到 TestFlight 的构建，加上配置正确的商品 | 真实客户付款，以及上架销售是否获批    |

加依赖之前，先问 Claude：“它和我的 SDK 以及当前测试环境兼容吗？需要重新编译应用吗？请以文档为依据回答。”这样你就不会花一整晚去修一个 Expo Go 根本加载不了的模块，或者一个因为非公开 API 在上传时被拒的 SDK。

## 第 4 步：编写项目的 CLAUDE.md 文件

这是回报最高的一步。Claude Code 可以保留项目记忆，但规则得你写明白。放在项目根目录的 `CLAUDE.md` 文件，为每次会话提供统一的指令。Claude 猜不到的东西，就写在这里。

在项目文件夹里运行 `claude`，然后输入 `/init`。[根据文档](https://code.claude.com/docs/en/memory)，Claude 会分析项目，并根据找到的命令和约定生成第一版 `CLAUDE.md`。之后你再补上自己的规则。Anthropic 建议控制在 200 行以内：文件越长，指令越不容易被遵守。

下面是一个简短的例子，和我实际用的差不多：

```markdown
# 我的应用

## 技术栈

- 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`。[在这个模式下](https://code.claude.com/docs/en/common-workflows)，Claude 会读文件并提出计划，但在你同意之前什么都不改。你审阅、修正，然后确认。

第一个用来定范围的提示词大概是这样：

```text
我想做一个习惯追踪应用。第 1 版：只有一个功能，
勾选当天的习惯。请列出需要的界面和
文件夹结构。暂时不要写代码。
```

### 描述界面、状态和边界情况

接下来，每个界面一个提示词。边界情况你点得越明确，Claude 越不容易漏掉：

```text
创建界面 app/index.tsx，列出当天的习惯。
- 每一行：习惯名称、复选框、当前连续天数。
- 空状态：一段文字和一个“添加习惯”按钮。
- 加载状态，以及带“重试”按钮的错误状态。
- 数据暂时来自一个本地数组。
- 在 iPhone SE 和最大尺寸的 iPhone 上都要显示正常：
  不用固定高度，列表可以滚动。
最后运行测试和类型检查。
```

### 修正时别让它全部重写

某个细节不对时，说得具体一点，并限定范围：

```text
在我的 iPhone 上，列表很长时，“添加习惯”按钮会被
底部栏挡住。只修复 app/index.tsx 里的这个问题，
不要动其他文件。请解释原因。
```

你也可以把截图粘贴到终端里：Claude 能看懂。

## 练习：重启后依然保持勾选的习惯

这是一个在你自己的项目里完成的教学练习，不是某个已交付功能的截图。目标是从一个生成出来的界面，走到一个可验证的行为。它不需要用户账号，也不需要应用内购买。

1. 只保留一个本地习惯，名为“阅读 10 分钟”。
2. 要求一个复选框，以及与你的 Expo 项目兼容的本地存储。
3. 要求智能体说明改了哪些文件、可能新增的依赖，以及实际执行过的命令。
4. 在 iPhone 上安装或打开应用，然后完成下面的检查。

```text
基于现有界面，让“阅读 10 分钟”这个习惯可以勾选，
并在关闭再重新打开应用后保留它的状态。
使用与项目依赖兼容的本地存储。
不要创建账号、服务器、订阅或额外的统计功能。
写代码之前，先说明你会如何处理加载，以及读取或保存
失败的情况。然后做一次范围有限的修改。
最后列出：改动的文件、执行的命令、未测试的限制，
以及在 iPhone 上验证结果的具体步骤。
```

| 在 iPhone 上的操作       | 预期结果                   | 如果失败                       |
| ------------------------ | -------------------------- | ------------------------------ |
| 第一次打开应用           | 习惯和复选框可见，没有报错 | 检查初始状态和存储的加载       |
| 勾选后关闭并重新打开应用 | 习惯仍是勾选状态           | 检查同一个键的写入和读取       |
| 取消勾选后重启           | 习惯仍是未勾选状态         | 确认 `false` 值也被保存了      |
| 在飞行模式下重走一遍流程 | 本地功能仍然可用           | 找出无故添加的网络依赖         |
| 调大字体                 | 名称和控件仍然可以使用     | 去掉会截断文字或遮住操作的约束 |

某一行失败时，别直接说“全部重写”。描述操作、预期结果和实际结果。比如：“重启后，我之前勾选的复选框又变空了。请解释原因，并在不改设计的前提下修复持久化。”

[下载 CLAUDE.md 模板和检查清单（.md）](https://devoria.fr/ressources/claude-md-premiere-app-ios.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 的文档](https://docs.expo.dev/build/setup/)说明，连接你的 Apple Developer 账号后，EAS CLI 可以帮你生成并保存这些文件。

### App Store Connect

商品页、隐私声明、[截图](https://devoria.fr/zh-hans/kits/captures-app-store)和法律链接，都是需要在 App Store Connect 里核对的数据。现在 Claude Code 可以通过[它的 Chrome 集成](https://code.claude.com/docs/en/chrome)，在已登录的浏览器里操作，前提是有相应权限。但这不能保证字段都正确：你要自己核对信息、检查使用的账号，并亲自确认各项承诺和提交审核。

### 订阅

写一个付费墙只要十分钟。让 App Store Connect 里的商品、它们在 RevenueCat 里的配置和代码三者对上，就是另一回事了。标识符差一个字符，审核人员看到的付费墙就是空的。最常见的坑都列在[新手常犯的 iOS 付费墙错误](https://devoria.fr/zh-hans/blog/ios-paywall-beginner-mistakes)里。

### 边界情况

没有指令时，Claude 只处理正常流程。没网、列表为空、购买中断：这些得你自己点出来。

### Supabase 安全

Claude 在 Supabase 里建表时，检查行级安全（RLS）是否已开启，并且有策略把每个用户限制在自己的数据范围内。还要检查应用代码里没有出现任何密钥。一接上数据库，就把这两条禁令写进你的 `CLAUDE.md`。

## 第 7 步：用 EAS 发到 TestFlight

根据用到的模块，你的界面已经在 Expo Go 或开发构建里验证过了。现在来做要分发给测试者的构建。

### 准备 EAS

现在你需要一个[付费的 Apple Developer 账号](https://devoria.fr/zh-hans/blog/apple-developer-account-price-free-or-99)：[Expo 也提醒过](https://docs.expo.dev/submit/ios/)，向 App Store 提交应用必须有它。然后安装 Expo 的工具并配置项目：

```bash
npm install --global eas-cli
eas login
eas build:configure
```

在 `app.json` 的 `ios.bundleIdentifier` 下添加一个唯一的 bundle 标识符，例如 `com.yourname.myapp`。

### 编译并上传

```bash
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 应用](https://devoria.fr/zh-hans/blog/testflight-guide-test-iphone-app)这篇指南里都讲了。

在这个构建上重做一遍第 6 步的检查。在 Expo Go 里能跑的应用，到了生产环境仍可能崩溃，比如缺少某个原生模块时。

## 实际要花多少钱

以下是各服务公布的价格，于 2026 年 9 月 27 日核实，单位为美元。实际扣费还取决于你所在的地区、税费和用量：订阅前请先确认方案。

- **Claude 订阅**：[Pro 方案每月 20 美元](https://claude.com/pricing)，按年付费为每月 17 美元。Max 方案每月 100 美元起，用量更多。
- **Apple Developer 账号**：[每年 99 美元](https://developer.apple.com/programs/)，使用 TestFlight 和 App Store 必须有。
- **EAS**：[Expo 的免费方案](https://expo.dev/pricing)每月包含 15 次 iOS 构建，排在低优先级队列里。Starter 方案每月 19 美元，超出部分另按用量计费。

对一个小原型来说，只要不超出额度，Pro 加 EAS 免费方案就可以作为起点。上 TestFlight 之前加上 Apple 账号，然后把真正需要的服务单独算钱：数据库、存储或付费 API。[第一款应用的预算模板](https://devoria.fr/ressources/budget-premiere-app-ios.csv)可以帮你列出这些项目。你花在配置和验证上的时间也要算进去。

## 实话实说的局限，以及大家卡在哪里

Claude Code 改变了谁能做 iPhone 应用。但它没有改变 Apple 对上架的要求。被拒来得很快：Solys 被拒过，Nolera 和 Clic 也是。最常见的原因我写在了 [Apple 为什么拒绝你的应用](https://devoria.fr/zh-hans/blog/apple-app-rejection-reasons-real-cases)里。

照着这篇教程，你可以独自走到 TestFlight。大家最常卡住的地方在那之后：接入订阅、给审核人员准备材料、看懂拒审原因。想了解整个流程的全貌，可以看[开发 iPhone 应用](https://devoria.fr/zh-hans/expertise/create-an-iphone-app)这个页面。

这部分内容，[iOS Kit](https://devoria.fr/zh-hans/kits/ios) 汇集了我的应用的起步代码（包括订阅）、每一步的 Claude Code 技能，以及 [Apple Review Kit](https://devoria.fr/zh-hans/kits/review-apple)。完整路径在[用 Claude Code 开发 iOS 应用培训](https://devoria.fr/zh-hans/expertise/claude-code-course-ios-app)页面上。

已经卡住了，又不知道卡在哪？[免费诊断](https://devoria.fr/zh-hans/diagnostic)会告诉你真正拖住你的是什么，并把我的 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 付费墙的常见错误](https://devoria.fr/zh-hans/blog/ios-paywall-beginner-mistakes)列出了需要检查的要点。


## 你的项目

[iOS Kit](https://devoria.fr/zh-hans/kits/ios)：用 Claude Code 做你的 iPhone App：我自己 App 的起步代码、检查其工作的 skills，以及 Apple Review Kit、App Store Screenshots Kit 和 ASO Kit。129,99 €。
