Over the last few years, I have lead multiple apps over their release cycles every two weeks. So to help with the release planning I had to dive in and find what are all the options we have for progresssively release an app, specially keeping in mind how to recover on incidents with minimal impact.
Apple is constantly fiddling with their App Store policies, approval process and limitations; details below were valid at the time of publishing in December 2024.
Last time we covered how Google Play Store helps with progressive roll out.
While App Store has only one release track, they do provide multiple TestFlight tracks to release early versions of your app and each of them come with their limitations and requirements. Let’s dive into the details.
Production
The production track is for general availablity release based on the country and device restrictions that you have provided to App Store. All app versoins basically launch at 100% meaning it is available for all new and existing users. While exiting users have access to the new app version manual update, App Store also provides an staged auto-update roll out over 7 days at a fixed 1% → 2% → 5% → 10% → 20% → 50% → 100%. This can only be selected before publishing the release, however, after that full auto-update roll out can be triggered anytime.
Releases on production require an Apple review with an option to automatically start roll out on approval or manually trigger post approval; a setting that can only be changed before approval. There is also a 3rd option to select a roll out time and App Store will start the roll out either at that time or when the submission is approved whichever comes later.
Apple also provides the ablity to remove an older version completely from availability. While this doesn’t impact the user who already has that version installed, no new users will see that version of the app. This is particularly useful, for example, in cases where we drop support for older version of iOS and would like to stop onboarding new users from that iOS version.
Additional thing to note is that the app name, description, screenshots and release notes can only be changed as a part of the review submission process; once published all of these are immutable until the next submission.
External Test Flight
For your beta testers, App Store have Test Flight where your selected users can try out the newer/unreleased version of the app. This track can have a multiple groups with a max of 10k users, however, I couldn’t verify if this limit is per group or total of the maximum number of test groups. Builds here automatically expire 90 days from launch and expired builds are automatically removed.
Similar to production releases to this group require a Apple review and only accepted builds can be added to these groups. Users on this track has to use Test Flight and accept the invite. Also there is no avenue to progressively roll out in Test Flight.
Internal Test Flight
The final track available in App Store is for the internal users and this track is limited to 100 users in one or more test groups with no way of increasing the limit. In addition, only users who have access to the App Store Connect for this account can be added to internal test groups. So users are first required to accept the invite to join App Store Connect before we can add them to an internal test group. Similar to external Test Flight, builds are automatically expired in 90 days and expired builds removed from the track.
Releases in this track does not require an Apple review and goes live almost immediately. In additional, any builds added to an external Test Flight, will be automatically added to the internal Test Flight.
Recommendation is to reserve the seats on this track for related QA, developers and stakeholders.
In summary:
- Production release and test release are delivered differently, so users can easily identify builds provided for testing
- Test Flight releases are published to everyone but expires every 90 days and expired builds are removed; that means if there are no test builds for over 90 days there will be no builds available in Test Flight
- Production release is published to everyone new and existing; the roll out percentage is only related to the auto-update that App Store does in the background
- All new releases in Production and External Test Flight require an Apple review before they can be released
One final note: the app roll out takes some time to be actually available to all users as App Store propagates the release on their servers based on load; no publicly advertised SLA is shared nor any control on this is provided. Anecdotal observation shows something in the span of a few hours based on user complaints.