Mobile App Testing Checklist for Any Release
A mobile app testing checklist is the fixed set of checks you run before every release, so the same faults stop reaching users twice. The version worth having isn’t a template of two hundred items you’ll never finish. It’s three passes sized to the time you actually have, built from what your own app breaks on rather than from somebody else’s generic list. Below is how to build one for an app you didn’t write, what belongs in each pass, which devices are worth owning, and what the stores do to you when a bad build gets through.

What belongs on a mobile app testing checklist?
Nine categories cover nearly everything that goes wrong on a phone, and a release process that skips any of them will eventually ship something it shouldn’t. Those categories are what the app does, how it looks at different text sizes and orientations, how quickly it starts and responds, how it behaves on a weak or missing connection, what happens on a fresh install compared with an upgrade over the previous version, how it survives interruptions like an incoming call, whether someone using a screen reader can operate it, how it stores tokens and personal data, and which phones and operating system versions it has to work on.
Every published checklist agrees on roughly that outline, and then most of them hand you a hundred and fifty items sorted by category with no indication of which ones matter for the release sitting in front of you. That’s the part that fails in practice. A team facing a hotfix on a Friday afternoon doesn’t run a hundred and fifty checks, so the checklist gets skipped entirely and the release goes out on someone’s memory of what usually breaks.
The outline is table stakes rather than the actual work. Two questions turn it into something a team uses on a deadline: which items apply to your specific app, and which apply to this specific release. The first answer comes from evidence your app already produces, and the second from how far the change could plausibly reach.
How do you build a checklist when nobody documented the app?
You derive it from three sources the app already produces, none of which needs a specification or a handover document: the crash reports, the analytics, and the one star reviews. This matters because the audience for a testing checklist is very often somebody who inherited a working app from a developer who’s gone, and who has no test cases, no written requirements and no idea which screens are fragile.

Start with the crash reporting tool, whether that’s Firebase Crashlytics, Sentry or Xcode Organizer, and sort by users affected rather than by number of events. The top ten issues tell you which screens are already unstable under real conditions, and those screens go straight onto your checklist regardless of what this release changes. If no crash reporting is installed at all, that’s the first thing to fix, because until it’s there you’re guessing about a product that could be telling you the answer. Getting that visibility in place is usually the opening move of any mobile app stabilization work.
Then open your analytics and list the ten screens with the most sessions. Those are your functional coverage, and they’re frequently not the screens the previous team cared about. Finally, sort your store reviews by lowest rating and read the last fifty. Users rarely write a review about a subtle layout problem, so what you find there is the loud stuff: sign in loops, sync that loses data, notifications that never arrive, purchases that charge without granting anything.
Merge the three lists, order them by how many people each item affects, and you have a checklist for your app instead of for apps in general. When RapidLabs takes over somebody else’s codebase, this document is the first thing we produce, before anyone changes a line of code, because it’s also the fastest honest answer to the question of how bad the situation really is.
What do you check when you only have two hours?
The short pass covers the change you made, the paths that change can reach, and the handful of things that must never break no matter what. It exists because most releases are small and most teams don’t have a day to spend on them, and a two hour pass that actually happens beats a full pass that gets skipped.
- The exact bug you fixed, on a device that reproduced it
- Cold launch from a fully closed app
- Sign in, sign out, then sign in again
- The flow that takes money
- The screens nearest the code you touched
- An upgrade install over the currently released version
That last one earns its place more than anything else on the list. A fresh install starts with an empty database and empty preferences, so it quietly avoids every migration path in the app, and a bug that only appears when yesterday’s data meets today’s code will pass a fresh install test perfectly. Install the currently published build from the store first, use it enough to create real data, then install your candidate over the top and check that the data survived.
Reproducing the original bug before verifying the fix matters for the same reason. A fix confirmed only on a developer’s phone that never showed the problem tells you nothing.
What does a half day of testing cover before a normal release?
The half day pass is regression testing, which means re-running the checks that protect the parts of the app you didn’t intend to change. Most bad releases aren’t caused by the new feature failing, they’re caused by the new feature breaking something three screens away that nobody thought to open.

