Jenkins Automatically Upload IPA to App Store: Integrate Release Steps into CI/CD

This article introduces a practical Jenkins workflow for uploading IPA to App Store automatically. The Jenkins Pipeline calls the AppUploader CLI to upload a signed IPA, and it incorporates environment variables, file verification, and App Store Connect status checks, making it suitable for iOS automated release pipelines.

When Jenkins is used for iOS release, the process can be split into two parts:

  1. The macOS node is responsible for building the IPA.
  2. Jenkins calls a command-line tool to upload the IPA.

If the IPA has already been generated by Xcode, Fastlane, Flutter, or uni-app cloud packaging, Jenkins only needs to handle the upload stage.

Variables to Prepare in Jenkins

Save the following in Jenkins credentials or environment variables:

APPLE_ID=your@email.com
APP_PASSWORD=xxxx-xxxx-xxxx-xxxx
IPA_PATH=build/app.ipa

Here, APP_PASSWORD is an Apple app-specific password, not the Apple ID login password.

Uploading with AppUploader CLI

After downloading AppUploader, find the command-line tool in the runtime directory.

On Linux/macOS, first add execute permission: chmod +x appuploader_cli.

Jenkins Pipeline example:

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
                '''
            }
        }
    }
}

Coordination with the Build Stage

If Jenkins is also responsible for building, the division of labor can be as follows:

Stage Tool
Build IPA Xcode / Fastlane / Flutter
Certificates & Profiles AppUploader
Upload IPA AppUploader CLI
Review Submission App Store Connect

When uploading, AppUploader CLI automatically handles upload metadata, including AppStoreInfo.plist, without manual generation.

Post-Upload Verification

Go to “App Store Connect → TestFlight” to confirm whether the new build appears.

If it does not appear, check the following:

  • Whether the Build number has been incremented
  • Whether the Bundle ID is consistent
  • Whether the IPA is signed with an App Store provisioning profile
  • Whether the Apple app-specific password is valid