Fastlane 结合 AppUploader 来实现 CI 集成自动化上架

在做 iOS 自动化发布时,很多团队会用 Fastlane 完成打包和版本管理。但当构建环境不在 Mac,或者需要跨平台上传 IPA 时,仅依赖 deliverpilot 就会遇到环境限制。

这篇文章讲解一个流程,Fastlane 负责构建与版本管理,AppUploader 负责跨平台上传。


场景说明

假设当前项目具备以下条件:

  • 代码托管在 Git
  • 使用 Fastlane 管理构建
  • 构建完成生成 IPA
  • 上传环节需要在 Linux 或 Windows 服务器执行

目标是让整个流程可以在 CI 里跑通。


一、用 Fastlane 负责构建

在项目根目录执行:

复制代码
fastlane init

选择 iOS 应用。

编辑 Fastfile

复制代码
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

上传命令示例:

复制代码
appuploader_cli -u appleid@example.com \
-p xxxx-xxxx-xxxx-xxxx \
-c 2 \
-f build/release.ipa

参数说明:

  • -u Apple 开发者账号
  • -p 专用密码(App 专用密码)
  • -c 上传通道(1 为老通道,2 为新通道)
  • -f IPA 路径

把这条命令加入 CI 脚本即可。

例如在 GitLab CI:

复制代码
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 中执行顺序建议如下:

  1. 拉取代码
  2. Fastlane 构建 IPA
  3. 验证输出文件存在
  4. 调用 appuploader_cli 上传
  5. 输出日志

可以增加一段简单的文件存在校验:

复制代码
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 负责证书生成与跨平台上传

当两者结合使用时,可以形成一条稳定的自动化发布路径。

参考链接:https://www.appuploader.net/tutorial/zh/83/83.html

相关推荐
Dachui_11225 分钟前
内网穿透 Webhook 告警实战:客户端离线、应用探测、资源删除全覆盖
运维·远程工作·内网穿透·devops·webhook·服务器监控·应用探测
数据智研12 分钟前
【数据分享】300个城市-5G试点城市DID数据(2014-2025)
大数据·运维·人工智能·信息可视化·数据分析
honsor14 分钟前
工业级网口温湿度变送器 ModbusTCP 机房动环环境监测终端
运维·网络·人工智能·物联网·安全·云计算·智能温湿度监测系统
2501_9159184118 分钟前
怎么把 Python 写的 Flet 应用打包成 iOS App 并上架 App Store?
android·ios·小程序·https·uni-app·iphone·webview
szephyr26 分钟前
GitHub Actions 实战:给个人项目接上免费的自动部署流水线
ci/cd·github·devops·自动化部署·github actions
fengkai454531 分钟前
八、Docker详解1-3
运维·docker·容器
Geek_Vison1 小时前
小程序容器如何抹平系统差异,让一个小程序运行在 iOS、安卓、鸿蒙和电脑端
小程序·uni-app·harmonyos·mpaas
流浪0011 小时前
Linux系统篇34——信号(六):信号处理期间又来了怎么办?——sigaction、sa_mask、可重入函数与 volatile
linux·运维·面试·操作系统·信号处理·信号
学烹饪的小胡桃1 小时前
资产设备管理系统 WGFIX 怎么设置https访问
linux·运维·服务器·网络·安全
邪修king2 小时前
Re:Linux系统篇(二十六):文件系统(二):Ext 文件系统底层详解:从 inode、块组到软硬链接,结合 Windows 讲透文件管理本质
android·java·linux