Getting Started (can be the same key as the download provisioning profiles action)
- Create an
App Store Connect API Key(these instructions with the roleApp Manager) - Download the certificate (must be done upon creation and will be called
ios_distribution.cer) - Copy the
.p8(cat AuthKey_<key_id>.p8 | pbcopy) - Add it as a secret called
APPSTORE_API_PRIVATE_KEYand addKey IDas a variable calledAPPSTORE_API_KEY_ID - Add
Issuer IDas a variable calledAPPSTORE_ISSUER_ID(found here)
- name: 'Upload app to TestFlight'
uses: apple-actions/upload-testflight-build@v4
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.