Use the same App Store Connect API key as download-provisioning-profiles.
| Kind | Name | Purpose |
|---|---|---|
| Variable | APPSTORE_ISSUER_ID |
App Store Connect issuer ID |
| Variable | APPSTORE_API_KEY_ID |
App Store Connect API key ID |
| Secret | APPSTORE_API_PRIVATE_KEY |
Contents of AuthKey_*.p8 |
- Create an App Store Connect API key with the role
App Manager - Download
AuthKey_<key_id>.p8when the key is created (shown once) - Set the variable/secret names above (or run
scripts/setup.sh/configure-github.sh)
Issuer ID: App Store Connect → Users and Access → Integrations → App Store Connect API
- name: Upload app to TestFlight
uses: apple-actions/upload-testflight-build@v5
with:
app-path: 'path/to/application.ipa'
issuer-id: ${{ vars.APPSTORE_ISSUER_ID }}
api-key-id: ${{ vars.APPSTORE_API_KEY_ID }}
api-private-key: ${{ secrets.APPSTORE_API_PRIVATE_KEY }}
release-notes: ${{ steps.generate_notes.outputs.whats_new }} # optional
uses-non-exempt-encryption: 'false' # optional: "true" or "false" maps directly to App Store Connect usesNonExemptEncryption
wait-for-processing: 'true' # optional: set to "false" to skip waiting (metadata updates will be skipped)
backend: AppStoreAPI # optional: AppStoreAPI | transporter | altool (default: AppStoreAPI; case insensitive)Important
transporter backend requires Transporter to be installed on the runner and the action now calls the installed binary directly (no xcrun shim).
The GitHub hosted runners (Xcode 14+) do not have Transporter installed by default.
You can install it in your workflow before this action runs:
- name: Install Transporter
run: |
url="https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/ra/resources/download/public/Transporter__OSX/bin/"
curl -fsSL "$url" -o "/tmp/itmstransporter.pkg"
sudo installer -pkg "/tmp/itmstransporter.pkg" -target /
/usr/local/itms/bin/iTMSTransporter -helpAlternatively, use a self-hosted runner that already has Transporter installed at /usr/local/itms/bin/iTMSTransporter.
Note
The default appstore-api backend only supports .ipa uploads. For macOS (.pkg) builds, set backend: altool or backend: transporter.
- The default upload backend is now
appstore-api(uses the App Store Connect API directly and works on Linux and macOS runners). If you depended on the previous behavior, setbackend: altoolorbackend: transporter. - The
transporter-responseoutput has been removed. Use theupload-backendoutput if you need to know which backend handled the upload.
See action.yml for more details.
We welcome your interest in contributing to this project. Please read the Contribution Guidelines for more guidance.
Any contributions made under this project will be governed by the MIT License.