很多团队在做 iOS 发布自动化时,会碰到一个问题,IPA 是在 macOS 节点构建出来的,但上传流程并不想继续依赖 Xcode。
原因就是:

  1. CI 环境里不适合打开 GUI
  2. 多项目上传时人工操作太多
  3. Xcode 更新后上传行为容易变化
  4. 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 工具会:

  1. 自动处理 IPA 信息解析:读取Bundle ID、Version、Build Number
  2. metadata 生成:包括AppStoreInfo.plist无需手动创建。
  3. 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 独立完成。