Jenkins 做 iOS 发布时,可以把流程拆成两段
- macOS 节点负责构建 IPA
- Jenkins 调用命令行工具上传 IPA
如果 IPA 已经由 Xcode、Fastlane、Flutter、uni-app 云打包生成,Jenkins 只需要处理上传阶段。
Jenkins 里需要准备的变量
在 Jenkins 凭据或环境变量中保存:
APPLE_ID=your@email.com
APP_PASSWORD=xxxx-xxxx-xxxx-xxxx
IPA_PATH=build/app.ipa
这里的 APP_PASSWORD 是 Apple App 专用密码,不是 Apple ID 登录密码。
使用 AppUploader CLI 上传
下载 AppUploader 后,在 runtime 目录中找到命令行工具。
Linux/macOS 先加执行权限"chmod +x appuploader_cli"
Jenkins Pipeline 示例:
pipeline {
agent any
environment {
APPLE_ID = credentials('apple-id')
APP_PASSWORD = credentials('apple-app-password')
IPA_PATH = 'build/app.ipa'
}
stages {
stage('Check IPA') {
steps {
sh '''
if [ ! -f "$IPA_PATH" ]; then
echo "IPA not found: $IPA_PATH"
exit 1
fi
'''
}
}
stage('Upload to App Store') {
steps {
sh '''
./appuploader_cli upload \
-f "$IPA_PATH" \
-u "$APPLE_ID" \
-p "$APP_PASSWORD" \
--type ios
'''
}
}
}
}
和构建阶段配合
如果 Jenkins 同时负责构建,可以这样分工:
| 阶段 | 工具 |
|---|---|
| 构建 IPA | Xcode / Fastlane / Flutter |
| 证书与描述文件 | AppUploader |
| 上传 IPA | AppUploader CLI |
| 审核提交 | App Store Connect |
AppUploader CLI 上传时会自动处理上传 metadata,包括 AppStoreInfo.plist,不需要手动生成。
上传后检查
进入"App Store Connect → TestFlight"确认新构建是否出现。
如果没有出现,先检查:
- Build 号是否递增
- Bundle ID 是否一致
- IPA 是否使用 App Store 描述文件签名
- Apple 专用密码是否有效