diff --git a/Podfile b/Podfile index 2898eef66..da625efb5 100644 --- a/Podfile +++ b/Podfile @@ -6,3 +6,4 @@ pod 'UICKeyChainStore', '~> 1.0.5' pod 'OpenSSL', '~> 1.0.108' pod 'MMDrawerController', '~> 0.5.0' pod 'libPhoneNumber-iOS', '~> 0.7' +pod 'CocoaLumberjack' diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index 0f5f499a6..7ec563b4a 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -3426,6 +3426,174 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + B6B9EB4D196190F5009024F0 /* Ad-Hoc Distribution */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES; + CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES; + CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "compiler-default"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_RECEIVER_WEAK = YES; + CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; + CLANG_WARN__ARC_BRIDGE_CAST_NONARC = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES; + GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = YES; + GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; + GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; + GCC_WARN_MISSING_PARENTHESES = YES; + GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = YES; + GCC_WARN_SHADOW = YES; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_STRICT_SELECTOR_MATCH = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = YES; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ""; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + ONLY_ACTIVE_ARCH = NO; + OTHER_CFLAGS = "-fobjc-arc-exceptions"; + PROVISIONING_PROFILE = ""; + "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = "Ad-Hoc Distribution"; + }; + B6B9EB4E196190F5009024F0 /* Ad-Hoc Distribution */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C71793B33D9C45079F74487E /* Pods.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)\"", + ); + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Signal/Signal-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + HAVE_CONFIG_H, + ); + GCC_STRICT_ALIASING = NO; + GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = NO; + GCC_WARN_STRICT_SELECTOR_MATCH = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "\"${SRCROOT}/RedPhone/lib/speex/include\"", + "\"${SRCROOT}/RedPhone/lib/ogg/include\"", + "\"${SRCROOT}/RedPhone/lib/debug/include\"", + "\"$(SRCROOT)/libtommath\"", + "\"$(SRCROOT)/libtomcrypt/headers\"", + "\"$(SRCROOT)/spandsp/spandsp/spandsp\"", + "\"$(SRCROOT)/MMDrawerController\"", + "\"$(SRCROOT)/Libraries\"/**", + ); + INFOPLIST_FILE = "$(SRCROOT)/Signal/Signal-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)", + ); + LLVM_LTO = NO; + OTHER_LDFLAGS = "$(inherited)"; + PRODUCT_NAME = Signal; + PROVISIONING_PROFILE = "B26CF658-AD7F-4F4C-B94F-74884941DF87"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = 1; + TEST_AFTER_BUILD = YES; + VALID_ARCHS = "arm64 armv7 armv7s i386"; + WRAPPER_EXTENSION = app; + }; + name = "Ad-Hoc Distribution"; + }; + B6B9EB4F196190F5009024F0 /* Ad-Hoc Distribution */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C71793B33D9C45079F74487E /* Pods.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Signal.app/Signal"; + FRAMEWORK_SEARCH_PATHS = ( + "\"$(SDKROOT)/Developer/Library/Frameworks\"", + "\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\"", + ); + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Signal/Signal-Prefix.pch"; + GCC_VERSION = ""; + GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = NO; + GCC_WARN_STRICT_SELECTOR_MATCH = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + HEADER_SEARCH_PATHS = ( + "${PODS_HEADERS_SEARCH_PATHS}", + "$(inherited)", + "\"${SRCROOT}/Signal/lib/speex/include\"", + "\"${SRCROOT}/Signal/lib/ogg/include\"", + "\"${SRCROOT}/Signal/lib/debug/include\"", + "\"$(SRCROOT)/libtommath\"", + "\"$(SRCROOT)/libtomcrypt/headers\"", + "\"$(SRCROOT)/spandsp/spandsp/spandsp\"", + "\"$(SRCROOT)/Libraries\"/**", + ); + INFOPLIST_FILE = "Signal/test/Supporting Files/SignalTests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)", + ); + OTHER_LDFLAGS = ( + "-ObjC", + "$(inherited)", + ); + PRODUCT_NAME = SignalTests; + TEST_HOST = "$(BUNDLE_LOADER)"; + VALID_ARCHS = "arm64 armv7s armv7 i386"; + WRAPPER_EXTENSION = octest; + }; + name = "Ad-Hoc Distribution"; + }; D221A0BA169C9E5F00537ABF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3446,14 +3614,14 @@ CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; CLANG_WARN__ARC_BRIDGE_CAST_NONARC = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Distribution"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_GENERATE_TEST_COVERAGE_FILES = NO; GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; - GCC_OPTIMIZATION_LEVEL = 3; + GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", @@ -3489,14 +3657,14 @@ IPHONEOS_DEPLOYMENT_TARGET = 7.0; ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = "-fobjc-arc-exceptions"; - PROVISIONING_PROFILE = "25E52683-9ADD-415E-A1E0-63A1C7ECF872"; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = "25E52683-9ADD-415E-A1E0-63A1C7ECF872"; + PROVISIONING_PROFILE = ""; + "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; name = Debug; }; - D221A0BB169C9E5F00537ABF /* Release */ = { + D221A0BB169C9E5F00537ABF /* App Store Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -3516,12 +3684,13 @@ CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; CLANG_WARN__ARC_BRIDGE_CAST_NONARC = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Distribution"; + CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; COPY_PHASE_STRIP = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_GENERATE_TEST_COVERAGE_FILES = NO; GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; + GCC_OPTIMIZATION_LEVEL = 0; GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES; GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -3555,25 +3724,25 @@ "-DNS_BLOCK_ASSERTIONS=1", "-fobjc-arc-exceptions", ); - PROVISIONING_PROFILE = "25E52683-9ADD-415E-A1E0-63A1C7ECF872"; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = "25E52683-9ADD-415E-A1E0-63A1C7ECF872"; + PROVISIONING_PROFILE = ""; + "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; - name = Release; + name = "App Store Release"; }; D221A0BD169C9E5F00537ABF /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = C71793B33D9C45079F74487E /* Pods.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)\"", ); - GCC_OPTIMIZATION_LEVEL = 0; + GCC_OPTIMIZATION_LEVEL = 3; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Signal/Signal-Prefix.pch"; GCC_PREPROCESSOR_DEFINITIONS = ( @@ -3614,11 +3783,11 @@ }; name = Debug; }; - D221A0BE169C9E5F00537ABF /* Release */ = { + D221A0BE169C9E5F00537ABF /* App Store Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = C71793B33D9C45079F74487E /* Pods.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; FRAMEWORK_SEARCH_PATHS = ( @@ -3653,14 +3822,14 @@ LLVM_LTO = NO; OTHER_LDFLAGS = "$(inherited)"; PRODUCT_NAME = Signal; - PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE = "7214A823-1F7A-4460-82D8-D89CA511CEA6"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = 1; TEST_AFTER_BUILD = YES; VALID_ARCHS = "arm64 armv7 armv7s i386"; WRAPPER_EXTENSION = app; }; - name = Release; + name = "App Store Release"; }; D221A0C0169C9E5F00537ABF /* Debug */ = { isa = XCBuildConfiguration; @@ -3708,7 +3877,7 @@ }; name = Debug; }; - D221A0C1169C9E5F00537ABF /* Release */ = { + D221A0C1169C9E5F00537ABF /* App Store Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = C71793B33D9C45079F74487E /* Pods.xcconfig */; buildSettings = { @@ -3752,7 +3921,7 @@ VALID_ARCHS = "arm64 armv7s armv7 i386"; WRAPPER_EXTENSION = octest; }; - name = Release; + name = "App Store Release"; }; /* End XCBuildConfiguration section */ @@ -3761,28 +3930,31 @@ isa = XCConfigurationList; buildConfigurations = ( D221A0BA169C9E5F00537ABF /* Debug */, - D221A0BB169C9E5F00537ABF /* Release */, + B6B9EB4D196190F5009024F0 /* Ad-Hoc Distribution */, + D221A0BB169C9E5F00537ABF /* App Store Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = "App Store Release"; }; D221A0BC169C9E5F00537ABF /* Build configuration list for PBXNativeTarget "Signal" */ = { isa = XCConfigurationList; buildConfigurations = ( D221A0BD169C9E5F00537ABF /* Debug */, - D221A0BE169C9E5F00537ABF /* Release */, + B6B9EB4E196190F5009024F0 /* Ad-Hoc Distribution */, + D221A0BE169C9E5F00537ABF /* App Store Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = "App Store Release"; }; D221A0BF169C9E5F00537ABF /* Build configuration list for PBXNativeTarget "SignalTests" */ = { isa = XCConfigurationList; buildConfigurations = ( D221A0C0169C9E5F00537ABF /* Debug */, - D221A0C1169C9E5F00537ABF /* Release */, + B6B9EB4F196190F5009024F0 /* Ad-Hoc Distribution */, + D221A0C1169C9E5F00537ABF /* App Store Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = "App Store Release"; }; /* End XCConfigurationList section */ }; diff --git a/Signal/Signal-Prefix.pch b/Signal/Signal-Prefix.pch index 6b81e843d..87a691f42 100644 --- a/Signal/Signal-Prefix.pch +++ b/Signal/Signal-Prefix.pch @@ -7,4 +7,12 @@ #ifdef __OBJC__ #import #import + #import + + #ifdef DEBUG + static const int ddLogLevel = LOG_LEVEL_VERBOSE; + #else + static const int ddLogLevel = LOG_LEVEL_WARN; + #endif + #endif diff --git a/Signal/src/AppDelegate.m b/Signal/src/AppDelegate.m index 69ffdf5c5..46451e211 100644 --- a/Signal/src/AppDelegate.m +++ b/Signal/src/AppDelegate.m @@ -16,6 +16,11 @@ #import "Util.h" #import +#pragma mark Logging - Production logging wants us to write some logs to a file in case we need it for debugging. + +#import +#import + #define kSignalVersionKey @"SignalUpdateVersionKey" #ifdef __APPLE__ @@ -68,6 +73,13 @@ } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + + [DDLog addLogger:[DDTTYLogger sharedInstance]]; + DDFileLogger *fileLogger = [[DDFileLogger alloc] init]; + fileLogger.rollingFrequency = 60 * 60 * 24; // 24 hour rolling. + fileLogger.logFileManager.maximumNumberOfLogFiles = 3; // Keep three days of logs. + [DDLog addLogger:fileLogger]; + [self performUpdateCheck]; [self disableCallLogBackup]; self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; diff --git a/Signal/src/environment/LocalizableText.h b/Signal/src/environment/LocalizableText.h index e6972889a..a7d9c7ac1 100644 --- a/Signal/src/environment/LocalizableText.h +++ b/Signal/src/environment/LocalizableText.h @@ -116,6 +116,10 @@ #define ANSWER_CALL_BUTTON_TITLE NSLocalizedString(@"ANSWER_CALL_BUTTON_TITLE", @"") #define REJECT_CALL_BUTTON_TITLE NSLocalizedString(@"REJECT_CALL_BUTTON_TITLE", @"") +#define REGISTER_ERROR_ALERT_VIEW_TITLE NSLocalizedString(@"REGISTRATION_ERROR", @"") +#define REGISTER_ERROR_ALERT_VIEW_BODY NSLocalizedString(@"REGISTRATION_BODY", @"") +#define REGISTER_ERROR_ALERT_VIEW_DISMISS NSLocalizedString(@"OK", @"") + #pragma mark - Invite Users #define INVITE_USERS_ACTION_SHEET_TITLE NSLocalizedString(@"INVITE_USERS_ACTION_SHEET_TITLE", @""); @@ -133,7 +137,6 @@ #define TIMEOUT NSLocalizedString(@"TIMEOUT",@"") #define TIMEOUT_CONTACTS_DETAIL NSLocalizedString(@"TIMEOUT_CONTACTS_DETAIL", @"") - NSDictionary* makeCallProgressLocalizedTextDictionary(void); NSDictionary* makeCallTerminationLocalizedTextDictionary(void); diff --git a/Signal/src/view controllers/RegisterViewController.h b/Signal/src/view controllers/RegisterViewController.h index 425aca610..53066621d 100644 --- a/Signal/src/view controllers/RegisterViewController.h +++ b/Signal/src/view controllers/RegisterViewController.h @@ -17,8 +17,6 @@ @property (nonatomic, strong) IBOutlet UILabel *countryCodeLabel; @property (nonatomic, strong) IBOutlet UILabel *countryNameLabel; @property (nonatomic, strong) IBOutlet UITextField *challengeTextField; -@property (nonatomic, strong) IBOutlet UILabel *registerErrorLabel; -@property (nonatomic, strong) IBOutlet UILabel *challengeErrorLabel; @property (nonatomic, strong) IBOutlet UIActivityIndicatorView *registerActivityIndicator; @property (nonatomic, strong) IBOutlet UIActivityIndicatorView *challengeActivityIndicator; @property (nonatomic, strong) IBOutlet UIScrollView *scrollView; diff --git a/Signal/src/view controllers/RegisterViewController.m b/Signal/src/view controllers/RegisterViewController.m index 35b5541e3..a7e73be64 100644 --- a/Signal/src/view controllers/RegisterViewController.m +++ b/Signal/src/view controllers/RegisterViewController.m @@ -11,6 +11,8 @@ #import "ThreadManager.h" #import "Util.h" + + #define REGISTER_VIEW_NUMBER 0 #define CHALLENGE_VIEW_NUMBER 1 @@ -36,11 +38,6 @@ [super viewDidLoad]; [self populateDefaultCountryNameAndCode]; - - [futureApnId catchDo:^(id error) { - // todo: remove this; just here for testing purposes to catch apn not being set - _registerErrorLabel.text = [error description]; - }]; _scrollView.contentSize = _containerView.bounds.size; @@ -172,12 +169,17 @@ Future* futureFinished = [self asyncRegister:localNumber untilCancelled:[life getToken]]; [_registerActivityIndicator startAnimating]; _registerButton.enabled = NO; - _registerErrorLabel.text = @""; + [futureFinished catchDo:^(id error) { - [_challengeActivityIndicator stopAnimating]; + NSError *err = ((NSError*)error); + [_registerActivityIndicator stopAnimating]; _registerButton.enabled = YES; - // todo: localize - _registerErrorLabel.text = [error description]; + + DDLogError(@"Registration failed with information %@", err.description); + + UIAlertView *registrationErrorAV = [[UIAlertView alloc]initWithTitle:REGISTER_ERROR_ALERT_VIEW_TITLE message:REGISTER_ERROR_ALERT_VIEW_BODY delegate:nil cancelButtonTitle:REGISTER_ERROR_ALERT_VIEW_DISMISS otherButtonTitles:nil, nil]; + + [registrationErrorAV show]; }]; } @@ -194,20 +196,18 @@ Future *futureDone = [HttpManager asyncOkResponseFromMasterServer:verifyRequest unlessCancelled:nil andErrorHandler:[Environment errorNoter]]; - - _challengeErrorLabel.text = @""; + [futureDone catchDo:^(id error) { if ([error isKindOfClass:[HttpResponse class]]) { HttpResponse* badResponse = error; if ([badResponse getStatusCode] == 401) { - // @todo: human readable, localizable - _challengeErrorLabel.text = @"Incorrect Challenge Code"; + UIAlertView *incorrectChallengeCodeAV = [[UIAlertView alloc]initWithTitle:@"Registration error" message:@"The challenge code you entered is incorrect." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; + [incorrectChallengeCodeAV show]; return; } } [Environment errorNoter](error, @"While Verifying Challenge.", NO); - // @todo: human readable, localizable - _challengeErrorLabel.text = [NSString stringWithFormat:@"Unexpected failure: %@", error]; +#warning add implementation }]; [futureDone thenDo:^(id result) { diff --git a/Signal/src/view controllers/xibs/RegisterViewController.xib b/Signal/src/view controllers/xibs/RegisterViewController.xib index 250243f50..7046b7985 100644 --- a/Signal/src/view controllers/xibs/RegisterViewController.xib +++ b/Signal/src/view controllers/xibs/RegisterViewController.xib @@ -1,14 +1,13 @@ - + - + - @@ -19,7 +18,6 @@ - @@ -94,13 +92,6 @@ - @@ -185,13 +176,6 @@ - diff --git a/Signal/translations/en.lproj/Localizable.strings b/Signal/translations/en.lproj/Localizable.strings index b5bb0a542..7e4bf23fa 100644 --- a/Signal/translations/en.lproj/Localizable.strings +++ b/Signal/translations/en.lproj/Localizable.strings @@ -101,6 +101,8 @@ "REGISTER_VALIDATION_ENTER_CODE" = "Validation Code"; "REGISTER_VALIDATION_SENT" = "We sent your validation code"; "REGISTER_WELCOME_TEXT" = "Welcome to Signal"; +"REGISTRATION_ERROR" = "Registration Error"; +"REGISTRATION_BODY" = "We couldn't reach the Signal server. Please try again."; "REJECT_CALL_BUTTON_TITLE" = "Reject"; "SETTINGS_ANONYMOUS_FEEDBACK" = "Send Anonymous Feedback"; "SETTINGS_CALL_QUALITY" = "Call Quality";