没有 Mac 发布 iOS 应用:Expo 和 EAS 指南
作者:Mehdi Azizi
更新于 ,9分钟
在 Windows 电脑上,Expo 和 EAS 就能编译 iOS 应用并提交给 Apple。但你仍需要开发者账号和一台 iPhone。
没有 Mac 能发布 iOS 应用吗?
能。只要你用 Expo 和 React Native 开发,没有 Mac 也能发布 iOS 应用。EAS Build 会在 Expo 托管的云端 Mac 上编译你的应用,然后 EAS Submit 把它提交到 App Store Connect。Expo 的文档写得很清楚:EAS Submit 支持 macOS、Linux 和 Windows,所以提交 iOS 构建并不需要 Mac。
不过有三样东西是替代不了的:一个付费的 Apple Developer 账号,一台用来真机测试的 iPhone,以及一个用来在 App Store Connect 里填写应用信息的浏览器。本文接下来会讲清楚:在 Windows 电脑上哪些能做、哪些会卡住,以及各个步骤的顺序。
我所有的 iOS 应用都走这条流程:Expo、EAS Build,然后 EAS Submit。Solys 和 TradaZen 就是这样上架 App Store 的。我自己用 Mac 工作,但发布过程中没有任何一步依赖它:构建在 Expo 的云端完成,提交给 Apple 则通过命令行。
Expo 和 EAS 如何替代 Mac
要弄清楚哪些事情可行,先得知道为什么以前必须有 Mac。iOS 应用必须用 Apple 的工具 Xcode 编译,而 Xcode 只能在 macOS 上运行,而且版本要足够新,才不会被 ITMS-90725 拒绝。之后还要用与你开发者账号绑定的证书签名,再提交到 App Store Connect。
Expo 把这些工作拆成了三个工具:
- Expo 和 React Native:你用 JavaScript 或 TypeScript 写应用,任何电脑都可以。
- EAS Build:你在自己的电脑上运行命令,代码会发送到 Expo 的 Mac 上,由它替你编译并签名。你拿到的是一个可以直接安装或提交的文件。
- EAS Submit:它把这个构建提交到 App Store Connect。Apple 处理完毕后(比如会检查图标,见 ITMS-90717),构建就会出现在 TestFlight 里。
流程里依然有 Mac,只是不再是你自己的。如果你想知道我为什么向新手推荐这套技术栈,可以看看用 React Native 和 Expo 开发移动应用这一页。
在 Windows 电脑上能做什么
编写应用
所有开发工作都能在 Windows 上不受限制地完成:编辑器(VS Code、Cursor)、Node.js、终端。如果你借助 Claude 或 ChatGPT 写代码,也没有任何区别。关于这一点,可以看用 AI 开发 iOS 应用。
一边写代码一边在 iPhone 上看效果
刚开始时,在 iPhone 上装好 Expo Go,用它扫描终端里显示的二维码,就能加载你的项目。每次修改几秒钟内就会出现在手机上。做最初几个页面时非常合适。从 2026 年 5 月起,App Store 版的 Expo Go 停留在 SDK 54:创建项目时选择与它兼容的版本,或者通过 eas go 和 TestFlight 使用更新的 SDK。
Expo Go 有个限制:它只包含 Expo 提供的原生模块。一旦你的应用用到了它不包含的原生库,比如用于订阅的 RevenueCat SDK,你就需要一个开发构建:也就是由 EAS Build 编译的、属于你自己应用的版本,安装到你的 iPhone 上。
不经过 App Store 把构建装到 iPhone 上
EAS 提供内部分发功能。你用 eas device:create 命令注册 iPhone,然后用 internal 分发方式运行构建,就会收到一个安装链接。Apple 对这种方式有限制:一个账号每年最多只能这样分发给 100 台 iPhone,而且每增加一台新设备,都需要重新构建或重新签名。只给自己和几个亲友用的话,完全够了。
不用 Xcode 管理证书
签名是最容易卡住新手的环节,即使在 Mac 上也一样,提交时还可能遇到 ITMS-90034 错误。用 EAS 的话,你在命令行里登录 Apple 账号,工具可以自动生成分发证书和描述文件。你完全不用打开钥匙串访问。
把应用提交给 Apple 并发布
eas submit --platform ios 会把构建提交到 App Store Connect。你也可以用 eas build 的 --auto-submit 选项把两步串起来。其余一切都在浏览器里完成:App Store 页面、截图、隐私声明、订阅、TestFlight 以及提交审核。App Store Connect 是网页应用,在 Windows 上运行得很好。
没有 Mac 做不到(或更难)的事
本地 iOS 模拟器
iOS 模拟器是 Xcode 的一部分,所以无法在 Windows 上运行。实际上问题不大:用来测试,你的 iPhone 比模拟器更好。Expo 在 2026 年 9 月发布了云端 iOS 模拟器 EAS Simulator,在我写这篇文章时仍是限量开放。在它全面开放之前,别把工作流程建立在它上面。
调试原生代码
如果崩溃来自原生代码(Swift、Objective-C、配置有误的库),Apple 的诊断工具都在 Xcode 里。没有 Mac,你只能依靠 EAS 的构建日志,以及像 Sentry 这样能上报已安装应用崩溃信息的工具。可以做到,但更慢。所以第一个应用最好只用兼容 Expo 且有人维护的库,这样也能避免提交时被 ITMS-90338 拒绝。
手写原生扩展
小组件、通知扩展、特定的原生 target:借助配置插件,Expo 也能做到,但没有 Xcode 来检查生成的项目,每个错误都要多花一次构建。第一个应用的话,这些功能留到以后再做。
本地编译
EAS 的本地构建(--local 选项)不支持 Windows。所以在 PC 上,你的 iOS 构建都要走 Expo 的云端。EAS 的免费套餐每月只包含有限次数的构建,而且要排队:在安排一周高强度工作之前,先去 Expo 的价格页面确认当前条款。
Apple Developer 账号:必须有,没有例外
没有任何技巧能绕过这一点,就连仅限大型机构内部应用使用的 Apple Developer Enterprise Program 也不行。没有加入 Apple Developer Program,就没有 App Store Connect,没有 TestFlight,没有内部分发,也无法提交到 App Store。会员费是每年 99 美元,按你所在地区的货币扣款。
注册前的两条建议:
- 认真选择个人账号还是组织账号。 个人账号在 App Store 上显示的卖家是你的名字。组织账号显示的是你的机构名称,但 Apple 会要求提供 D-U-N-S 编码,审核时间也更长。
- 预留几天时间。 账号审核不一定是即时的。一确定要发布就去注册,别等到提交前一天。
为什么真的需要一台 iPhone 来测试
从技术上说,你可以发布一个自己从没拿在手上用过的 iOS 应用。我强烈不建议这样做,Apple 也不建议:它的审核指南(guideline 2.1)要求应用在提交前已在设备上测试过 bug 和稳定性。而你的用户,手里只有真实的 iPhone。
下面这些只有真机才能让你看到:
- 真正的首次启动,没有开发服务器:启动时的崩溃就藏在这里。
- 测试环境下的应用内购买,用来确认付费墙显示的价格正确,订阅确实能解锁应用。
- 通知、相机、震动、权限,在其他环境里表现不同,或者根本不起作用。
- 真实的布局:刘海或灵动岛、主屏幕指示条、遮住输入框的键盘。
- 流畅度,高性能电脑常常会掩盖这个问题。
一台较新的二手 iPhone 就够了,前提是它运行的 iOS 版本受你所用的 Expo SDK 版本支持。如果可以,再借一台尺寸不同的 iPhone:在大屏上没问题的应用,在小屏上可能会被截断。Solys 就是因为这个被拒的,我在Apple 为什么拒绝你的应用里讲过。
没有 Mac,可以。没有 iPhone,你提交给 Apple 的就是一个你从没见过它运行的应用。
在 Windows 上的操作步骤,按顺序来
- 创建项目:运行
npx create-expo-app,用 Expo Go 测试最初几个页面。 - 安装 EAS CLI:运行
npm install -g eas-cli,然后执行eas login和eas build:configure。 - 加入 Apple Developer Program:项目一有雏形就去注册。
- 注册你的 iPhone:运行
eas device:create,然后启动一个开发构建。 - 在 App Store Connect 里创建应用,Bundle ID 要和 Expo 配置里的一致。
- 启动生产构建:运行
eas build --platform ios。 - 提交构建:运行
eas submit --platform ios,然后在 TestFlight 里测试。用 TestFlight 测试应用这篇指南详细讲解了这一步。 - 在浏览器里填写应用信息并提交审核。至于推广文本,之后不发新版本也能修改。
这个阶段有三个常见的坑。每次提交时,构建版本号都必须递增:开启 EAS 的自动递增,就不用再操心了。加密相关的问题在你回答之前会卡住每一个构建:你可以在应用配置里一次性声明。还有,Bundle ID 必须处处一致,否则 EAS Submit 找不到你的应用。之后从填写信息到通过审核的每一步,在 App Store 上发布应用这一页都有讲解。
发布你的第一个应用,不用 Mac,也不迷路
Mac 已经不是真正的障碍了。真正的障碍在别处:选一个有机会赚钱的应用,接入能正常工作的订阅,准备一份 Apple 会接受的提交材料。这正是 iOS Kit 四步流程涵盖的内容,你可以按自己的节奏来。提交材料方面,Apple Review Kit 收录了我提交前的检查清单和给审核员的备注。首页介绍了如何用 Expo 和 Claude Code 不从零开始开发移动应用,有没有 Mac 都行。
最终是否让你的应用上架,决定权在 Apple,任何套件都无法保证。我能给你的,是我在自己应用上使用的方法。
常见问题
没有 Mac 怎么发布 iOS 应用?
用 Expo 和 React Native,由 Expo 托管的 Mac 代替你自己的 Mac。你在任何电脑上写代码,EAS Build 在云端编译并签名应用,然后 EAS Submit 把它提交到 App Store Connect。你还需要一个付费的 Apple Developer 账号、一个用来填写应用信息的浏览器,以及一台用来真机测试的 iPhone。
在 Windows 上发布 iOS 应用有哪些步骤?
用 Expo 创建项目,安装 EAS CLI,并加入 Apple Developer Program。注册你的 iPhone,启动开发构建,然后在 App Store Connect 里创建应用,Bundle ID 要和 Expo 配置里的一致。接着启动生产构建,用 EAS Submit 提交,在 TestFlight 里测试,最后在浏览器里填写应用信息并提交审核。
在 App Store 发布应用要花多少钱?
加入 Apple Developer Program 每年 99 美元,按你所在地区的货币扣款。这是必须的:没有它,就没有 App Store Connect、TestFlight、内部分发,也无法提交到 App Store。Expo 这边,EAS 的免费套餐每月只包含有限次数的构建,而且要排队:请到 Expo 的价格页面确认当前条款。
没有 Mac 发布 iOS 应用,需要 iPhone 吗?
技术上不需要,但我强烈不建议,Apple 也不建议:它的审核指南(guideline 2.1)要求应用在提交前已在设备上测试过 bug 和稳定性。一台较新的二手 iPhone 就够了,前提是它运行的 iOS 版本受你所用的 Expo SDK 版本支持。
没有 Mac 怎么测试 iOS 应用?
在 iPhone 上安装 Expo Go:它扫描终端里显示的二维码来加载你的项目,每次修改几秒钟内就能看到。Expo Go 只包含 Expo 提供的原生模块。一旦你的应用用到它不包含的原生库,比如 RevenueCat SDK,就需要一个由 EAS Build 编译的开发构建。要测试最终构建,可以看用 TestFlight 测试应用。
没有 Mac 开发 iOS 有哪些限制?
你无法在本地使用 iOS 模拟器:它是 Xcode 的一部分,所以无法在 Windows 上运行。EAS 的本地构建(--local)不支持 Windows:你的 iOS 构建都要走 Expo 的云端。调试原生代码和手写原生扩展仍然可以做,但更困难,因为 Apple 的工具都在 Xcode 里。