From 3c22d0b0c80ee0c1add4d69032c486fe648f0478 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Thu, 27 Sep 2018 14:51:39 -0400 Subject: [PATCH 1/2] Swift exit(). --- SignalServiceKit/src/Util/OWSAsserts.h | 9 +++++++-- SignalServiceKit/src/Util/OWSAsserts.m | 8 ++++++++ SignalServiceKit/src/Util/OWSSwiftUtils.swift | 16 ++++++++++++++-- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/SignalServiceKit/src/Util/OWSAsserts.h b/SignalServiceKit/src/Util/OWSAsserts.h index 61427a58f..35e9748f1 100755 --- a/SignalServiceKit/src/Util/OWSAsserts.h +++ b/SignalServiceKit/src/Util/OWSAsserts.h @@ -153,17 +153,22 @@ NS_ASSUME_NONNULL_BEGIN OWSCFailWithoutLogging(_messageFormat, ##__VA_ARGS__); \ } while (NO) +void SwiftExit(NSString *message, const char *file, const char *function, int line); #define OWSFail(_messageFormat, ...) \ do { \ OWSFailDebug(_messageFormat, ##__VA_ARGS__); \ - exit(0); \ + \ + NSString *_message = [NSString stringWithFormat:_messageFormat, ##__VA_ARGS__]; \ + SwiftExit(_message, __FILE__, __PRETTY_FUNCTION__, __LINE__); \ } while (0) #define OWSCFail(_messageFormat, ...) \ do { \ OWSCFailDebug(_messageFormat, ##__VA_ARGS__); \ - exit(0); \ + \ + NSString *_message = [NSString stringWithFormat:_messageFormat, ##__VA_ARGS__]; \ + SwiftExit(_message, __FILE__, __PRETTY_FUNCTION__, __LINE__); \ } while (NO) // Avoids Clang analyzer warning: diff --git a/SignalServiceKit/src/Util/OWSAsserts.m b/SignalServiceKit/src/Util/OWSAsserts.m index 043db9c96..a5afbe2d7 100755 --- a/SignalServiceKit/src/Util/OWSAsserts.m +++ b/SignalServiceKit/src/Util/OWSAsserts.m @@ -3,7 +3,15 @@ // #import "OWSAsserts.h" +#import NS_ASSUME_NONNULL_BEGIN +void SwiftExit(NSString *message, const char *file, const char *function, int line) +{ + NSString *_file = [NSString stringWithFormat:@"%s", file]; + NSString *_function = [NSString stringWithFormat:@"%s", function]; + [OWSSwiftUtils owsFail:message file:_file function:_function line:line]; +} + NS_ASSUME_NONNULL_END diff --git a/SignalServiceKit/src/Util/OWSSwiftUtils.swift b/SignalServiceKit/src/Util/OWSSwiftUtils.swift index 3b869fbe6..bcea05665 100644 --- a/SignalServiceKit/src/Util/OWSSwiftUtils.swift +++ b/SignalServiceKit/src/Util/OWSSwiftUtils.swift @@ -43,7 +43,7 @@ public func owsFail(_ logMessage: String, file: String = #file, function: String = #function, line: Int = #line) -> Never { - + owsFailDebug(logMessage, file: file, function: function, line: line) let formattedMessage = owsFormatLogMessage(logMessage, file: file, function: function, line: line) fatalError(formattedMessage) @@ -56,4 +56,16 @@ public func notImplemented(file: String = #file, line: Int = #line) -> Never { owsFail("Method not implemented.", file: file, function: function, line: line) } - + +@objc public class OWSSwiftUtils: NSObject { + // This method can be invoked from Obj-C to exit the app. + @objc public class func owsFail(_ logMessage: String, + file: String = #file, + function: String = #function, + line: Int = #line) -> Never { + + owsFailDebug(logMessage, file: file, function: function, line: line) + let formattedMessage = owsFormatLogMessage(logMessage, file: file, function: function, line: line) + fatalError(formattedMessage) + } +} From b076f1496451744c26da56073f737c740c214b76 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Thu, 27 Sep 2018 14:54:29 -0400 Subject: [PATCH 2/2] Swift exit(). --- Signal/src/AppDelegate.m | 7 ++----- Signal/src/environment/SignalApp.m | 2 +- SignalMessaging/environment/VersionMigrations.m | 3 +-- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/Signal/src/AppDelegate.m b/Signal/src/AppDelegate.m index 02b07b7b4..0255b020d 100644 --- a/Signal/src/AppDelegate.m +++ b/Signal/src/AppDelegate.m @@ -240,8 +240,7 @@ static NSTimeInterval launchStartedAt; [[UIApplication sharedApplication] scheduleLocalNotification:notification]; [UIApplication.sharedApplication setApplicationIconBadgeNumber:1]; - [DDLog flushLog]; - exit(0); + OWSFail(@"!isDatabasePasswordAccessible."); } } @@ -339,9 +338,7 @@ static NSTimeInterval launchStartedAt; style:UIAlertActionStyleDefault handler:^(UIAlertAction *_Nonnull action) { [Pastelog submitLogsWithCompletion:^{ - OWSLogInfo(@"exiting after sharing debug logs."); - [DDLog flushLog]; - exit(0); + OWSFail(@"exiting after sharing debug logs."); }]; }]]; UIViewController *fromViewController = [[UIApplication sharedApplication] frontmostViewController]; diff --git a/Signal/src/environment/SignalApp.m b/Signal/src/environment/SignalApp.m index 7cb04af99..4a55e92ab 100644 --- a/Signal/src/environment/SignalApp.m +++ b/Signal/src/environment/SignalApp.m @@ -233,7 +233,7 @@ NS_ASSUME_NONNULL_BEGIN [self clearAllNotifications]; [DebugLogger.sharedLogger wipeLogs]; - exit(0); + OWSFail(@"App data reset."); } + (void)clearAllNotifications diff --git a/SignalMessaging/environment/VersionMigrations.m b/SignalMessaging/environment/VersionMigrations.m index 1bd80604a..6ba53146a 100644 --- a/SignalMessaging/environment/VersionMigrations.m +++ b/SignalMessaging/environment/VersionMigrations.m @@ -69,8 +69,7 @@ NS_ASSUME_NONNULL_BEGIN UIAlertAction *quitAction = [UIAlertAction actionWithTitle:@"Quit" style:UIAlertActionStyleDefault handler:^(UIAlertAction *_Nonnull action) { - [DDLog flushLog]; - exit(0); + OWSFail(@"Obsolete install."); }]; [alertController addAction:quitAction];