From 117bca7c483a8e59c3c9be0ac26b0affa5d9b58d Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Mon, 24 Jul 2017 10:22:12 -0400 Subject: [PATCH] Instrument errors in app delegate. // FREEBIE --- Signal/src/AppDelegate.m | 21 +++++++++---------- .../src/Messages/TSMessagesManager.m | 3 +++ SignalServiceKit/src/Util/OWSAnalytics.h | 11 +++++----- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/Signal/src/AppDelegate.m b/Signal/src/AppDelegate.m index 178f6b89a..d6c131d7c 100644 --- a/Signal/src/AppDelegate.m +++ b/Signal/src/AppDelegate.m @@ -263,7 +263,7 @@ static NSString *const kURLHostVerifyPrefix = @"verify"; - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { - DDLogError(@"%@ Failed to register for remote notifications with error %@", self.tag, error); + OWSProdErrorWNSError(@"app_delegate_error_failed_to_register_for_remote_notifications", error); #ifdef DEBUG DDLogWarn(@"%@ We're in debug mode. Faking success for remote registration with a fake push identifier", self.tag); [PushManager.sharedManager.pushNotificationFutureSource trySetResult:[[NSMutableData dataWithLength:32] copy]]; @@ -334,25 +334,24 @@ static NSString *const kURLHostVerifyPrefix = @"verify"; NSError *typeError; [url getResourceValue:&utiType forKey:NSURLTypeIdentifierKey error:&typeError]; if (typeError) { - DDLogError( - @"%@ Determining type of picked document at url: %@ failed with error: %@", self.tag, url, typeError); - OWSAssert(NO); + OWSFail( + @"%@ Determining type of picked document at url: %@ failed with error: %@", self.tag, url, typeError); + return NO; } if (!utiType) { - DDLogDebug(@"%@ falling back to default filetype for picked document at url: %@", self.tag, url); - OWSAssert(NO); + OWSFail(@"%@ falling back to default filetype for picked document at url: %@", self.tag, url); utiType = (__bridge NSString *)kUTTypeData; + return NO; } NSNumber *isDirectory; NSError *isDirectoryError; [url getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:&isDirectoryError]; if (isDirectoryError) { - DDLogError(@"%@ Determining if picked document at url: %@ was a directory failed with error: %@", - self.tag, - url, - isDirectoryError); - OWSAssert(NO); + OWSFail(@"%@ Determining if picked document at url: %@ was a directory failed with error: %@", + self.tag, + url, + isDirectoryError); return NO; } else if ([isDirectory boolValue]) { DDLogInfo(@"%@ User picked directory at url: %@", self.tag, url); diff --git a/SignalServiceKit/src/Messages/TSMessagesManager.m b/SignalServiceKit/src/Messages/TSMessagesManager.m index cbcc0df95..745d69021 100644 --- a/SignalServiceKit/src/Messages/TSMessagesManager.m +++ b/SignalServiceKit/src/Messages/TSMessagesManager.m @@ -43,6 +43,7 @@ NS_ASSUME_NONNULL_BEGIN #define kOWSProdAssertParameterEnvelopeIsLegacy @"envelope_is_legacy" +#define kOWSProdAssertParameterEnvelopeHasContent @"has_content" #define kOWSProdAssertParameterEnvelopeDescription @"envelope_description" #define kOWSProdAssertParameterEnvelopeEncryptedLength @"encrypted_length" @@ -51,6 +52,7 @@ NS_ASSUME_NONNULL_BEGIN NSData *__encryptedData = __envelope.hasContent ? __envelope.content : __envelope.legacyMessage; \ return (@{ \ kOWSProdAssertParameterEnvelopeIsLegacy : @(__envelope.hasLegacyMessage), \ + kOWSProdAssertParameterEnvelopeHasContent : @(__envelope.hasContent), \ kOWSProdAssertParameterEnvelopeDescription : [self descriptionForEnvelopeType:__envelope], \ kOWSProdAssertParameterEnvelopeEncryptedLength : @(__encryptedData.length), \ }); \ @@ -162,6 +164,7 @@ NS_ASSUME_NONNULL_BEGIN - (NSString *)descriptionForEnvelopeType:(OWSSignalServiceProtosEnvelope *)envelope { OWSAssert(envelope != nil); + switch (envelope.type) { case OWSSignalServiceProtosEnvelopeTypeReceipt: return @"DeliveryReceipt"; diff --git a/SignalServiceKit/src/Util/OWSAnalytics.h b/SignalServiceKit/src/Util/OWSAnalytics.h index dc74ccd5e..b3abfa4df 100755 --- a/SignalServiceKit/src/Util/OWSAnalytics.h +++ b/SignalServiceKit/src/Util/OWSAnalytics.h @@ -117,18 +117,19 @@ typedef NSDictionary *_Nonnull (^OWSProdAssertParametersBlock)() #define AnalyticsParametersFromNSError(__nserror) \ ^{ \ return (@{ \ - kOWSProdAssertParameterNSErrorDomain : __nserror.domain, \ + kOWSProdAssertParameterNSErrorDomain : (__nserror.domain ?: @"unknown"), \ kOWSProdAssertParameterNSErrorCode : @(__nserror.code), \ - kOWSProdAssertParameterNSErrorDescription : __nserror.description, \ + kOWSProdAssertParameterNSErrorDescription : (__nserror.description ?: @"unknown"), \ }); \ } #define AnalyticsParametersFromNSException(__exception) \ ^{ \ return (@{ \ - kOWSProdAssertParameterNSExceptionName : __exception.name, \ - kOWSProdAssertParameterNSExceptionReason : __exception.reason, \ - kOWSProdAssertParameterNSExceptionClassName : NSStringFromClass([__exception class]), \ + kOWSProdAssertParameterNSExceptionName : (__exception.name ?: @"unknown"), \ + kOWSProdAssertParameterNSExceptionReason : (__exception.reason ?: @"unknown"), \ + kOWSProdAssertParameterNSExceptionClassName : \ + (__exception ? NSStringFromClass([__exception class]) : @"unknown"), \ }); \ }