The Hidden Tester Panel: Debug Menu for iOS and Android
Reset onboarding without reinstalling, switch to staging without rebuilding, force a push, simulate a network error without Charles — all these tasks are solved by a Debug Menu. This hidden screen is available only in debug builds. In projects with 10 testers and 20 releases per month, implementing a Debug Menu reduces the time to verify the first session by 10 times, and annual savings on regressions reach 200,000 rubles. We have 8+ years of experience in mobile development and have implemented solutions for 50+ apps.
Key Features of Debug Menu
Environment Switcher
The most requested feature. Without it, a tester spends 15 minutes rebuilding the app to change servers. Our implementation uses UserDefaults/SharedPreferences to store the current environment and a request interceptor (URLProtocol or OkHttp interceptor) to automatically swap the base URL. This allows switching Dev/Staging/Production in a couple of taps — 20 times faster than the manual process.
Feature Flag Management
Locally override any flag, even if it is controlled remotely via Firebase Remote Config or a custom system. This is especially important for testing A/B experiments. For example, you can force-enable a new checkout for 100% of users in a debug build.
State Reset
Buttons like "Reset Onboarding", "Clear Cache", "Delete Keychain" — for quickly verifying first-run flows. Without them, a tester spends up to 5 minutes reinstalling the app. Time savings per cycle reach 85%.
QA Tools
Display current userId, device token (for push), API version, environment variables. A "Copy device token" button — testers can immediately send a test push via Firebase Console.
Error Simulation
Modes like "Network Error" (HTTP 500 for all requests) or "Slow Network" (5-second delay). Verify offline handling without turning off Wi-Fi. A built-in crash button to test Crashlytics.
How Debug Menu Protects Against Errors in Release?
It is crucial: the Debug Menu must be completely excluded from the release build. Not hidden, not behind a flag — but excluded from compilation. Our experience with App Store Review Guidelines (Section 4.2) confirms that runtime flags can lead to rejection. We use only compile-time checks. The protection's reliability has been verified on 50+ releases; 90% of clients note accelerated testing.
iOS — conditional compilation:
#if DEBUG || BETA import UIKit final class DebugMenuViewController: UIViewController { // all debug menu code } #endif Android — separate build flavor:
app/ src/ main/ debug/ kotlin/com/example/debug/DebugMenuActivity.kt release/ // DebugMenuActivity absent In debug/AndroidManifest.xml we register DebugMenuActivity. In the release manifest, it is not present. Gradle automatically includes the appropriate sources based on flavor.
Platform Comparison: iOS vs Android
| Aspect | iOS | Android |
|---|---|---|
| Conditional compilation | #if DEBUG |
Build flavor (debug/release) |
| Configuration storage | UserDefaults | SharedPreferences |
| Invocation mechanism | Shake gesture + tap pattern | Shake gesture + adb shell am start |
| Network simulation | URLProtocol | OkHttp Interceptor |
Common Problems and Solutions with Debug Menu
| Problem | Solution |
|---|---|
| Tester spends 15 minutes rebuilding | Environment switcher in Debug Menu |
| Cannot re-test onboarding | State reset button |
| Difficult to simulate network error | Error simulation mode |
What's Included in Debug Menu Development?
- Audit of the current app: identify integration points, evaluate architecture.
- Design of Debug Menu structure: select features, design UI.
- Implementation: write code in Swift/Kotlin/Flutter according to your stack.
- CI/CD integration: automatic enable/disable in different builds.
- Documentation: description of all features, instructions for testers.
- Training: demo to the team, Q&A.
- Support: bug fixes guaranteed for one month.
Process Flow
- Analysis — we study your app, determine required features.
- Design — we prepare screen mockups and access logic.
- Implementation — we write code using feature flags for flexibility.
- Testing — we verify on all builds (Debug, Beta, Release).
- Deployment — we upload to TestFlight/Google Play Console, train the team.
Timing and Cost of Debug Menu Development
Basic Debug Menu with environment switcher, flag management, and state reset — from 2 to 3 days. Extended version with error simulation and custom tools — from 3 to 4 days. The exact cost is calculated individually after analyzing your project. Order Debug Menu development for your project — see testing acceleration in the first sprint. Contact us for a consultation and commercial proposal.







