Error Monitoring iOS & Android Complete Guide 12 min read • May 19, 2026

Mobile App Error Monitoring: Complete Guide 2026

Crash reporting only catches errors that kill your app. The silent errors — failed API calls, broken flows, unhandled edge cases — are often causing more user churn than crashes. This guide covers comprehensive mobile error monitoring for both fatal and non-fatal errors.

1. Error Monitoring vs Crash Reporting: What's the Difference?

Aspect Crash Reporting Error Monitoring
ScopeFatal errors onlyFatal + non-fatal errors
App still runningNoYes (for non-fatal)
User impact visibleOnly if they report itYes — UX degradation tracked
API failure detectionOnly if it crashesEvery failure
Business impactLost sessionLost conversion, churn

Think of crash reporting as an ambulance — it responds to catastrophic events. Error monitoring is more like continuous health monitoring — it catches problems before they become emergencies.

2. Non-Fatal Errors: The Silent UX Killers

Non-fatal errors don't crash your app — they just make it quietly broken. Users experience degraded UX, give up, and churn. You never know why.

API Failures

Your app shows an empty cart or "Something went wrong" because the backend returned a 500. The user doesn't see a crash — they see a broken feature.

Data Parsing Errors

A JSON field changes type in the backend. Your iOS app falls back to a default value silently. A key feature shows wrong data to all users for 3 days.

Image / Asset Load Failures

Product images fail to load during a sale event because the CDN is overloaded. Users see broken images. Conversion drops 40%. No crash reported.

Payment / Checkout Errors

A payment validation error only shows a generic "Try again" message. You have no idea how many users hit this until revenue drops and someone files a bug.

Key insight: Non-fatal errors often have higher business impact than crashes. A crash affects one session. A broken checkout flow silently blocks conversions for every user who hits it.

3. Error Types to Monitor in Mobile Apps

Fatal Crashes

Unhandled exceptions that terminate the app process. These are captured automatically by Logtrics — you don't need to add any code.

Caught Exceptions

Errors caught in try/catch blocks. You must explicitly report these with Logtrics.recordError() — they won't be captured automatically since the app didn't crash.

Network / API Errors

HTTP 4xx/5xx responses, timeouts, and connection failures. Enable Logtrics network monitoring to capture all API errors automatically with request/response context.

Business Logic Errors

Custom error conditions: stock unavailable, payment declined, validation failure. Log these as structured error events with business-specific context (product ID, cart value, user plan).

Performance Errors

Operations that exceed acceptable thresholds: API calls taking >3s, screen renders taking >1s, database queries taking >500ms. These degrade UX without crashing.

4. Setup: Capturing All Error Types with Logtrics

iOS (Swift) — Non-Fatal Error Reporting

Record caught errors in Swift Swift
do {
    let order = try await orderService.fetchOrders(userId: user.id)
    await updateUI(with: order)
} catch let error as NetworkError {
    // Report non-fatal — app continues running
    Logtrics.recordError(error, context: [
        "screen": "OrderHistory",
        "userId": user.id,
        "endpoint": "/api/orders",
        "severity": "error"
    ])
    showEmptyState(message: "Couldn't load orders. Please try again.")
}

Android (Kotlin) — Non-Fatal Error Reporting

Record caught errors in Kotlin Kotlin
try {
    val result = paymentRepository.charge(amount, cardToken)
    onPaymentSuccess(result)
} catch (e: PaymentException) {
    Logtrics.recordError(e, mapOf(
        "errorCode" to e.code,
        "amount" to amount,
        "currency" to "USD",
        "screen" to "Checkout"
    ))
    showPaymentError(e.userFacingMessage)
}

React Native — Non-Fatal Error Reporting

Record errors in React Native JavaScript
try {
  const profile = await api.fetchUserProfile(userId);
  setProfile(profile);
} catch (error) {
  Logtrics.recordError(error, {
    screen: 'ProfileScreen',
    userId,
    action: 'fetch_profile',
    severity: 'error'
  });
  setProfileError(true);
}

5. Error Grouping, Deduplication & Prioritisation

Without grouping, 10,000 occurrences of the same error appear as 10,000 separate events in your dashboard. Logtrics groups errors by:

🔗

Stack Trace Fingerprint

Same error at the same code location = same group

📊

User Impact Score

Unique affected users × session frequency × severity weight

📈

Trend Detection

New errors, regression errors, and improving errors flagged automatically

This means your error queue shows the 5 errors that matter most — not a wall of 10,000 events to sort through.

6. Alerting for Non-Fatal Errors

Non-fatal errors need different alert thresholds than crashes. A single crash is always worth an alert. A single non-fatal error may be noise. Configure alert rules based on:

Error rate threshold

Alert when a specific error affects >1% of sessions in a 1-hour window. Example: "CartService failed to load" affecting 2% of sessions = alert immediately.

Business-critical paths

Alert on any error in checkout, login, or onboarding — regardless of rate. A single payment error should never go unnoticed.

New error type

Alert immediately when a non-fatal error type is seen for the first time. New errors after a deploy = potential regression.

7. Dashboard: Error Rate & Error-Free Sessions

Track two parallel metrics to measure your overall error health:

Crash-Free Session Rate

Sessions with zero fatal crashes / total sessions. Target: 99.5%+. This is the metric Google Play and the App Store care about.

Error-Free Session Rate

Sessions with zero errors (fatal or non-fatal) / total sessions. This is your true UX quality metric. Top apps target 97%+.

An app can have 99.8% crash-free sessions but 85% error-free sessions — meaning 15% of all sessions have at least one broken experience. Error monitoring reveals the gap.

FAQ

What is the difference between error monitoring and crash reporting?

Crash reporting captures only fatal errors that terminate the app. Error monitoring is broader — it captures non-fatal errors (caught exceptions, API failures, business logic errors) that degrade UX without crashing. You need both for full app health visibility.

What are non-fatal errors in mobile apps?

Caught exceptions and failure states that don't crash the app: failed API calls, image load failures, payment declines, data parsing failures, empty states from backend bugs. These silently hurt retention and conversion.

Should I monitor every error or just crashes?

Monitor both, but with different rules. Crashes = immediate alert always. Non-fatal errors = alert when they cross a user-impact threshold (e.g., >1% of sessions). Don't alert on individual non-fatal errors or you'll face alert fatigue.

How do I capture non-fatal errors in iOS?

Use Logtrics.recordError(error, context: [...]) inside your catch blocks. This sends the error and your custom context to the dashboard without crashing the app or affecting the user experience.

Monitor Every Error, Not Just Crashes

Logtrics captures fatal crashes AND non-fatal errors, with AI grouping, real-time alerts, and a dashboard that shows you what actually matters. Start in 5 minutes.

Related Articles