From 7a28569437f4296d23f66f0b9ade3d2cff5541f3 Mon Sep 17 00:00:00 2001 From: Niels de Hoog Date: Tue, 6 Jan 2015 18:05:50 +0100 Subject: [PATCH 01/13] Removed splash view controller class --- VENTouchLock.podspec | 1 + .../VENTouchLockEnterPasscodeViewController.m | 37 ++--- .../VENTouchLockSplashViewController.h | 56 ------- .../VENTouchLockSplashViewController.m | 151 ------------------ VENTouchLock/Models/VENTouchLockAppearance.m | 4 +- VENTouchLock/VENTouchLock.h | 10 +- VENTouchLock/VENTouchLock.m | 106 +++++++----- VENTouchLock/Views/VENTouchLockPasscodeView.h | 11 ++ VENTouchLock/Views/VENTouchLockPasscodeView.m | 19 +++ .../Views/VENTouchLockPasscodeView.xib | 38 +++-- 10 files changed, 148 insertions(+), 285 deletions(-) delete mode 100644 VENTouchLock/Controllers/VENTouchLockSplashViewController.h delete mode 100644 VENTouchLock/Controllers/VENTouchLockSplashViewController.m diff --git a/VENTouchLock.podspec b/VENTouchLock.podspec index 959e82d..d912b91 100644 --- a/VENTouchLock.podspec +++ b/VENTouchLock.podspec @@ -12,6 +12,7 @@ Pod::Spec.new do |s| s.source_files = 'VENTouchLock/**/*.{h,m}' s.resources = ["VENTouchLock/**/*.{xib}"] s.dependency 'SSKeychain', '~> 1.0' + s.dependency 'FCOverlay', '~> 1.0' s.frameworks = 'LocalAuthentication' s.platform = :ios, '7.0' s.requires_arc = true diff --git a/VENTouchLock/Controllers/VENTouchLockEnterPasscodeViewController.m b/VENTouchLock/Controllers/VENTouchLockEnterPasscodeViewController.m index 6797fd2..c39531b 100644 --- a/VENTouchLock/Controllers/VENTouchLockEnterPasscodeViewController.m +++ b/VENTouchLock/Controllers/VENTouchLockEnterPasscodeViewController.m @@ -31,6 +31,19 @@ - (void)viewDidLoad { [super viewDidLoad]; self.passcodeView.title = [self.touchLock appearance].enterPasscodeInitialLabelText; + + if ([VENTouchLock shouldUseTouchID]) { + self.passcodeView.hideTouchIDButton = NO; + __weak VENTouchLockEnterPasscodeViewController *weakSelf = self; + [self.passcodeView setTouchIDButtonPressed:^(UIButton *button) { + [weakSelf.touchLock showTouchID]; + }]; + } +} + +- (void)configureNavigationItems +{ + // no navigation items } - (void)enteredPasscode:(NSString *)passcode @@ -44,9 +57,7 @@ - (void)enteredPasscode:(NSString *)passcode [self.passcodeView shakeAndVibrateCompletion:^{ self.passcodeView.title = [self.touchLock appearance].enterPasscodeIncorrectLabelText; [self clearPasscode]; - if ([self parentSplashViewController]) { - [self recordIncorrectPasscodeAttempt]; - } + [self recordIncorrectPasscodeAttempt]; }]; } @@ -66,25 +77,7 @@ - (void)recordIncorrectPasscodeAttempt - (void)callExceededLimitActionBlock { - [[self parentSplashViewController] dismissWithUnlockSuccess:NO - unlockType:VENTouchLockSplashViewControllerUnlockTypeNone - animated:NO]; -} - -- (VENTouchLockSplashViewController *)parentSplashViewController -{ - VENTouchLockSplashViewController *splashViewController = nil; - UIViewController *presentingViewController = self.presentingViewController; - if (self.touchLock.appearance.splashShouldEmbedInNavigationController) { - UIViewController *rootViewController = ([presentingViewController isKindOfClass:[UINavigationController class]]) ? [((UINavigationController *)presentingViewController).viewControllers firstObject] : nil; - if ([rootViewController isKindOfClass:[VENTouchLockSplashViewController class]]) { - splashViewController = (VENTouchLockSplashViewController *)rootViewController; - } - } - else if ([presentingViewController isKindOfClass:[VENTouchLockSplashViewController class]]) { - splashViewController = (VENTouchLockSplashViewController *)presentingViewController; - } - return splashViewController; + // TODO: come up with solution for this } @end diff --git a/VENTouchLock/Controllers/VENTouchLockSplashViewController.h b/VENTouchLock/Controllers/VENTouchLockSplashViewController.h deleted file mode 100644 index 9266ee0..0000000 --- a/VENTouchLock/Controllers/VENTouchLockSplashViewController.h +++ /dev/null @@ -1,56 +0,0 @@ -#import - -typedef NS_ENUM(NSUInteger, VENTouchLockSplashViewControllerUnlockType) { - VENTouchLockSplashViewControllerUnlockTypeNone, - VENTouchLockSplashViewControllerUnlockTypeTouchID, - VENTouchLockSplashViewControllerUnlockTypePasscode -}; - -@class VENTouchLock; - -@interface VENTouchLockSplashViewController : UIViewController - -/** - Called when the VENTouchLockSplashViewController instance is dismissed. - @param success YES if the splash view controller was unlocked successfully. NO if the user reached passcodeAttemptLimit. - @param unlockType The type of unlock method used when unlock is successful. - @note A secure use-case of this block is to log out of your app when success is NO. - */ -@property (nonatomic, copy) void (^didFinishWithSuccess)(BOOL success, VENTouchLockSplashViewControllerUnlockType unlockType); - -/** - The VENTouchLock framework this class interacts with. This property should not be set outside of VENTouchLock framework's automated tests. By default, it is set to the [VENTouchLock sharedInstance] singleton on initialization. - */ -@property (nonatomic, strong) VENTouchLock *touchLock; - -/** - Displays a Touch ID prompt if the device can support it. - */ -- (void)showUnlockAnimated:(BOOL)animated; - -/** - Displays a Touch ID prompt if the device can support it. - */ -- (void)showTouchID; - -/** - Presents a VENTouchLockEnterPasscodeViewController instance. - */ -- (void)showPasscodeAnimated:(BOOL)animated; - -/** - Dismisses the VENTouchLockSplashViewController instance. This method should not be called outside of the VENTouchLock framework. - @param success YES if the splash view controller was unlocked successfully. NO if the user reached passcodeAttemptLimit. - @param unlockType The type of unlock method used when unlock is successful. - @param animated YES to animated the view controller's dismissal. NO otherwise. - */ -- (void)dismissWithUnlockSuccess:(BOOL)success - unlockType:(VENTouchLockSplashViewControllerUnlockType)unlockType - animated:(BOOL)animated; -/** - Signals the splash view controller to behave like a snapshot view for app-switch. This method should not be called outside of the VENTouchLock framework. - @param isSnapshotViewController YES if the splash view controller is for the app-switch snapshot. NO othwerise. - */ -- (void)setIsSnapshotViewController:(BOOL)isSnapshotViewController; - -@end diff --git a/VENTouchLock/Controllers/VENTouchLockSplashViewController.m b/VENTouchLock/Controllers/VENTouchLockSplashViewController.m deleted file mode 100644 index d12ccad..0000000 --- a/VENTouchLock/Controllers/VENTouchLockSplashViewController.m +++ /dev/null @@ -1,151 +0,0 @@ -#import "VENTouchLockSplashViewController.h" -#import "VENTouchLockEnterPasscodeViewController.h" -#import "VENTouchLock.h" - -@interface VENTouchLockSplashViewController () -@property (nonatomic, assign) BOOL isSnapshotViewController; -@end - -@implementation VENTouchLockSplashViewController - -#pragma mark - Creation and Lifecycle - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; - if (!self.isSnapshotViewController) { - self.touchLock.backgroundLockVisible = NO; - } -} - -- (instancetype)init -{ - self = [super init]; - if (self) { - [self initialize]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder -{ - self = [super initWithCoder:aDecoder]; - if (self) { - [self initialize]; - } - return self; -} - -- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - [self initialize]; - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - if (!self.view.backgroundColor) { - self.view.backgroundColor = [UIColor whiteColor]; - } -} - -- (void)viewDidAppear:(BOOL)animated -{ - [super viewDidAppear:animated]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillEnterForeground) name:UIApplicationWillEnterForegroundNotification object:nil]; -} - -- (void)viewDidDisappear:(BOOL)animated -{ - [super viewDidDisappear:animated]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillEnterForegroundNotification object:nil]; -} - - -#pragma mark - Present unlock methods - -- (void)showUnlockAnimated:(BOOL)animated -{ - if ([VENTouchLock shouldUseTouchID]) { - [self showTouchID]; - } - else { - [self showPasscodeAnimated:animated]; - } -} - -- (void)showTouchID -{ - __weak VENTouchLockSplashViewController *weakSelf = self; - [self.touchLock requestTouchIDWithCompletion:^(VENTouchLockTouchIDResponse response) { - switch (response) { - case VENTouchLockTouchIDResponseSuccess: - [weakSelf unlockWithType:VENTouchLockSplashViewControllerUnlockTypeTouchID]; - break; - case VENTouchLockTouchIDResponseUsePasscode: - [weakSelf showPasscodeAnimated:YES]; - break; - default: - break; - } - }]; -} - -- (void)showPasscodeAnimated:(BOOL)animated -{ - [self presentViewController:[[self enterPasscodeVC] embeddedInNavigationController] - animated:animated - completion:nil]; -} - -- (VENTouchLockEnterPasscodeViewController *)enterPasscodeVC -{ - VENTouchLockEnterPasscodeViewController *enterPasscodeVC = [[VENTouchLockEnterPasscodeViewController alloc] init]; - __weak VENTouchLockSplashViewController *weakSelf = self; - enterPasscodeVC.willFinishWithResult = ^(BOOL success) { - if (success) { - [weakSelf unlockWithType:VENTouchLockSplashViewControllerUnlockTypePasscode]; - } - else { - [weakSelf dismissViewControllerAnimated:YES completion:nil]; - } - }; - return enterPasscodeVC; -} - -- (void)appWillEnterForeground -{ - if (!self.presentedViewController) { - [self showUnlockAnimated:NO]; - } -} - -- (void)unlockWithType:(VENTouchLockSplashViewControllerUnlockType)unlockType -{ - [self dismissWithUnlockSuccess:YES - unlockType:unlockType - animated:YES]; -} - -- (void)dismissWithUnlockSuccess:(BOOL)success - unlockType:(VENTouchLockSplashViewControllerUnlockType)unlockType - animated:(BOOL)animated -{ - [self.presentingViewController dismissViewControllerAnimated:animated completion:^{ - if (self.didFinishWithSuccess) { - self.didFinishWithSuccess(success, unlockType); - } - }]; -} - -- (void)initialize -{ - _touchLock = [VENTouchLock sharedInstance]; -} - -@end \ No newline at end of file diff --git a/VENTouchLock/Models/VENTouchLockAppearance.m b/VENTouchLock/Models/VENTouchLockAppearance.m index 93c529b..a3eed7d 100644 --- a/VENTouchLock/Models/VENTouchLockAppearance.m +++ b/VENTouchLock/Models/VENTouchLockAppearance.m @@ -8,7 +8,7 @@ - (instancetype)init if (self) { // Set default values _passcodeViewControllerTitleColor = [UIColor blackColor]; _passcodeViewControllerCharacterColor = [UIColor blackColor]; - _passcodeViewControllerBackgroundColor = [UIColor colorWithRed:239/255.0f green:239/255.0f blue:244/255.0f alpha:1.0f]; + _passcodeViewControllerBackgroundColor = [UIColor colorWithRed:247/255.0f green:247/255.0f blue:247/255.0f alpha:1.0f]; _cancelBarButtonItemTitle = NSLocalizedString(@"Cancel", nil); _createPasscodeInitialLabelText = NSLocalizedString(@"Enter a new passcode", nil); _createPasscodeConfirmLabelText = NSLocalizedString(@"Please re-enter your passcode", nil); @@ -17,7 +17,7 @@ - (instancetype)init _enterPasscodeInitialLabelText = NSLocalizedString(@"Enter your passcode", nil); _enterPasscodeIncorrectLabelText = NSLocalizedString(@"Incorrect passcode. Try again.", nil); _enterPasscodeViewControllerTitle = NSLocalizedString(@"Enter Passcode", nil); - _splashShouldEmbedInNavigationController = NO; + _splashShouldEmbedInNavigationController = YES; } return self; } diff --git a/VENTouchLock/VENTouchLock.h b/VENTouchLock/VENTouchLock.h index a9ef20d..8e2a72a 100644 --- a/VENTouchLock/VENTouchLock.h +++ b/VENTouchLock/VENTouchLock.h @@ -1,7 +1,6 @@ #import #import "VENTouchLockCreatePasscodeViewController.h" #import "VENTouchLockEnterPasscodeViewController.h" -#import "VENTouchLockSplashViewController.h" #import "VENTouchLockAppearance.h" typedef NS_ENUM(NSUInteger, VENTouchLockTouchIDResponse) { @@ -33,9 +32,7 @@ typedef NS_ENUM(NSUInteger, VENTouchLockTouchIDResponse) { - (void)setKeychainService:(NSString *)service keychainAccount:(NSString *)account touchIDReason:(NSString *)reason - passcodeAttemptLimit:(NSUInteger)attemptLimit - splashViewControllerClass:(Class)splashViewControllerClass; - + passcodeAttemptLimit:(NSUInteger)attemptLimit; /** Returns YES if a passcode exists, and NO otherwise. */ @@ -76,6 +73,11 @@ typedef NS_ENUM(NSUInteger, VENTouchLockTouchIDResponse) { */ + (void)setShouldUseTouchID:(BOOL)shouldUseTouchID; +/** + * Request Touch ID if possible + */ +- (void)showTouchID; + /** Requests a TouchID if possible. If canUseTouchID returns NO, this method does nothing. The displayed string on the touch id prompt will be the default touchIDReason. */ diff --git a/VENTouchLock/VENTouchLock.m b/VENTouchLock/VENTouchLock.m index 2174bb4..9c87629 100644 --- a/VENTouchLock/VENTouchLock.m +++ b/VENTouchLock/VENTouchLock.m @@ -4,6 +4,8 @@ #import #import "UIViewController+VENTouchLock.h" +#import "FCOverlay.h" + static NSString *const VENTouchLockUserDefaultsKeyTouchIDActivated = @"VENTouchLockUserDefaultsKeyTouchIDActivated"; @interface VENTouchLock () @@ -12,7 +14,6 @@ @interface VENTouchLock () @property (copy, nonatomic) NSString *keychainAccount; @property (copy, nonatomic) NSString *touchIDReason; @property (assign, nonatomic) NSUInteger passcodeAttemptLimit; -@property (assign, nonatomic) Class splashViewControllerClass; @property (strong, nonatomic) UIView *snapshotView; @property (strong, nonatomic) VENTouchLockAppearance *appearance; @@ -52,14 +53,11 @@ - (void)setKeychainService:(NSString *)service keychainAccount:(NSString *)account touchIDReason:(NSString *)reason passcodeAttemptLimit:(NSUInteger)attemptLimit - splashViewControllerClass:(Class)splashViewControllerClass - { self.keychainService = service; self.keychainAccount = account; self.touchIDReason = reason; self.passcodeAttemptLimit = attemptLimit; - self.splashViewControllerClass = splashViewControllerClass; } @@ -120,6 +118,24 @@ + (void)setShouldUseTouchID:(BOOL)shouldUseTouchID [[NSUserDefaults standardUserDefaults] synchronize]; } +- (void)showTouchID +{ + UIViewController *rootViewController = [UIViewController ventouchlock_topMostController]; + + [self requestTouchIDWithCompletion:^(VENTouchLockTouchIDResponse response) { + switch (response) { + case VENTouchLockTouchIDResponseSuccess: + [rootViewController dismissViewControllerAnimated:YES completion:nil]; + self.backgroundLockVisible = NO; + break; + case VENTouchLockTouchIDResponseUsePasscode: + break; + default: + break; + } + }]; +} + - (void)requestTouchIDWithCompletion:(void (^)(VENTouchLockTouchIDResponse))completionBlock { [self requestTouchIDWithCompletion:completionBlock reason:self.touchIDReason]; @@ -129,7 +145,7 @@ - (void)requestTouchIDWithCompletion:(void (^)(VENTouchLockTouchIDResponse))comp { if ([[self class] canUseTouchID]) { LAContext *context = [[LAContext alloc] init]; - context.localizedFallbackTitle = NSLocalizedString(@"Enter Passcode", nil); + context.localizedFallbackTitle = @"Enter Passcode"; [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:reason reply:^(BOOL success, NSError *error) { @@ -163,46 +179,53 @@ - (void)requestTouchIDWithCompletion:(void (^)(VENTouchLockTouchIDResponse))comp - (void)lockFromBackground:(BOOL)fromBackground { - if (self.splashViewControllerClass != NULL) { - VENTouchLockSplashViewController *splashViewController = [[self.splashViewControllerClass alloc] init]; - if ([splashViewController isKindOfClass:[VENTouchLockSplashViewController class]]) { - UIWindow *mainWindow = [[UIApplication sharedApplication].windows firstObject]; - UIViewController *rootViewController = [UIViewController ventouchlock_topMostController]; - UIViewController *displayController; - if (self.appearance.splashShouldEmbedInNavigationController) { - displayController = [splashViewController ventouchlock_embeddedInNavigationController]; - } - else { - displayController = splashViewController; - } - - if (fromBackground) { - [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; - VENTouchLockSplashViewController *snapshotSplashViewController = [[self.splashViewControllerClass alloc] init]; - [snapshotSplashViewController setIsSnapshotViewController:YES]; - UIViewController *snapshotDisplayController; - if (self.appearance.splashShouldEmbedInNavigationController) { - snapshotDisplayController = [snapshotSplashViewController ventouchlock_embeddedInNavigationController]; - } - else { - snapshotDisplayController = snapshotSplashViewController; - } - [snapshotDisplayController loadView]; - [snapshotDisplayController viewDidLoad]; - snapshotDisplayController.view.frame = mainWindow.bounds; - self.snapshotView = snapshotDisplayController.view; - [mainWindow addSubview:self.snapshotView]; - } - dispatch_async(dispatch_get_main_queue(), ^{ - [rootViewController presentViewController:displayController animated:NO completion:^{ - self.backgroundLockVisible = YES; - [splashViewController showUnlockAnimated:NO]; - }]; - }); + VENTouchLockEnterPasscodeViewController *splashViewController = [self enterPasscodeVC]; + UIWindow *mainWindow = [[UIApplication sharedApplication].windows firstObject]; + UIViewController *rootViewController = [UIViewController ventouchlock_topMostController]; + UIViewController *displayController; + if (self.appearance.splashShouldEmbedInNavigationController) { + displayController = [splashViewController ventouchlock_embeddedInNavigationController]; + } + else { + displayController = splashViewController; + } + + if (fromBackground) { + [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; + VENTouchLockEnterPasscodeViewController *snapshotSplashViewController = [[VENTouchLockEnterPasscodeViewController alloc] init]; + UIViewController *snapshotDisplayController; + if (self.appearance.splashShouldEmbedInNavigationController) { + snapshotDisplayController = [snapshotSplashViewController ventouchlock_embeddedInNavigationController]; } + else { + snapshotDisplayController = snapshotSplashViewController; + } + [snapshotDisplayController loadView]; + [snapshotDisplayController viewDidLoad]; + snapshotDisplayController.view.frame = mainWindow.bounds; + self.snapshotView = snapshotDisplayController.view; + [mainWindow addSubview:self.snapshotView]; } + dispatch_async(dispatch_get_main_queue(), ^{ + [rootViewController presentViewController:displayController animated:NO completion:^{ + self.backgroundLockVisible = YES; + if ([[self class] shouldUseTouchID]) { + [self showTouchID]; + } + }]; + }); } +- (VENTouchLockEnterPasscodeViewController *)enterPasscodeVC +{ + VENTouchLockEnterPasscodeViewController *enterPasscodeVC = [[VENTouchLockEnterPasscodeViewController alloc] init]; + __weak VENTouchLockEnterPasscodeViewController *weakVC = enterPasscodeVC; + enterPasscodeVC.willFinishWithResult = ^(BOOL success) { + [weakVC dismissViewControllerAnimated:YES completion:nil]; + self.backgroundLockVisible = NO; + }; + return enterPasscodeVC; +} #pragma mark - NSNotifications @@ -216,6 +239,7 @@ - (void)applicationDidFinishLaunching:(NSNotification *)notification - (void)applicationDidEnterBackground:(NSNotification *)notification { if ([self isPasscodeSet] && !self.backgroundLockVisible) { + [[UIApplication sharedApplication] ignoreSnapshotOnNextApplicationLaunch]; [self lockFromBackground:YES]; } } diff --git a/VENTouchLock/Views/VENTouchLockPasscodeView.h b/VENTouchLock/Views/VENTouchLockPasscodeView.h index 13bc56c..96e6fb8 100644 --- a/VENTouchLock/Views/VENTouchLockPasscodeView.h +++ b/VENTouchLock/Views/VENTouchLockPasscodeView.h @@ -22,6 +22,17 @@ */ @property (strong, nonatomic) UIColor *characterColor; +/** + * Default is YES + */ +@property (nonatomic) BOOL hideTouchIDButton; + +/** + * Callback when Touch ID button is pressed + */ +@property (nonatomic, copy) void (^touchIDButtonPressed)(UIButton *button); +- (void)setTouchIDButtonPressed:(void (^)(UIButton *button))touchIDButtonPressed; + /** Creates a passcode view controller with the given title and frame. */ diff --git a/VENTouchLock/Views/VENTouchLockPasscodeView.m b/VENTouchLock/Views/VENTouchLockPasscodeView.m index 9cf382e..241f7dc 100644 --- a/VENTouchLock/Views/VENTouchLockPasscodeView.m +++ b/VENTouchLock/Views/VENTouchLockPasscodeView.m @@ -10,6 +10,8 @@ @interface VENTouchLockPasscodeView () @property (weak, nonatomic) IBOutlet VENTouchLockPasscodeCharacterView *thirdCharacter; @property (weak, nonatomic) IBOutlet VENTouchLockPasscodeCharacterView *fourthCharacter; +@property (nonatomic, strong) IBOutlet UIButton *touchIDButton; + @end @implementation VENTouchLockPasscodeView @@ -31,6 +33,8 @@ - (instancetype)initWithTitle:(NSString *)title frame:(CGRect)frame titleColor:( for (VENTouchLockPasscodeCharacterView *characterView in _characters) { characterView.fillColor = characterColor; } + + self.hideTouchIDButton = YES; } return self; } @@ -95,4 +99,19 @@ - (void)setTitleColor:(UIColor *)titleColor self.titleLabel.textColor = titleColor; } +- (void)setHideTouchIDButton:(BOOL)hideTouchIDButton +{ + _hideTouchIDButton = hideTouchIDButton; + self.touchIDButton.hidden = hideTouchIDButton; +} + +#pragma mark - Button actions + +- (IBAction)touchIDButtonPressed:(id)sender +{ + if (self.touchIDButtonPressed) { + _touchIDButtonPressed(sender); + } +} + @end \ No newline at end of file diff --git a/VENTouchLock/Views/VENTouchLockPasscodeView.xib b/VENTouchLock/Views/VENTouchLockPasscodeView.xib index ec019f9..ed939c6 100644 --- a/VENTouchLock/Views/VENTouchLockPasscodeView.xib +++ b/VENTouchLock/Views/VENTouchLockPasscodeView.xib @@ -1,7 +1,7 @@ - + - + @@ -11,7 +11,7 @@ - + @@ -37,16 +37,38 @@ + - + + + @@ -57,15 +79,13 @@ + - - - - + From 91e06c31f1b1fce0f3be258ae47d37e8601ace4b Mon Sep 17 00:00:00 2001 From: Niels de Hoog Date: Tue, 6 Jan 2015 18:23:42 +0100 Subject: [PATCH 02/13] Updated podspec --- VENTouchLock.podspec | 1 - .../Controllers/VENTouchLockPasscodeViewController.h | 1 + .../Controllers/VENTouchLockPasscodeViewController.m | 12 +++++++++--- VENTouchLock/VENTouchLock.m | 1 + 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/VENTouchLock.podspec b/VENTouchLock.podspec index d912b91..959e82d 100644 --- a/VENTouchLock.podspec +++ b/VENTouchLock.podspec @@ -12,7 +12,6 @@ Pod::Spec.new do |s| s.source_files = 'VENTouchLock/**/*.{h,m}' s.resources = ["VENTouchLock/**/*.{xib}"] s.dependency 'SSKeychain', '~> 1.0' - s.dependency 'FCOverlay', '~> 1.0' s.frameworks = 'LocalAuthentication' s.platform = :ios, '7.0' s.requires_arc = true diff --git a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.h b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.h index 6e8f031..53fab19 100644 --- a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.h +++ b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.h @@ -21,6 +21,7 @@ */ @property (nonatomic, strong) VENTouchLock *touchLock; +@property (nonatomic, getter=isSnapshotViewController) BOOL snapshotViewController; /** Encapsulates the view controller in a navigation controller. */ diff --git a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m index 17d20cf..682b8e2 100644 --- a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m +++ b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m @@ -36,7 +36,11 @@ - (void)viewDidLoad [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; self.view.backgroundColor = [self.touchLock appearance].passcodeViewControllerBackgroundColor; - [self configureInvisiblePasscodeField]; + + if (!self.isSnapshotViewController) { + [self configureInvisiblePasscodeField]; + } + [self configureNavigationItems]; [self configurePasscodeView]; } @@ -44,7 +48,8 @@ - (void)viewDidLoad - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; - if (![self.invisiblePasscodeField isFirstResponder]) { + + if (!self.isSnapshotViewController && ![self.invisiblePasscodeField isFirstResponder]) { [self.invisiblePasscodeField becomeFirstResponder]; } } @@ -52,7 +57,8 @@ - (void)viewWillAppear:(BOOL)animated - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; - if ([self.invisiblePasscodeField isFirstResponder]) { + + if (!self.isSnapshotViewController && [self.invisiblePasscodeField isFirstResponder]) { [self.invisiblePasscodeField resignFirstResponder]; } } diff --git a/VENTouchLock/VENTouchLock.m b/VENTouchLock/VENTouchLock.m index 9c87629..b672029 100644 --- a/VENTouchLock/VENTouchLock.m +++ b/VENTouchLock/VENTouchLock.m @@ -193,6 +193,7 @@ - (void)lockFromBackground:(BOOL)fromBackground if (fromBackground) { [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; VENTouchLockEnterPasscodeViewController *snapshotSplashViewController = [[VENTouchLockEnterPasscodeViewController alloc] init]; + snapshotSplashViewController.snapshotViewController = YES; UIViewController *snapshotDisplayController; if (self.appearance.splashShouldEmbedInNavigationController) { snapshotDisplayController = [snapshotSplashViewController ventouchlock_embeddedInNavigationController]; From 06a3f7ce80e752913a41e2b0e82d89b6108bf03d Mon Sep 17 00:00:00 2001 From: Niels de Hoog Date: Tue, 6 Jan 2015 18:58:23 +0100 Subject: [PATCH 03/13] Fixed passcode frame issue and removed FCOverlay --- .../VENTouchLockPasscodeViewController.m | 19 +++++++++++++++++-- VENTouchLock/VENTouchLock.m | 1 - 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m index 682b8e2..8386099 100644 --- a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m +++ b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m @@ -63,6 +63,16 @@ - (void)viewWillDisappear:(BOOL)animated } } +- (void)viewWillLayoutSubviews +{ + [super viewWillLayoutSubviews]; + + if (self.isSnapshotViewController) { + // FIXME: keyboard height should not be hardcoded + [self setPasscodeViewFrameForKeyboardHeight:216]; + } +} + - (void)configureInvisiblePasscodeField { self.invisiblePasscodeField = [[UITextField alloc] init]; @@ -110,8 +120,13 @@ - (UINavigationController *)embeddedInNavigationController - (void)keyboardWillShow:(NSNotification *)notification { CGRect newKeyboardFrame = [(NSValue *)[notification.userInfo objectForKey:@"UIKeyboardFrameEndUserInfoKey"] CGRectValue]; - CGFloat passcodeLockViewHeight = CGRectGetHeight(self.view.frame) - CGRectGetHeight(newKeyboardFrame); - CGFloat passcodeLockViewWidth = CGRectGetWidth(self.view.frame); + [self setPasscodeViewFrameForKeyboardHeight:CGRectGetHeight(newKeyboardFrame)]; +} + +- (void)setPasscodeViewFrameForKeyboardHeight:(CGFloat)keyboardHeight +{ + CGFloat passcodeLockViewHeight = CGRectGetHeight(self.view.frame) - keyboardHeight; + CGFloat passcodeLockViewWidth = CGRectGetWidth(self.view.frame); self.passcodeView.frame = CGRectMake(0, 0, passcodeLockViewWidth, passcodeLockViewHeight); } diff --git a/VENTouchLock/VENTouchLock.m b/VENTouchLock/VENTouchLock.m index b672029..f1d778c 100644 --- a/VENTouchLock/VENTouchLock.m +++ b/VENTouchLock/VENTouchLock.m @@ -4,7 +4,6 @@ #import #import "UIViewController+VENTouchLock.h" -#import "FCOverlay.h" static NSString *const VENTouchLockUserDefaultsKeyTouchIDActivated = @"VENTouchLockUserDefaultsKeyTouchIDActivated"; From bd1a653637290aa49600e90a7ff9ca4c34d8f196 Mon Sep 17 00:00:00 2001 From: Niels de Hoog Date: Tue, 6 Jan 2015 19:08:03 +0100 Subject: [PATCH 04/13] Delete passcode on first launch --- VENTouchLock/VENTouchLock.m | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/VENTouchLock/VENTouchLock.m b/VENTouchLock/VENTouchLock.m index f1d778c..a59e764 100644 --- a/VENTouchLock/VENTouchLock.m +++ b/VENTouchLock/VENTouchLock.m @@ -6,6 +6,7 @@ static NSString *const VENTouchLockUserDefaultsKeyTouchIDActivated = @"VENTouchLockUserDefaultsKeyTouchIDActivated"; +static NSString *const VENTouchLockUserDefaultsKeyLaunchedBefore = @"VENTouchLockUserDefaultsKeyLaunchedBefore"; @interface VENTouchLock () @@ -231,6 +232,13 @@ - (VENTouchLockEnterPasscodeViewController *)enterPasscodeVC - (void)applicationDidFinishLaunching:(NSNotification *)notification { + NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; + if (![userDefaults boolForKey:VENTouchLockUserDefaultsKeyLaunchedBefore]) { + // on first launch delete passcode to make sure we don't persist passcode between installs + [self deletePasscode]; + [userDefaults setBool:YES forKey:VENTouchLockUserDefaultsKeyLaunchedBefore]; + } + if ([self isPasscodeSet]) { [self lockFromBackground:NO]; } From bc8f8a3ae8a23ad332d1b64968d2fb0794a5de14 Mon Sep 17 00:00:00 2001 From: Niels de Hoog Date: Wed, 7 Jan 2015 16:32:21 +0100 Subject: [PATCH 05/13] Sync user defaults --- VENTouchLock/VENTouchLock.m | 1 + 1 file changed, 1 insertion(+) diff --git a/VENTouchLock/VENTouchLock.m b/VENTouchLock/VENTouchLock.m index a59e764..c92dd82 100644 --- a/VENTouchLock/VENTouchLock.m +++ b/VENTouchLock/VENTouchLock.m @@ -237,6 +237,7 @@ - (void)applicationDidFinishLaunching:(NSNotification *)notification // on first launch delete passcode to make sure we don't persist passcode between installs [self deletePasscode]; [userDefaults setBool:YES forKey:VENTouchLockUserDefaultsKeyLaunchedBefore]; + [userDefaults synchronize]; } if ([self isPasscodeSet]) { From c9d4b36531972f740427fde13b03dddbb3eb001a Mon Sep 17 00:00:00 2001 From: Sean Kirkpatrick Date: Mon, 2 Mar 2015 17:44:46 -0500 Subject: [PATCH 06/13] lock rotation to Portrait for passcode, fixes rotation bypass issue, also invokes willFinishWithResult completion in completion block of dismiss --- VENTouchLock.xcodeproj/project.pbxproj | 2196 +++++------------ .../UIViewController+VENTouchLock.m | 3 +- .../Controllers/VENNavigationController.h | 13 + .../Controllers/VENNavigationController.m | 28 + .../VENTouchLockPasscodeViewController.h | 4 +- .../VENTouchLockPasscodeViewController.m | 32 +- 6 files changed, 699 insertions(+), 1577 deletions(-) create mode 100644 VENTouchLock/Controllers/VENNavigationController.h create mode 100644 VENTouchLock/Controllers/VENNavigationController.m diff --git a/VENTouchLock.xcodeproj/project.pbxproj b/VENTouchLock.xcodeproj/project.pbxproj index ccc52c5..49f777d 100644 --- a/VENTouchLock.xcodeproj/project.pbxproj +++ b/VENTouchLock.xcodeproj/project.pbxproj @@ -1,1569 +1,627 @@ - - - - - archiveVersion - 1 - classes - - objectVersion - 46 - objects - - 006CE543BCFC47E7AB666869 - - buildActionMask - 2147483647 - files - - inputPaths - - isa - PBXShellScriptBuildPhase - name - Check Pods Manifest.lock - outputPaths - - runOnlyForDeploymentPostprocessing - 0 - shellPath - /bin/sh - shellScript - diff "${PODS_ROOT}/../Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null -if [[ $? != 0 ]] ; then - cat << EOM -error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation. -EOM - exit 1 -fi - - showEnvVarsInLog - 0 - - 0E8BBA2F9ED2474C8534716D - - fileRef - 8C50D98031904B55BA82D2E5 - isa - PBXBuildFile - - 3A03EAC919C4F4E40095708C - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - VENTouchLockTests-Prefix.pch - sourceTree - <group> - - 3A03EACA19C4F72C0095708C - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - VENTouchLockEnterPasscodeViewControllerSpec.m - sourceTree - <group> - - 3A03EACB19C4F72C0095708C - - fileRef - 3A03EACA19C4F72C0095708C - isa - PBXBuildFile - - 3A03EACC19C4FF1D0095708C - - fileRef - 3A709A9819BE68A300AC9238 - isa - PBXBuildFile - - 3A03EACE19C4FF440095708C - - fileRef - 3A709A9919BE68A300AC9238 - isa - PBXBuildFile - - 3A03EACF19C4FF990095708C - - fileRef - 3A709A8919BE686900AC9238 - isa - PBXBuildFile - - 3A03EAD019C4FF990095708C - - fileRef - 3A709A9B19BE68A300AC9238 - isa - PBXBuildFile - - 3A03EAD119C4FF990095708C - - fileRef - 3A709A9D19BE68A300AC9238 - isa - PBXBuildFile - - 3A03EAD219C4FF990095708C - - fileRef - 3A709A9F19BE68A300AC9238 - isa - PBXBuildFile - - 3A03EAD319C4FF990095708C - - fileRef - 3A709AAD19BE68BF00AC9238 - isa - PBXBuildFile - - 3A03EAD419C4FF990095708C - - fileRef - 3A709AAF19BE68BF00AC9238 - isa - PBXBuildFile - - 3A03EAD619C4FF990095708C - - fileRef - 3A709A8F19BE688000AC9238 - isa - PBXBuildFile - - 3A03EAD819C56C9E0095708C - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - UIViewController+VENTouchLockSpec.m - sourceTree - <group> - - 3A03EAD919C56C9E0095708C - - fileRef - 3A03EAD819C56C9E0095708C - isa - PBXBuildFile - - 3A03EADA19C5E41A0095708C - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - VENTouchLockSpec.m - sourceTree - <group> - - 3A03EADB19C5E41A0095708C - - fileRef - 3A03EADA19C5E41A0095708C - isa - PBXBuildFile - - 3A4FE4165D8CB1C8FB147395 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - name - Pods-VENTouchLockTests.debug.xcconfig - path - Pods/Target Support Files/Pods-VENTouchLockTests/Pods-VENTouchLockTests.debug.xcconfig - sourceTree - <group> - - 3A5C456419D9C15F00E86B7C - - children - - 3A5C456519D9C16B00E86B7C - 3A5C456619D9C16B00E86B7C - - isa - PBXGroup - name - Models - sourceTree - <group> - - 3A5C456519D9C16B00E86B7C - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - VENTouchLockAppearance.h - path - Models/VENTouchLockAppearance.h - sourceTree - <group> - - 3A5C456619D9C16B00E86B7C - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - VENTouchLockAppearance.m - path - Models/VENTouchLockAppearance.m - sourceTree - <group> - - 3A5C456719D9C16B00E86B7C - - fileRef - 3A5C456519D9C16B00E86B7C - isa - PBXBuildFile - - 3A5C456819D9C16B00E86B7C - - fileRef - 3A5C456619D9C16B00E86B7C - isa - PBXBuildFile - - 3A5C456919D9C1A500E86B7C - - fileRef - 3A5C456619D9C16B00E86B7C - isa - PBXBuildFile - - 3A709A6619BE67D800AC9238 - - children - - 3A709A7219BE67D800AC9238 - 3A709A7C19BE67D800AC9238 - 3A709A7119BE67D800AC9238 - 3D5E0250C8A240A2922F55F7 - AE7750A29BBEFCCFD46D3B6D - - isa - PBXGroup - sourceTree - <group> - - 3A709A6719BE67D800AC9238 - - attributes - - LastUpgradeCheck - 0600 - ORGANIZATIONNAME - Venmo - TargetAttributes - - 3A709A6F19BE67D800AC9238 - - CreatedOnToolsVersion - 6.0 - - 3A709A7A19BE67D800AC9238 - - CreatedOnToolsVersion - 6.0 - - - - buildConfigurationList - 3A709A6A19BE67D800AC9238 - compatibilityVersion - Xcode 3.2 - developmentRegion - English - hasScannedForEncodings - 0 - isa - PBXProject - knownRegions - - en - - mainGroup - 3A709A6619BE67D800AC9238 - productRefGroup - 3A709A7119BE67D800AC9238 - projectDirPath - - projectReferences - - projectRoot - - targets - - 3A709A6F19BE67D800AC9238 - 3A709A7A19BE67D800AC9238 - - - 3A709A6A19BE67D800AC9238 - - buildConfigurations - - 3A709A8119BE67D800AC9238 - 3A709A8219BE67D800AC9238 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 3A709A6B19BE67D800AC9238 - - buildActionMask - 2147483647 - files - - 3A709AA419BE68A300AC9238 - 3A709A9319BE688000AC9238 - 3A709A8A19BE686900AC9238 - 3A709AAA19BE68A300AC9238 - 3A709AB219BE68BF00AC9238 - 3A709AA819BE68A300AC9238 - 3A709AA619BE68A300AC9238 - 3A5C456819D9C16B00E86B7C - 3A709AB419BE68BF00AC9238 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 3A709A6C19BE67D800AC9238 - - buildActionMask - 2147483647 - files - - 0E8BBA2F9ED2474C8534716D - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 3A709A6D19BE67D800AC9238 - - buildActionMask - 2147483647 - files - - 3A709A9219BE688000AC9238 - 3A709A7619BE67D800AC9238 - 3A03EACC19C4FF1D0095708C - 3A5C456719D9C16B00E86B7C - 3A709AA919BE68A300AC9238 - 3A709AB319BE68BF00AC9238 - 3A709AA719BE68A300AC9238 - 3A709AB119BE68BF00AC9238 - 3A709AA519BE68A300AC9238 - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 3A709A6E19BE67D800AC9238 - - buildActionMask - 2147483647 - files - - 3A709AB519BE68BF00AC9238 - - isa - PBXResourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 3A709A6F19BE67D800AC9238 - - buildConfigurationList - 3A709A8319BE67D800AC9238 - buildPhases - - 578CFE7974F84E93ACDBAB3E - 3A709A6B19BE67D800AC9238 - 3A709A6C19BE67D800AC9238 - 3A709A6D19BE67D800AC9238 - 3A709A6E19BE67D800AC9238 - DBA0684AD4E9464DAC14CC9A - - buildRules - - dependencies - - isa - PBXNativeTarget - name - VENTouchLock - productName - VENTouchLock - productReference - 3A709A7019BE67D800AC9238 - productType - com.apple.product-type.framework - - 3A709A7019BE67D800AC9238 - - explicitFileType - wrapper.framework - includeInIndex - 0 - isa - PBXFileReference - path - VENTouchLock.framework - sourceTree - BUILT_PRODUCTS_DIR - - 3A709A7119BE67D800AC9238 - - children - - 3A709A7019BE67D800AC9238 - 3A709A7B19BE67D800AC9238 - - isa - PBXGroup - name - Products - sourceTree - <group> - - 3A709A7219BE67D800AC9238 - - children - - 3A709A7519BE67D800AC9238 - 3A709A8919BE686900AC9238 - 3A5C456419D9C15F00E86B7C - 3A709A9419BE688E00AC9238 - 3A709AAB19BE68B400AC9238 - 3A709A8B19BE687100AC9238 - 3A709A7319BE67D800AC9238 - - isa - PBXGroup - path - VENTouchLock - sourceTree - <group> - - 3A709A7319BE67D800AC9238 - - children - - 3A709A7419BE67D800AC9238 - - isa - PBXGroup - name - Supporting Files - sourceTree - <group> - - 3A709A7419BE67D800AC9238 - - isa - PBXFileReference - lastKnownFileType - text.plist.xml - path - Info.plist - sourceTree - <group> - - 3A709A7519BE67D800AC9238 - - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - VENTouchLock.h - sourceTree - <group> - - 3A709A7619BE67D800AC9238 - - fileRef - 3A709A7519BE67D800AC9238 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 3A709A7719BE67D800AC9238 - - buildActionMask - 2147483647 - files - - 3A5C456919D9C1A500E86B7C - 3A03EACF19C4FF990095708C - 3A03EAD019C4FF990095708C - 3A03EAD119C4FF990095708C - 3A03EAD219C4FF990095708C - 3A03EAD319C4FF990095708C - 3A03EAD919C56C9E0095708C - 3A03EAD419C4FF990095708C - 3A03EAD619C4FF990095708C - 3A03EADB19C5E41A0095708C - 3A03EACE19C4FF440095708C - 3A03EACB19C4F72C0095708C - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 3A709A7819BE67D800AC9238 - - buildActionMask - 2147483647 - files - - B0AAA75C21C74F8DA9D13175 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 3A709A7919BE67D800AC9238 - - buildActionMask - 2147483647 - files - - isa - PBXResourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 3A709A7A19BE67D800AC9238 - - buildConfigurationList - 3A709A8619BE67D800AC9238 - buildPhases - - 006CE543BCFC47E7AB666869 - 3A709A7719BE67D800AC9238 - 3A709A7819BE67D800AC9238 - 3A709A7919BE67D800AC9238 - 8B971D45E9814AC3A4071695 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - VENTouchLockTests - productName - VENTouchLockTests - productReference - 3A709A7B19BE67D800AC9238 - productType - com.apple.product-type.bundle.unit-test - - 3A709A7B19BE67D800AC9238 - - explicitFileType - wrapper.cfbundle - includeInIndex - 0 - isa - PBXFileReference - path - VENTouchLockTests.xctest - sourceTree - BUILT_PRODUCTS_DIR - - 3A709A7C19BE67D800AC9238 - - children - - 3A03EADA19C5E41A0095708C - 3A03EACA19C4F72C0095708C - 3A03EAD819C56C9E0095708C - 3A709A7D19BE67D800AC9238 - - isa - PBXGroup - path - VENTouchLockTests - sourceTree - <group> - - 3A709A7D19BE67D800AC9238 - - children - - 3A709A7E19BE67D800AC9238 - 3A03EAC919C4F4E40095708C - - isa - PBXGroup - name - Supporting Files - sourceTree - <group> - - 3A709A7E19BE67D800AC9238 - - isa - PBXFileReference - lastKnownFileType - text.plist.xml - path - Info.plist - sourceTree - <group> - - 3A709A8119BE67D800AC9238 - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - YES - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES_ERROR - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES_ERROR - CLANG_WARN_UNREACHABLE_CODE - YES - CLANG_WARN__DUPLICATE_METHOD_MATCH - YES - CODE_SIGN_IDENTITY[sdk=iphoneos*] - iPhone Developer - COPY_PHASE_STRIP - NO - CURRENT_PROJECT_VERSION - 1 - ENABLE_STRICT_OBJC_MSGSEND - YES - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES_ERROR - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES_AGGRESSIVE - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 8.0 - MTL_ENABLE_DEBUG_INFO - YES - ONLY_ACTIVE_ARCH - YES - SDKROOT - iphoneos - TARGETED_DEVICE_FAMILY - 1,2 - VERSIONING_SYSTEM - apple-generic - VERSION_INFO_PREFIX - - - isa - XCBuildConfiguration - name - Debug - - 3A709A8219BE67D800AC9238 - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - YES - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES_ERROR - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES_ERROR - CLANG_WARN_UNREACHABLE_CODE - YES - CLANG_WARN__DUPLICATE_METHOD_MATCH - YES - CODE_SIGN_IDENTITY[sdk=iphoneos*] - iPhone Developer - COPY_PHASE_STRIP - YES - CURRENT_PROJECT_VERSION - 1 - ENABLE_NS_ASSERTIONS - NO - ENABLE_STRICT_OBJC_MSGSEND - YES - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES_ERROR - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES_AGGRESSIVE - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 8.0 - MTL_ENABLE_DEBUG_INFO - NO - SDKROOT - iphoneos - TARGETED_DEVICE_FAMILY - 1,2 - VALIDATE_PRODUCT - YES - VERSIONING_SYSTEM - apple-generic - VERSION_INFO_PREFIX - - - isa - XCBuildConfiguration - name - Release - - 3A709A8319BE67D800AC9238 - - buildConfigurations - - 3A709A8419BE67D800AC9238 - 3A709A8519BE67D800AC9238 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 3A709A8419BE67D800AC9238 - - baseConfigurationReference - EF1F7E543F036C4EB61FDC73 - buildSettings - - DEFINES_MODULE - YES - DYLIB_COMPATIBILITY_VERSION - 1 - DYLIB_CURRENT_VERSION - 1 - DYLIB_INSTALL_NAME_BASE - @rpath - INFOPLIST_FILE - VENTouchLock/Info.plist - INSTALL_PATH - $(LOCAL_LIBRARY_DIR)/Frameworks - LD_RUNPATH_SEARCH_PATHS - $(inherited) @executable_path/Frameworks @loader_path/Frameworks - PRODUCT_NAME - $(TARGET_NAME) - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - 3A709A8519BE67D800AC9238 - - baseConfigurationReference - 7214AFB127B057149904A934 - buildSettings - - DEFINES_MODULE - YES - DYLIB_COMPATIBILITY_VERSION - 1 - DYLIB_CURRENT_VERSION - 1 - DYLIB_INSTALL_NAME_BASE - @rpath - INFOPLIST_FILE - VENTouchLock/Info.plist - INSTALL_PATH - $(LOCAL_LIBRARY_DIR)/Frameworks - LD_RUNPATH_SEARCH_PATHS - $(inherited) @executable_path/Frameworks @loader_path/Frameworks - PRODUCT_NAME - $(TARGET_NAME) - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Release - - 3A709A8619BE67D800AC9238 - - buildConfigurations - - 3A709A8719BE67D800AC9238 - 3A709A8819BE67D800AC9238 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 3A709A8719BE67D800AC9238 - - baseConfigurationReference - 3A4FE4165D8CB1C8FB147395 - buildSettings - - FRAMEWORK_SEARCH_PATHS - - $(SDKROOT)/Developer/Library/Frameworks - $(inherited) - - GCC_PREFIX_HEADER - VENTouchLockTests/VENTouchLockTests-Prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - INFOPLIST_FILE - VENTouchLockTests/Info.plist - LD_RUNPATH_SEARCH_PATHS - $(inherited) @executable_path/Frameworks @loader_path/Frameworks - PRODUCT_NAME - $(TARGET_NAME) - - isa - XCBuildConfiguration - name - Debug - - 3A709A8819BE67D800AC9238 - - baseConfigurationReference - ACF4DE98AD7E614B0C1615BF - buildSettings - - FRAMEWORK_SEARCH_PATHS - - $(SDKROOT)/Developer/Library/Frameworks - $(inherited) - - GCC_PREFIX_HEADER - VENTouchLockTests/VENTouchLockTests-Prefix.pch - INFOPLIST_FILE - VENTouchLockTests/Info.plist - LD_RUNPATH_SEARCH_PATHS - $(inherited) @executable_path/Frameworks @loader_path/Frameworks - PRODUCT_NAME - $(TARGET_NAME) - - isa - XCBuildConfiguration - name - Release - - 3A709A8919BE686900AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - VENTouchLock.m - sourceTree - <group> - - 3A709A8A19BE686900AC9238 - - fileRef - 3A709A8919BE686900AC9238 - isa - PBXBuildFile - - 3A709A8B19BE687100AC9238 - - children - - 3A709A8E19BE688000AC9238 - 3A709A8F19BE688000AC9238 - - isa - PBXGroup - name - Categories - sourceTree - <group> - - 3A709A8E19BE688000AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - UIViewController+VENTouchLock.h - path - Categories/UIViewController+VENTouchLock.h - sourceTree - <group> - - 3A709A8F19BE688000AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - UIViewController+VENTouchLock.m - path - Categories/UIViewController+VENTouchLock.m - sourceTree - <group> - - 3A709A9219BE688000AC9238 - - fileRef - 3A709A8E19BE688000AC9238 - isa - PBXBuildFile - - 3A709A9319BE688000AC9238 - - fileRef - 3A709A8F19BE688000AC9238 - isa - PBXBuildFile - - 3A709A9419BE688E00AC9238 - - children - - 3A709A9819BE68A300AC9238 - 3A709A9919BE68A300AC9238 - 3A709A9A19BE68A300AC9238 - 3A709A9B19BE68A300AC9238 - 3A709A9C19BE68A300AC9238 - 3A709A9D19BE68A300AC9238 - 3A709A9E19BE68A300AC9238 - 3A709A9F19BE68A300AC9238 - - isa - PBXGroup - name - Controllers - sourceTree - <group> - - 3A709A9819BE68A300AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - VENTouchLockEnterPasscodeViewController.h - path - Controllers/VENTouchLockEnterPasscodeViewController.h - sourceTree - <group> - - 3A709A9919BE68A300AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - VENTouchLockEnterPasscodeViewController.m - path - Controllers/VENTouchLockEnterPasscodeViewController.m - sourceTree - <group> - - 3A709A9A19BE68A300AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - VENTouchLockPasscodeViewController.h - path - Controllers/VENTouchLockPasscodeViewController.h - sourceTree - <group> - - 3A709A9B19BE68A300AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - VENTouchLockPasscodeViewController.m - path - Controllers/VENTouchLockPasscodeViewController.m - sourceTree - <group> - - 3A709A9C19BE68A300AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - VENTouchLockCreatePasscodeViewController.h - path - Controllers/VENTouchLockCreatePasscodeViewController.h - sourceTree - <group> - - 3A709A9D19BE68A300AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - VENTouchLockCreatePasscodeViewController.m - path - Controllers/VENTouchLockCreatePasscodeViewController.m - sourceTree - <group> - - 3A709A9E19BE68A300AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - VENTouchLockSplashViewController.h - path - Controllers/VENTouchLockSplashViewController.h - sourceTree - <group> - - 3A709A9F19BE68A300AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - VENTouchLockSplashViewController.m - path - Controllers/VENTouchLockSplashViewController.m - sourceTree - <group> - - 3A709AA419BE68A300AC9238 - - fileRef - 3A709A9919BE68A300AC9238 - isa - PBXBuildFile - - 3A709AA519BE68A300AC9238 - - fileRef - 3A709A9A19BE68A300AC9238 - isa - PBXBuildFile - - 3A709AA619BE68A300AC9238 - - fileRef - 3A709A9B19BE68A300AC9238 - isa - PBXBuildFile - - 3A709AA719BE68A300AC9238 - - fileRef - 3A709A9C19BE68A300AC9238 - isa - PBXBuildFile - - 3A709AA819BE68A300AC9238 - - fileRef - 3A709A9D19BE68A300AC9238 - isa - PBXBuildFile - - 3A709AA919BE68A300AC9238 - - fileRef - 3A709A9E19BE68A300AC9238 - isa - PBXBuildFile - - 3A709AAA19BE68A300AC9238 - - fileRef - 3A709A9F19BE68A300AC9238 - isa - PBXBuildFile - - 3A709AAB19BE68B400AC9238 - - children - - 3A709AAC19BE68BF00AC9238 - 3A709AAD19BE68BF00AC9238 - 3A709AAE19BE68BF00AC9238 - 3A709AAF19BE68BF00AC9238 - 3A709AB019BE68BF00AC9238 - - isa - PBXGroup - name - Views - sourceTree - <group> - - 3A709AAC19BE68BF00AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - VENTouchLockPasscodeCharacterView.h - path - Views/VENTouchLockPasscodeCharacterView.h - sourceTree - <group> - - 3A709AAD19BE68BF00AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - VENTouchLockPasscodeCharacterView.m - path - Views/VENTouchLockPasscodeCharacterView.m - sourceTree - <group> - - 3A709AAE19BE68BF00AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - VENTouchLockPasscodeView.h - path - Views/VENTouchLockPasscodeView.h - sourceTree - <group> - - 3A709AAF19BE68BF00AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - VENTouchLockPasscodeView.m - path - Views/VENTouchLockPasscodeView.m - sourceTree - <group> - - 3A709AB019BE68BF00AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - file.xib - name - VENTouchLockPasscodeView.xib - path - Views/VENTouchLockPasscodeView.xib - sourceTree - <group> - - 3A709AB119BE68BF00AC9238 - - fileRef - 3A709AAC19BE68BF00AC9238 - isa - PBXBuildFile - - 3A709AB219BE68BF00AC9238 - - fileRef - 3A709AAD19BE68BF00AC9238 - isa - PBXBuildFile - - 3A709AB319BE68BF00AC9238 - - fileRef - 3A709AAE19BE68BF00AC9238 - isa - PBXBuildFile - - 3A709AB419BE68BF00AC9238 - - fileRef - 3A709AAF19BE68BF00AC9238 - isa - PBXBuildFile - - 3A709AB519BE68BF00AC9238 - - fileRef - 3A709AB019BE68BF00AC9238 - isa - PBXBuildFile - - 3D5E0250C8A240A2922F55F7 - - children - - 8A8322082DAA4E4E8840A4D1 - 4BBF12C3327B45B5803FC9C5 - 8C50D98031904B55BA82D2E5 - - isa - PBXGroup - name - Frameworks - sourceTree - <group> - - 4BBF12C3327B45B5803FC9C5 - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-VENTouchLockTests.a - sourceTree - BUILT_PRODUCTS_DIR - - 578CFE7974F84E93ACDBAB3E - - buildActionMask - 2147483647 - files - - inputPaths - - isa - PBXShellScriptBuildPhase - name - Check Pods Manifest.lock - outputPaths - - runOnlyForDeploymentPostprocessing - 0 - shellPath - /bin/sh - shellScript - diff "${PODS_ROOT}/../Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null -if [[ $? != 0 ]] ; then - cat << EOM -error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation. -EOM - exit 1 -fi - - showEnvVarsInLog - 0 - - 7214AFB127B057149904A934 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - name - Pods.release.xcconfig - path - Pods/Target Support Files/Pods/Pods.release.xcconfig - sourceTree - <group> - - 8A8322082DAA4E4E8840A4D1 - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-VENTouchLock.a - sourceTree - BUILT_PRODUCTS_DIR - - 8B971D45E9814AC3A4071695 - - buildActionMask - 2147483647 - files - - inputPaths - - isa - PBXShellScriptBuildPhase - name - Copy Pods Resources - outputPaths - - runOnlyForDeploymentPostprocessing - 0 - shellPath - /bin/sh - shellScript - "${SRCROOT}/Pods/Target Support Files/Pods-VENTouchLockTests/Pods-VENTouchLockTests-resources.sh" - - showEnvVarsInLog - 0 - - 8C50D98031904B55BA82D2E5 - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods.a - sourceTree - BUILT_PRODUCTS_DIR - - ACF4DE98AD7E614B0C1615BF - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - name - Pods-VENTouchLockTests.release.xcconfig - path - Pods/Target Support Files/Pods-VENTouchLockTests/Pods-VENTouchLockTests.release.xcconfig - sourceTree - <group> - - AE7750A29BBEFCCFD46D3B6D - - children - - EF1F7E543F036C4EB61FDC73 - 7214AFB127B057149904A934 - 3A4FE4165D8CB1C8FB147395 - ACF4DE98AD7E614B0C1615BF - - isa - PBXGroup - name - Pods - sourceTree - <group> - - B0AAA75C21C74F8DA9D13175 - - fileRef - 4BBF12C3327B45B5803FC9C5 - isa - PBXBuildFile - - DBA0684AD4E9464DAC14CC9A - - buildActionMask - 2147483647 - files - - inputPaths - - isa - PBXShellScriptBuildPhase - name - Copy Pods Resources - outputPaths - - runOnlyForDeploymentPostprocessing - 0 - shellPath - /bin/sh - shellScript - "${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh" - - showEnvVarsInLog - 0 - - EF1F7E543F036C4EB61FDC73 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - name - Pods.debug.xcconfig - path - Pods/Target Support Files/Pods/Pods.debug.xcconfig - sourceTree - <group> - - - rootObject - 3A709A6719BE67D800AC9238 - - +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 0E8BBA2F9ED2474C8534716D /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C50D98031904B55BA82D2E5 /* libPods.a */; }; + 3A03EACB19C4F72C0095708C /* VENTouchLockEnterPasscodeViewControllerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A03EACA19C4F72C0095708C /* VENTouchLockEnterPasscodeViewControllerSpec.m */; }; + 3A03EACC19C4FF1D0095708C /* VENTouchLockEnterPasscodeViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A709A9819BE68A300AC9238 /* VENTouchLockEnterPasscodeViewController.h */; }; + 3A03EACE19C4FF440095708C /* VENTouchLockEnterPasscodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709A9919BE68A300AC9238 /* VENTouchLockEnterPasscodeViewController.m */; }; + 3A03EACF19C4FF990095708C /* VENTouchLock.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709A8919BE686900AC9238 /* VENTouchLock.m */; }; + 3A03EAD019C4FF990095708C /* VENTouchLockPasscodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709A9B19BE68A300AC9238 /* VENTouchLockPasscodeViewController.m */; }; + 3A03EAD119C4FF990095708C /* VENTouchLockCreatePasscodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709A9D19BE68A300AC9238 /* VENTouchLockCreatePasscodeViewController.m */; }; + 3A03EAD319C4FF990095708C /* VENTouchLockPasscodeCharacterView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709AAD19BE68BF00AC9238 /* VENTouchLockPasscodeCharacterView.m */; }; + 3A03EAD419C4FF990095708C /* VENTouchLockPasscodeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709AAF19BE68BF00AC9238 /* VENTouchLockPasscodeView.m */; }; + 3A03EAD619C4FF990095708C /* UIViewController+VENTouchLock.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709A8F19BE688000AC9238 /* UIViewController+VENTouchLock.m */; }; + 3A03EAD919C56C9E0095708C /* UIViewController+VENTouchLockSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A03EAD819C56C9E0095708C /* UIViewController+VENTouchLockSpec.m */; }; + 3A03EADB19C5E41A0095708C /* VENTouchLockSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A03EADA19C5E41A0095708C /* VENTouchLockSpec.m */; }; + 3A5C456719D9C16B00E86B7C /* VENTouchLockAppearance.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A5C456519D9C16B00E86B7C /* VENTouchLockAppearance.h */; }; + 3A5C456819D9C16B00E86B7C /* VENTouchLockAppearance.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A5C456619D9C16B00E86B7C /* VENTouchLockAppearance.m */; }; + 3A5C456919D9C1A500E86B7C /* VENTouchLockAppearance.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A5C456619D9C16B00E86B7C /* VENTouchLockAppearance.m */; }; + 3A709A7619BE67D800AC9238 /* VENTouchLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A709A7519BE67D800AC9238 /* VENTouchLock.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3A709A8A19BE686900AC9238 /* VENTouchLock.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709A8919BE686900AC9238 /* VENTouchLock.m */; }; + 3A709A9219BE688000AC9238 /* UIViewController+VENTouchLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A709A8E19BE688000AC9238 /* UIViewController+VENTouchLock.h */; }; + 3A709A9319BE688000AC9238 /* UIViewController+VENTouchLock.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709A8F19BE688000AC9238 /* UIViewController+VENTouchLock.m */; }; + 3A709AA419BE68A300AC9238 /* VENTouchLockEnterPasscodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709A9919BE68A300AC9238 /* VENTouchLockEnterPasscodeViewController.m */; }; + 3A709AA519BE68A300AC9238 /* VENTouchLockPasscodeViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A709A9A19BE68A300AC9238 /* VENTouchLockPasscodeViewController.h */; }; + 3A709AA619BE68A300AC9238 /* VENTouchLockPasscodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709A9B19BE68A300AC9238 /* VENTouchLockPasscodeViewController.m */; }; + 3A709AA719BE68A300AC9238 /* VENTouchLockCreatePasscodeViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A709A9C19BE68A300AC9238 /* VENTouchLockCreatePasscodeViewController.h */; }; + 3A709AA819BE68A300AC9238 /* VENTouchLockCreatePasscodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709A9D19BE68A300AC9238 /* VENTouchLockCreatePasscodeViewController.m */; }; + 3A709AB119BE68BF00AC9238 /* VENTouchLockPasscodeCharacterView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A709AAC19BE68BF00AC9238 /* VENTouchLockPasscodeCharacterView.h */; }; + 3A709AB219BE68BF00AC9238 /* VENTouchLockPasscodeCharacterView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709AAD19BE68BF00AC9238 /* VENTouchLockPasscodeCharacterView.m */; }; + 3A709AB319BE68BF00AC9238 /* VENTouchLockPasscodeView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A709AAE19BE68BF00AC9238 /* VENTouchLockPasscodeView.h */; }; + 3A709AB419BE68BF00AC9238 /* VENTouchLockPasscodeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709AAF19BE68BF00AC9238 /* VENTouchLockPasscodeView.m */; }; + 3A709AB519BE68BF00AC9238 /* VENTouchLockPasscodeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3A709AB019BE68BF00AC9238 /* VENTouchLockPasscodeView.xib */; }; + B0AAA75C21C74F8DA9D13175 /* libPods-VENTouchLockTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BBF12C3327B45B5803FC9C5 /* libPods-VENTouchLockTests.a */; }; + F922C76D1AA2BF9600B406BD /* VENNavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = F922C76B1AA2BF9600B406BD /* VENNavigationController.h */; }; + F922C76E1AA2BF9600B406BD /* VENNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = F922C76C1AA2BF9600B406BD /* VENNavigationController.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 3A03EAC919C4F4E40095708C /* VENTouchLockTests-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "VENTouchLockTests-Prefix.pch"; sourceTree = ""; }; + 3A03EACA19C4F72C0095708C /* VENTouchLockEnterPasscodeViewControllerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VENTouchLockEnterPasscodeViewControllerSpec.m; sourceTree = ""; }; + 3A03EAD819C56C9E0095708C /* UIViewController+VENTouchLockSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+VENTouchLockSpec.m"; sourceTree = ""; }; + 3A03EADA19C5E41A0095708C /* VENTouchLockSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VENTouchLockSpec.m; sourceTree = ""; }; + 3A4FE4165D8CB1C8FB147395 /* Pods-VENTouchLockTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VENTouchLockTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VENTouchLockTests/Pods-VENTouchLockTests.debug.xcconfig"; sourceTree = ""; }; + 3A5C456519D9C16B00E86B7C /* VENTouchLockAppearance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VENTouchLockAppearance.h; path = Models/VENTouchLockAppearance.h; sourceTree = ""; }; + 3A5C456619D9C16B00E86B7C /* VENTouchLockAppearance.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VENTouchLockAppearance.m; path = Models/VENTouchLockAppearance.m; sourceTree = ""; }; + 3A709A7019BE67D800AC9238 /* VENTouchLock.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = VENTouchLock.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3A709A7419BE67D800AC9238 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 3A709A7519BE67D800AC9238 /* VENTouchLock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VENTouchLock.h; sourceTree = ""; }; + 3A709A7B19BE67D800AC9238 /* VENTouchLockTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VENTouchLockTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3A709A7E19BE67D800AC9238 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 3A709A8919BE686900AC9238 /* VENTouchLock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VENTouchLock.m; sourceTree = ""; }; + 3A709A8E19BE688000AC9238 /* UIViewController+VENTouchLock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "UIViewController+VENTouchLock.h"; path = "Categories/UIViewController+VENTouchLock.h"; sourceTree = ""; }; + 3A709A8F19BE688000AC9238 /* UIViewController+VENTouchLock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+VENTouchLock.m"; path = "Categories/UIViewController+VENTouchLock.m"; sourceTree = ""; }; + 3A709A9819BE68A300AC9238 /* VENTouchLockEnterPasscodeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VENTouchLockEnterPasscodeViewController.h; path = Controllers/VENTouchLockEnterPasscodeViewController.h; sourceTree = ""; }; + 3A709A9919BE68A300AC9238 /* VENTouchLockEnterPasscodeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VENTouchLockEnterPasscodeViewController.m; path = Controllers/VENTouchLockEnterPasscodeViewController.m; sourceTree = ""; }; + 3A709A9A19BE68A300AC9238 /* VENTouchLockPasscodeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VENTouchLockPasscodeViewController.h; path = Controllers/VENTouchLockPasscodeViewController.h; sourceTree = ""; }; + 3A709A9B19BE68A300AC9238 /* VENTouchLockPasscodeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VENTouchLockPasscodeViewController.m; path = Controllers/VENTouchLockPasscodeViewController.m; sourceTree = ""; }; + 3A709A9C19BE68A300AC9238 /* VENTouchLockCreatePasscodeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VENTouchLockCreatePasscodeViewController.h; path = Controllers/VENTouchLockCreatePasscodeViewController.h; sourceTree = ""; }; + 3A709A9D19BE68A300AC9238 /* VENTouchLockCreatePasscodeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VENTouchLockCreatePasscodeViewController.m; path = Controllers/VENTouchLockCreatePasscodeViewController.m; sourceTree = ""; }; + 3A709AAC19BE68BF00AC9238 /* VENTouchLockPasscodeCharacterView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VENTouchLockPasscodeCharacterView.h; path = Views/VENTouchLockPasscodeCharacterView.h; sourceTree = ""; }; + 3A709AAD19BE68BF00AC9238 /* VENTouchLockPasscodeCharacterView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VENTouchLockPasscodeCharacterView.m; path = Views/VENTouchLockPasscodeCharacterView.m; sourceTree = ""; }; + 3A709AAE19BE68BF00AC9238 /* VENTouchLockPasscodeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VENTouchLockPasscodeView.h; path = Views/VENTouchLockPasscodeView.h; sourceTree = ""; }; + 3A709AAF19BE68BF00AC9238 /* VENTouchLockPasscodeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VENTouchLockPasscodeView.m; path = Views/VENTouchLockPasscodeView.m; sourceTree = ""; }; + 3A709AB019BE68BF00AC9238 /* VENTouchLockPasscodeView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = VENTouchLockPasscodeView.xib; path = Views/VENTouchLockPasscodeView.xib; sourceTree = ""; }; + 4BBF12C3327B45B5803FC9C5 /* libPods-VENTouchLockTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-VENTouchLockTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 7214AFB127B057149904A934 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; + 8A8322082DAA4E4E8840A4D1 /* libPods-VENTouchLock.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-VENTouchLock.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 8C50D98031904B55BA82D2E5 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; + ACF4DE98AD7E614B0C1615BF /* Pods-VENTouchLockTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VENTouchLockTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-VENTouchLockTests/Pods-VENTouchLockTests.release.xcconfig"; sourceTree = ""; }; + EF1F7E543F036C4EB61FDC73 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; + F922C76B1AA2BF9600B406BD /* VENNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VENNavigationController.h; path = Controllers/VENNavigationController.h; sourceTree = ""; }; + F922C76C1AA2BF9600B406BD /* VENNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VENNavigationController.m; path = Controllers/VENNavigationController.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 3A709A6C19BE67D800AC9238 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0E8BBA2F9ED2474C8534716D /* libPods.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3A709A7819BE67D800AC9238 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + B0AAA75C21C74F8DA9D13175 /* libPods-VENTouchLockTests.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 3A5C456419D9C15F00E86B7C /* Models */ = { + isa = PBXGroup; + children = ( + 3A5C456519D9C16B00E86B7C /* VENTouchLockAppearance.h */, + 3A5C456619D9C16B00E86B7C /* VENTouchLockAppearance.m */, + ); + name = Models; + sourceTree = ""; + }; + 3A709A6619BE67D800AC9238 = { + isa = PBXGroup; + children = ( + 3A709A7219BE67D800AC9238 /* VENTouchLock */, + 3A709A7C19BE67D800AC9238 /* VENTouchLockTests */, + 3A709A7119BE67D800AC9238 /* Products */, + 3D5E0250C8A240A2922F55F7 /* Frameworks */, + AE7750A29BBEFCCFD46D3B6D /* Pods */, + ); + sourceTree = ""; + }; + 3A709A7119BE67D800AC9238 /* Products */ = { + isa = PBXGroup; + children = ( + 3A709A7019BE67D800AC9238 /* VENTouchLock.framework */, + 3A709A7B19BE67D800AC9238 /* VENTouchLockTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 3A709A7219BE67D800AC9238 /* VENTouchLock */ = { + isa = PBXGroup; + children = ( + 3A709A7519BE67D800AC9238 /* VENTouchLock.h */, + 3A709A8919BE686900AC9238 /* VENTouchLock.m */, + 3A5C456419D9C15F00E86B7C /* Models */, + 3A709A9419BE688E00AC9238 /* Controllers */, + 3A709AAB19BE68B400AC9238 /* Views */, + 3A709A8B19BE687100AC9238 /* Categories */, + 3A709A7319BE67D800AC9238 /* Supporting Files */, + ); + path = VENTouchLock; + sourceTree = ""; + }; + 3A709A7319BE67D800AC9238 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 3A709A7419BE67D800AC9238 /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 3A709A7C19BE67D800AC9238 /* VENTouchLockTests */ = { + isa = PBXGroup; + children = ( + 3A03EADA19C5E41A0095708C /* VENTouchLockSpec.m */, + 3A03EACA19C4F72C0095708C /* VENTouchLockEnterPasscodeViewControllerSpec.m */, + 3A03EAD819C56C9E0095708C /* UIViewController+VENTouchLockSpec.m */, + 3A709A7D19BE67D800AC9238 /* Supporting Files */, + ); + path = VENTouchLockTests; + sourceTree = ""; + }; + 3A709A7D19BE67D800AC9238 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 3A709A7E19BE67D800AC9238 /* Info.plist */, + 3A03EAC919C4F4E40095708C /* VENTouchLockTests-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 3A709A8B19BE687100AC9238 /* Categories */ = { + isa = PBXGroup; + children = ( + 3A709A8E19BE688000AC9238 /* UIViewController+VENTouchLock.h */, + 3A709A8F19BE688000AC9238 /* UIViewController+VENTouchLock.m */, + ); + name = Categories; + sourceTree = ""; + }; + 3A709A9419BE688E00AC9238 /* Controllers */ = { + isa = PBXGroup; + children = ( + 3A709A9819BE68A300AC9238 /* VENTouchLockEnterPasscodeViewController.h */, + 3A709A9919BE68A300AC9238 /* VENTouchLockEnterPasscodeViewController.m */, + 3A709A9A19BE68A300AC9238 /* VENTouchLockPasscodeViewController.h */, + 3A709A9B19BE68A300AC9238 /* VENTouchLockPasscodeViewController.m */, + 3A709A9C19BE68A300AC9238 /* VENTouchLockCreatePasscodeViewController.h */, + 3A709A9D19BE68A300AC9238 /* VENTouchLockCreatePasscodeViewController.m */, + F922C76B1AA2BF9600B406BD /* VENNavigationController.h */, + F922C76C1AA2BF9600B406BD /* VENNavigationController.m */, + ); + name = Controllers; + sourceTree = ""; + }; + 3A709AAB19BE68B400AC9238 /* Views */ = { + isa = PBXGroup; + children = ( + 3A709AAC19BE68BF00AC9238 /* VENTouchLockPasscodeCharacterView.h */, + 3A709AAD19BE68BF00AC9238 /* VENTouchLockPasscodeCharacterView.m */, + 3A709AAE19BE68BF00AC9238 /* VENTouchLockPasscodeView.h */, + 3A709AAF19BE68BF00AC9238 /* VENTouchLockPasscodeView.m */, + 3A709AB019BE68BF00AC9238 /* VENTouchLockPasscodeView.xib */, + ); + name = Views; + sourceTree = ""; + }; + 3D5E0250C8A240A2922F55F7 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 8A8322082DAA4E4E8840A4D1 /* libPods-VENTouchLock.a */, + 4BBF12C3327B45B5803FC9C5 /* libPods-VENTouchLockTests.a */, + 8C50D98031904B55BA82D2E5 /* libPods.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + AE7750A29BBEFCCFD46D3B6D /* Pods */ = { + isa = PBXGroup; + children = ( + EF1F7E543F036C4EB61FDC73 /* Pods.debug.xcconfig */, + 7214AFB127B057149904A934 /* Pods.release.xcconfig */, + 3A4FE4165D8CB1C8FB147395 /* Pods-VENTouchLockTests.debug.xcconfig */, + ACF4DE98AD7E614B0C1615BF /* Pods-VENTouchLockTests.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 3A709A6D19BE67D800AC9238 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + F922C76D1AA2BF9600B406BD /* VENNavigationController.h in Headers */, + 3A709A9219BE688000AC9238 /* UIViewController+VENTouchLock.h in Headers */, + 3A709A7619BE67D800AC9238 /* VENTouchLock.h in Headers */, + 3A03EACC19C4FF1D0095708C /* VENTouchLockEnterPasscodeViewController.h in Headers */, + 3A5C456719D9C16B00E86B7C /* VENTouchLockAppearance.h in Headers */, + 3A709AB319BE68BF00AC9238 /* VENTouchLockPasscodeView.h in Headers */, + 3A709AA719BE68A300AC9238 /* VENTouchLockCreatePasscodeViewController.h in Headers */, + 3A709AB119BE68BF00AC9238 /* VENTouchLockPasscodeCharacterView.h in Headers */, + 3A709AA519BE68A300AC9238 /* VENTouchLockPasscodeViewController.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 3A709A6F19BE67D800AC9238 /* VENTouchLock */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3A709A8319BE67D800AC9238 /* Build configuration list for PBXNativeTarget "VENTouchLock" */; + buildPhases = ( + 578CFE7974F84E93ACDBAB3E /* Check Pods Manifest.lock */, + 3A709A6B19BE67D800AC9238 /* Sources */, + 3A709A6C19BE67D800AC9238 /* Frameworks */, + 3A709A6D19BE67D800AC9238 /* Headers */, + 3A709A6E19BE67D800AC9238 /* Resources */, + DBA0684AD4E9464DAC14CC9A /* Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = VENTouchLock; + productName = VENTouchLock; + productReference = 3A709A7019BE67D800AC9238 /* VENTouchLock.framework */; + productType = "com.apple.product-type.framework"; + }; + 3A709A7A19BE67D800AC9238 /* VENTouchLockTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3A709A8619BE67D800AC9238 /* Build configuration list for PBXNativeTarget "VENTouchLockTests" */; + buildPhases = ( + 006CE543BCFC47E7AB666869 /* Check Pods Manifest.lock */, + 3A709A7719BE67D800AC9238 /* Sources */, + 3A709A7819BE67D800AC9238 /* Frameworks */, + 3A709A7919BE67D800AC9238 /* Resources */, + 8B971D45E9814AC3A4071695 /* Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = VENTouchLockTests; + productName = VENTouchLockTests; + productReference = 3A709A7B19BE67D800AC9238 /* VENTouchLockTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 3A709A6719BE67D800AC9238 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0600; + ORGANIZATIONNAME = Venmo; + TargetAttributes = { + 3A709A6F19BE67D800AC9238 = { + CreatedOnToolsVersion = 6.0; + }; + 3A709A7A19BE67D800AC9238 = { + CreatedOnToolsVersion = 6.0; + }; + }; + }; + buildConfigurationList = 3A709A6A19BE67D800AC9238 /* Build configuration list for PBXProject "VENTouchLock" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 3A709A6619BE67D800AC9238; + productRefGroup = 3A709A7119BE67D800AC9238 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 3A709A6F19BE67D800AC9238 /* VENTouchLock */, + 3A709A7A19BE67D800AC9238 /* VENTouchLockTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 3A709A6E19BE67D800AC9238 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3A709AB519BE68BF00AC9238 /* VENTouchLockPasscodeView.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3A709A7919BE67D800AC9238 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 006CE543BCFC47E7AB666869 /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 578CFE7974F84E93ACDBAB3E /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 8B971D45E9814AC3A4071695 /* Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VENTouchLockTests/Pods-VENTouchLockTests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + DBA0684AD4E9464DAC14CC9A /* Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 3A709A6B19BE67D800AC9238 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3A709AA419BE68A300AC9238 /* VENTouchLockEnterPasscodeViewController.m in Sources */, + 3A709A9319BE688000AC9238 /* UIViewController+VENTouchLock.m in Sources */, + 3A709A8A19BE686900AC9238 /* VENTouchLock.m in Sources */, + 3A709AB219BE68BF00AC9238 /* VENTouchLockPasscodeCharacterView.m in Sources */, + F922C76E1AA2BF9600B406BD /* VENNavigationController.m in Sources */, + 3A709AA819BE68A300AC9238 /* VENTouchLockCreatePasscodeViewController.m in Sources */, + 3A709AA619BE68A300AC9238 /* VENTouchLockPasscodeViewController.m in Sources */, + 3A5C456819D9C16B00E86B7C /* VENTouchLockAppearance.m in Sources */, + 3A709AB419BE68BF00AC9238 /* VENTouchLockPasscodeView.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3A709A7719BE67D800AC9238 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3A5C456919D9C1A500E86B7C /* VENTouchLockAppearance.m in Sources */, + 3A03EACF19C4FF990095708C /* VENTouchLock.m in Sources */, + 3A03EAD019C4FF990095708C /* VENTouchLockPasscodeViewController.m in Sources */, + 3A03EAD119C4FF990095708C /* VENTouchLockCreatePasscodeViewController.m in Sources */, + 3A03EAD319C4FF990095708C /* VENTouchLockPasscodeCharacterView.m in Sources */, + 3A03EAD919C56C9E0095708C /* UIViewController+VENTouchLockSpec.m in Sources */, + 3A03EAD419C4FF990095708C /* VENTouchLockPasscodeView.m in Sources */, + 3A03EAD619C4FF990095708C /* UIViewController+VENTouchLock.m in Sources */, + 3A03EADB19C5E41A0095708C /* VENTouchLockSpec.m in Sources */, + 3A03EACE19C4FF440095708C /* VENTouchLockEnterPasscodeViewController.m in Sources */, + 3A03EACB19C4F72C0095708C /* VENTouchLockEnterPasscodeViewControllerSpec.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 3A709A8119BE67D800AC9238 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 3A709A8219BE67D800AC9238 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + CURRENT_PROJECT_VERSION = 1; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 3A709A8419BE67D800AC9238 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = EF1F7E543F036C4EB61FDC73 /* Pods.debug.xcconfig */; + buildSettings = { + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = VENTouchLock/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 3A709A8519BE67D800AC9238 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7214AFB127B057149904A934 /* Pods.release.xcconfig */; + buildSettings = { + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = VENTouchLock/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 3A709A8719BE67D800AC9238 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3A4FE4165D8CB1C8FB147395 /* Pods-VENTouchLockTests.debug.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + GCC_PREFIX_HEADER = "VENTouchLockTests/VENTouchLockTests-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = VENTouchLockTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 3A709A8819BE67D800AC9238 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = ACF4DE98AD7E614B0C1615BF /* Pods-VENTouchLockTests.release.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + GCC_PREFIX_HEADER = "VENTouchLockTests/VENTouchLockTests-Prefix.pch"; + INFOPLIST_FILE = VENTouchLockTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 3A709A6A19BE67D800AC9238 /* Build configuration list for PBXProject "VENTouchLock" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3A709A8119BE67D800AC9238 /* Debug */, + 3A709A8219BE67D800AC9238 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3A709A8319BE67D800AC9238 /* Build configuration list for PBXNativeTarget "VENTouchLock" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3A709A8419BE67D800AC9238 /* Debug */, + 3A709A8519BE67D800AC9238 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3A709A8619BE67D800AC9238 /* Build configuration list for PBXNativeTarget "VENTouchLockTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3A709A8719BE67D800AC9238 /* Debug */, + 3A709A8819BE67D800AC9238 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 3A709A6719BE67D800AC9238 /* Project object */; +} diff --git a/VENTouchLock/Categories/UIViewController+VENTouchLock.m b/VENTouchLock/Categories/UIViewController+VENTouchLock.m index 24d4520..7cd98b9 100644 --- a/VENTouchLock/Categories/UIViewController+VENTouchLock.m +++ b/VENTouchLock/Categories/UIViewController+VENTouchLock.m @@ -1,10 +1,11 @@ #import "UIViewController+VENTouchLock.h" +#import "VENNavigationController.h" @implementation UIViewController (VENTouchLock) - (UINavigationController *)ventouchlock_embeddedInNavigationController { - UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:self]; + VENNavigationController *navigationController = [[VENNavigationController alloc] initWithRootViewController:self]; navigationController.navigationBar.translucent = NO; return navigationController; } diff --git a/VENTouchLock/Controllers/VENNavigationController.h b/VENTouchLock/Controllers/VENNavigationController.h new file mode 100644 index 0000000..104d601 --- /dev/null +++ b/VENTouchLock/Controllers/VENNavigationController.h @@ -0,0 +1,13 @@ +// +// VENNavigationController.h +// VENTouchLock +// +// Created by Sean M Kirkpatrick on 2/28/15. +// Copyright (c) 2015 Venmo. All rights reserved. +// + +#import + +@interface VENNavigationController : UINavigationController + +@end diff --git a/VENTouchLock/Controllers/VENNavigationController.m b/VENTouchLock/Controllers/VENNavigationController.m new file mode 100644 index 0000000..ef2a478 --- /dev/null +++ b/VENTouchLock/Controllers/VENNavigationController.m @@ -0,0 +1,28 @@ +// +// VENNavigationController.m +// VENTouchLock +// +// Created by Sean M Kirkpatrick on 2/28/15. +// Copyright (c) 2015 Venmo. All rights reserved. +// + +#import "VENNavigationController.h" + +@implementation VENNavigationController + +- (BOOL)shouldAutorotate +{ + return self.topViewController.shouldAutorotate; +} + +-(NSUInteger)supportedInterfaceOrientations +{ + return self.topViewController.supportedInterfaceOrientations; +} + +-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation +{ + return self.topViewController.preferredInterfaceOrientationForPresentation; +} + +@end diff --git a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.h b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.h index 53fab19..c08e61f 100644 --- a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.h +++ b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.h @@ -11,10 +11,10 @@ /** This block is called directly before the passcode view controller has completed its intended operation. If the operation was completed successfully, the returned BOOL will return YES, and NO otherwise. - If this block is defined, it is responsible for dismissing the passcode view controller. - If this block is nil, the payment view controller will dismiss itself. + If this block is defined, it will be invoked with the appropriate result when the controller has been dismissed. */ @property (nonatomic, copy) void (^willFinishWithResult)(BOOL success); +// ^ SYMPLE: usage customized and comment updated to reflect Symple usage /** The VENTouchLock framework this class interacts with. This property should not be set outside of VENTouchLock framework's automated tests. By default, it is set to the [VENTouchLock sharedInstance] singleton on initialization. diff --git a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m index 8386099..23ff7e1 100644 --- a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m +++ b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m @@ -105,12 +105,17 @@ - (void)userTappedCancel - (void)finishWithResult:(BOOL)success animated:(BOOL)animated { [self.invisiblePasscodeField resignFirstResponder]; - if (self.willFinishWithResult) { - self.willFinishWithResult(success); - } else { - [self dismissViewControllerAnimated:animated completion:nil]; - } + + __block BOOL blockSuccess = success; + __block void (^completionBlock)(BOOL) = self.willFinishWithResult; + + [self dismissViewControllerAnimated:animated completion:^{ + if (completionBlock) { + completionBlock(blockSuccess); + } + }]; } +// ^ SYMPLE: Customized - (UINavigationController *)embeddedInNavigationController { @@ -183,4 +188,21 @@ - (void)textFieldDidChange:(UITextField *)textField } } +# pragma mark Symple rotation behavior + +-(BOOL)shouldAutorotate +{ + return NO; +} + +- (NSUInteger)supportedInterfaceOrientations +{ + return UIInterfaceOrientationMaskPortrait; +} + +- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation +{ + return UIInterfaceOrientationPortrait; +} + @end \ No newline at end of file From b5f1915f634f49a650250ff70f2f07ba982f4fe3 Mon Sep 17 00:00:00 2001 From: Sean Kirkpatrick Date: Mon, 2 Mar 2015 18:05:54 -0500 Subject: [PATCH 07/13] exposed ability to set up completion block to be invoked when the passcode has been entered successfully --- VENTouchLock/VENTouchLock.h | 7 +++++++ VENTouchLock/VENTouchLock.m | 6 ++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/VENTouchLock/VENTouchLock.h b/VENTouchLock/VENTouchLock.h index 8e2a72a..3e02104 100644 --- a/VENTouchLock/VENTouchLock.h +++ b/VENTouchLock/VENTouchLock.h @@ -99,4 +99,11 @@ typedef NS_ENUM(NSUInteger, VENTouchLockTouchIDResponse) { */ - (VENTouchLockAppearance *)appearance; +/** + This block is called directly before the passcode view controller has completed its intended operation. If the operation was completed successfully, the returned BOOL will return YES, and NO otherwise. + If this block is defined, it will be invoked with the appropriate result when the controller has been dismissed. + */ +@property (nonatomic, copy) void (^willFinishWithResult)(BOOL success); +// ^ SYMPLE: VENTouchLockPasscodeViewController completion block exposed via Client API + @end \ No newline at end of file diff --git a/VENTouchLock/VENTouchLock.m b/VENTouchLock/VENTouchLock.m index c92dd82..6b9dc3b 100644 --- a/VENTouchLock/VENTouchLock.m +++ b/VENTouchLock/VENTouchLock.m @@ -220,13 +220,15 @@ - (void)lockFromBackground:(BOOL)fromBackground - (VENTouchLockEnterPasscodeViewController *)enterPasscodeVC { VENTouchLockEnterPasscodeViewController *enterPasscodeVC = [[VENTouchLockEnterPasscodeViewController alloc] init]; - __weak VENTouchLockEnterPasscodeViewController *weakVC = enterPasscodeVC; enterPasscodeVC.willFinishWithResult = ^(BOOL success) { - [weakVC dismissViewControllerAnimated:YES completion:nil]; self.backgroundLockVisible = NO; + if (self.willFinishWithResult) { + self.willFinishWithResult(success); + } }; return enterPasscodeVC; } +// ^ SYMPLE: Customized to use completion block specified by client code #pragma mark - NSNotifications From 3c2f70e4373213f69536ce83694ee57aac77bab8 Mon Sep 17 00:00:00 2001 From: Sean Kirkpatrick Date: Tue, 3 Mar 2015 09:46:50 -0500 Subject: [PATCH 08/13] improved completion block comments --- VENTouchLock/Controllers/VENTouchLockPasscodeViewController.h | 3 +-- VENTouchLock/VENTouchLock.h | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.h b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.h index c08e61f..562ac90 100644 --- a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.h +++ b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.h @@ -10,8 +10,7 @@ @property (strong, nonatomic) VENTouchLockPasscodeView *passcodeView; /** - This block is called directly before the passcode view controller has completed its intended operation. If the operation was completed successfully, the returned BOOL will return YES, and NO otherwise. - If this block is defined, it will be invoked with the appropriate result when the controller has been dismissed. + If this block is defined, it is called within the completion block of the passcode view controller when it is dismissed. If the operation was completed successfully, the returned BOOL will return YES, and NO otherwise. */ @property (nonatomic, copy) void (^willFinishWithResult)(BOOL success); // ^ SYMPLE: usage customized and comment updated to reflect Symple usage diff --git a/VENTouchLock/VENTouchLock.h b/VENTouchLock/VENTouchLock.h index 3e02104..0f59132 100644 --- a/VENTouchLock/VENTouchLock.h +++ b/VENTouchLock/VENTouchLock.h @@ -100,8 +100,7 @@ typedef NS_ENUM(NSUInteger, VENTouchLockTouchIDResponse) { - (VENTouchLockAppearance *)appearance; /** - This block is called directly before the passcode view controller has completed its intended operation. If the operation was completed successfully, the returned BOOL will return YES, and NO otherwise. - If this block is defined, it will be invoked with the appropriate result when the controller has been dismissed. + If this block is defined, it is called within the completion block of the passcode view controller when it is dismissed. If the operation was completed successfully, the returned BOOL will return YES, and NO otherwise. */ @property (nonatomic, copy) void (^willFinishWithResult)(BOOL success); // ^ SYMPLE: VENTouchLockPasscodeViewController completion block exposed via Client API From db68db8d1abff5fa0a46a4cb561791b51f2ab92c Mon Sep 17 00:00:00 2001 From: Sean Kirkpatrick Date: Tue, 3 Mar 2015 21:07:54 -0500 Subject: [PATCH 09/13] improved library interface to better deal with failures on save to the keychain --- ...VENTouchLockCreatePasscodeViewController.m | 3 +- VENTouchLock/VENTouchLock.h | 4 +-- VENTouchLock/VENTouchLock.m | 32 +++++++++++-------- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/VENTouchLock/Controllers/VENTouchLockCreatePasscodeViewController.m b/VENTouchLock/Controllers/VENTouchLockCreatePasscodeViewController.m index 2272388..4793047 100644 --- a/VENTouchLock/Controllers/VENTouchLockCreatePasscodeViewController.m +++ b/VENTouchLock/Controllers/VENTouchLockCreatePasscodeViewController.m @@ -30,8 +30,7 @@ - (void)enteredPasscode:(NSString *)passcode; [super enteredPasscode:passcode]; if (self.firstPasscode) { if ([passcode isEqualToString:self.firstPasscode]) { - [self.touchLock setPasscode:passcode]; - [self finishWithResult:YES animated:YES]; + [self finishWithResult:[self.touchLock setPasscode:passcode] animated:YES]; } else { [self.passcodeView shakeAndVibrateCompletion:^{ diff --git a/VENTouchLock/VENTouchLock.h b/VENTouchLock/VENTouchLock.h index 0f59132..2b604d7 100644 --- a/VENTouchLock/VENTouchLock.h +++ b/VENTouchLock/VENTouchLock.h @@ -49,9 +49,9 @@ typedef NS_ENUM(NSUInteger, VENTouchLockTouchIDResponse) { - (BOOL)isPasscodeValid:(NSString *)passcode; /** - Sets the given string to be the current passcode. + Sets the given string to be the current passcode. Returns NO if the keychain write fails. */ -- (void)setPasscode:(NSString *)passcode; +- (BOOL)setPasscode:(NSString *)passcode; /** Deletes the current passcode if one exists. diff --git a/VENTouchLock/VENTouchLock.m b/VENTouchLock/VENTouchLock.m index 6b9dc3b..12404c8 100644 --- a/VENTouchLock/VENTouchLock.m +++ b/VENTouchLock/VENTouchLock.m @@ -6,7 +6,6 @@ static NSString *const VENTouchLockUserDefaultsKeyTouchIDActivated = @"VENTouchLockUserDefaultsKeyTouchIDActivated"; -static NSString *const VENTouchLockUserDefaultsKeyLaunchedBefore = @"VENTouchLockUserDefaultsKeyLaunchedBefore"; @interface VENTouchLock () @@ -80,11 +79,18 @@ - (BOOL)isPasscodeValid:(NSString *)passcode return [passcode isEqualToString:[self currentPasscode]]; } -- (void)setPasscode:(NSString *)passcode +- (BOOL)setPasscode:(NSString *)passcode { NSString *service = self.keychainService; NSString *account = self.keychainAccount; - [SSKeychain setPassword:passcode forService:service account:account]; + + NSError *saveError = nil; + + if (![SSKeychain setPassword:passcode forService:service account:account error:&saveError]) { + NSLog(@"%s [Line %d] saveError: %@", __PRETTY_FUNCTION__, __LINE__, saveError); + } + + return (!saveError); } - (void)deletePasscode @@ -124,10 +130,18 @@ - (void)showTouchID [self requestTouchIDWithCompletion:^(VENTouchLockTouchIDResponse response) { switch (response) { - case VENTouchLockTouchIDResponseSuccess: - [rootViewController dismissViewControllerAnimated:YES completion:nil]; + case VENTouchLockTouchIDResponseSuccess: { self.backgroundLockVisible = NO; + + __block void (^completionBlock)(BOOL) = self.willFinishWithResult; + + [rootViewController dismissViewControllerAnimated:YES completion:^{ + if (completionBlock) { + completionBlock(YES); + } + }]; break; + } case VENTouchLockTouchIDResponseUsePasscode: break; default: @@ -234,14 +248,6 @@ - (VENTouchLockEnterPasscodeViewController *)enterPasscodeVC - (void)applicationDidFinishLaunching:(NSNotification *)notification { - NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; - if (![userDefaults boolForKey:VENTouchLockUserDefaultsKeyLaunchedBefore]) { - // on first launch delete passcode to make sure we don't persist passcode between installs - [self deletePasscode]; - [userDefaults setBool:YES forKey:VENTouchLockUserDefaultsKeyLaunchedBefore]; - [userDefaults synchronize]; - } - if ([self isPasscodeSet]) { [self lockFromBackground:NO]; } From 3a3048037591e5f38ebdf3d884d9bf4ed9c75799 Mon Sep 17 00:00:00 2001 From: Sean Kirkpatrick Date: Thu, 5 Mar 2015 12:41:13 -0500 Subject: [PATCH 10/13] cleaned up completion block code --- .../Controllers/VENTouchLockPasscodeViewController.h | 2 +- .../Controllers/VENTouchLockPasscodeViewController.m | 7 ++----- VENTouchLock/VENTouchLock.h | 2 +- VENTouchLock/VENTouchLock.m | 12 +++++------- 4 files changed, 9 insertions(+), 14 deletions(-) diff --git a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.h b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.h index 562ac90..8e93f47 100644 --- a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.h +++ b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.h @@ -12,7 +12,7 @@ /** If this block is defined, it is called within the completion block of the passcode view controller when it is dismissed. If the operation was completed successfully, the returned BOOL will return YES, and NO otherwise. */ -@property (nonatomic, copy) void (^willFinishWithResult)(BOOL success); +@property (nonatomic, copy) void (^didFinishWithResult)(BOOL success); // ^ SYMPLE: usage customized and comment updated to reflect Symple usage /** diff --git a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m index 23ff7e1..af2e9d6 100644 --- a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m +++ b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m @@ -105,13 +105,10 @@ - (void)userTappedCancel - (void)finishWithResult:(BOOL)success animated:(BOOL)animated { [self.invisiblePasscodeField resignFirstResponder]; - - __block BOOL blockSuccess = success; - __block void (^completionBlock)(BOOL) = self.willFinishWithResult; [self dismissViewControllerAnimated:animated completion:^{ - if (completionBlock) { - completionBlock(blockSuccess); + if (self.didFinishWithResult) { + self.didFinishWithResult(success); } }]; } diff --git a/VENTouchLock/VENTouchLock.h b/VENTouchLock/VENTouchLock.h index 2b604d7..9406cec 100644 --- a/VENTouchLock/VENTouchLock.h +++ b/VENTouchLock/VENTouchLock.h @@ -102,7 +102,7 @@ typedef NS_ENUM(NSUInteger, VENTouchLockTouchIDResponse) { /** If this block is defined, it is called within the completion block of the passcode view controller when it is dismissed. If the operation was completed successfully, the returned BOOL will return YES, and NO otherwise. */ -@property (nonatomic, copy) void (^willFinishWithResult)(BOOL success); +@property (nonatomic, copy) void (^didFinishWithResult)(BOOL success); // ^ SYMPLE: VENTouchLockPasscodeViewController completion block exposed via Client API @end \ No newline at end of file diff --git a/VENTouchLock/VENTouchLock.m b/VENTouchLock/VENTouchLock.m index 12404c8..52b3e08 100644 --- a/VENTouchLock/VENTouchLock.m +++ b/VENTouchLock/VENTouchLock.m @@ -132,12 +132,10 @@ - (void)showTouchID switch (response) { case VENTouchLockTouchIDResponseSuccess: { self.backgroundLockVisible = NO; - - __block void (^completionBlock)(BOOL) = self.willFinishWithResult; [rootViewController dismissViewControllerAnimated:YES completion:^{ - if (completionBlock) { - completionBlock(YES); + if (self.didFinishWithResult) { + self.didFinishWithResult(YES); } }]; break; @@ -234,10 +232,10 @@ - (void)lockFromBackground:(BOOL)fromBackground - (VENTouchLockEnterPasscodeViewController *)enterPasscodeVC { VENTouchLockEnterPasscodeViewController *enterPasscodeVC = [[VENTouchLockEnterPasscodeViewController alloc] init]; - enterPasscodeVC.willFinishWithResult = ^(BOOL success) { + enterPasscodeVC.didFinishWithResult = ^(BOOL success) { self.backgroundLockVisible = NO; - if (self.willFinishWithResult) { - self.willFinishWithResult(success); + if (self.didFinishWithResult) { + self.didFinishWithResult(success); } }; return enterPasscodeVC; From 4fec17a8d5a1ab34329cef41d88743ebdda0f2c4 Mon Sep 17 00:00:00 2001 From: Vitalii Date: Thu, 20 Aug 2015 19:47:43 +0300 Subject: [PATCH 11/13] fixed a bug when the keyboard is hidden --- .../VENTouchLockPasscodeViewController.m | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m index af2e9d6..b6f9315 100644 --- a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m +++ b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m @@ -32,9 +32,10 @@ - (instancetype)init - (void)viewDidLoad { [super viewDidLoad]; - + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; - + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didBecomeActiveNotification) name:UIApplicationDidBecomeActiveNotification object:nil]; + self.view.backgroundColor = [self.touchLock appearance].passcodeViewControllerBackgroundColor; if (!self.isSnapshotViewController) { @@ -63,6 +64,13 @@ - (void)viewWillDisappear:(BOOL)animated } } +- (void)viewDidDisappear:(BOOL)animated +{ + [super viewDidDisappear:animated]; + + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + - (void)viewWillLayoutSubviews { [super viewWillLayoutSubviews]; @@ -202,4 +210,13 @@ - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation return UIInterfaceOrientationPortrait; } -@end \ No newline at end of file +#pragma mark - notification action + +- (void)didBecomeActiveNotification +{ + if (!self.isSnapshotViewController && ![self.invisiblePasscodeField isFirstResponder]) { + [self.invisiblePasscodeField becomeFirstResponder]; + } +} + +@end From d2e9c0c11bdc69406421e2df4772e794b7965b03 Mon Sep 17 00:00:00 2001 From: Vitalii Date: Thu, 20 Aug 2015 19:59:36 +0300 Subject: [PATCH 12/13] Updated pod version --- VENTouchLock.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VENTouchLock.podspec b/VENTouchLock.podspec index 959e82d..de8f54c 100644 --- a/VENTouchLock.podspec +++ b/VENTouchLock.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'VENTouchLock' - s.version = '1.0.4' + s.version = '1.0.5' s.summary = 'A passcode framework that features Touch ID' s.description = <<-DESC An easy to use passcode framework used in the Venmo app. From a1e7330e11ef6aa5b3ce45bd09b30e04a9893d87 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Wed, 23 Mar 2016 17:14:33 +0200 Subject: [PATCH 13/13] Fixed bud with blink keyboard after scan fingerprint --- VENTouchLock.podspec | 2 +- .../Controllers/VENTouchLockPasscodeViewController.m | 9 ++------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/VENTouchLock.podspec b/VENTouchLock.podspec index de8f54c..d6fe32e 100644 --- a/VENTouchLock.podspec +++ b/VENTouchLock.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'VENTouchLock' - s.version = '1.0.5' + s.version = '1.0.6' s.summary = 'A passcode framework that features Touch ID' s.description = <<-DESC An easy to use passcode framework used in the Venmo app. diff --git a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m index b6f9315..60deea6 100644 --- a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m +++ b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m @@ -62,11 +62,6 @@ - (void)viewWillDisappear:(BOOL)animated if (!self.isSnapshotViewController && [self.invisiblePasscodeField isFirstResponder]) { [self.invisiblePasscodeField resignFirstResponder]; } -} - -- (void)viewDidDisappear:(BOOL)animated -{ - [super viewDidDisappear:animated]; [[NSNotificationCenter defaultCenter] removeObserver:self]; } @@ -113,7 +108,7 @@ - (void)userTappedCancel - (void)finishWithResult:(BOOL)success animated:(BOOL)animated { [self.invisiblePasscodeField resignFirstResponder]; - + [self dismissViewControllerAnimated:animated completion:^{ if (self.didFinishWithResult) { self.didFinishWithResult(success); @@ -185,7 +180,7 @@ - (void)textFieldDidChange:(UITextField *)textField } NSString *newString = textField.text; NSUInteger newLength = [newString length]; - + if (newLength == VENTouchLockViewControllerPasscodeLength) { self.shouldIgnoreTextFieldDelegateCalls = YES; textField.text = @"";