Apple 开发者计划详解:免费与付费对比
Apple 每年 99 美元的开发者费用并不是做 iOS 的入场券。这篇文章把从 0 到 99 美元的路分成三个层级,从 Expo Go 和免费的开发构建,一直讲到付费计划真正解锁的东西。
中文
复制

很多开发者以为 Apple Developer Program 是 iOS 开发的入场费,于是还没到需要的时候就先注册了,或者干脆不去尝试 iOS。
其实,你可以免费构建 Expo 应用并在自己的 iPhone 上运行,等到准备分享给别人时再注册。这篇文章分三个层级,讲清楚从 0 美元到 99 美元的路径,每个层级需要什么、能解锁什么、限制在哪里。读完之后,你会知道是该第一天就注册,还是先动手做、等到要发布到 App Store 时再注册。
视频版
简短回答

| 你手头有什么 | 你能做什么 | 费用 |
|---|---|---|
| 任意一台电脑和一部 iPhone | 用 Expo Go 开发,支持 Fast Refresh 和大部分 Expo SDK | 0 美元 |
| 一台 Mac 和一部 iPhone | 构建包含任意原生库的开发构建,并安装到自己的 iPhone 上 | 0 美元 |
| 没有 Mac,但想把应用装到真机 iPhone 上 | 用 Expo Build 在云端构建并签名 | 每年 99 美元 |
| 想让别人也能用上你的应用 | TestFlight、内部分发和 App Store | 每年 99 美元 |
第一级:任意电脑加一部 iPhone,用 Expo Go
你只需要一部 iPhone 和一台电脑。Windows、Linux、macOS 都行。从 App Store 安装 Expo Go,然后创建并启动项目:
npx create-expo-app@latest
npx expo start
用 iPhone 相机扫描二维码,应用就会在 Expo Go 里打开。每次保存文件,Fast Refresh 都会更新手机上的应用。

这一层不需要任何类型的 Apple 账号。Expo Go 是 Expo 自行构建、签名并发布到 App Store 的应用,因此你的 iPhone 会像对待其他应用一样对待它。
代价是 Expo Go 内置的原生代码是固定的。你的 JavaScript 可以改,但原生库只能是 Expo Go 里已有的那些。这套库覆盖了 Expo SDK 的大部分内容,包括 expo-camera、expo-maps 和 @expo/ui,以及 react-native-reanimated 等热门社区库。有些功能需要自己的原生代码,在 Expo Go 里用不了:
- 用
expo-widgets实现的主屏幕小组件和实时活动。 - 用
expo-app-intents实现的 Siri 和快捷指令。 - 任何带原生代码、但不在 Expo Go 里的库,以及你自己写的任何原生代码。
这些都需要开发构建。
第 2 层:在 Mac 上做开发构建
开发构建就是你自己版本的 Expo Go。它带有你在 Expo Go 里熟悉的 expo-dev-client 工具。区别在于里面的原生代码是你自己的,任何原生库、任何原生配置、你自己的原生模块。Fast Refresh 照样可用。任何打算上架应用商店的应用,我们都建议用开发构建。
如果你有 Mac,可以免费构建一个并装到 iPhone 上。插上 iPhone,运行:
npx expo run:ios --device
Xcode 在你的 Mac 上编译应用、签名,然后装到手机上。签名需要一个 Apple 账号,但不需要付费账号。用一个免费 Apple 账号登录 Xcode,它会给你一个名为 Personal Team 的签名团队。
第一次运行时,CLI 可能在构建开始前就停下来。

这说明你的 Mac 上还没有代码签名证书。截图里的 Learn more 链接会打开一份简短的配置指南,其中会带你用 Apple 账户登录 Xcode。照着做一次,然后重新运行命令即可。

免费签名的限制
Apple 对免费的 Personal Team 设有以下限制:
- App 7 天后过期。 Apple 的免费描述文件在创建 7 天后失效。此后 App 将无法打开,你需要重新执行一遍构建。
- 每台设备最多 3 个 App。 每台 iPhone 用这种方式最多只能安装 3 个 App。
- 只能安装在自己的设备上。 最多可注册 3 台设备,构建无法发送给他人。
- 无法使用付费能力。 远程推送通知、App 内购买、Sign in with Apple、NFC、iCloud、Apple Pay 和关联域都需要付费会员资格,开发阶段也不例外。你可以引入库、写好代码,但只要构建请求了这些能力,Xcode 就无法用免费账号完成签名。
根据 Apple 的能力支持表,有几项能力在免费账号下可用,包括 App Groups、Background Modes、HealthKit、HomeKit、Keychain Sharing 和 Maps。expo-widgets 用 App Groups 在你的 App 和它的小组件之间共享数据。
本地通知由 App 在设备上自行调度,不需要推送能力。只有从服务器发出的远程通知才需要。
没有 Mac?云构建需要付费计划
你仍然可以在 Windows 或 Linux 上构建 iOS App。Expo Build 会在云端的 Mac 上完成编译:
eas build -p ios
要把这个构建安装到 iPhone 上,Expo Build 必须对它签名,而云签名需要付费计划。

证书和描述文件各自负责什么
每个在设备上运行的 iOS 应用都由两样东西签名:
- 证书说明这个应用是谁构建的。
- 描述文件说明这个应用可以在哪里运行,它属于哪个应用、哪些 iPhone 能安装、能用哪些能力,以及什么时候过期。
iPhone 在打开应用之前会先检查这两样东西。描述文件一旦过期,应用就打不开了,除非你安装一个新构建。

