Mobile App Pre-Release Testing Checklist (2026)

A pre‑release checklist is the safety net that catches regressions before they reach users. In 2026 mobile apps ship faster than ever, with continuous delivery pipelines pushing updates multiple times

May 10, 2026 · 17 min read · Testing Checklists

Motivation and Scope

A pre‑release checklist is the safety net that catches regressions before they reach users. In 2026 mobile apps ship faster than ever, with continuous delivery pipelines pushing updates multiple times a week. A single missed edge case—such as a permission denial that crashes the flow on a low‑end device—can generate thousands of one‑star reviews and trigger store penalties.

The checklist below is platform‑agnostic; it applies to Android, iOS, and cross‑platform frameworks (Flutter, React Native, Kotlin Multiplatform). Each area lists concrete pass criteria, the manual steps that validate them, and the automated techniques that can cover the same ground in one autonomous run. By following the guide you will reduce post‑release fire‑fighting, improve store ratings, and build confidence that every release meets a baseline of quality.

---

Functional Testing

Core user flows

Every release must verify that the primary journeys—login, signup, product browse, checkout, settings change—complete without blocking errors. Define a happy‑path script for each flow and assert that:

Edge case handling

Beyond the happy path, test:

Automation with SUSA

SUSA explores the app autonomously, generating a graph of reachable states and exercising each transition with a set of persona‑driven behaviors (curious, impatient, power user, etc.). When you upload an APK or point SUSA at a web URL, it:

  1. Records every distinct screen visited.
  2. Attempts to populate forms with valid and invalid data according to the persona’s tolerance for errors.
  3. Triggers system‑ Triggers dialogs, handles permission prompts, and follows deep links that appear in the UI.
  4. Marks a flow as PASS only if the final state matches the expected outcome (verified via image‑based or accessibility‑tree assertions).

Because SUSA does not rely on pre‑written scripts, it catches regressions that appear only when a new UI element changes the navigation tree—something a static test suite might miss.

Manual spot checks

Even with autonomous coverage, a tester should:

---

Install, Update, and Migration Testing

Fresh install

A clean install must:

Upgrade from previous version

When an existing version is upgraded:

Data migration and backward compatibility

If you introduce a new data format (e.g., moving from SQLite to Room, or changing a JSON schema):

Rollback scenario

In the event a hotfix is required, the app must be able to revert to the previous version’s behavior:

---

Permissions and Privacy

Runtime permission requests

Modern OSes require explicit consent for dangerous permissions. Verify:

Permission denial handling

Test both deny and deny + don’t ask again paths:

Privacy label alignment

Store privacy labels (Apple’s App Privacy Details, Google Play’s Data safety form) must reflect the actual data collected:

Testing with SUSA

When SUSA runs a session, it simulates the adversarial persona that actively denies permissions and taps on misleading UI. The platform records:

These observations are exported as a JSON report that can be diffed against a baseline to spot regressions in permission handling.

---

Offline and Poor Network Conditions

Simulating network loss

Use the platform’s network‑conditioning tools:

Graceful degradation

When connectivity drops:

Data sync after reconnect

After the network is restored:

---

Performance and Battery

Launch time, frame rate, jank

Measure cold and warm start:

For frame rendering:

CPU, memory, battery consumption

Profiling tools

Automated performance thresholds

Define a JSON performance baseline:


{
  "coldStartMs": 1800,
  "warmStartMs": 750,
  "frame90thMs": 16,
  "cpuIdlePct": 15,
  "memMaxMb": 90,
  "batteryDrainPctPerHr": 2
}

A CI step runs a short scripted workflow, extracts the metrics via adb shell dumpsys or xcrun simctl spawn, and compares against the baseline.

---

Accessibility (WCAG)

Touch target size, contrast, screen reader

Dynamic type support

Testing with accessibility scanner

Run the scanner as part of the unit test suite:


# Android
adb shell am instrument -w com.google.android.apps.accessibility.test/.AccessibilityTestRunner
# iOS (via fastlane)
fastlane run scan_test scheme:MyApp device:"iPhone 14"

Fail the build if any WCAG 2.1 AA violation is reported.

Manual checks

---

Security Basics

Data storage encryption

Network security (TLS, certificate pinning)

OWASP Mobile Top 10 quick checks

#AreaQuick verification
M1Improper Platform UsageCheck that intents with setComponent are not exposed without proper permission guards.
M2Insecure Data StorageScan for MODE_WORLD_READABLE or getExternalStorageDirectory() usage for sensitive files.
M3Insecure CommunicationVerify that all domains in NetworkSecurityConfig use cleartextTrafficPermitted="false".
M4Insecure AuthenticationEnsure that password‑based auth uses rate limiting and secure password hashing (argon2id, bcrypt).
M5Insufficient CryptographyConfirm that any custom crypto uses established algorithms (AES‑GCM, RSA‑OAEP) and not ECB mode.
M6Insecure AuthorizationValidate that backend endpoints check the JWT/token claims and scope.
M7Client Code QualityRun static analysis tools (SpotBugs, SonarSwift) to catch hard‑coded secrets.
M8Code TamperingVerify that the app checks its own signature at runtime (optional but recommended).
M9Reverse EngineeringUse ProGuard/R8 (Android) or Swift stripping (iOS) and confirm that symbols are obfuscated.
M10Extraneous FunctionalityEnsure that debug flags, verbose logging, and test endpoints are stripped in release builds.

Penetration testing lite

---

Localization and RTL

