2
0

Setup and guide.

[FIXED]     Setup wasn't showing up on app load.
[FIXED]     More temporary moc fixes and main thread fixes.
[IMPROVED]  Guide now plays an introduction animation.
[FIXED]     Setup iCloud switch is now functional.
This commit is contained in:
Maarten Billemont 2013-04-14 10:24:24 -04:00
parent 5bf8842031
commit 7cf2c7f5c6
18 changed files with 498 additions and 290 deletions

2
External/Pearl vendored

@ -1 +1 @@
Subproject commit d8c2fa3755d1f440cd5eaa980adffef08a805b25
Subproject commit 99c73fd3b37b4d2621548f5ae366c163231a346d

View File

@ -46,7 +46,7 @@
informativeTextWithFormat:@"Certain sites require explicit migration to get updated to the latest version of the "
@"Master Password algorithm. For these sites, a migration button will appear. Migrating these sites will cause "
@"their passwords to change. You'll need to update your profile for that site with the new password."];
[activeUser saveContext];
[moc saveToStore];
}];
} forKeyPath:@"key" options:NSKeyValueObservingOptionInitial context:nil];
[[NSNotificationCenter defaultCenter] addObserverForName:NSWindowDidBecomeKeyNotification object:self.window queue:nil

View File

@ -260,8 +260,10 @@
inf(@"Started up with device identifier: %@", [PearlKeyChain deviceIdentifier]);
if ([[MPiOSConfig get].showSetup boolValue])
[[MPAppDelegate get] showSetup];
dispatch_async(dispatch_get_main_queue(), ^{
if ([[MPiOSConfig get].showSetup boolValue])
[[MPAppDelegate get] showSetup];
});
return YES;
}
@ -592,21 +594,21 @@
if (buttonIndex == [alert cancelButtonIndex])
return;
[moc performBlock:^{
[moc performBlockAndWait:^{
inf(@"Unsetting master password for: %@.", user.userID);
user.keyID = nil;
[self forgetSavedKeyFor:user];
[moc saveToStore];
}];
[self signOutAnimated:YES];
if (didReset)
didReset();
[self signOutAnimated:YES];
if (didReset)
didReset();
#ifdef TESTFLIGHT_SDK_VERSION
[TestFlight passCheckpoint:MPCheckpointChangeMP];
[TestFlight passCheckpoint:MPCheckpointChangeMP];
#endif
[[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointChangeMP attributes:nil];
}];
[[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointChangeMP attributes:nil];
}
cancelTitle:[PearlStrings get].commonButtonAbort
otherTitles:[PearlStrings get].commonButtonContinue, nil];

View File

@ -250,20 +250,23 @@
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete)
[self.fetchedResultsController.managedObjectContext performBlock:^{
if (editingStyle == UITableViewCellEditingStyleDelete) {
NSManagedObjectContext *moc = self.fetchedResultsController.managedObjectContext;
[moc performBlock:^{
MPElementEntity *element = [self.fetchedResultsController objectAtIndexPath:indexPath];
inf(@"Deleting element: %@", element.name);
[self.fetchedResultsController.managedObjectContext deleteObject:element];
[moc deleteObject:element];
#ifdef TESTFLIGHT_SDK_VERSION
[TestFlight passCheckpoint:MPCheckpointDeleteElement];
#endif
[[LocalyticsSession sharedLocalyticsSession] tagEvent:MPCheckpointDeleteElement attributes:@{
@"type" : element.typeName,
@"version" : @(element.version)}];
@"type" : element.typeName,
@"version" : @(element.version)
}];
}];
}
}
@end

View File

@ -10,6 +10,25 @@
@interface MPGuideViewController : UIViewController <UIScrollViewDelegate>
@property (weak, nonatomic) IBOutlet UIView *siteNameTip;
@property (weak, nonatomic) IBOutlet UIView *contentTip;
@property (weak, nonatomic) IBOutlet UILabel *contentTipText;
@property (weak, nonatomic) IBOutlet UIButton *usernameButton;
@property (weak, nonatomic) IBOutlet UIView *usernameTip;
@property (weak, nonatomic) IBOutlet UIButton *typeButton;
@property (weak, nonatomic) IBOutlet UIView *typeTip;
@property (weak, nonatomic) IBOutlet UIButton *toolButton;
@property (weak, nonatomic) IBOutlet UIView *toolTip;
@property (weak, nonatomic) IBOutlet UIProgressView *progress;
@property (weak, nonatomic) IBOutlet UIView *content;
@property (weak, nonatomic) IBOutlet UIButton *contentButton;
@property (weak, nonatomic) IBOutlet UITextField *contentText;
@property (weak, nonatomic) IBOutlet UIButton *volumeButton;
@property (weak, nonatomic) IBOutlet UIButton *largePlayButton;
@property (weak, nonatomic) IBOutlet UIButton *smallPlayButton;
- (IBAction)play;
- (IBAction)close;
- (IBAction)toggleVolume;
@end

View File

