Skip to content
Bugwise
Menu
Mobile Testing

TestFlight and Firebase App Distribution

How testers get pre-release builds on real phones. TestFlight, Google Play testing tracks and Firebase App Distribution explained, plus how to always know which build you are testing.

20 min beginner Mobile

Friday afternoon, a banking app team. The developer says “the transfer bug is fixed, can you check?” The tester opens the app, tries a transfer, and it fails again. Bug reopened. Developer: “Works for me.” Twenty minutes of back-and-forth later they find the problem: the tester was still on yesterday’s build. The fix was in a build that had arrived in TestFlight an hour earlier, which nobody had installed.

That’s the whole topic in one story. On mobile you can’t just refresh a page to get the latest code. Every change has to become a new buildBuildA specific compiled version of the app or website that is ready to be installed or tested.Open in glossary →, get delivered to your phone, and be installed. Knowing how that delivery works, and always knowing which build you’re holding, is a basic tester skill.

Why beta distribution exists

Developers can install an app straight from Xcode or Android Studio onto a phone plugged into their computer. That’s fine for one person, but a team needs something better:

There are three main channels you’ll meet: TestFlight (iOS), Google Play testing tracks (Android) and Firebase App Distribution (mostly Android, also iOS).

TestFlight (iOS)

TestFlightTestFlightApple's service for distributing beta builds of iOS apps to testers before App Store release.Open in glossary → is Apple’s beta service, part of App Store Connect. Testers install Apple’s free TestFlight app from the App Store, and beta apps are installed through it.

Internal testersExternal testers
WhoMembers of your App Store Connect team (with a role like Developer or Marketing)Anyone with an email address
How manyUp to 100Up to 10,000
How they joinAdded in App Store Connect, invited by emailEmail invitation or a public link
ReviewNone: builds are available as soon as they’re processedThe first build of a version needs Beta App Review (usually quick)
Typical useDaily QA buildsWider beta with customers or other departments

Things every TestFlight tester should know:

  • Builds expire after 90 days. An expired build can’t be opened anymore. If someone reports a bug on an expired build, it needs to be checked on a current one.
  • “What to Test” notes come with every build. Read them first: they tell you what changed and what the team wants checked.
  • Version and build are shown on every build, for example Version 2.4.0 (318). Many builds can share one version; the number in brackets is the one that matters.
  • Previous builds. In the TestFlight app you can install an older build of the same app (as long as it hasn’t expired). Useful for checking “did this work before?” and for upgrade testsUpgrade testingChecking that updating from an older app version keeps the user's data and settings working.Open in glossary →.
  • Feedback with screenshots. Take a screenshot while using a beta app, tap Share Beta Feedback, add a comment and send it. After a crash, TestFlight can ask you to share details. Both arrive in App Store Connect together with the device, OS and build number.
  • Installing over the store app. A TestFlight build replaces the App Store version of the same app (and keeps its data). To go back, reinstall from the App Store.

Google Play testing tracks (Android)

Google Play has its own beta system built into the Play Console. The team uploads a build to a track, and testers who joined that track get it through the normal Play Store app, like a regular update.

TrackWho can joinNotes
Internal testingUp to 100 testers chosen by emailFastest: available within minutes. Great for daily QA builds.
Closed testingInvited testers (email lists or Google Groups)For a bigger, controlled group. At the time of writing, new personal developer accounts must run a closed test with at least 12 testers for 14 days before they can publish to production.
Open testingAnyone, from the app’s Play Store listingA public beta. Your app’s store page shows a “Join the beta” option.

Testers first opt in with a link from the team, then install or update the app from Google Play. To go back to the public version, they leave the testing program and reinstall.

Firebase App Distribution