- Every screen in your analytics top ten
- Notification arrival, tap, and where the tap lands
- Offline use, then reconnecting mid action
- Rotation and the largest system font size
- Purchase or subscription flow in a sandbox account
- Backgrounding the app for thirty minutes, then returning
System font size deserves more attention than it usually gets, because turning text up to the largest accessibility setting breaks more layouts than any other single check, and the people who use that setting are exactly the people least likely to file a useful bug report. Backgrounding for half an hour is the cheap way to catch expired sessions, dropped socket connections and any state your app assumed would still be in memory.
Offline behaviour is worth testing as an interruption rather than as a state. Turning the connection off before you open a screen is the easy case that most apps handle. Turning it off halfway through a save, then back on, is where you find out whether the app retries, duplicates the record, or silently throws the change away.
What goes into the full pass before a risky release?
Reserve the full pass for releases that change the ground the app stands on, which realistically means an operating system target bump, a payment or authentication provider swap, a database migration, a design system rewrite, or the first release after somebody new takes over the codebase. On those, every category from the outline gets its own run, and the release date should move rather than the pass getting trimmed.
Accessibility is the category most often skipped and the one that produces the most embarrassing failures. Turn on VoiceOver on iOS and TalkBack on Android, then try to complete your main flow without looking at the screen. Unlabelled buttons announce themselves as the file name of an icon, and focus order that jumps around a form makes it unusable. Worth correcting while you’re there: plenty of checklists cite 44 by 44 pixels as the accessibility minimum for tap targets, but that’s Success Criterion 2.5.5 at Level AAA. The Level AA requirement most teams are held to is 2.5.8, which asks for 24 by 24 CSS pixels.
Security on the full pass means checking that authentication tokens live in the keychain or keystore rather than in plain preferences, that every request goes over HTTPS with certificate validation left on, that nothing sensitive reaches the system log in a release build, and that signing out invalidates the session on the server too. Performance means cold start on your slowest supported device rather than your newest, memory after twenty minutes of use, and download size.
The full pass is also where store requirements belong, because a build that works perfectly can still be refused. Android releases need to clear the current target API level requirement, and iOS releases have their own recurring set of App Store rejection reasons that have nothing to do with whether the app runs correctly.
Which devices and OS versions should you actually test on?
Take the device list from your own analytics, sort by session count, and work down until you’ve covered around ninety percent of sessions, which usually means six to ten combinations rather than the enormous matrices some vendors recommend. Buying devices your users don’t own is a popular way to feel thorough while testing nothing that matters.

The shape of the set matters more than the count. You want one current iPhone and one that’s three or four years old, one small screen if a meaningful share of your users still has one, one Android flagship, and at least one mid range Android handset. That mid range Android is where performance problems surface first, because it has less memory headroom and a slower processor than anything on your team’s desk.
Then add the oldest operating system version you claim to support, and check whether you should still be claiming it. Supporting a version used by two percent of your users costs testing time on every release, and dropping it should be a deliberate decision rather than neglect.
Use simulators and emulators freely during development, and use real hardware for the pass that decides whether a release ships. An emulator runs on your computer’s processor with your computer’s connection, so it can’t show you a phone getting warm and slowing down, a manufacturer’s modified version of Android, or a cellular connection dying in a car park. Cloud device services like Firebase Test Lab, BrowserStack and AWS Device Farm cover the long tail sensibly once your own drawer of phones has the common cases handled.
How do the stores punish an app that ships broken?
Google Play measures your stability continuously and reduces your visibility when it slips, while Apple mostly catches problems at review time and sends the build back. The Android side is the one with published numbers, which makes it the more useful target to manage against.