@ -8,6 +8,14 @@
#import "MPGuideViewController.h"
@interface MPGuideViewController()
@property(nonatomic, strong) NSTimer *timer;
@property(nonatomic) int tickCount;
@property(nonatomic) int currentTick;
@property(nonatomic) int lastTick;
@property(nonatomic) BOOL muted;
@end
@implementation MPGuideViewController
@ -21,10 +29,34 @@
return UIInterfaceOrientationPortrait;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.tickCount = 30;
}
- (void)viewWillAppear:(BOOL)animated {
inf(@"Guide will appear.");
[super viewWillAppear:animated];
if (self.navigationController) {
// Via setup
[self.navigationController setNavigationBarHidden:YES animated:animated];
self.smallPlayButton.hidden = YES;
self.siteNameTip.alpha = 0;
self.content.alpha = 0;
self.content.frame = CGRectSetHeight( self.content.frame, 180 );
self.contentTip.alpha = 0;
self.usernameTip.alpha = 0;
self.typeTip.alpha = 0;
self.toolTip.alpha = 0;
}
else {
// Via segue
self.largePlayButton.hidden = YES;
}
}
- (void)viewDidAppear:(BOOL)animated {
@ -37,12 +69,139 @@
- (void)viewWillDisappear:(BOOL)animated {
inf(@"Guide will disappear.");
[self.navigationController setNavigationBarHidden:NO animated:animated];
[super viewWillDisappear:animated];
}
- (IBAction)play {
if (self.timer) {
// Pause
[self.timer invalidate];
self.timer = nil;
self.smallPlayButton.hidden = NO;
[self.smallPlayButton setImage:[UIImage imageNamed:@"icon_play"] forState:UIControlStateNormal];
}
else {
// Play
self.smallPlayButton.hidden = NO;
self.largePlayButton.hidden = YES;
[self.smallPlayButton setImage:[UIImage imageNamed:@"icon_pause"] forState:UIControlStateNormal];
self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(tick:)
userInfo:nil repeats:YES];
}
}
- (IBAction)close {
[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
}
- (IBAction)toggleVolume {
if ((self.muted = !self.muted))
[self.volumeButton setImage:[UIImage imageNamed:@"icon_volume-mute"] forState:UIControlStateNormal];
else
[self.volumeButton setImage:[UIImage imageNamed:@"icon_volume-high"] forState:UIControlStateNormal];
}
- (void)tick:(NSTimer *)timer {
self.lastTick = self.currentTick;
++self.currentTick;
[self.progress setProgress:(float)self.currentTick / self.tickCount animated:YES];
if (self.currentTick < 5) {
[UIView animateWithDuration:0.5 animations:^{
self.siteNameTip.alpha = 1;
self.content.alpha = 0;
self.content.frame = CGRectSetHeight( self.content.frame, 180 );
self.contentTip.alpha = 0;
self.usernameTip.alpha = 0;
self.typeTip.alpha = 0;
self.toolTip.alpha = 0;
}];
}
else if (self.currentTick < 10) {
[UIView animateWithDuration:0.5 animations:^{
self.siteNameTip.alpha = 0;
self.content.alpha = 1;
self.contentTip.alpha = 1;
self.usernameTip.alpha = 0;
self.typeTip.alpha = 0;
self.toolTip.alpha = 0;
}];
}
else if (self.currentTick < 15) {
[UIView animateWithDuration:0.5 animations:^{
self.siteNameTip.alpha = 0;
self.content.alpha = 1;
self.contentTip.alpha = 1;
self.contentButton.highlighted = YES;
self.contentTipText.text = @"Tap to copy";
self.usernameTip.alpha = 0;
self.typeTip.alpha = 0;
self.toolButton.highlighted = NO;
self.toolTip.alpha = 0;
}];
}
else if (self.currentTick < 20) {
[UIView animateWithDuration:0.5 animations:^{
self.siteNameTip.alpha = 0;
self.content.alpha = 1;
self.content.frame = CGRectSetHeight( self.content.frame, 231 );
self.contentTip.alpha = 0;
self.contentButton.highlighted = NO;
self.contentTipText.text = @"Use this password";
self.usernameButton.highlighted = YES;
self.usernameTip.alpha = 1;
self.typeTip.alpha = 0;
self.toolTip.alpha = 0;
}];
}
else if (self.currentTick < 25) {
[UIView animateWithDuration:0.5 animations:^{
self.siteNameTip.alpha = 0;
self.content.alpha = 1;
self.contentTip.alpha = 0;
self.usernameButton.highlighted = NO;
self.usernameTip.alpha = 0;
self.typeTip.alpha = 1;
self.typeButton.highlighted = YES;
self.toolTip.alpha = 0;
}];
}
else if (self.currentTick < 30) {
[UIView animateWithDuration:0.5 animations:^{
self.siteNameTip.alpha = 0;
self.content.alpha = 1;
self.contentTip.alpha = 0;
self.usernameTip.alpha = 0;
self.typeTip.alpha = 0;
self.typeButton.highlighted = NO;
self.toolButton.highlighted = YES;
self.toolTip.alpha = 1;
self.contentText.text = @"XupuMajf4'Hafh";
}];
}
else if (self.currentTick <= self.tickCount) {
[self.timer invalidate];
self.timer = nil;
self.currentTick = 0;
[UIView animateWithDuration:0.5 animations:^{
[self.smallPlayButton setImage:[UIImage imageNamed:@"icon_play"] forState:UIControlStateNormal];
self.siteNameTip.alpha = 1;
self.content.alpha = 1;
self.contentTip.alpha = 1;
self.usernameTip.alpha = 1;
self.typeTip.alpha = 1;
self.toolButton.highlighted = NO;
self.toolTip.alpha = 0;
}];
}
}
@end

View File

@ -590,34 +590,28 @@
// Update element, keeping track of the old password.
[self activeElementDo:^(MPElementEntity *activeElement) {
NSManagedObjectContext *moc = activeElement.managedObjectContext;
[moc performBlock:^{
// Perform the task.
NSString *oldPassword = [activeElement.content description];
if (!task( activeElement ))
return;
NSString *newPassword = [activeElement.content description];
// Perform the task.
NSString *oldPassword = [activeElement.content description];
if (!task(activeElement))
return;
NSString *newPassword = [activeElement.content description];
// Save.
[activeElement.managedObjectContext saveToStore];
// Save.
NSError *error;
if (![moc save:&error])
err(@"While saving changes to: %@, error: %@", activeElement.name, error);
// Update the UI.
dispatch_async( dispatch_get_main_queue(), ^{
[self updateAnimated:YES];
// Update the UI.
dispatch_async(dispatch_get_main_queue(), ^{
[self updateAnimated:YES];
// Show new and old password.
if ([oldPassword length] && ![oldPassword isEqualToString:newPassword])
[self showAlertWithTitle:@"Password Changed!"
message:PearlString(@"The password for %@ has changed.\n\n"
@"IMPORTANT:\n"
@"Don't forget to update the site with your new password! "
@"Your old password was:\n"
@"%@", activeElement.name, oldPassword)];
});
}];
// Show new and old password.
if ([oldPassword length] && ![oldPassword isEqualToString:newPassword])
[self showAlertWithTitle:@"Password Changed!"
message:PearlString( @"The password for %@ has changed.\n\n"
@"IMPORTANT:\n"
@"Don't forget to update the site with your new password! "
@"Your old password was:\n"
@"%@", activeElement.name, oldPassword )];
} );
}];
}