Firebase App DistributionFirebase App DistributionGoogle's service for sending pre-release Android (and iOS) builds to testers.Open in glossary → sends builds directly to testers, without going through a store track. That makes it popular for very early builds, feature branches and debug builds.

  1. You get an email invitation for the app and accept it in your browser.
  2. Android: you install the App Tester app (the email guides you). It lists every build you’ve been given, with release notes. Because App Tester installs apps outside Google Play, Android asks you to allow Install unknown apps for it once.
  3. iOS: you register your device through a web page (Firebase adds an App Tester web clip to your home screen). iOS builds have to be made for registered devices, so a newly added iPhone may have to wait for the next build.
  4. Install the build, open it, and you’re testing. New builds show up in App Tester with an email notification.

Developers can upload APK files, which install directly, or AAB (Android App Bundle) files, which Firebase delivers through Google Play’s internal app sharing (that needs the Firebase project linked to Google Play). Firebase builds expire after 150 days.

Which channel would you use?

Match each situation with the channel that fits best.

  • 1.Five QA engineers on your team need the new iOS build today. They all have App Store Connect accounts.

  • 2.2,000 newsletter subscribers should try the iOS beta. You want to share one link.

  • 3.Your 8-person QA team needs the Android build through the Play Store, minutes after upload, exactly like the store version.

  • 4.300 invited customers from a Google Group should test the Android beta before it goes public.

  • 5.Anyone who finds the app on Google Play should be able to join the beta.

  • 6.Two testers need a debug APK from a feature branch, without uploading it to the Play Console.

0/6 answered

Environment builds: dev, staging, prod

Teams often build the same app version for different environmentsEnvironmentA setup of servers, data and configuration where the software runs, such as dev, staging or production.Open in glossary →:

BuildTalks toUsually looks like
DevDeveloper or test servers, often unstableIcon with “DEV” badge, name “FreshCart DEV”
StagingstagingStagingA pre-release environment that mirrors production as closely as possible.Open in glossary → servers that copy production, with test dataOrange “STG” badge, staging banner in the app
ProductionReal productionProductionThe live environment that real users use.Open in glossary → servers, real moneyThe real icon and name, like the store version

Different icons and names let you install several versions side by side and tell them apart at a glance. But they also cause classic mix-ups:

  • A tester reports “test promo banner on the home screen”, but it’s staging content, not an app bug.
  • A bug is “fixed” on staging but still happens on production, because the fix was on the server and wasn’t deployed there yet.
  • A tester uses a production build with a test card and the payment fails, because production rejects test cards.

Always know which build you’re testing

Before you report or retest anything, check three things:

  1. Version and build number, for example 2.4.0 (318). Good apps show it in Settings › About; TestFlight and App Tester show it too. On Android you’ll find it in Settings › Apps › [app].
  2. Environment (dev, staging or production). Look at the icon, the app name, a banner, or the About screen.
  3. How you got it (TestFlight, Play internal track, Firebase), and whether it was a fresh install or an update.

Then copy them into every bug reportBug reportA clear written description of a bug so developers can reproduce and fix it.Open in glossary →. See Writing bug reports and the version numbers section of Install, Update and Uninstall.

Try it: install a beta and report against it

Your phone has an older build of FreshCart installed. Pick the newest build in the TestFlight mock, read what to test, install it and follow the task. The About screen is behind the gear icon.

9:41
Apps

FreshCart

FreshCart Ltd.

Version 2.4.0 (318)

Expires in 88 days

What to Test

  • • New: Apple Pay at checkout. Please pay for a test order end to end.
  • • Fixed BUG-412: expired coupon codes were accepted.
  • • Fixed BUG-398: order history empty after login.

Builds

Your task

  1. In TestFlight, read the What to Test notes of the newest build.
  2. Install it, then open FreshCart.
  3. Do what the notes ask: pay with Apple Pay. Something is wrong.
  4. Check Settings › About and fill in your bug report.

Bug not reproduced yet.

Bug report

Apple Pay sheet shows €0.00 instead of the order total

When a new build arrives