Android vitals defines bad behaviour thresholds for core technical quality, and the two that matter most are a user perceived crash rate of 1.09 percent and a user perceived rate of the application not responding of 0.47 percent. Both are assessed as a rolling 28 day average and checked daily, and there are separate per device thresholds of 8 percent for each on individual phone models. Excessive battery usage has a 1 percent threshold, and excessive partial wake locks, which means holding the processor awake in the background, has a 5 percent threshold with store visibility impact beginning on March 1, 2026. Google states plainly what happens when you cross one: Play may reduce the visibility of your title, and may also show users a warning on your store listing.
The per device thresholds catch teams by surprise, because an app can sit at a healthy overall crash rate while being completely broken on one popular handset. That’s the argument for keeping a mid range Android in your test set rather than trusting an average.
Google also gates production access for newly created personal developer accounts behind a closed test, which requires at least 12 testers opted in continuously for the last 14 days before you can apply. If that applies to your account, it belongs on the release plan rather than being discovered on launch day.
What should you automate, and what should stay manual?
Automate the checks you’ll run identically on every single release, and keep manual the ones whose value comes from a person noticing that something looks off. A test that asserts your sign in flow returns a session is worth writing once and running forever. A test that asserts a screen looks right is expensive to maintain and tends to fail for reasons nobody cares about.
The mistake worth avoiding is automating too early on an app you’ve just inherited. Writing an automated suite against a codebase you don’t understand encodes the current behaviour including the bugs, and then every fix you make later breaks tests that were documenting the wrong thing. Stabilise first, learn what the correct behaviour actually is, and write the suite against that. This is the sequence RapidLabs follows on an app takeover, and it typically means a few months of a disciplined manual checklist before any automation is worth the money.
When you do automate, the platform tools tend to age better than the cross platform ones. XCUITest on iOS and Espresso on Android are maintained by the people who make the operating systems, which matters when a new version lands. Appium, Maestro and Detox can still be the right answer on a cross platform codebase. Whatever you pick, treat flaky tests as an emergency, because a suite that fails at random gets ignored within two weeks and then provides nothing but a bill.
Where to start on your next release
Build the evidence document first, because a checklist drawn from your own crash reports, analytics and reviews looks nothing like a template you download, and it’s the only version anybody on your team will actually run. Give it a day, order the items by how many users each affects, and accept that the first version will be wrong in places you’ll correct later.
Then decide which pass this release deserves before you start rather than while you’re testing. Two hours for a hotfix, half a day for a normal feature, a full pass for anything that changes the foundation. Writing that decision next to the release notes removes most of the arguing, and it makes the eventual question of why something got through much easier to answer honestly.
If the app in front of you is one you inherited and you can’t tell which pass it needs, that uncertainty is itself the finding. You can talk to a senior engineer about your app and get a straight answer about what’s fragile in it.
Frequently asked questions
What should a mobile app testing checklist include?
At minimum it covers what the app does, how it looks at different text sizes and orientations, how quickly it starts and responds, how it behaves on a weak or absent connection, what happens on a fresh install compared with an upgrade over the previous version, how it survives interruptions, whether someone using a screen reader can operate it, how it stores tokens and user data, and which phones and operating system versions it has to work on. Those categories are the outline rather than the checklist itself. The actual items come from your own crash reports, your analytics and your worst store reviews.
How many devices do you need to test a mobile app on?
Take your analytics, sort devices by session count and work down the list until you have covered roughly ninety percent of sessions, which for most apps lands between six and ten device and operating system combinations. The shape of that set matters more than the number. You want one current iPhone, one iPhone that is three or four years old, one Android flagship, one mid range Android where performance problems appear first, and the oldest operating system version you still support.
What is a good crash rate for a mobile app?
Google Play sets the practical bar for Android through Android vitals, where the bad behaviour threshold for user perceived crash rate is 1.09 percent and the threshold for user perceived application not responding rate is 0.47 percent, both measured as a rolling 28 day average. Crossing either one puts your store visibility at risk, so treat those numbers as a ceiling you stay comfortably under rather than a target you aim at. Apple publishes no equivalent public threshold, which means on iOS you are measuring yourself against your own history instead.
Should you test on real devices or emulators?
Use simulators and emulators for everyday development, because they are faster and free, and use real devices for the pass that decides whether a release ships. An emulator runs on your computer's processor with your computer's network, so it cannot show you thermal throttling on a warm phone, a manufacturer's modified version of Android, a real cellular connection dropping in a lift, or how the app behaves when the battery is at four percent. Those are exactly the conditions that produce the reviews you do not want.
How long should testing take before a mobile app release?
Size the pass to the risk of the change rather than to the calendar. A one line hotfix deserves about two hours covering the fix itself, a cold launch, sign in and the flow that earns money, plus an upgrade install over the previous version. A normal feature release deserves half a day of regression checks. A release that changes the foundation, such as an operating system target bump or a payment provider swap, deserves a full pass across every category.
Do you still need a mobile app testing checklist if you have automated tests?
Yes, because automated tests only cover what someone decided to write a test for, and the checklist is what stops the gaps from being invisible. In practice the checklist and the test suite grow into each other. Any item you run identically on every single release belongs in automation, and the checklist then records that it is covered, while the items that depend on a person noticing something looks wrong stay manual permanently.
Have a product decision to make?
RapidLabs helps founders and operators shape, build, and launch focused software.
Email the studio