View File

@ -19,6 +19,9 @@
#import <Foundation/Foundation.h>
@interface MPSetupViewController : UIViewController
@property (weak, nonatomic) IBOutlet UISwitch *cloudSwitch;
- (IBAction)close:(UIBarButtonItem *)sender;
- (IBAction)showGuide:(UIBarButtonItem *)sender;
@end

View File

@ -18,9 +18,30 @@
#import "MPSetupViewController.h"
#import "MPAppDelegate.h"
#import "MPAppDelegate_Store.h"
@implementation MPSetupViewController
- (void)viewDidAppear:(BOOL)animated {
[[LocalyticsSession sharedLocalyticsSession] tagScreen:@"Setup"];
[super viewDidAppear:animated];
if (self.cloudSwitch && [[MPiOSConfig get].iCloudDecided boolValue])
self.cloudSwitch.on = [MPAppDelegate get].storeManager.cloudEnabled;
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if (self.cloudSwitch) {
[MPiOSConfig get].iCloudDecided = @YES;
[MPAppDelegate get].storeManager.cloudEnabled = self.cloudSwitch.on;
}
}
- (IBAction)close:(UIBarButtonItem *)sender {
[MPiOSConfig get].showSetup = @NO;

View File

@ -94,8 +94,8 @@
cellElement.user = selectedElement_.user;
cellElement.loginName = selectedElement_.loginName;
cellElement.version = MPAlgorithmDefaultVersion;
NSString *typeContent = [cellElement.algorithm generateContentForElement:cellElement usingKey:[MPAppDelegate get].key];
NSString *typeContent = [cellElement.algorithm generateContentForElement:cellElement usingKey:[MPAppDelegate get].key];
dispatch_async(dispatch_get_main_queue(), ^{
[(UITextField *) [[tableView cellForRowAtIndexPath:indexPath] viewWithTag:2] setText:typeContent];
});

View File

@ -319,7 +319,7 @@
- (void)showNewUserNameAlertFor:(MPUserEntity *)newUser inContext:(NSManagedObjectContext *)moc
completion:(void (^)(BOOL finished))completion {
dispatch_async(dispatch_get_main_queue(), ^{
PEARL_MAIN_THREAD_START
[PearlAlert showAlertWithTitle:@"Enter Your Name"
message:nil viewStyle:UIAlertViewStylePlainTextInput
initAlert:^(UIAlertView *alert, UITextField *firstField) {
@ -334,24 +334,23 @@
completion(NO);
return;
}
if (![alert textFieldAtIndex:0].text.length) {
NSString *name = [alert textFieldAtIndex:0].text;
if (!name.length) {
[PearlAlert showAlertWithTitle:@"Name Is Required" message:nil viewStyle:UIAlertViewStyleDefault initAlert:nil
tappedButtonBlock:^(UIAlertView *alert_, NSInteger buttonIndex_) {
[moc performBlock:^{
[self showNewUserNameAlertFor:newUser inContext:moc completion:completion];
}];
[self showNewUserNameAlertFor:newUser inContext:moc completion:completion];
} cancelTitle:@"Try Again" otherTitles:nil];
return;
}
// Save
[moc performBlock:^{
newUser.name = [alert textFieldAtIndex:0].text;
[self showNewUserAvatarAlertFor:newUser inContext:moc completion:completion];
[moc performBlockAndWait:^{
newUser.name = name;
}];
[self showNewUserAvatarAlertFor:newUser inContext:moc completion:completion];
}
cancelTitle:[PearlStrings get].commonButtonCancel otherTitles:[PearlStrings get].commonButtonSave, nil];
});
PEARL_MAIN_THREAD_END
}
- (void)showNewUserAvatarAlertFor:(MPUserEntity *)newUser inContext:(NSManagedObjectContext *)moc
@ -365,9 +364,7 @@
tappedButtonBlock:^(UIAlertView *_alert, NSInteger _buttonIndex) {
// Okay
[moc performBlock:^{
[self showNewUserConfirmationAlertFor:newUser inContext:moc completion:completion];
}];
[self showNewUserConfirmationAlertFor:newUser inContext:moc completion:completion];
} cancelTitle:nil otherTitles:[PearlStrings get].commonButtonOkay, nil];
}
@ -384,9 +381,7 @@
}
tappedButtonBlock:^void(UIAlertView *__alert, NSInteger __buttonIndex) {
if (__buttonIndex == [__alert cancelButtonIndex]) {
[moc performBlock:^{
[self showNewUserNameAlertFor:newUser inContext:moc completion:completion];
}];
[self showNewUserNameAlertFor:newUser inContext:moc completion:completion];
return;
}
@ -808,12 +803,10 @@
}
if (buttonIndex == [sheet firstOtherButtonIndex])
[moc performBlock:^{
[[MPAppDelegate get] changeMasterPasswordFor:targetedUser inContext:moc didResetBlock:^{
dispatch_async(dispatch_get_main_queue(), ^{
[[self avatarForUser:targetedUser] setSelected:YES];
});
}];
[[MPAppDelegate get] changeMasterPasswordFor:targetedUser inContext:moc didResetBlock:^{
dispatch_async(dispatch_get_main_queue(), ^{
[[self avatarForUser:targetedUser] setSelected:YES];
});
}];
} cancelTitle:[PearlStrings get].commonButtonCancel
destructiveTitle:@"Delete User" otherTitles:@"Reset Password", nil];

View File

