How to Automatically Upload IPA in Flutter and Separate Build from Upload

This article describes the actual workflow for automatically uploading IPA in Flutter: first use `flutter build ipa` to generate a signed IPA, then use AppUploader CLI to upload to App Store Connect. This approach is suitable for Jenkins, GitLab CI, Linux upload nodes, and cross-platform release processes.

When uploading for iOS in a Flutter project, a better approach is to treat it as two steps: Flutter generates the IPA package, and an upload tool submits it to App Store Connect, rather than thinking of it as ‘one-click publishing with Flutter’.

By doing this, whether you’re on Windows, Linux, or using Jenkins, GitLab CI, you can easily integrate the upload process.

Generate IPA

Run on a macOS build node:

flutter clean
flutter pub get
flutter build ipa

The generated path is typically build/ios/ipa/, verify that a .ipa file exists in the directory.

Prepare Upload Account

Uploading to the App Store requires:

  • Apple Developer account
  • App-specific password
  • A signed IPA

The app-specific password is not your Apple ID login password; it needs to be created in your Apple ID security settings.

Upload Using AppUploader CLI

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

On Linux/macOS, first run chmod +x appuploader_cli, then use the upload command:

./appuploader_cli upload \
-f build/ios/ipa/Runner.ipa \
-u user@example.com \
-p xxxx-xxxx-xxxx-xxxx \
--type ios

During upload, the tool automatically handles metadata, including AppStoreInfo.plist, so no manual generation is needed.

Integrate with Jenkins or GitLab CI

Example script:

flutter clean
flutter pub get
flutter build ipa

./appuploader_cli upload \
-f build/ios/ipa/Runner.ipa \
-u "$APPLE_ID" \
-p "$APP_PASSWORD" \
--type ios

In CI, it’s recommended to put:

APPLE_ID
APP_PASSWORD

into environment variables or credential management, and avoid hardcoding them in scripts.

Post-Upload Checks

Go to App Store Connect → TestFlight. If the build doesn’t appear, check:

  • Whether the build number has been incremented
  • Whether the Bundle ID matches
  • Whether the IPA is signed with an App Store provisioning profile
  • Whether the app-specific password is correct