很多团队在做 iOS 发布自动化时,会碰到一个问题,IPA 是在 macOS 节点构建出来的,但上传流程并不想继续依赖 Xcode。
原因就是:
- CI 环境里不适合打开 GUI
- 多项目上传时人工操作太多
- Xcode 更新后上传行为容易变化
- Linux 服务器更适合跑发布脚本
于是就会出现一个典型结构,macOS 负责构建,Linux 负责上传
这篇文章就专门讲如何在 Linux 环境中自动上传 IPA 到 App Store Connect,并把上传动作真正接入自动化流程。
先拆开构建和上传
很多人第一次接 CI 时,会把 生成 IPA 和 上传 App Store 放在同一个阶段,实际上这两件事可以完全拆开。
构建阶段负责Archive、签名、导出 IPA,通常在 macOS 完成。
上传阶段负责metadata 生成、App Store Connect 上传、构建提交,这一阶段完全可以放到 Linux。
Linux 更适合做上传节点
项目如果已经进入每日构建、多环境发布、自动化测试、多人协作
Linux 的优势会比较明显。
例如:
| 场景 | Linux 优势 |
|---|---|
| Jenkins | 部署方便 |
| Docker | 易隔离 |
| GitLab CI | Runner 成熟 |
| GitHub Actions | 易脚本化 |
而 GUI 上传在这些环境里会很难维护,实际项目里经常会这样:
- macOS 节点负责
flutter build ipa或者xcodebuild archive,生成app.ipa - Linux 节点负责接收 IPA、上传 App Store Connect、输出日志
Linux 上传需要准备什么
上传阶段需要:
| 内容 | 用途 |
|---|---|
| IPA 文件 | 上传主体 |
| Apple ID | 开发者账号 |
| App 专用密码 | 上传认证 |
| 上传工具 | 提交 IPA |
获取 Apple 专用密码
不要使用Apple 登录密码,需要在 Apple ID 安全设置中创建App-Specific Password,上传工具会使用这个密码完成认证。
Linux 环境中的上传工具
这里以 AppUploader(开心上架) CLI 为例。
Linux 版本位于runtime/appuploader_cli,先赋予权限chmod +x appuploader_cli
执行上传命令
直接上传:
./appuploader_cli upload \
-f app.ipa \
-u user@example.com \
-p xxxx-xxxx-xxxx-xxxx \
--type ios
也可以:
./appuploader_cli --upload-app \
-f app.ipa \
-u user@example.com \
-p xxxx-xxxx-xxxx-xxxx \
--type ios
上传过程中发生了什么,CLI 工具会:
- 自动处理 IPA 信息解析:读取Bundle ID、Version、Build Number
- metadata 生成:包括
AppStoreInfo.plist无需手动创建。 - App Store Connect 提交:上传成功后,Apple 开始 Processing 构建
完整 CI 示例
下面是一个 GitLab CI 场景。
build 阶段(macOS Runner):
build_ios:
script:
- flutter build ipa
生成:
build/ios/ipa/app.ipa
upload 阶段(Linux Runner)
upload_ios:
script:
- chmod +x appuploader_cli
- ./appuploader_cli upload \
-f build/ios/ipa/app.ipa \
-u $APPLE_ID \
-p $APP_PASSWORD \
--type ios
上传后去哪看结果
进入App Store Connect → TestFlight,如果上传正常,几分钟后会出现构建,如果没有出现,优先检查:
| 检查项 | 内容 |
|---|---|
| Build Number | 是否递增 |
| Bundle ID | 是否一致 |
| IPA 签名 | 是否为 App Store 类型 |
| 专用密码 | 是否有效 |
适合 Linux 自动上传的项目类型
下面这些项目很适合:
| 类型 | 场景 |
|---|---|
| Flutter | 自动构建 |
| React Native | CI 发布 |
| Unity | 云构建 |
| uni-app | 云打包后上传 |
| HBuilderX | IPA 自动提交 |
现在很多团队变成:
| 环节 | 工具 |
|---|---|
| 开发 | Flutter / RN |
| 打包 | macOS |
| 上传 | Linux CLI |
| 审核管理 | App Store Connect |
这样:
- Linux 负责自动化
- macOS 只负责编译
- 发布流程更容易维护
Linux 自动上传 App Store Connect,本质上是在把 iOS 发布流程从 GUI 转向脚本化,当 IPA 已经生成后,上传完全可以通过 CLI 独立完成。