@ -1536,7 +1536,7 @@ You could use the word wall for inspiration in finding a memorable master passw
</label>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="ToN-ll-G0q">
<rect key="frame" x="20" y="137" width="280" height="200"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<string key="text">Enabling iCloud will keep all your iPhones, iPads and Macs nicely in-sync. Any site you add on this device will automatically appear on all your others as well.
@ -1548,7 +1548,7 @@ If you set a custom password, it will be encrypted before it is saved to the clo
</textView>
<switch opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" id="M0m-G9-hH0">
<rect key="frame" x="122" y="345" width="79" height="27"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="onTintColor" red="0.37254901959999998" green="0.3921568627" blue="0.42745098040000001" alpha="1" colorSpace="calibratedRGB"/>
</switch>
</subviews>
@ -1561,6 +1561,9 @@ If you set a custom password, it will be encrypted before it is saved to the clo
</connections>
</barButtonItem>
</navigationItem>
<connections>
<outlet property="cloudSwitch" destination="M0m-G9-hH0" id="Egt-3w-3Zr"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Olv-0G-8Ul" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
@ -1669,7 +1672,7 @@ If you set a custom password, it will be encrypted before it is saved to the clo
<connections>
<segue destination="uu3-4d-bYN" kind="modal" identifier="MP_Setup" id="qw3-O5-NEa"/>
<segue destination="Nbn-Rv-sP1" kind="relationship" relationship="rootViewController" id="Gzv-dM-6bM"/>
<segue destination="myN-X7-9Tg" kind="modal" identifier="MP_Guide" id="swi-5o-hfK"/>
<segue destination="myN-X7-9Tg" kind="modal" identifier="MP_Guide" modalTransitionStyle="crossDissolve" id="swi-5o-hfK"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Lcz-JH-B5B" userLabel="First Responder" sceneMemberID="firstResponder"/>
@ -2084,7 +2087,7 @@ If you set a custom password, it will be encrypted before it is saved to the clo
</label>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" usesAttributedText="YES" id="hwP-ds-GDh">
<rect key="frame" x="20" y="137" width="280" height="347"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<attributedString key="attributedText">
<fragment>
@ -2186,163 +2189,108 @@ You can make passwords for all sorts of things, like email addresses, sites or r
<rect key="frame" x="0.0" y="44" width="320" height="504"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</imageView>
<view contentMode="scaleToFill" id="aRZ-vF-YZW" userLabel="View - Content">
<rect key="frame" x="0.0" y="87" width="320" height="225"/>
<view clipsSubviews="YES" contentMode="scaleToFill" id="vSk-nT-Vwf" userLabel="View - Display">
<rect key="frame" x="0.0" y="88" width="320" height="231"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<subviews>
<view clipsSubviews="YES" contentMode="scaleToFill" id="vSk-nT-Vwf" userLabel="View - Display">
<rect key="frame" x="0.0" y="20" width="320" height="137"/>
<imageView userInteractionEnabled="NO" alpha="0.80000001192092896" contentMode="scaleToFill" image="ui_panel_container.png" id="DnG-K7-jCr">
<rect key="frame" x="11" y="20" width="298" height="137"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<rect key="contentStretch" x="0.050000000000000003" y="0.10000000000000001" width="0.89999999999999991" height="0.79999999999999982"/>
</imageView>
<imageView userInteractionEnabled="NO" alpha="0.80000001192092896" contentMode="scaleToFill" image="ui_panel_display.png" id="XCE-7d-ffN">
<rect key="frame" x="11" y="20" width="298" height="86"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<rect key="contentStretch" x="0.050000000000000003" y="0.10000000000000001" width="0.89999999999999991" height="0.79999999999999982"/>
</imageView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="naw-bU-g1E" userLabel="Button - Copy">
<rect key="frame" x="11" y="20" width="298" height="86"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<accessibility key="accessibilityConfiguration" hint="Copies the password."/>
<fontDescription key="fontDescription" type="boldSystem" size="button"/>
<state key="normal">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
</button>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.5" contentMode="left" text="gmail.com" lineBreakMode="tailTruncation" minimumFontSize="10" id="vVA-b3-7Lo" userLabel="Label - Site Name">
<rect key="frame" x="25" y="20" width="270" height="26"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="">
<accessibilityTraits key="traits" none="YES" staticText="YES" summaryElement="YES"/>
</accessibility>
<fontDescription key="fontDescription" name="Copperplate" family="Copperplate" pointSize="12"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
<color key="shadowColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
<size key="shadowOffset" width="0.0" height="1"/>
</label>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="RateJija3$Tucm" textAlignment="center" minimumFontSize="17" clearButtonMode="whileEditing" id="G2i-wO-6x6" userLabel="Text Field - Content">
<rect key="frame" x="20" y="46" width="280" height="60"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" hint=""/>
<color key="textColor" red="0.47450980390000003" green="0.86666666670000003" blue="0.98431372549999996" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" name="AmericanTypewriter-Bold" family="American Typewriter" pointSize="30"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" returnKeyType="done"/>
</textField>
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="ZPR-Tx-as7" userLabel="Button - User">
<rect key="frame" x="266" y="18" width="44" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" hint="Upgrades the password."/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<inset key="contentEdgeInsets" minX="6" minY="6" maxX="6" maxY="6"/>
<state key="normal" image="icon_person.png">
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
</button>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.5" contentMode="left" text="1" textAlignment="right" lineBreakMode="tailTruncation" minimumFontSize="10" id="rDj-nH-rQR" userLabel="Label - Counter">
<rect key="frame" x="196" y="31" width="41" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" hint="Site's counter."/>
<fontDescription key="fontDescription" name="Copperplate-Bold" family="Copperplate" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
<color key="shadowColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
<size key="shadowOffset" width="0.0" height="1"/>
</label>
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="yxo-kW-iLM" userLabel="Button - Incrementer">
<rect key="frame" x="231" y="18" width="44" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" hint="Increments the site counter."/>
<gestureRecognizers/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<inset key="contentEdgeInsets" minX="6" minY="6" maxX="6" maxY="6"/>
<state key="normal" image="icon_plus.png">
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
</button>
<view contentMode="scaleToFill" id="60X-Nj-wqq" userLabel="View - User Name">
<rect key="frame" x="20" y="114" width="280" height="31"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" alpha="0.80000001192092896" contentMode="scaleToFill" image="ui_panel_container.png" id="DnG-K7-jCr">
<rect key="frame" x="11" y="0.0" width="298" height="137"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<rect key="contentStretch" x="0.050000000000000003" y="0.10000000000000001" width="0.89999999999999991" height="0.79999999999999982"/>
</imageView>
<imageView userInteractionEnabled="NO" alpha="0.80000001192092896" contentMode="scaleToFill" image="ui_panel_display.png" id="XCE-7d-ffN">
<rect key="frame" x="11" y="0.0" width="298" height="86"/>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="robert.mitchell@gmail.com" placeholder="Hold to set a login name." textAlignment="center" minimumFontSize="17" clearButtonMode="whileEditing" id="9jx-Ue-v7J">
<rect key="frame" x="0.0" y="0.0" width="280" height="31"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<rect key="contentStretch" x="0.050000000000000003" y="0.10000000000000001" width="0.89999999999999991" height="0.79999999999999982"/>
</imageView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="naw-bU-g1E" userLabel="Button - Copy">
<rect key="frame" x="11" y="0.0" width="298" height="86"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<accessibility key="accessibilityConfiguration" hint="Copies the password."/>
<fontDescription key="fontDescription" type="boldSystem" size="button"/>
<state key="normal">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="copyContent" destination="myN-X7-9Tg" eventType="touchUpInside" id="R5w-Yl-vQ2"/>
</connections>
</button>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.5" contentMode="left" text="apple.com" lineBreakMode="tailTruncation" minimumFontSize="10" id="vVA-b3-7Lo" userLabel="Label - Site Name">
<rect key="frame" x="25" y="0.0" width="270" height="26"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="">
<accessibilityTraits key="traits" none="YES" staticText="YES" summaryElement="YES"/>
</accessibility>
<fontDescription key="fontDescription" name="Copperplate" family="Copperplate" pointSize="12"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
<color key="shadowColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
<size key="shadowOffset" width="0.0" height="1"/>
</label>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="RateJija3$Tucm" textAlignment="center" minimumFontSize="17" clearButtonMode="whileEditing" id="G2i-wO-6x6" userLabel="Text Field - Content">
<rect key="frame" x="20" y="26" width="280" height="60"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" hint=""/>
<color key="textColor" red="0.47450980390000003" green="0.86666666670000003" blue="0.98431372549999996" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" name="AmericanTypewriter-Bold" family="American Typewriter" pointSize="30"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" returnKeyType="done"/>
<connections>
<outlet property="delegate" destination="myN-X7-9Tg" id="Skg-uS-Qnv"/>
</connections>
<fontDescription key="fontDescription" name="AmericanTypewriter-Light" family="American Typewriter" pointSize="14"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="emailAddress" returnKeyType="done"/>
</textField>
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="ZPR-Tx-as7" userLabel="Button - User">
<rect key="frame" x="266" y="-2" width="44" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" hint="Upgrades the password."/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<inset key="contentEdgeInsets" minX="6" minY="6" maxX="6" maxY="6"/>
<state key="normal" image="icon_person.png">
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="toggleUser" destination="myN-X7-9Tg" eventType="touchUpInside" id="4eb-0L-NHJ"/>
</connections>
</button>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.5" contentMode="left" text="1" textAlignment="right" lineBreakMode="tailTruncation" minimumFontSize="10" id="rDj-nH-rQR" userLabel="Label - Counter">
<rect key="frame" x="196" y="11" width="41" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" hint="Site's counter."/>
<fontDescription key="fontDescription" name="Copperplate-Bold" family="Copperplate" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
<color key="shadowColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
<size key="shadowOffset" width="0.0" height="1"/>
</label>
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="yxo-kW-iLM" userLabel="Button - Incrementer">
<rect key="frame" x="231" y="-2" width="44" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" hint="Increments the site counter."/>
<gestureRecognizers/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<inset key="contentEdgeInsets" minX="6" minY="6" maxX="6" maxY="6"/>
<state key="normal" image="icon_plus.png">
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="incrementPasswordCounter" destination="myN-X7-9Tg" eventType="touchUpInside" id="5Rm-nz-F7j"/>
</connections>
</button>
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="awz-TO-Bhd" userLabel="Button - Edit">
<rect key="frame" x="231" y="-2" width="44" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" hint="Edits the password."/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<inset key="contentEdgeInsets" minX="6" minY="6" maxX="6" maxY="6"/>
<state key="normal" image="icon_edit.png">
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="editPassword" destination="myN-X7-9Tg" eventType="touchUpInside" id="o16-F3-sId"/>
</connections>
</button>
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="CkS-2e-RXV" userLabel="Button - Upgrade">
<rect key="frame" x="231" y="-2" width="44" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" hint="Upgrades the password."/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<inset key="contentEdgeInsets" minX="6" minY="6" maxX="6" maxY="6"/>
<state key="normal" image="icon_up.png">
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="upgradePassword" destination="myN-X7-9Tg" eventType="touchUpInside" id="2R5-y6-hYc"/>
</connections>
</button>
<view contentMode="scaleToFill" id="60X-Nj-wqq" userLabel="View - User Name">
<rect key="frame" x="20" y="94" width="280" height="31"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<subviews>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="robert.mitchell@gmail.com" placeholder="Hold to set a login name." textAlignment="center" minimumFontSize="17" clearButtonMode="whileEditing" id="9jx-Ue-v7J">
<rect key="frame" x="0.0" y="0.0" width="280" height="31"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" name="AmericanTypewriter-Light" family="American Typewriter" pointSize="14"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="emailAddress" returnKeyType="done"/>
<connections>
<outlet property="delegate" destination="myN-X7-9Tg" id="Ekm-Up-Gjh"/>
</connections>
</textField>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" reversesTitleShadowWhenHighlighted="YES" lineBreakMode="middleTruncation" id="ebR-9P-XGe">
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" reversesTitleShadowWhenHighlighted="YES" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="ebR-9P-XGe">
<rect key="frame" x="10" y="165" width="300" height="46"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<accessibility key="accessibilityConfiguration" hint="Changes the password type."/>
@ -2358,6 +2306,14 @@ You can make passwords for all sorts of things, like email addresses, sites or r
</button>
</subviews>
</view>
<navigationBar contentMode="scaleToFill" id="CEU-ib-OHf">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<color key="tintColor" red="0.37254901959999998" green="0.3921568627" blue="0.42745098040000001" alpha="1" colorSpace="calibratedRGB"/>
<items>
<navigationItem title="Master Password" id="Kbd-LM-sCQ"/>
</items>
</navigationBar>
<searchBar contentMode="redraw" placeholder="Site name" showsBookmarkButton="YES" id="IJX-hq-SkG">
<rect key="frame" x="0.0" y="44" width="320" height="44"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
@ -2369,15 +2325,7 @@ You can make passwords for all sorts of things, like email addresses, sites or r
<string>Outdated</string>
</scopeButtonTitles>
</searchBar>
<navigationBar contentMode="scaleToFill" id="CEU-ib-OHf">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<color key="tintColor" red="0.37254901959999998" green="0.3921568627" blue="0.42745098040000001" alpha="1" colorSpace="calibratedRGB"/>
<items>
<navigationItem title="Master Password" id="Kbd-LM-sCQ"/>
</items>
</navigationBar>
<view alpha="0.50000000000000011" contentMode="scaleToFill" id="Ahl-o0-lMv">
<view alpha="0.60000000000000009" contentMode="scaleToFill" id="Ahl-o0-lMv">
<rect key="frame" x="0.0" y="0.0" width="320" height="548"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
@ -2399,7 +2347,7 @@ You can make passwords for all sorts of things, like email addresses, sites or r
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="UHf-cp-97W">
<rect key="frame" x="33" y="502" width="44" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
<accessibility key="accessibilityConfiguration" hint="" label="Close"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="icon_play.png">
@ -2410,28 +2358,61 @@ You can make passwords for all sorts of things, like email addresses, sites or r
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="closeAlert" destination="myN-X7-9Tg" eventType="touchUpInside" id="ogL-98-yIA"/>
<action selector="play" destination="myN-X7-9Tg" eventType="touchUpInside" id="2zM-lM-KYG"/>
</connections>
</button>
<progressView opaque="NO" contentMode="scaleToFill" progress="0.5" id="nf7-oM-7dh">
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="jDS-Vh-ETL">
<rect key="frame" x="124" y="234" width="72" height="80"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" hint="" label="Close"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="play.png">
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="play" destination="myN-X7-9Tg" eventType="touchUpInside" id="6vf-LF-jJt"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="nXW-Eq-JOa">
<rect key="frame" x="243" y="502" width="44" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
<accessibility key="accessibilityConfiguration" hint="" label="Close"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="icon_volume-high.png">
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="toggleVolume" destination="myN-X7-9Tg" eventType="touchUpInside" id="hHG-m2-dUF"/>
</connections>
</button>
<progressView opaque="NO" contentMode="scaleToFill" id="nf7-oM-7dh">
<rect key="frame" x="85" y="519" width="150" height="9"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
<color key="progressTintColor" red="0.37254901959999998" green="0.3921568627" blue="0.42745098040000001" alpha="1" colorSpace="calibratedRGB"/>
</progressView>
</subviews>
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
<color key="backgroundColor" cocoaTouchSystemColor="viewFlipsideBackgroundColor"/>
</view>
<view userInteractionEnabled="NO" alpha="0.0" contentMode="scaleToFill" id="X0C-Qf-SMn" userLabel="View - Content Tip">
<rect key="frame" x="55" y="110" width="210" height="60"/>
<view userInteractionEnabled="NO" alpha="0.0" contentMode="scaleToFill" id="nDU-uf-V0X" userLabel="View - Tool Tip">
<rect key="frame" x="10" y="59" width="266" height="60"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="tip_basic_black.png" id="tYf-3g-pcO">
<rect key="frame" x="0.0" y="0.0" width="210" height="60"/>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="tip_basic_black_bottom_right.png" id="Tmk-FU-w4D">
<rect key="frame" x="0.0" y="0.0" width="266" height="60"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<rect key="contentStretch" x="0.15000000000000002" y="0.15000000000000002" width="0.69999999999999973" height="0.69999999999999973"/>
</imageView>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Use this password" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" id="nGi-CK-Dng">
<rect key="frame" x="19" y="9" width="171" height="21"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Tap if you need a new password" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" id="V6L-v1-m1Z">
<rect key="frame" x="-20" y="9" width="306" height="21"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
@ -2451,7 +2432,43 @@ You can make passwords for all sorts of things, like email addresses, sites or r
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Name for your password" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" id="lgI-5O-kXT">
<rect key="frame" x="-20" y="26" width="340" height="21"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="14"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
<view userInteractionEnabled="NO" contentMode="scaleToFill" id="X0C-Qf-SMn" userLabel="View - Content Tip">
<rect key="frame" x="55" y="110" width="210" height="60"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="tip_basic_black.png" id="tYf-3g-pcO">
<rect key="frame" x="0.0" y="0.0" width="210" height="60"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</imageView>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Use this password" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" id="nGi-CK-Dng">
<rect key="frame" x="19" y="9" width="171" height="21"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
<view userInteractionEnabled="NO" contentMode="scaleToFill" id="w3j-Qm-9gD" userLabel="View - User Name Tip">
<rect key="frame" x="55" y="166" width="210" height="60"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="tip_basic_black.png" id="w4A-YL-1Tu">
<rect key="frame" x="0.0" y="0.0" width="210" height="60"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</imageView>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Save your username here" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" id="b87-Cf-2qK">
<rect key="frame" x="19" y="9" width="171" height="21"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
@ -2477,70 +2494,38 @@ You can make passwords for all sorts of things, like email addresses, sites or r
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
<view userInteractionEnabled="NO" alpha="0.0" contentMode="scaleToFill" id="w3j-Qm-9gD" userLabel="View - User Name Tip">
<rect key="frame" x="55" y="166" width="210" height="60"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="tip_basic_black.png" id="w4A-YL-1Tu">
<rect key="frame" x="0.0" y="0.0" width="210" height="60"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</imageView>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Save your username here" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" id="b87-Cf-2qK">
<rect key="frame" x="19" y="9" width="171" height="21"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
</subviews>
<color key="backgroundColor" red="0.14901960780000001" green="0.1647058824" blue="0.18039215689999999" alpha="1" colorSpace="calibratedRGB"/>
</view>
<navigationItem key="navigationItem" id="p1Y-gL-psy"/>
<nil key="simulatedTopBarMetrics"/>
<connections>
<outlet property="contentContainer" destination="aRZ-vF-YZW" id="hU4-iX-4qp"/>
<outlet property="contentField" destination="G2i-wO-6x6" id="JOb-yS-3me"/>
<outlet property="contentTipBody" destination="nGi-CK-Dng" id="UJR-VS-Cwc"/>
<outlet property="contentTipContainer" destination="X0C-Qf-SMn" id="VtW-fY-s6x"/>
<outlet property="displayContainer" destination="vSk-nT-Vwf" id="dJv-aQ-vF2"/>
<outlet property="loginNameContainer" destination="60X-Nj-wqq" id="NNt-fg-0hY"/>
<outlet property="loginNameField" destination="9jx-Ue-v7J" id="J7H-Q9-s5r"/>
<outlet property="loginNameTipBody" destination="b87-Cf-2qK" id="Vkf-p6-3St"/>
<outlet property="loginNameTipContainer" destination="w3j-Qm-9gD" id="UBZ-u1-7vo"/>
<outlet property="passwordCounter" destination="rDj-nH-rQR" id="iGu-2g-goP"/>
<outlet property="passwordEdit" destination="awz-TO-Bhd" id="9LZ-AX-GlZ"/>
<outlet property="passwordIncrementer" destination="yxo-kW-iLM" id="wJn-fv-fKJ"/>
<outlet property="passwordUpgrade" destination="CkS-2e-RXV" id="hnU-qy-nQM"/>
<outlet property="passwordUser" destination="ZPR-Tx-as7" id="94M-Dm-asP"/>
<outlet property="pullDownGesture" destination="O19-XO-q6s" id="ZGD-xB-1eV"/>
<outlet property="pullUpGesture" destination="D0R-Cc-rG7" id="CUh-gp-ckf"/>
<outlet property="searchDisplayController" destination="P8c-gf-nN3" id="pvr-3d-V2W"/>
<outlet property="searchTipContainer" destination="cUZ-lb-h7x" id="XbI-kk-Q9Y"/>
<outlet property="siteName" destination="vVA-b3-7Lo" id="2Nk-GO-E6h"/>
<outlet property="typeButton" destination="ebR-9P-XGe" id="WGb-FG-N68"/>
<outlet property="typeTipContainer" destination="Pub-jz-pkR" id="nMm-z3-PG6"/>
<outlet property="content" destination="vSk-nT-Vwf" id="Kgh-xj-8Z6"/>
<outlet property="contentButton" destination="naw-bU-g1E" id="g2B-hC-aHX"/>
<outlet property="contentText" destination="G2i-wO-6x6" id="u9H-xp-CR2"/>
<outlet property="contentTip" destination="X0C-Qf-SMn" id="nSQ-vg-6ni"/>
<outlet property="contentTipText" destination="nGi-CK-Dng" id="T7O-aC-li6"/>
<outlet property="largePlayButton" destination="jDS-Vh-ETL" id="LIU-jq-0Oo"/>
<outlet property="progress" destination="nf7-oM-7dh" id="dFy-br-0OQ"/>
<outlet property="siteNameTip" destination="cUZ-lb-h7x" id="3cq-3F-Cwd"/>
<outlet property="smallPlayButton" destination="UHf-cp-97W" id="K6U-Nf-F2p"/>
<outlet property="toolButton" destination="yxo-kW-iLM" id="yuh-5h-1Nj"/>
<outlet property="toolTip" destination="nDU-uf-V0X" id="qRq-tC-mdy"/>
<outlet property="typeButton" destination="ebR-9P-XGe" id="ofw-d1-knI"/>
<outlet property="typeTip" destination="Pub-jz-pkR" id="KAK-cu-b8O"/>
<outlet property="usernameButton" destination="ZPR-Tx-as7" id="Skc-7h-X9c"/>
<outlet property="usernameTip" destination="w3j-Qm-9gD" id="zg3-vy-aMx"/>
<outlet property="volumeButton" destination="nXW-Eq-JOa" id="Ok3-SU-csw"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="zsi-4A-If9" userLabel="First Responder" sceneMemberID="firstResponder"/>
<searchDisplayController id="OeZ-hn-lL1">
<connections>
<outlet property="searchBar" destination="IJX-hq-SkG" id="LF3-B0-RBY"/>
<outlet property="searchContentsController" destination="myN-X7-9Tg" id="Fjz-gh-JyH"/>
</connections>
</searchDisplayController>
<panGestureRecognizer minimumNumberOfTouches="1" id="kYj-Dc-rXL">
<connections>
<action selector="panHelpDown:" destination="myN-X7-9Tg" id="f8Z-CC-TtC"/>
</connections>
</panGestureRecognizer>
<panGestureRecognizer minimumNumberOfTouches="1" id="ayP-1f-n2G">
<connections>
<action selector="panHelpUp:" destination="myN-X7-9Tg" id="7X1-pX-SVx"/>
</connections>
</panGestureRecognizer>
<panGestureRecognizer minimumNumberOfTouches="1" id="kYj-Dc-rXL"/>
<panGestureRecognizer minimumNumberOfTouches="1" id="ayP-1f-n2G"/>
</objects>
<point key="canvasLocation" x="2078" y="1425"/>
</scene>
@ -2559,9 +2544,11 @@ You can make passwords for all sorts of things, like email addresses, sites or r
<image name="icon_play.png" width="32" height="32"/>
<image name="icon_plus.png" width="32" height="32"/>
<image name="icon_up.png" width="32" height="32"/>
<image name="icon_volume-high.png" width="32" height="32"/>
<image name="identity.png" width="82" height="80"/>
<image name="page-deblock.png" width="305" height="400"/>
<image name="page-gorillas.png" width="305" height="400"/>
<image name="play.png" width="72" height="80"/>
<image name="pull-down.png" width="60" height="10"/>
<image name="pull-up.png" width="60" height="20"/>
<image name="social-facebook.png" width="44" height="44"/>
@ -2620,6 +2607,24 @@ You can make passwords for all sorts of things, like email addresses, sites or r
<source key="sourceIdentifier" type="project" relativePath="./Classes/MPGuideViewController.h"/>
<relationships>
<relationship kind="action" name="close"/>
<relationship kind="action" name="play"/>
<relationship kind="action" name="toggleVolume"/>
<relationship kind="outlet" name="content" candidateClass="UIView"/>
<relationship kind="outlet" name="contentButton" candidateClass="UIButton"/>
<relationship kind="outlet" name="contentText" candidateClass="UITextField"/>
<relationship kind="outlet" name="contentTip" candidateClass="UIView"/>
<relationship kind="outlet" name="contentTipText" candidateClass="UILabel"/>
<relationship kind="outlet" name="largePlayButton" candidateClass="UIButton"/>
<relationship kind="outlet" name="progress" candidateClass="UIProgressView"/>
<relationship kind="outlet" name="siteNameTip" candidateClass="UIView"/>
<relationship kind="outlet" name="smallPlayButton" candidateClass="UIButton"/>
<relationship kind="outlet" name="toolButton" candidateClass="UIButton"/>
<relationship kind="outlet" name="toolTip" candidateClass="UIView"/>
<relationship kind="outlet" name="typeButton" candidateClass="UIButton"/>
<relationship kind="outlet" name="typeTip" candidateClass="UIView"/>
<relationship kind="outlet" name="usernameButton" candidateClass="UIButton"/>
<relationship kind="outlet" name="usernameTip" candidateClass="UIView"/>
<relationship kind="outlet" name="volumeButton" candidateClass="UIButton"/>
</relationships>
</class>
<class className="MPMainViewController" superclassName="UIViewController">
@ -2694,6 +2699,7 @@ You can make passwords for all sorts of things, like email addresses, sites or r
<relationships>
<relationship kind="action" name="close:" candidateClass="UIBarButtonItem"/>
<relationship kind="action" name="showGuide:" candidateClass="UIBarButtonItem"/>
<relationship kind="outlet" name="cloudSwitch" candidateClass="UISwitch"/>
</relationships>
</class>
<class className="MPTypeViewController" superclassName="UITableViewController">

