diff --git a/Classes/BITCrashManager.h b/Classes/BITCrashManager.h index bf651da527..a524c2b6ab 100644 --- a/Classes/BITCrashManager.h +++ b/Classes/BITCrashManager.h @@ -58,6 +58,16 @@ typedef NS_ENUM(NSUInteger, BITCrashManagerStatus) { BITCrashManagerStatusAutoSend = 2 }; +typedef NS_ENUM(NSUInteger, BITCrashManagerUserInput) { + + BITCrashManagerUserInputDontSend, + + BITCrashManagerUserInputSend, + + BITCrashManagerUserInputAlwaysSend + +}; + @protocol BITCrashManagerDelegate; @@ -163,6 +173,10 @@ typedef NS_ENUM(NSUInteger, BITCrashManagerStatus) { * the debugger during runtime, this may cause issues the Mach exception handler is enabled! * @see isDebuggerAttached */ + +@property (nonatomic, assign) BITCrashManagerUserInput crashManagerUserInput; + + @property (nonatomic, assign, getter=isMachExceptionHandlerEnabled) BOOL enableMachExceptionHandler; diff --git a/Classes/BITCrashManager.m b/Classes/BITCrashManager.m index 18b3aaf270..be655b91f6 100644 --- a/Classes/BITCrashManager.m +++ b/Classes/BITCrashManager.m @@ -930,34 +930,35 @@ NSString *const kBITCrashManagerStatus = @"BITCrashManagerStatus"; #pragma mark - UIAlertView Delegate - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { - switch (buttonIndex) { - case 0: - if (self.delegate != nil && [self.delegate respondsToSelector:@selector(crashManagerWillCancelSendingCrashReport:)]) { - [self.delegate crashManagerWillCancelSendingCrashReport:self]; - } - - _sendingInProgress = NO; - [self cleanCrashReports]; - break; - case 1: - [self sendCrashReports]; - break; - case 2: { - _crashManagerStatus = BITCrashManagerStatusAutoSend; - [[NSUserDefaults standardUserDefaults] setInteger:_crashManagerStatus forKey:kBITCrashManagerStatus]; - [[NSUserDefaults standardUserDefaults] synchronize]; - if (self.delegate != nil && [self.delegate respondsToSelector:@selector(crashManagerWillSendCrashReportsAlways:)]) { - [self.delegate crashManagerWillSendCrashReportsAlways:self]; - } - - [self sendCrashReports]; - break; + _crashManagerUserInput = buttonIndex; + [self handleUserInput]; +} + +- (void)handleUserInput { + switch (_crashManagerUserInput) { + case BITCrashManagerUserInputDontSend: + if (self.delegate != nil && [self.delegate respondsToSelector:@selector(crashManagerWillCancelSendingCrashReport:)]) { + [self.delegate crashManagerWillCancelSendingCrashReport:self]; + } + + _sendingInProgress = NO; + [self cleanCrashReports]; + break; + case BITCrashManagerUserInputSend: + [self sendCrashReports]; + break; + case BITCrashManagerUserInputAlwaysSend: + _crashManagerStatus = BITCrashManagerStatusAutoSend; + [[NSUserDefaults standardUserDefaults] setInteger:_crashManagerStatus forKey:kBITCrashManagerStatus]; + [[NSUserDefaults standardUserDefaults] synchronize]; + if (self.delegate != nil && [self.delegate respondsToSelector:@selector(crashManagerWillSendCrashReportsAlways:)]) { + [self.delegate crashManagerWillSendCrashReportsAlways:self]; + } + + [self sendCrashReports]; + break; } - default: - _sendingInProgress = NO; - [self cleanCrashReports]; - break; - } + }