A new build in TestFlight or App Tester is your cue for a small routine:

  1. Read the release notes (“What to Test”). What’s new, what’s fixed, what’s a known issue, which environment it uses.
  2. Install it and confirm the version, build number and environment in the About screen.
  3. Smoke test. A quick smoke testSmoke testingA quick check of the most important features to decide if a build is stable enough to test further.Open in glossary →: the app opens, you can log in, the main flows (search, cart, checkout) work. If it’s badly broken, report that right away so nobody wastes time.
  4. Verify fixed bugs. For every bug listed as fixed in this build, do retestingRetestingRunning the same test again to confirm that a reported bug is really fixed.Open in glossary → with the original steps. Close it, or reopen it with the new build number.
  5. Test the new features the notes mention.
  6. Regression. Check the areas around the changes (and your regular regressionRegression testingRe-running tests to check that new changes didn't break things that used to work.Open in glossary → set) for things that broke.

Practical exercise: plan your retests

FreshCart 2.4.0 (318) just arrived. Read the release notes, look at each bug in the tracker, and decide what to do with it on this build. Watch for fixes that aren’t in this build, reports from old builds, known issues and environment confusion.

STAGING

FreshCart 2.4.0 (318) has arrived in TestFlight

What to Test

  • • New: Apple Pay at checkout
  • • Fixed BUG-412: expired coupon codes were accepted
  • • Fixed BUG-398: order history empty after login
  • • Known issue: BUG-420 receipt colors are wrong in dark mode (fix planned for 319)
  • • This build uses the staging server and its test content

Your bug tracker shows these six bugs. For each one, decide what you do with this build.

  • 1.BUG-412 Expired coupon code is accepted at checkout

    Reported on 2.3.2 (309)Status: Ready for QAFix version: 2.4.0 (318)
  • 2.BUG-405 App crashes when you cancel Apple Pay

    Reported on 2.4.0 (317)Status: Ready for QAFix version: 2.4.0 (319)
  • 3.Receipt screen text is unreadable in dark mode

    Found by you today on 2.4.0 (318)
  • 4.BUG-431 Home banner says "TEST PROMO, do not ship"

    Reported on 2.4.0 (318) · StagingStatus: Open
  • 5.BUG-377 Search finds nothing for "oat milk"

    Reported on 2.2.0 (260)Status: Open
  • 6.BUG-398 Order history is empty after logging in

    Reported on 2.3.2 (309)Status: Ready for QAFix version: 2.4.0 (318)
0/6 answered

Common mistakes

#MistakeWhat happensTypical severity
1Testing an old buildFixed bugs “still fail”, new features “are missing”High (wasted time, wrong reopen)
2“Build: latest” in reportsDeveloper can’t tell which code you testedMedium
3Retesting before the fix is in the buildBug reopened although the fix was never deliveredMedium
4Staging vs production mix-upTest data or server-only issues reported as app bugsMedium
5Ignoring release notesKnown issues re-reported as duplicates; changed areas not testedLow–Medium
6Bug reported on an expired buildNobody can install that build to reproduce itLow
7Only testing fresh installs of betasUpgrade bugs from the store version are missedHigh

Tools and how-to

As a tester

  1. Install TestFlight from the App Store.
  2. Open the invitation email (or public link) and tap View in TestFlight, then Accept and Install.
  3. Open the app from TestFlight or the home screen; beta apps have an orange dot next to their name.
  4. Feedback: take a screenshot in the beta app › tap the preview › Share Beta Feedback. Or open TestFlight › the app › Send Beta Feedback.
  5. Older builds: TestFlight › the app › Previous Builds.

The team uploads builds from Xcode (Product › Archive › Distribute App) or a CI pipeline, then adds testers and “What to Test” notes in App Store Connect › TestFlight.

As a tester

  1. Open the opt-in link the team sends you and tap Become a tester (use the Google account that’s signed in to Play on your phone).
  2. Install or update the app from the Play Store. It can take a little while to show up the first time.
  3. To leave, open the same link and choose to leave the program, then reinstall the store version.

The team uploads an AAB in Play Console › Testing › Internal testing / Closed testing / Open testing and manages tester lists there. For quick one-off builds there’s also internal app sharing, which gives a download link per upload.

As a tester

  1. Accept the email invitation.
  2. Android: install App Tester, sign in with the invited Google account, and allow Install unknown apps for it when asked. iOS: follow the steps to register your device and add the App Tester web clip.
  3. Pick a build in App Tester, read its notes and tap Download/Install.

The team uploads builds in the Firebase console › App Distribution, with the Firebase CLI (firebase appdistribution:distribute) or Gradle/fastlane plugins, and picks testers or tester groups for each release.

Example test cases

TC-BETA-001New build is the one shown in About

Preconditions

  • TestFlight shows build 2.4.0 (318) as available

Steps

  1. Install 2.4.0 (318) from TestFlight
  2. Open the app
  3. Go to Settings › About

Expected result

About shows "2.4.0 (318)" and environment "Staging", matching TestFlight.

TC-BETA-002Smoke test of a new beta build

Steps

  1. Open the app
  2. Log in with the test account
  3. Search for "milk" and add an item to the cart
  4. Go to checkout and pay with a test card

Expected result

All steps work without crashes or errors; the order confirmation is shown.

TC-BETA-003Beta build installs over the store version and keeps data

Preconditions

  • Store version 2.3.2 installed and signed in
  • Two items saved as favorites

Steps

  1. Install 2.4.0 (318) from TestFlight over the store app
  2. Open the app

Expected result

User is still signed in and both favorites are there.

TC-BETA-004Fixed bug is verified on the build that contains the fix

Preconditions

  • BUG-412 fix version is 2.4.0 (318)
  • Build 318 is installed

Steps

  1. Go to checkout
  2. Enter the expired coupon code SUMMER23
  3. Tap Apply

Expected result

Error "This code has expired" is shown and the total does not change. BUG-412 can be closed with build 318 noted.

TC-BETA-005Firebase build installs on Android via App Tester

Preconditions

  • Tester invitation accepted
  • App Tester installed

Steps

  1. Open App Tester
  2. Select the newest FreshCart release
  3. Tap Download and allow installs from App Tester if asked
  4. Open the app and check About

Expected result

The app installs and About shows the same version and build as App Tester.

Tip: click a test case to expand it.

Checklist

New beta build checklist

0 of 9 checked

Check your understanding

Quick quiz

0/5 answered · 0 correct

  1. 1.A developer says a bug is fixed, but it still happens on your phone. What should you check first?

  2. 2.What happens to a TestFlight build after 90 days?

  3. 3.Your Android QA team needs a build through the Play Store within minutes of upload. Which track fits best?

  4. 4.Why does Android ask you to allow "Install unknown apps" for Firebase App Tester?

  5. 5.A staging build shows a "TEST PROMO, do not ship" banner. What is the best next step?

Key takeaways

  • Beta distribution gets real builds onto real phones before a release: TestFlight for iOS, Play testing tracks and Firebase App Distribution for Android.
  • TestFlight: internal (team, up to 100, no review) vs external (up to 10,000, email or public link, Beta App Review). Builds expire after 90 days.
  • Play tracks: internal (fast, small team), closed (invited group), open (anyone). Firebase sends builds directly, via App Tester.
  • Dev, staging and production builds look different on purpose. Always know which environment you’re on.
  • Before every report or retest, check version, build number and environment in the About screen.
  • New build routine: read notes → install and confirm → smoke test → verify fixes → test new features → regression.

Finished this page?Nice work, this page is complete!

Mark it as done to track your progress. It's saved in this browser, no account needed.

Its review cards are now in Bites ⚡
Esc

Type to search the whole site.