在做 iOS 自动化发布时,很多团队会用 Fastlane 完成打包和版本管理。但当构建环境不在 Mac,或者需要跨平台上传 IPA 时,仅依赖 deliver 或 pilot 就会遇到环境限制。
这篇文章讲解一个流程,Fastlane 负责构建与版本管理,AppUploader 负责跨平台上传。
场景说明
假设当前项目具备以下条件:
- 代码托管在 Git
- 使用 Fastlane 管理构建
- 构建完成生成 IPA
- 上传环节需要在 Linux 或 Windows 服务器执行
目标是让整个流程可以在 CI 里跑通。
一、用 Fastlane 负责构建
在项目根目录执行:
csharp
fastlane init
选择 iOS 应用。
编辑 Fastfile:
php
lane :build_release do
increment_build_number(
xcodeproj: "YourApp.xcodeproj"
)
build_app(
scheme: "YourScheme",
export_method: "app-store",
output_directory: "./build",
output_name: "release.ipa"
)
end
这里明确指定:
export_method: "app-store"- 输出目录固定为
./build
执行:
fastlane build_release
此时可以在 build/ 目录看到 release.ipa。
构建阶段由 Fastlane 完成,不涉及上传。
二、处理证书问题
Fastlane 可以用 match 管理证书,但如果构建服务器没有 macOS 钥匙串,证书同步会成为障碍。
这里可以使用 AppUploader(开心上架) 的证书管理功能:
- 登录 Apple 账号
- 生成 distribution 证书
- 下载 p12 文件
- 下载 App Store 类型描述文件
将 p12 与 mobileprovision 文件加入 CI 环境。
在 Mac 构建机中导入证书即可完成签名。
如果构建在 Windows 或 Linux,则只需保证 IPA 是已签名版本。 
三、用 AppUploader 命令行上传 IPA
当 IPA 已生成,不一定需要 macOS 才能上传。
AppUploader 提供命令行版本 appuploader_cli。
上传命令示例:
diff
appuploader_cli -u appleid@example.com \
-p xxxx-xxxx-xxxx-xxxx \
-c 2 \
-f build/release.ipa
参数说明:
-uApple 开发者账号-p专用密码(App 专用密码)-c上传通道(1 为老通道,2 为新通道)-fIPA 路径
把这条命令加入 CI 脚本即可。
例如在 GitLab CI:
bash
script:
- fastlane build_release
- appuploader_cli -u $APPLE_ID -p $APP_PWD -c 2 -f build/release.ipa
这样构建和上传被拆分为两个明确阶段。
四、上传后的验证
上传成功后:
- 登录 App Store Connect
- 查看"构建版本"
- 确认版本号与 Build 号正确
如果构建未出现:
- 检查 Bundle ID 是否一致
- 检查是否使用了正确 Apple 账号
如果出现 401 错误:
- 检查是否使用了 App 专用密码
- 确认账号开启了双重认证

五、结合实际项目的完整执行顺序
在 CI 中执行顺序建议如下:
- 拉取代码
- Fastlane 构建 IPA
- 验证输出文件存在
- 调用 appuploader_cli 上传
- 输出日志
可以增加一段简单的文件存在校验:
bash
if [ ! -f build/release.ipa ]; then
echo "IPA not found"
exit 1
fi
避免上传阶段报路径错误。
六、什么时候需要这种组合方式?
以下情况适合 Fastlane + AppUploader 组合:
- 构建在 Mac,但上传在 Linux 服务器
- 团队部分成员使用 Windows
- 希望上传阶段独立于 Xcode
- 不希望在 CI 里维护 macOS 钥匙串
这种分离式结构让构建与上传职责清晰。
七、流程中每个工具的角色
| 阶段 | 工具 |
|---|---|
| 版本号管理 | Fastlane |
| 构建与签名 | Fastlane + Xcode |
| 证书生成 | AppUploader |
| 描述文件生成 | AppUploader |
| IPA 上传 | AppUploader CLI |
| 审核提交 | App Store Connect |
这样可以避免单点依赖。
Fastlane 与 AppUploader 职责分工:
- Fastlane 负责构建与版本控制
- AppUploader 负责证书生成与跨平台上传
当两者结合使用时,可以形成一条稳定的自动化发布路径。