In this guide
One list for the whole app, in the order a user meets it. Every check has a reason and a way to verify it. Area tags let you filter: [INSTALL], [ONBOARD], [FLOW], [ERROR], [DEVICE], [PRIVACY], [WORDING], [RELEASE]. For depth in one area, follow the links at the end.
Use a real device where you can. Tick a check only when you saw the result, not when you assume it.
Install and first start
- [INSTALL] Clean install works. Why: first impressions are made here. Check: delete the app, install the build, open it.
- [INSTALL] Update over an older version keeps data. Why: users who update lose trust fast if data vanishes. Check: install the previous build, add data, install the new one.
- [INSTALL] Uninstall and reinstall behave sensibly. Why: stale local data causes odd states. Check: reinstall and sign in again.
- [INSTALL] App starts without a network. Why: launch crashes on missing data are common. Check: airplane mode, cold start.
- [INSTALL] Launch time feels acceptable. Why: slow starts get the app closed. Check: time a cold start on your oldest device.
Onboarding and account
- [ONBOARD] Every onboarding screen can be completed and skipped. Why: a stuck first run ends the session. Check: tap through both ways.
- [ONBOARD] Back navigation works in onboarding. Why: users misread screens. Check: go back at each step.
- [ONBOARD] Permission prompts appear when needed, not all at once. Why: early denial hurts later features. Check: first run, note when each prompt shows.
- [ONBOARD] Denied permissions have a usable fallback. Why: denial is common. Check: deny each permission, use the feature.
- [ONBOARD] Interrupted onboarding resumes. Why: users get calls and switch apps. Check: kill the app mid-way and reopen.
- [FLOW] Sign-up accepts valid input and rejects invalid input clearly. Why: sign-up is the first gate. Check: see the sign-up checklist.
- [FLOW] Login, wrong password and reset work. Why: lockouts create support work. Check: see the login checklist.
- [FLOW] Logout clears the session. Why: shared devices. Check: log out, press back, restart.
- [FLOW] Expired session sends users to sign-in without losing work. Why: tokens expire. Check: wait out or invalidate a token.
Core flows
- [FLOW] The main task works start to finish. Why: this is the reason the app exists. Check: do it as a new user, no shortcuts.
- [FLOW] Each form validates on the field and on submit. Why: bad data enters silently otherwise. Check: empty, too long, wrong format.
- [FLOW] Lists, search and filters return correct results. Why: wrong results look like a broken app. Check: known data, no match, many matches.
- [FLOW] Create, edit and delete update everywhere. Why: stale screens confuse. Check: change an item, open every screen showing it.
- [FLOW] Back button and gestures behave consistently. Why: unexpected exits annoy. Check: go back from every screen.
- [FLOW] Settings save and apply. Why: settings that don't stick feel broken. Check: change, close, reopen.
- [FLOW] Payment success, cancel, failure and restore work. Why: money bugs are the costliest. Check: see the payment checklist.
- [FLOW] Uploads, camera and files handle large and denied cases. Why: media is where memory runs out. Check: big file, cancel mid-upload.
- [FLOW] Deep links and shared links open the right screen. Why: broken links waste campaigns. Check: tap links with the app closed and open.
- [FLOW] Notifications arrive and open the right place. Why: they are a re-entry point. Check: send one, tap it, with the app closed.
- [FLOW] Account deletion works and says what happens. Why: users expect it. Check: delete a test account and try to log in.
States and errors
- [ERROR] Empty states explain what to do next. Why: blank screens look broken. Check: new account, every list.
- [ERROR] Loading states appear and end. Why: endless spinners drive uninstalls. Check: slow the network.
- [ERROR] Server errors show a helpful message and a retry. Why: raw errors scare people. Check: block the server or return an error.
- [ERROR] Offline mode fails gracefully. Why: phones lose signal. Check: switch networks and go offline mid-action.
- [ERROR] Double taps don't create duplicates. Why: impatient users tap twice. Check: tap submit and buy buttons rapidly.
- [ERROR] Error messages say what to fix. Why: "Something went wrong" helps nobody. Check: read each message aloud.
- [ERROR] Long text, emoji and non-Latin input don't break layouts. Why: real names vary. Check: paste long and unusual strings.
Devices and environment
- [DEVICE] Smallest and largest supported screens look right. Why: clipped buttons block flows. Check: run both.
- [DEVICE] Oldest supported OS version runs the app. Why: crashes there are silent for developers. Check: install on it.
- [DEVICE] Portrait and landscape behave as intended. Why: rotation reloads state. Check: rotate mid-flow.
- [DEVICE] Dark mode and large text stay readable. Why: accessibility and comfort. Check: switch both in system settings.
- [DEVICE] Interruptions (call, alarm, app switch) recover. Why: they happen daily. Check: interrupt each core flow.
- [DEVICE] Low battery and low storage don't crash the app. Why: real devices are never ideal. Check: low power mode; fill storage if you can.
- [DEVICE] Date, time zone and number formats are right. Why: wrong dates break trust. Check: change region and time zone.
- [DEVICE] Screen reader and touch targets work for basics. Why: some users depend on it. Check: turn on the screen reader, finish one flow.
Privacy and wording
- [PRIVACY] The app asks only for permissions it uses. Why: extra requests reduce trust. Check: list permissions against features.
- [PRIVACY] Consent choices are respected after restart. Why: a remembered "no" must stay no. Check: decline, restart, check.
- [PRIVACY] Privacy policy and store data answers match the app. Why: mismatches cause rejections and complaints. Check: list SDKs and data, compare. Not legal advice; check the current store rules.
- [PRIVACY] No secrets or test data in logs and screenshots. Why: leaks happen in debug builds. Check: review logs and store images.
- [WORDING] Text has no typos or leftover placeholders. Why: "Lorem ipsum" in production shows. Check: read every screen.
Release
- [RELEASE] The tested build is the one you submit. Why: rebuilds differ. Check: compare version and build numbers.
- [RELEASE] Crash reporting is on and receives a test crash. Why: you can't fix what you can't see. Check: trigger one and find it.
- [RELEASE] Known issues are written down and accepted. Why: surprises hurt more than known flaws. Check: list open bugs, decide each.
- [RELEASE] There is a rollback or fix plan. Why: the first bad day needs a plan. Check: write who does what.
- [RELEASE] Someone outside the project completed the main flow. Why: you can't see your own blind spots. Check: watch or ask for structured feedback.
Go deeper
- Hub: Mobile app testing checklist hub
- Sign-up flow testing checklist
- Login and password reset testing checklist
Check 50 is where AppReviewX helps: private, structured feedback from other developers, one feedback you write earns one credit. See how AppReviewX works.