View File

@ -36,6 +36,8 @@
DA497C0C15E8C95700B52167 /* libGoogle+.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA497B9715E8C90E00B52167 /* libGoogle+.a */; };
DA4DA1D91564471A00F6F596 /* libjrswizzle.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC6326C148680650075AEA5 /* libjrswizzle.a */; };
DA4DA1DA1564471F00F6F596 /* libuicolor-utilities.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC6325D1486805C0075AEA5 /* libuicolor-utilities.a */; };
DA5A09DF171A70E4005284AB /* play.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5A09DD171A70E4005284AB /* play.png */; };
DA5A09E0171A70E4005284AB /* play@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5A09DE171A70E4005284AB /* play@2x.png */; };
DA5BFA49147E415C00F98B1E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA48147E415C00F98B1E /* UIKit.framework */; };
DA5BFA4B147E415C00F98B1E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
DA5BFA4D147E415C00F98B1E /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4C147E415C00F98B1E /* CoreGraphics.framework */; };
@ -1032,6 +1034,8 @@
DA3EF17A15A47744003ABF4E /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; };
DA4425CB1557BED40052177D /* libUbiquityStoreManager.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libUbiquityStoreManager.a; sourceTree = BUILT_PRODUCTS_DIR; };
DA497B9715E8C90E00B52167 /* libGoogle+.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libGoogle+.a"; sourceTree = BUILT_PRODUCTS_DIR; };
DA5A09DD171A70E4005284AB /* play.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = play.png; sourceTree = "<group>"; };
DA5A09DE171A70E4005284AB /* play@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "play@2x.png"; sourceTree = "<group>"; };
DA5BFA44147E415C00F98B1E /* MasterPassword.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MasterPassword.app; sourceTree = BUILT_PRODUCTS_DIR; };
DA5BFA48147E415C00F98B1E /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
DA5BFA4A147E415C00F98B1E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
@ -2202,6 +2206,8 @@
DABD360D1711E29400CF925C /* Media */ = {
isa = PBXGroup;
children = (
DA5A09DD171A70E4005284AB /* play.png */,
DA5A09DE171A70E4005284AB /* play@2x.png */,
DABD360E1711E29400CF925C /* Automaton */,
DABD366B1711E29400CF925C /* Avatars */,
DABD36921711E29400CF925C /* Background */,
@ -4588,6 +4594,8 @@
DABD3FCB1712446200CF925C /* cloud@2x.png in Resources */,
DABD3FCE1714F45C00CF925C /* identity.png in Resources */,
DABD3FCF1714F45C00CF925C /* identity@2x.png in Resources */,
DA5A09DF171A70E4005284AB /* play.png in Resources */,
DA5A09E0171A70E4005284AB /* play@2x.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 19 KiB