签名方式决定了谁能够安装你的 App。免费的 Apple 账户只能获得开发签名。Ad hoc 签名和 App Store 签名使用分发证书,而只有付费的 Apple Developer Program 成员才能获得这种证书。

在 Mac 上,Xcode 会为你的免费 Personal Team 创建开发签名。在云端,Expo Build 则使用分发证书和 ad hoc 描述文件为设备构建签名。因此,如果没有 Mac,要在真机 iPhone 上运行开发构建,就必须使用付费计划。
在任何电脑上,你都可以免费为 iOS Simulator 构建。模拟器构建不针对设备签名,因此 Expo Build 无需 Apple Developer 账号即可完成。但你仍然需要一个运行它的地方,而在如今,这通常意味着要有一台安装了 Xcode 的 Mac。
每年 99 美元解锁了什么
Apple Developer Program 的年费为 99 美元。归根结底,它带来的是五件事。

1. 把应用分享给别人
免费签名只能用于你自己的设备。加入会员后,有两种方式可以把构建交到别人手里:
- TestFlight。 TestFlight 是 Apple 的 beta 测试应用。你最多可以邀请 10,000 名外部测试员,也可以分享一个公开链接。
- 用 Expo Build 做内部分发。 测试者通过链接安装构建。这种方式使用 ad hoc provisioning,所以每台 iPhone 都必须先注册(
eas device:create),换一台新设备就要重新构建。用这种方式,Apple 每年最多允许 100 台 iPhone。
2. 云端签名
Expo Build 可以创建和管理你的 iOS 证书,并为设备签名构建。这需要会员资格,原因见“没有 Mac”一节。
3. 远程推送通知
从你的后端发出的通知要走 Apple Push Notification service,这需要一个付费账号。本地通知则不需要。
4. 应用内购买和其他 Apple 能力
这些就是前面免费签名限制里提到的付费能力,比如应用内购买、Sign in with Apple 和 NFC。免费账号无法为请求这些能力的构建签名。要在设备上测试它们就得有会员资格,不只是上架时才需要。
5. App Store
上架 App Store 需要会员资格。应用开始赚钱之后,可以看看 Apple 的 App Store Small Business Program。如果上一日历年度的收益不超过 100 万美元,或者你是 App Store 的新开发者,就符合条件。Apple 对付费应用和应用内购买抽取的佣金会从 30% 降到 15%。需要主动注册才能享受。
付费账号还会改变你自己构建的有效期。付费团队签发的开发描述文件有效期最长一年,而不是 7 天,不用再每周重新构建。
什么时候该付费?

如果应用需要以下任何一项,第一天就得付费:
- 远程推送通知,因为你想在开发过程中就测试它。
- 应用内购买,原因同上。
- 一台真机 iPhone,但你没有 Mac。 云签名是让应用装进设备的唯一途径。
其他人可以先把整个应用免费做出来,等到要交到别人手上时再注册。
Android 呢?

Android 从开发到发布全程免费。构建、安装、分享构建产物都不需要花钱。等到准备上架 Play Store 时,注册 Google Play Console 账号需一次性支付 25 美元。
从哪里开始
- 今天就动手,从第 1 级开始。 运行
npx create-expo-app@latest,在 Expo Go 中打开项目。 - 需要原生代码时,改用 development build。 先读 Introduction to development builds,再按 Local app development 在 iPhone 上跑起来。
- 准备分享时再注册。 加入 Apple Developer Program,然后配置内部分发或 TestFlight。

常见问题
使用 Expo 需要 Apple 开发者账号吗? 不需要。你可以在 Expo Go 中开发,完全不需要 Apple 账号。只有当你需要分享或发布应用、在云端签名构建,或使用远程推送等功能时,才需要付费的 Apple Developer Program。
可以在 iPhone 上免费运行 Expo 应用吗? 可以。Expo Go 能在任意 iPhone 上免费运行你的项目。如果你有 Mac 和一个免费的 Apple 账户,还可以用 npx expo run:ios --device 安装开发构建。
免费的 iOS 构建能用多久? 7 天。Apple 的免费描述文件在创建 7 天后过期,每台设备通过这种方式最多可安装 3 个应用。付费团队的开发描述文件有效期最长可达一年。
没有 Mac 能用 Expo 构建 iOS 应用吗? 可以。Expo Build 能在云端从 Windows 或 Linux 编译 iOS 应用。要把该构建安装到 iPhone 上,你需要付费的 Apple Developer Program,因为云端签名使用的是分发证书。
没有付费账号可以测试推送通知吗? 本地通知可以。从你的服务器发送的远程通知则需要付费的 Apple Developer Program。
发布 Expo 应用要花多少钱? iOS 上,Apple Developer Program 每年 99 美元。Android 上,Google Play Console 账号一次性收费 25 美元。
实用链接
- Expo Go:https://expo.dev/go
- 开发构建简介:https://docs.expo.dev/develop/development-builds/introduction/
- 本地应用开发:https://docs.expo.dev/guides/local-app-development/
- 设置 Xcode 签名:https://expo.fyi/setup-xcode-signing
- Expo Build:https://docs.expo.dev/build/introduction/
- 内部分发:https://docs.expo.dev/build/internal-distribution/
- 为 iOS 模拟器构建:https://docs.expo.dev/build-reference/simulators/
- Apple:比较免费与付费会员资格:https://developer.apple.com/support/compare-memberships/
- Apple:支持的功能:https://developer.apple.com/help/account/reference/supported-capabilities-ios/
- Apple Developer Program:https://developer.apple.com/programs/
- TestFlight:https://developer.apple.com/testflight/
- App Store 小型企业计划:https://developer.apple.com/app-store/small-business-program/