Crash Tracking
    • 3 Minutes to read
    • Dark
      Light

    Crash Tracking

    • Dark
      Light

    Article summary

    Crash tracking allows you to analyze crashes and exceptions in your mobile application.

    Parameters

    As soon as crash tracking is enabled, parameters are sent automatically to Mapp Intelligence. However, if you want to properly analyze them you'll need to configure the parameters in your account

    Parameter

    Description

    Where to configure (Mapp Q3 > Configuration > ...)

    Where to analyze

    Crash - Type

    Type of crash:

    • 1: Uncaught

    • 2: Caught

    • 3: Custom

    Categories > Custom Parameters > Event Parameter


    metric

    Crash - Name

    Name of the crash. Name as given by the system or custom name in case custom type is used.

    Categories > Custom Parameters > Event Parameter

    Navigation > Event Parameter > [Name of Parameter]

    Crash - Message

    Crash message. Message as given by the system or custom message in case custom type is used.

    Crash - Cause Message

    The parsed string of the crash messages.

    Crash - Stack

    Stack where the crash happened.

    Crash - Cause Stack

    Stack that caused the crash.

    Methods

    Enable crash tracking in global configuration:

    Method

    Description

    Tracking Options

    Default

    .enableCrashTracking(exceptionLogLevel: exceptionType: exceptionType)

    Enables crash tracking in global configuration. The following types can be tracked:

    • Uncaught exceptions

    • Caught exceptions

    • Caught exceptions with custom messages

    The following configuration options are possible:

    • allExceptionTypes: All exceptions are tracked

    • noneOfExceptionTypes: No exceptions are tracked

    • caught: Only caught exceptions are tracked

    • uncaught: Only uncaught exceptions are tracked

    • custom: Only custom exceptions are tracked

    • custom_and_caught: Custom and caught exceptions are tracked

    • uncaught_and_caught: Uncaught and caught exceptions are tracked

    • uncaught_and_custom: Uncaught and custom exceptions are tracked

    noneOfExceptionTypes

    Example

    1. First, enable crash tracking in your global configuration settings:

      MappIntelligence.shared()?.initWithConfiguration([12345], onTrackdomain: "https://track.mapp.com")
      MappIntelligence.shared()?.enableCrashTracking(.allExceptionTypes)
    2. Then, you can track the desired exception in your application screens:

      @IBAction func trackExceptionWithNameAndMessage(_ sender: Any) {
              MappIntelligence.shared()?.trackException(withName: "Test Exception", andWithMessage: "Test Exception Message")
          }
          
      @IBAction func trackCaughtException(_ sender: Any) throws {
              //fatalError()
              NSException(name: NSExceptionName(rawValue: "Custom Exception"), reason: "Custom reason", userInfo: ["Localized key" : "Unexpected input"]).raise()
          }
          
      @IBAction func TrackError(_ sender: Any) {
              let userInfo: [String : Any] =
                          [
                              NSLocalizedDescriptionKey :  NSLocalizedString("Unauthorized", value: "Please activate your account", comment: "") ,
                              NSLocalizedFailureReasonErrorKey : NSLocalizedString("Unauthorized", value: "Account not activated", comment: "")
                      ]
              let error = NSError(domain: "ShiploopHttpResponseErrorDomain", code: 401, userInfo: userInfo)
              MappIntelligence.shared()?.trackException(with: error)
          }

    Full Code Example

    class ExceptionsViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            // Do any additional setup after loading the view.
        }
        
        @IBAction func trackExceptionWithNameAndMessage(_ sender: Any) {
            MappIntelligence.shared()?.trackException(withName: "Test Exception", andWithMessage: "Test Exception Message")
        }
        
        @IBAction func trackUncaughtException(_ sender: Any) throws {
            //fatalError()
            NSException(name: NSExceptionName(rawValue: "Custom Exception"), reason: "Custom reason", userInfo: ["Localized key" : "Unexpected input"]).raise()
        }
        
        @IBAction func TrackError(_ sender: Any) {
            let userInfo: [String : Any] =
                        [
                            NSLocalizedDescriptionKey :  NSLocalizedString("Unauthorized", value: "Please activate your account", comment: "") ,
                            NSLocalizedFailureReasonErrorKey : NSLocalizedString("Unauthorized", value: "Account not activated", comment: "")
                    ]
            let error = NSError(domain: "ShiploopHttpResponseErrorDomain", code: 401, userInfo: userInfo)
            MappIntelligence.shared()?.trackException(with: error)
        }
    
    }
    1. First, enable crash tracking in your global configuration settings:

      [[MappIntelligence shared] initWithConfiguration:@[@12345] onTrackdomain:@"www.track.mapp.com"];
      [[MappIntelligence shared] enableCrashTracking:allExceptionTypes];
    2. Then, you can track the desired exception in your application screens:

      - (void)trackExceptionWithNameAndMessage {
          [[MappIntelligence shared] trackExceptionWithName:@"Test Exception" andWithMessage:@"Test Exception Message"];
      }
      
      - (void)trackCaughtException {
          [[[NSException alloc] initWithName:@"Custom exception" reason:@"Custom reason" userInfo:@{@"Localized key" : @"Unexpected input"}] raise];
      }
      
      - (void)TrackError {
          
          NSDictionary* userInfo = @{
              NSLocalizedDescriptionKey :  NSLocalizedString(@"Unauthorized", @"Please activate your account") ,
              NSLocalizedFailureReasonErrorKey : NSLocalizedString(@"Unauthorized", @"Account not activated")
          };
          NSError* error = [[NSError alloc] initWithDomain:@"ShiploopHttpResponseErrorDomain" code:401 userInfo:userInfo];
          [[MappIntelligence shared] trackExceptionWith:error];
      }

    Full Code Example

    #import "ExceptionsViewController.h"
    #import <MappIntelligence/MappIntelligence.h>
    
    @interface ExceptionsViewController ()
    
    @end
    
    @implementation ExceptionsViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
    }
    
    - (void)trackExceptionWithNameAndMessage {
        [[MappIntelligence shared] trackExceptionWithName:@"Test Exception" andWithMessage:@"Test Exception Message"];
    }
    
    - (void)trackCaughtException {
        [[[NSException alloc] initWithName:@"Custom exception" reason:@"Custom reason" userInfo:@{@"Localized key" : @"Unexpected input"}] raise];
    }
    
    - (void)TrackError {
        
        NSDictionary* userInfo = @{
            NSLocalizedDescriptionKey :  NSLocalizedString(@"Unauthorized", @"Please activate your account") ,
            NSLocalizedFailureReasonErrorKey : NSLocalizedString(@"Unauthorized", @"Account not activated")
        };
        NSError* error = [[NSError alloc] initWithDomain:@"ShiploopHttpResponseErrorDomain" code:401 userInfo:userInfo];
        [[MappIntelligence shared] trackExceptionWith:error];
    }
    
    
    @end


    Was this article helpful?

    What's Next