Your app might work perfectly on your test device but crash on a user's phone. Compatibility testing ensures your app works across the fragmented mobile landscape.
Device Compatibility
Screen Sizes and Resolutions
Mobile screens vary wildly:
| Category | Examples | Resolution |
|---|---|---|
| Small phone | iPhone SE, Galaxy A14 | 375 × 667, 720 × 1600 |
| Standard phone | iPhone 15, Pixel 8 | 393 × 852, 412 × 915 |
| Large phone | iPhone 15 Pro Max, S24 Ultra | 430 × 932, 412 × 915 |
| Foldable | Galaxy Z Fold, Pixel Fold | Multiple states |
| Tablet | iPad, Galaxy Tab | 820 × 1180, 800 × 1280 |
What to check:
- Layout doesn't break on small screens
- Content doesn't look sparse on large screens
- Text is readable without zooming
- Images scale correctly
- No horizontal scrolling on portrait mode
- Landscape orientation works (if supported)
Foldable Devices
Foldables introduce unique testing scenarios:
- App adapts when folded/unfolded
- Content repositions correctly during fold transition
- Multi-window mode works properly
- Hinge area doesn't hide interactive elements
OS Version Compatibility
Android Fragmentation
Android version distribution (approximate 2026):
| Version | API Level | Market Share |
|---|---|---|
| Android 15 | 35 | 20% |
| Android 14 | 34 | 30% |
| Android 13 | 33 | 20% |
| Android 12 | 31-32 | 15% |
| Android 11 and below | ≤ 30 | 15% |
Testing rule: Support your minimum API level and test on at least 3 major versions.
iOS Adoption
iOS users update faster than Android:
| Version | Market Share |
|---|---|
| iOS 18 | 60% |
| iOS 17 | 30% |
| iOS 16 | 8% |
| Older | 2% |
Testing rule: Test on the current version and one version back. Most apps can drop iOS 15 support.
Version-Specific Issues
Common things that break across versions:
- Permissions: Android 13+ requires per-notification permission
- Privacy: iOS 14+ App Tracking Transparency
- UI changes: Android 12 Material You, iOS 16 Lock Screen widgets
- API deprecations: Methods removed in newer versions
- Background limits: Stricter with each OS update
Network Compatibility
Test Scenarios
| Condition | How to Test | Expected Behavior |
|---|---|---|
| WiFi (fast) | Normal WiFi | Everything loads quickly |
| 4G/LTE | Throttle to ~30 Mbps | Should still feel fast |
| 3G | Throttle to ~2 Mbps | Loading states visible, content loads |
| Edge/2G | Throttle to ~200 Kbps | Degraded but functional, no timeouts |
| Offline | Airplane mode | Cached content shown, clear offline message |
| Network switch | WiFi → cellular | No data loss, requests retry |
How to Throttle Network
Android Emulator:
- Extended controls → Cellular → Set network type and speed
iOS Simulator:
- Use Network Link Conditioner (Xcode → Settings → Developer)
Chrome DevTools (for hybrid/PWA):
- Network tab → Throttling dropdown
Charles Proxy / mitmproxy:
- Intercept traffic and add latency
Offline Behavior
Every mobile app should handle offline gracefully:
- Show cached data when available
- Display a clear "No internet connection" message
- Queue user actions (likes, comments) for sync when back online
- Don't show empty screens with no explanation
- Retry failed requests automatically when connection returns
Orientation Testing
| Scenario | What to Check |
|---|---|
| Portrait → Landscape | Layout adapts, no content cut off |
| Landscape → Portrait | Layout reverts correctly |
| Orientation lock | App respects user's system setting |
| During video playback | Video goes fullscreen in landscape |
| During form entry | Keyboard doesn't cover input fields |
Localization Compatibility
If your app supports multiple languages:
| Test | Why |
|---|---|
| Long translations (German, Finnish) | Text may overflow containers |
| Right-to-left languages (Arabic, Hebrew) | Layout must mirror |
| CJK characters (Chinese, Japanese, Korean) | Font rendering, text wrapping |
| Date formats | MM/DD vs DD/MM vs YYYY-MM-DD |
| Currency symbols | $, €, ¥, ₹ — different widths |
| Number formats | 1,000.00 vs 1.000,00 |
Creating a Compatibility Matrix
Document which combinations you'll test:
Device | OS | Browser/App | Priority
----------------|---------|-------------|----------
iPhone 15 | iOS 18 | Safari | High
iPhone 13 | iOS 17 | Safari | High
Pixel 8 | Android 14 | Chrome | High
Galaxy S24 | Android 14 | Samsung | High
Galaxy A54 | Android 13 | Chrome | Medium
iPad Air | iOS 18 | Safari | Medium
iPhone SE | iOS 17 | Safari | Medium
Pixel 6 | Android 12 | Chrome | LowFocus testing effort on high-priority combinations. Use cloud device farms to cover medium and low priority.