Language switching

Layout mirroring

Date, number, currency formatting

Pseudolocalization

---

Push Notifications and Deep Links

FCM/APNs handling

Notification actions

Deep link routing

Background vs foreground

---

Crash, ANR, and Stability Monitoring

Symbolication, crash reporting

ANR detection

Stress testing with monkey


adb shell monkey -p com.example.myapp -v 10000 --throttle 100 --pct-syskeys 0 --pct-nav 0 --pct-majornav 0 --pct-appswitch 0

Using SUSA for autonomous crash detection

During an autonomous exploration, SUSA records any uncaught exception or native signal that terminates the process. The resulting report includes:

These findings can be uploaded directly to your crash‑reporting provider as a “test‑only” issue, allowing developers to triage before the release hits production.

---

Store Metadata and Privacy Labels

App description, screenshots, version notes

Privacy label accuracy

Age rating, categorization, and content descriptors

---

Rollback and Hotfix Plan

Feature flags, remote config

OTA updates, patching

  1. Simulate a server‑side flag that triggers a patch download.
  2. Confirm that the patch applies without requiring a restart (or with a controlled restart that preserves state).
  3. Validate that the patched behavior matches the intended fix and that no regressions are introduced.

Monitoring rollout

---

Consolidated Test Matrix

Test AreaPass CriteriaManual ApproachAutomated ApproachPrimary Tools
Functional flowsAll happy‑paths complete; error states handledScripted tester walks each flow, verifies UI & statePersona‑driven exploration, assertion on final stateSUSA, Espresso/XCUITest, Appium
Install/Update/MigrationClean launch < 2 s; DB migrations succeed; data intact after downgradeInstall via adb/TestFlight, verify on‑deviceAutomated device farm scripts, schema version checksFirebase Test Lab, Gradle/ fastlane
Permissions & PrivacyRequests only when needed; denial handled gracefully; privacy label matches codeTester denies each permission, observes UIAdversarial persona denies & retries, logs networkSUSA, MobSF, ADB logcat
Offline/Poor NetRequests retry with back‑off; UI shows indicator; sync recoversToggle airplane mode, use Network Link ConditionerScripted network‑loss/regain cycles, check local queueToxiproxy, Charles Proxy, Espresso idling resources
Performance/BatteryLaunch < 2 s, 90th‑pct frame < 16 msec, battery drain < 2 %/hUse Profiler/ Instruments, manually interactCI job runs scenario, extracts metrics, compares to baselineAndroid Studio Profiler, Xcode Instruments, Perfetto
AccessibilityTouch target ≥ 48 dp, contrast ≥ 4.5:1, screen‑reader labels presentManual TalkBack/VoiceOver walk, measure with rulerAutomated scanner, dynamic‑type layout assertionsAccessibility Scanner, AXCore, Espresso accessibility checks
SecurityData encrypted at rest, TLS 1.2+, no clear‑text secrets, OWASP Top 10 clearedManual key‑chain inspection, MITM proxy testStatic analysis, dynamic taint, permission denial checksMobSF, SonarQube, Mitmproxy, SUSA adversarial
Localization/RTLLayout mirrors, strings update instantly, numbers/format correctSwitch language, inspect UI, use pseudolocaleAutomated screenshot diff, layout‑assert testsFastlane screenshot, Lokalise, Espresso screenshot tests
Push/Deep LinksNotification shows correct payload; actions launch expected screen; deep link routes correctlySend test push via console, click notification, verify UIAutomated FCM/APNs push, deep‑link intent launch, assert activityFirebase Console, Xcode notification sim, adb am start
Crash/ANR/StabilityNo uncaught exceptions, no ANR traces, symbolicated reportsExercise app, check logcat for “ANR”, view crash dashboardMonkey stress, Susa autonomous run, automatic symbolication uploadFirebase Crashlytics, Sentry, adb bugreport, SUSA
Store MetadataDescription, screenshots, privacy label accurate, age rating correctManual store listing review, compare to buildAutomated metadata validation script, privacy‑label diffFastlane supply/deliver, custom CI script
Rollback/HotfixFeature flag safe default, remote‑config fallback works, patch applies cleanlyToggle flag offline, observe behavior, apply patch via adbCanary rollout simulation, automated health‑check queriesFirebase Remote Config, LaunchDarkly, CodePatch scripts

---

Quick Reference Checklist

---

Closing Takeaways

A disciplined pre‑release checklist transforms release anxiety into measurable confidence. By dividing the effort into well‑defined areas—functional integrity, install lifecycle, permissions, offline resilience, performance, accessibility, security, localization, push/deep links, stability, store metadata, and rollback readiness—you create a repeatable process that scales with team size and release frequency.

Leveraging autonomous exploration tools like SUSA amplifies coverage: a single run can exercise hundreds of UI paths, simulate varied user personas, and surface permission, crash, and ANR issues that would otherwise require large manual test suites. Combine this autonomous baseline with targeted manual checks for nuanced UX details, and you obtain a safety net that catches regressions before they reach users.

Invest the time to codify each criterion in your CI pipeline, store the results as version‑controlled artifacts, and treat any checklist failure as a blocker. The payoff is fewer hot‑fixes, higher store ratings, and a product that feels solid to every user, no matter their device, network, or ability. Ship with confidence, ship with quality.

Test Your App Autonomously

Upload your APK or URL. SUSA explores like 10 real users — finds bugs, accessibility violations, and security issues. No scripts.

Try SUSA Free