#import "MSErrorReport.h" #import "MSServiceAbstract.h" @class MSCrashesDelegate; /** * Custom block that handles the alert that prompts the user whether crash reports need to be processed or not. * * @return Returns YES to discard crash reports, otherwise NO. */ typedef BOOL (^MSUserConfirmationHandler)(NSArray *_Nonnull errorReports); /** * Error Logging status. */ typedef NS_ENUM(NSUInteger, MSErrorLogSetting) { /** * Crash reporting is disabled. */ MSErrorLogSettingDisabled = 0, /** * User is asked each time before sending error logs. */ MSErrorLogSettingAlwaysAsk = 1, /** * Each error log is send automatically. */ MSErrorLogSettingAutoSend = 2 }; /** * Crash Manager alert user input. */ typedef NS_ENUM(NSUInteger, MSUserConfirmation) { /** * User chose not to send the crash report. */ MSUserConfirmationDontSend = 0, /** * User wants the crash report to be sent. */ MSUserConfirmationSend = 1, /** * User wants to send all error logs. */ MSUserConfirmationAlways = 2 }; @protocol MSCrashesDelegate; @interface MSCrashes : MSServiceAbstract ///----------------------------------------------------------------------------- /// @name Testing Crashes Feature ///----------------------------------------------------------------------------- /** * Lets the app crash for easy testing of the SDK. * * The best way to use this is to trigger the crash with a button action. * * Make sure not to let the app crash in `applicationDidFinishLaunching` or any other startup method! Since otherwise the app would crash * before the SDK could process it. * * Note that our SDK provides support for handling crashes that happen early on startup. Check the documentation for more information on how * to use this. * * If the SDK detects an App Store environment, it will _NOT_ cause the app to crash! */ + (void)generateTestCrash; ///----------------------------------------------------------------------------- /// @name Helpers ///----------------------------------------------------------------------------- /** * Check if the app has crashed in the last session. * * @return Returns YES is the app has crashed in the last session. */ + (BOOL)hasCrashedInLastSession; /** * Provides details about the crash that occurred in the last app session */ + (nullable MSErrorReport *)lastSessionCrashReport; ///----------------------------------------------------------------------------- /// @name Configuration ///----------------------------------------------------------------------------- #if !TARGET_OS_TV /** * Disable the Mach exception server. * * By default, the SDK uses the Mach exception handler to catch fatal signals, e.g. stack overflows, via a Mach exception server. If you * want to disable the Mach exception handler, you should call this method _BEFORE_ starting the SDK. Your typical setup code would look * like this: * * `[MSCrashes disableMachExceptionHandler]`; * `[MSAppCenter start:@"YOUR_APP_ID" withServices:@[[MSCrashes class]]];` * * or if you are using Swift: * * `MSCrashes.disableMachExceptionHandler()` * `MSAppCenter.start("YOUR_APP_ID", withServices: [MSAnalytics.self, MSCrashes.self])` * * tvOS does not support the Mach exception handler, thus crashes that are caused by stack overflows cannot be detected. As a result, * disabling the Mach exception server is not available in the tvOS SDK. * * @discussion It can be useful to disable the Mach exception handler when you are debugging the Crashes service while developing, * especially when you attach the debugger to your application after launch. */ + (void)disableMachExceptionHandler; #endif /** * Set the delegate * Defines the class that implements the optional protocol `MSCrashesDelegate`. * * @see MSCrashesDelegate */ + (void)setDelegate:(_Nullable id)delegate; /** * Set a user confirmation handler that is invoked right before processing crash reports to determine whether sending crash reports or not. * * @param userConfirmationHandler A handler for user confirmation. * * @see MSUserConfirmationHandler */ + (void)setUserConfirmationHandler:(_Nullable MSUserConfirmationHandler)userConfirmationHandler; /** * Notify SDK with a confirmation to handle the crash report. * * @param userConfirmation A user confirmation. * * @see MSUserConfirmation. */ + (void)notifyWithUserConfirmation:(MSUserConfirmation)userConfirmation; @end