diff --git a/Classes/BWQuincyManager.h b/Classes/BWQuincyManager.h old mode 100755 new mode 100644 index 3efa41d36c..f19e4a84a7 --- a/Classes/BWQuincyManager.h +++ b/Classes/BWQuincyManager.h @@ -28,7 +28,6 @@ */ #import -#import #define kQuincyBundleName @"Quincy.bundle" @@ -113,11 +112,6 @@ typedef enum CrashReportStatus { CrashReportStatusSubmitted = 2, CrashReportStatusAvailable = 3, - - CrashReportStatusDiscontinued = 4, - - CrashReportStatusMoreInfo = 5, - } CrashReportStatus; // This protocol is used to send the image updates @@ -140,8 +134,6 @@ typedef enum CrashReportStatus { // Invoked when the internet connection is closed, to let the app disable the activity indicator -(void) connectionClosed; --(void) askForCrashInfo:(NSString*)messageBody; - // Invoked before the user is asked to send a crash report, so you can do additional actions. E.g. to make sure not to ask the user for an app rating :) -(void) willShowSubmitCrashReportAlert; @@ -157,6 +149,8 @@ typedef enum CrashReportStatus { BOOL _autoSubmitCrashReport; BOOL _autoSubmitDeviceUDID; + BOOL _didCrashInLastSession; + NSString *_appIdentifier; NSString *_feedbackRequestID; @@ -215,6 +209,9 @@ typedef enum CrashReportStatus { // if NO, the crashReportUserID delegate defines what to be sent as user id (default) @property (nonatomic, assign, getter=isAutoSubmitDeviceUDID) BOOL autoSubmitDeviceUDID; +// will return if the last session crashed, to e.g. make sure a "rate my app" alert will not show up +@property (nonatomic, readonly) BOOL didCrashInLastSession; + // If you want to use HockeyApp instead of your own server, this is required @property (nonatomic, retain) NSString *appIdentifier; diff --git a/Classes/BWQuincyManager.m b/Classes/BWQuincyManager.m old mode 100755 new mode 100644 index 6fa8a1d20e..72ec64a2ac --- a/Classes/BWQuincyManager.m +++ b/Classes/BWQuincyManager.m @@ -86,11 +86,13 @@ NSString *BWQuincyLocalize(NSString *stringToken) { @synthesize autoSubmitCrashReport = _autoSubmitCrashReport; @synthesize autoSubmitDeviceUDID = _autoSubmitDeviceUDID; @synthesize languageStyle = _languageStyle; +@synthesize didCrashInLastSession = _didCrashInLastSession; @synthesize appIdentifier = _appIdentifier; #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 40000 -+(BWQuincyManager *)sharedQuincyManager { ++(BWQuincyManager *)sharedQuincyManager +{ static BWQuincyManager *sharedInstance = nil; static dispatch_once_t pred; @@ -118,18 +120,19 @@ NSString *BWQuincyLocalize(NSString *stringToken) { _serverResult = CrashReportStatusUnknown; _crashIdenticalCurrentVersion = YES; _crashData = nil; - _urlConnection = nil; + _urlConnection = nil; _submissionURL = nil; - _responseData = nil; - _appIdentifier = nil; - _sendingInProgress = NO; - _languageStyle = nil; + _responseData = nil; + _appIdentifier = nil; + _sendingInProgress = NO; + _languageStyle = nil; + _didCrashInLastSession = NO; self.delegate = nil; - self.feedbackActivated = NO; - self.showAlwaysButton = NO; - self.autoSubmitCrashReport = NO; - self.autoSubmitDeviceUDID = NO; + self.feedbackActivated = NO; + self.showAlwaysButton = NO; + self.autoSubmitCrashReport = NO; + self.autoSubmitDeviceUDID = NO; NSString *testValue = [[NSUserDefaults standardUserDefaults] stringForKey:kQuincyKitAnalyzerStarted]; if (testValue) { @@ -146,10 +149,6 @@ NSString *BWQuincyLocalize(NSString *stringToken) { _crashReportActivated = YES; [[NSUserDefaults standardUserDefaults] setValue:[NSNumber numberWithBool:YES] forKey:kQuincyKitActivated]; } - - if ([[NSUserDefaults standardUserDefaults] stringForKey:kAutomaticallySendCrashReports]) { - self.autoSubmitCrashReport = [[NSUserDefaults standardUserDefaults] boolForKey: kAutomaticallySendCrashReports]; - } if (_crashReportActivated) { _crashFiles = [[NSMutableArray alloc] init]; @@ -170,6 +169,7 @@ NSString *BWQuincyLocalize(NSString *stringToken) { // Check if we previously crashed if ([crashReporter hasPendingCrashReport]) { + _didCrashInLastSession = YES; [self handleCrashReport]; } @@ -229,14 +229,30 @@ NSString *BWQuincyLocalize(NSString *stringToken) { [self setSubmissionURL:@"https://rink.hockeyapp.net/"]; } + #pragma mark - #pragma mark private methods +- (BOOL)autoSendCrashReports { + BOOL result = NO; + + if (!self.autoSubmitCrashReport) { + if (self.isShowingAlwaysButton && [[NSUserDefaults standardUserDefaults] boolForKey: kAutomaticallySendCrashReports]) { + result = YES; + } + } else { + result = YES; + } + + return result; +} + // begin the startup process - (void)startManager { if (!_sendingInProgress && [self hasPendingCrashReport]) { _sendingInProgress = YES; if (!self.autoSubmitCrashReport && [self hasNonApprovedCrashReports]) { + if (self.delegate != nil && [self.delegate respondsToSelector:@selector(willShowSubmitCrashReportAlert)]) { [self.delegate willShowSubmitCrashReportAlert]; } @@ -245,14 +261,14 @@ NSString *BWQuincyLocalize(NSString *stringToken) { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:BWQuincyLocalize(@"CrashDataFoundTitle"), appName] message:[NSString stringWithFormat:BWQuincyLocalize(@"CrashDataFoundDescription"), appName] - delegate:self + delegate:self cancelButtonTitle:BWQuincyLocalize(@"CrashDontSendReport") otherButtonTitles:BWQuincyLocalize(@"CrashSendReport"), nil]; - + if ([self isShowingAlwaysButton]) { [alertView addButtonWithTitle:BWQuincyLocalize(@"CrashSendReportAlways")]; } - + [alertView setTag: QuincyKitAlertTypeSend]; [alertView show]; [alertView release]; @@ -332,15 +348,6 @@ NSString *BWQuincyLocalize(NSString *stringToken) { cancelButtonTitle: BWQuincyLocalize(@"CrashResponseTitleOK") otherButtonTitles: nil]; break; - case CrashReportStatusMoreInfo: - if ([MFMailComposeViewController canSendMail]) { - alertView = [[UIAlertView alloc] initWithTitle: [NSString stringWithFormat:BWQuincyLocalize(@"CrashResponseTitle"), appName ] - message: [NSString stringWithFormat:BWQuincyLocalize(@"CrashResponseMoreInfo"), appName] - delegate: self - cancelButtonTitle: BWQuincyLocalize(@"Skip") - otherButtonTitles: BWQuincyLocalize(@"Send Email"), nil]; - } - break; default: alertView = nil; break; @@ -359,39 +366,24 @@ NSString *BWQuincyLocalize(NSString *stringToken) { #pragma mark UIAlertView Delegate - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { - - switch ([alertView tag]) { - case QuincyKitAlertTypeSend: - switch (buttonIndex) { - case 0: - _sendingInProgress = NO; - [self _cleanCrashReports]; - break; - case 1: - [self _sendCrashReports]; - break; - case 2: - [[NSUserDefaults standardUserDefaults] setBool:YES forKey:kAutomaticallySendCrashReports]; - - [self _sendCrashReports]; - break; - } - break; - case QuincyKitAlertTypeFeedback: - switch (buttonIndex) { - case 0: - break; - case 1: - [self.delegate askForCrashInfo:@"Please describe what you were doing when the crash occured:\n\n"]; - } - break; - - default: - break; + if ([alertView tag] == QuincyKitAlertTypeSend) { + switch (buttonIndex) { + case 0: + _sendingInProgress = NO; + [self _cleanCrashReports]; + break; + case 1: + [self _sendCrashReports]; + break; + case 2: + [[NSUserDefaults standardUserDefaults] setBool:YES forKey:kAutomaticallySendCrashReports]; + + [self _sendCrashReports]; + break; + } } } - #pragma mark - #pragma mark NSXMLParser Delegate @@ -416,9 +408,10 @@ NSString *BWQuincyLocalize(NSString *stringToken) { if ([elementName isEqualToString: @"result"]) { if ([_contentOfProperty intValue] > _serverResult) { _serverResult = (CrashReportStatus)[_contentOfProperty intValue]; + } else { + CrashReportStatus errorcode = (CrashReportStatus)[_contentOfProperty intValue]; + NSLog(@"CrashReporter ended in error code: %i", errorcode); } - CrashReportStatus errorcode = (CrashReportStatus)[_contentOfProperty intValue]; - NSLog(@"CrashReporter ended in error code: %i", errorcode); } } @@ -437,20 +430,6 @@ NSString *BWQuincyLocalize(NSString *stringToken) { #pragma mark Private -- (NSString *)_getOSVersionBuild { - size_t size = 0; - NSString *osBuildVersion = nil; - - sysctlbyname("kern.osversion", NULL, &size, NULL, 0); - char *answer = (char*)malloc(size); - int result = sysctlbyname("kern.osversion", answer, &size, NULL, 0); - if (result >= 0) { - osBuildVersion = [NSString stringWithCString:answer encoding: NSUTF8StringEncoding]; - } - - return osBuildVersion; -} - - (NSString *)_getDevicePlatform { size_t size = 0; sysctlbyname("hw.machine", NULL, &size, NULL, 0); diff --git a/Resources/Quincy.bundle/de.lproj/Quincy.strings b/Resources/Quincy.bundle/de.lproj/Quincy.strings index 4159496752..3f63136e98 100755 Binary files a/Resources/Quincy.bundle/de.lproj/Quincy.strings and b/Resources/Quincy.bundle/de.lproj/Quincy.strings differ diff --git a/Resources/Quincy.bundle/de.lproj/QuincyAlternate.strings b/Resources/Quincy.bundle/de.lproj/QuincyAlternate.strings index eafcfb06b6..8a1a0ed154 100755 Binary files a/Resources/Quincy.bundle/de.lproj/QuincyAlternate.strings and b/Resources/Quincy.bundle/de.lproj/QuincyAlternate.strings differ diff --git a/Resources/Quincy.bundle/en.lproj/Quincy.strings b/Resources/Quincy.bundle/en.lproj/Quincy.strings index a6dc5214f0..4137ba40f5 100755 Binary files a/Resources/Quincy.bundle/en.lproj/Quincy.strings and b/Resources/Quincy.bundle/en.lproj/Quincy.strings differ diff --git a/Resources/Quincy.bundle/en.lproj/QuincyAlternate.strings b/Resources/Quincy.bundle/en.lproj/QuincyAlternate.strings index e7ec07a725..dbe56b7398 100755 Binary files a/Resources/Quincy.bundle/en.lproj/QuincyAlternate.strings and b/Resources/Quincy.bundle/en.lproj/QuincyAlternate.strings differ diff --git a/Resources/Quincy.bundle/es.lproj/Quincy.strings b/Resources/Quincy.bundle/es.lproj/Quincy.strings index eacdb6eaba..54b6137f50 100755 Binary files a/Resources/Quincy.bundle/es.lproj/Quincy.strings and b/Resources/Quincy.bundle/es.lproj/Quincy.strings differ diff --git a/Resources/Quincy.bundle/es.lproj/QuincyAlternate.strings b/Resources/Quincy.bundle/es.lproj/QuincyAlternate.strings index ce9a8297d3..4736dca12e 100755 Binary files a/Resources/Quincy.bundle/es.lproj/QuincyAlternate.strings and b/Resources/Quincy.bundle/es.lproj/QuincyAlternate.strings differ diff --git a/Resources/Quincy.bundle/fr.lproj/Quincy.strings b/Resources/Quincy.bundle/fr.lproj/Quincy.strings index 7000849e36..53713d16cc 100755 Binary files a/Resources/Quincy.bundle/fr.lproj/Quincy.strings and b/Resources/Quincy.bundle/fr.lproj/Quincy.strings differ diff --git a/Resources/Quincy.bundle/fr.lproj/QuincyAlternate.strings b/Resources/Quincy.bundle/fr.lproj/QuincyAlternate.strings index 7dd9d219a2..39340c6522 100755 Binary files a/Resources/Quincy.bundle/fr.lproj/QuincyAlternate.strings and b/Resources/Quincy.bundle/fr.lproj/QuincyAlternate.strings differ diff --git a/Resources/Quincy.bundle/it.lproj/Quincy.strings b/Resources/Quincy.bundle/it.lproj/Quincy.strings index 40c34494da..e91fb7c678 100755 Binary files a/Resources/Quincy.bundle/it.lproj/Quincy.strings and b/Resources/Quincy.bundle/it.lproj/Quincy.strings differ diff --git a/Resources/Quincy.bundle/it.lproj/QuincyAlternate.strings b/Resources/Quincy.bundle/it.lproj/QuincyAlternate.strings index b9b2910177..640149ab01 100755 Binary files a/Resources/Quincy.bundle/it.lproj/QuincyAlternate.strings and b/Resources/Quincy.bundle/it.lproj/QuincyAlternate.strings differ diff --git a/Resources/Quincy.bundle/ja.lproj/Quincy.strings b/Resources/Quincy.bundle/ja.lproj/Quincy.strings index 163427f0a6..b27f1e9555 100755 Binary files a/Resources/Quincy.bundle/ja.lproj/Quincy.strings and b/Resources/Quincy.bundle/ja.lproj/Quincy.strings differ diff --git a/Resources/Quincy.bundle/ja.lproj/QuincyAlternate.strings b/Resources/Quincy.bundle/ja.lproj/QuincyAlternate.strings index 75125cba35..b8d010e157 100755 Binary files a/Resources/Quincy.bundle/ja.lproj/QuincyAlternate.strings and b/Resources/Quincy.bundle/ja.lproj/QuincyAlternate.strings differ diff --git a/Resources/Quincy.bundle/nl.lproj/Quincy.strings b/Resources/Quincy.bundle/nl.lproj/Quincy.strings index d84491fbbd..ea18175fd5 100755 Binary files a/Resources/Quincy.bundle/nl.lproj/Quincy.strings and b/Resources/Quincy.bundle/nl.lproj/Quincy.strings differ diff --git a/Resources/Quincy.bundle/nl.lproj/QuincyAlternate.strings b/Resources/Quincy.bundle/nl.lproj/QuincyAlternate.strings index 3def446d3e..71c99c7779 100755 Binary files a/Resources/Quincy.bundle/nl.lproj/QuincyAlternate.strings and b/Resources/Quincy.bundle/nl.lproj/QuincyAlternate.strings differ diff --git a/Resources/Quincy.bundle/pt-PT.lproj/Quincy.strings b/Resources/Quincy.bundle/pt-PT.lproj/Quincy.strings index d7affaf645..0d5912c037 100755 Binary files a/Resources/Quincy.bundle/pt-PT.lproj/Quincy.strings and b/Resources/Quincy.bundle/pt-PT.lproj/Quincy.strings differ diff --git a/Resources/Quincy.bundle/pt-PT.lproj/QuincyAlternate.strings b/Resources/Quincy.bundle/pt-PT.lproj/QuincyAlternate.strings index 52978f95ff..32acabf127 100755 Binary files a/Resources/Quincy.bundle/pt-PT.lproj/QuincyAlternate.strings and b/Resources/Quincy.bundle/pt-PT.lproj/QuincyAlternate.strings differ diff --git a/Resources/Quincy.bundle/pt.lproj/Quincy.strings b/Resources/Quincy.bundle/pt.lproj/Quincy.strings index 5d082845fc..c99da648ed 100755 Binary files a/Resources/Quincy.bundle/pt.lproj/Quincy.strings and b/Resources/Quincy.bundle/pt.lproj/Quincy.strings differ diff --git a/Resources/Quincy.bundle/pt.lproj/QuincyAlternate.strings b/Resources/Quincy.bundle/pt.lproj/QuincyAlternate.strings index 90b375ec23..2712ccfff8 100755 Binary files a/Resources/Quincy.bundle/pt.lproj/QuincyAlternate.strings and b/Resources/Quincy.bundle/pt.lproj/QuincyAlternate.strings differ diff --git a/Resources/Quincy.bundle/ru.lproj/Quincy.strings b/Resources/Quincy.bundle/ru.lproj/Quincy.strings index 65ebcb320c..139aa9ce1e 100755 Binary files a/Resources/Quincy.bundle/ru.lproj/Quincy.strings and b/Resources/Quincy.bundle/ru.lproj/Quincy.strings differ diff --git a/Resources/Quincy.bundle/ru.lproj/QuincyAlternate.strings b/Resources/Quincy.bundle/ru.lproj/QuincyAlternate.strings index 59dfd4ee7f..139aa9ce1e 100755 Binary files a/Resources/Quincy.bundle/ru.lproj/QuincyAlternate.strings and b/Resources/Quincy.bundle/ru.lproj/QuincyAlternate.strings differ diff --git a/Resources/Quincy.bundle/tr.lproj/Quincy.strings b/Resources/Quincy.bundle/tr.lproj/Quincy.strings index 9f1ef4d8ec..246e757edd 100644 Binary files a/Resources/Quincy.bundle/tr.lproj/Quincy.strings and b/Resources/Quincy.bundle/tr.lproj/Quincy.strings differ diff --git a/Resources/Quincy.bundle/tr.lproj/QuincyAlternate.strings b/Resources/Quincy.bundle/tr.lproj/QuincyAlternate.strings index d5fc249f15..2594040b01 100644 Binary files a/Resources/Quincy.bundle/tr.lproj/QuincyAlternate.strings and b/Resources/Quincy.bundle/tr.lproj/QuincyAlternate.strings differ diff --git a/Resources/Quincy.bundle/zh_CN.lproj/Quincy.strings b/Resources/Quincy.bundle/zh_CN.lproj/Quincy.strings index 56568d7de9..f83511d1ba 100644 Binary files a/Resources/Quincy.bundle/zh_CN.lproj/Quincy.strings and b/Resources/Quincy.bundle/zh_CN.lproj/Quincy.strings differ diff --git a/Resources/Quincy.bundle/zh_CN.lproj/QuincyAlternate.strings b/Resources/Quincy.bundle/zh_CN.lproj/QuincyAlternate.strings index 5f95868c91..23aed4c961 100644 Binary files a/Resources/Quincy.bundle/zh_CN.lproj/QuincyAlternate.strings and b/Resources/Quincy.bundle/zh_CN.lproj/QuincyAlternate.strings differ diff --git a/Resources/Quincy.bundle/zh_TW.lproj/Quincy.strings b/Resources/Quincy.bundle/zh_TW.lproj/Quincy.strings index 904f5b7d3e..347f9df0dd 100644 Binary files a/Resources/Quincy.bundle/zh_TW.lproj/Quincy.strings and b/Resources/Quincy.bundle/zh_TW.lproj/Quincy.strings differ diff --git a/Resources/Quincy.bundle/zh_TW.lproj/QuincyAlternate.strings b/Resources/Quincy.bundle/zh_TW.lproj/QuincyAlternate.strings index da8908afdd..e6a0d9bd1b 100644 Binary files a/Resources/Quincy.bundle/zh_TW.lproj/QuincyAlternate.strings and b/Resources/Quincy.bundle/zh_TW.lproj/QuincyAlternate.strings differ