TestFlight job type for Workflows
Sep 18, 2025 by

Ash Wu
The TestFlight job allows you to distribute iOS builds directly to TestFlight internal and external testing groups. Unlike the standard iOS submit job, the TestFlight job provides advanced control over TestFlight features including test group management, changelog distribution, and Beta App Review submission.

Using the TestFlight job
To distribute a build to TestFlight groups, add a job with type: testflight
to your workflow:
name: Distribute to TestFlightjobs:testflight_distribution:name: Distribute to TestFlighttype: testflightparams:build_id: ${{ needs.build_ios.outputs.build_id }}internal_groups: ['QA Team']external_groups: ['Public Beta']changelog: "Bug fixes and performance improvements"
The TestFlight job requires an iOS build created with distribution: store
. You'll need to have your Apple Developer account configured for TestFlight submissions.
Development builds with TestFlight
One useful pattern we've found is distributing development builds through TestFlight. This approach eliminates the need to manage ad hoc provisioning profiles across your team's iOS devices, which simplifies your team's process for distributing development builds.
Examples
You can distribute to both internal and external TestFlight groups with a detailed changelog:
name: Full TestFlight Distributionjobs:build_ios:name: Build iOStype: buildparams:platform: iosprofile: productiontestflight:name: Distribute to TestFlightneeds: [build_ios]type: testflightparams:build_id: ${{ needs.build_ios.outputs.build_id }}internal_groups: ['QA Team', 'Internal Testers']external_groups: ['Public Beta', 'Partner Testing']changelog: |What's new in this release:- Performance improvements- Bug fixes for login flow- Updated user interfacesubmit_beta_review: true
For external groups, the job automatically submits your build for Beta App Review unless you explicitly set submit_beta_review: false
. This ensures your app can be distributed automatically to external testers once Apple's review is complete.
You can also upload builds with just a changelog. This way, the build will only get added to internal groups with "auto-distribute" enabled:
testflight:name: Upload with Changelogtype: testflightparams:build_id: ${{ needs.build_ios.outputs.build_id }}changelog: "Latest development build with bug fixes"
Learn more about the TestFlight job type in our pre-packaged jobs documentation.