WIP - new UI for Master Password.
This commit is contained in:
parent
060c9f91f3
commit
318aca4d8f
@ -9,6 +9,7 @@
|
||||
<inspection_tool class="OCNotLocalizedStringInspection" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="OCUnusedMacroInspection" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="OCUnusedMethodInspection" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="SignednessMismatch" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="UnavailableInDeploymentTarget" enabled="true" level="INFO" enabled_by_default="true" />
|
||||
<inspection_tool class="UnusedLocalVariable" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="UnusedParameter" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
|
2
External/Pearl
vendored
2
External/Pearl
vendored
@ -1 +1 @@
|
||||
Subproject commit 9e41cebeba085fce2bbae2592d52bbfd740f9ffb
|
||||
Subproject commit 575b409cca36eabfaacf0a963ed259454cb8ec66
|
@ -21,6 +21,12 @@
|
||||
DA16B344170661EE000A0EAB /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA16B343170661EE000A0EAB /* Cocoa.framework */; };
|
||||
DA16B345170661F2000A0EAB /* libPearl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC77CAD148291A600BCF976 /* libPearl.a */; };
|
||||
DA1E4D50176E0E280065E0EF /* Media.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DA1E4D4F176E0E280065E0EF /* Media.xcassets */; };
|
||||
DA2CA4ED18D323D3007798F8 /* NSError+PearlFullDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = DA2CA4E718D323D3007798F8 /* NSError+PearlFullDescription.m */; };
|
||||
DA2CA4EE18D323D3007798F8 /* NSError+PearlFullDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = DA2CA4E818D323D3007798F8 /* NSError+PearlFullDescription.h */; };
|
||||
DA2CA4EF18D323D3007798F8 /* NSArray+Pearl.m in Sources */ = {isa = PBXBuildFile; fileRef = DA2CA4E918D323D3007798F8 /* NSArray+Pearl.m */; };
|
||||
DA2CA4F018D323D3007798F8 /* NSArray+Pearl.h in Headers */ = {isa = PBXBuildFile; fileRef = DA2CA4EA18D323D3007798F8 /* NSArray+Pearl.h */; };
|
||||
DA2CA4F118D323D3007798F8 /* NSTimer+PearlBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = DA2CA4EB18D323D3007798F8 /* NSTimer+PearlBlock.m */; };
|
||||
DA2CA4F218D323D3007798F8 /* NSTimer+PearlBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = DA2CA4EC18D323D3007798F8 /* NSTimer+PearlBlock.h */; };
|
||||
DA30E9CE15722ECA00A68B4C /* NSBundle+PearlMutableInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DA30E9CB15722ECA00A68B4C /* NSBundle+PearlMutableInfo.h */; };
|
||||
DA30E9CF15722ECA00A68B4C /* NSBundle+PearlMutableInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DA30E9CC15722ECA00A68B4C /* NSBundle+PearlMutableInfo.m */; };
|
||||
DA30E9D015722ECA00A68B4C /* Pearl.m in Sources */ = {isa = PBXBuildFile; fileRef = DA30E9CD15722ECA00A68B4C /* Pearl.m */; };
|
||||
@ -308,6 +314,12 @@
|
||||
DA16B340170661DB000A0EAB /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
|
||||
DA16B343170661EE000A0EAB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
|
||||
DA1E4D4F176E0E280065E0EF /* Media.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Media.xcassets; path = MasterPassword/Media.xcassets; sourceTree = "<group>"; };
|
||||
DA2CA4E718D323D3007798F8 /* NSError+PearlFullDescription.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSError+PearlFullDescription.m"; sourceTree = "<group>"; };
|
||||
DA2CA4E818D323D3007798F8 /* NSError+PearlFullDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSError+PearlFullDescription.h"; sourceTree = "<group>"; };
|
||||
DA2CA4E918D323D3007798F8 /* NSArray+Pearl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+Pearl.m"; sourceTree = "<group>"; };
|
||||
DA2CA4EA18D323D3007798F8 /* NSArray+Pearl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+Pearl.h"; sourceTree = "<group>"; };
|
||||
DA2CA4EB18D323D3007798F8 /* NSTimer+PearlBlock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSTimer+PearlBlock.m"; sourceTree = "<group>"; };
|
||||
DA2CA4EC18D323D3007798F8 /* NSTimer+PearlBlock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSTimer+PearlBlock.h"; sourceTree = "<group>"; };
|
||||
DA30E9CB15722ECA00A68B4C /* NSBundle+PearlMutableInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSBundle+PearlMutableInfo.h"; sourceTree = "<group>"; };
|
||||
DA30E9CC15722ECA00A68B4C /* NSBundle+PearlMutableInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSBundle+PearlMutableInfo.m"; sourceTree = "<group>"; };
|
||||
DA30E9CD15722ECA00A68B4C /* Pearl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Pearl.m; sourceTree = "<group>"; };
|
||||
@ -1038,6 +1050,12 @@
|
||||
DAFE45D715039823003ABA7C /* Pearl */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
DA2CA4E718D323D3007798F8 /* NSError+PearlFullDescription.m */,
|
||||
DA2CA4E818D323D3007798F8 /* NSError+PearlFullDescription.h */,
|
||||
DA2CA4E918D323D3007798F8 /* NSArray+Pearl.m */,
|
||||
DA2CA4EA18D323D3007798F8 /* NSArray+Pearl.h */,
|
||||
DA2CA4EB18D323D3007798F8 /* NSTimer+PearlBlock.m */,
|
||||
DA2CA4EC18D323D3007798F8 /* NSTimer+PearlBlock.h */,
|
||||
DA3509FC15F101A500C14A8E /* PearlQueue.h */,
|
||||
DA3509FD15F101A500C14A8E /* PearlQueue.m */,
|
||||
93D393B97158D7BE9332EA53 /* NSDictionary+Indexing.h */,
|
||||
@ -1145,6 +1163,7 @@
|
||||
DAEB93FD18AB0FFD000490CC /* mdc2.h in Headers */,
|
||||
DAEB942718AB0FFD000490CC /* sha256.h in Headers */,
|
||||
DAEB940818AB0FFD000490CC /* pkcs7.h in Headers */,
|
||||
DA2CA4F218D323D3007798F8 /* NSTimer+PearlBlock.h in Headers */,
|
||||
DAEB93DF18AB0FFD000490CC /* bn.h in Headers */,
|
||||
DAEB940718AB0FFD000490CC /* pkcs12.h in Headers */,
|
||||
DAEB941A18AB0FFD000490CC /* txt_db.h in Headers */,
|
||||
@ -1172,6 +1191,7 @@
|
||||
DAFE4A2415039824003ABA7C /* PearlInfoPlist.h in Headers */,
|
||||
DAEB940618AB0FFD000490CC /* pem2.h in Headers */,
|
||||
DAFE4A2615039824003ABA7C /* PearlLogger.h in Headers */,
|
||||
DA2CA4F018D323D3007798F8 /* NSArray+Pearl.h in Headers */,
|
||||
DAEB93FC18AB0FFD000490CC /* md5.h in Headers */,
|
||||
DAFE4A2815039824003ABA7C /* PearlMathUtils.h in Headers */,
|
||||
DAFE4A2A15039824003ABA7C /* PearlObjectUtils.h in Headers */,
|
||||
@ -1242,6 +1262,7 @@
|
||||
DAEB93DB18AB0FFD000490CC /* asn1_mac.h in Headers */,
|
||||
DAEB940518AB0FFD000490CC /* pem.h in Headers */,
|
||||
DAEB942818AB0FFD000490CC /* sysendian.h in Headers */,
|
||||
DA2CA4EE18D323D3007798F8 /* NSError+PearlFullDescription.h in Headers */,
|
||||
DAEB93FF18AB0FFD000490CC /* obj_mac.h in Headers */,
|
||||
DAEB93E718AB0FFD000490CC /* crypto.h in Headers */,
|
||||
DAEB941318AB0FFD000490CC /* ssl2.h in Headers */,
|
||||
@ -1607,6 +1628,7 @@
|
||||
DAFE4A1415039824003ABA7C /* NSObject+PearlExport.m in Sources */,
|
||||
DAFE4A1615039824003ABA7C /* NSString+PearlNSArrayFormat.m in Sources */,
|
||||
DAFE4A1815039824003ABA7C /* NSString+PearlSEL.m in Sources */,
|
||||
DA2CA4ED18D323D3007798F8 /* NSError+PearlFullDescription.m in Sources */,
|
||||
DAFE4A1B15039824003ABA7C /* PearlAbstractStrings.m in Sources */,
|
||||
DAFE4A1F15039824003ABA7C /* PearlCodeUtils.m in Sources */,
|
||||
DAFE4A2115039824003ABA7C /* PearlConfig.m in Sources */,
|
||||
@ -1622,8 +1644,10 @@
|
||||
DAFE4A3915039824003ABA7C /* PearlRSAKey.m in Sources */,
|
||||
DAFE4A3B15039824003ABA7C /* PearlSCrypt.m in Sources */,
|
||||
DA30E9CF15722ECA00A68B4C /* NSBundle+PearlMutableInfo.m in Sources */,
|
||||
DA2CA4F118D323D3007798F8 /* NSTimer+PearlBlock.m in Sources */,
|
||||
DA30E9D015722ECA00A68B4C /* Pearl.m in Sources */,
|
||||
DA30E9D215722EE500A68B4C /* Pearl-Crypto.m in Sources */,
|
||||
DA2CA4EF18D323D3007798F8 /* NSArray+Pearl.m in Sources */,
|
||||
DA30E9D815723E6900A68B4C /* PearlLazy.m in Sources */,
|
||||
DAFE4A63150399FF003ABA86 /* NSObject+PearlKVO.m in Sources */,
|
||||
DAFE4A63150399FF003ABA92 /* NSDateFormatter+RFC3339.m in Sources */,
|
||||
|
40
MasterPassword/ObjC/iOS/MPAvatarCell.h
Normal file
40
MasterPassword/ObjC/iOS/MPAvatarCell.h
Normal file
@ -0,0 +1,40 @@
|
||||
/**
|
||||
* Copyright Maarten Billemont (http://www.lhunath.com, lhunath@lyndir.com)
|
||||
*
|
||||
* See the enclosed file LICENSE for license information (LGPLv3). If you did
|
||||
* not receive this file, see http://www.gnu.org/licenses/lgpl-3.0.txt
|
||||
*
|
||||
* @author Maarten Billemont <lhunath@lyndir.com>
|
||||
* @license http://www.gnu.org/licenses/lgpl-3.0.txt
|
||||
*/
|
||||
|
||||
//
|
||||
// MPAvatarCell.h
|
||||
// MPAvatarCell
|
||||
//
|
||||
// Created by lhunath on 2014-03-11.
|
||||
// Copyright, lhunath (Maarten Billemont) 2014. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "MPEntities.h"
|
||||
@class MPAvatarCell;
|
||||
|
||||
/* Avatar with a "+" symbol. */
|
||||
extern const long MPAvatarAdd;
|
||||
|
||||
typedef NS_ENUM(NSUInteger, MPAvatarMode) {
|
||||
MPAvatarModeLowered,
|
||||
MPAvatarModeRaisedButInactive,
|
||||
MPAvatarModeRaisedAndActive
|
||||
};
|
||||
|
||||
@interface MPAvatarCell : UICollectionViewCell
|
||||
@property (copy, nonatomic) NSString *name;
|
||||
@property (assign, nonatomic) long avatar;
|
||||
@property (assign, nonatomic) MPAvatarMode mode;
|
||||
@property (assign, nonatomic) float visibility;
|
||||
|
||||
+ (NSString *)reuseIdentifier;
|
||||
|
||||
@end
|
140
MasterPassword/ObjC/iOS/MPAvatarCell.m
Normal file
140
MasterPassword/ObjC/iOS/MPAvatarCell.m
Normal file
@ -0,0 +1,140 @@
|
||||
/**
|
||||
* Copyright Maarten Billemont (http://www.lhunath.com, lhunath@lyndir.com)
|
||||
*
|
||||
* See the enclosed file LICENSE for license information (LGPLv3). If you did
|
||||
* not receive this file, see http://www.gnu.org/licenses/lgpl-3.0.txt
|
||||
*
|
||||
* @author Maarten Billemont <lhunath@lyndir.com>
|
||||
* @license http://www.gnu.org/licenses/lgpl-3.0.txt
|
||||
*/
|
||||
|
||||
//
|
||||
// MPAvatarCell.h
|
||||
// MPAvatarCell
|
||||
//
|
||||
// Created by lhunath on 2014-03-11.
|
||||
// Copyright, lhunath (Maarten Billemont) 2014. All rights reserved.
|
||||
//
|
||||
|
||||
#import "MPAvatarCell.h"
|
||||
|
||||
const long MPAvatarAdd = 10000;
|
||||
|
||||
@interface MPAvatarCell()
|
||||
|
||||
@property(strong, nonatomic) IBOutlet UIImageView *avatarImageView;
|
||||
@property(strong, nonatomic) IBOutlet UILabel *nameLabel;
|
||||
@property(strong, nonatomic) IBOutlet UIView *nameContainer;
|
||||
@property(strong, nonatomic) IBOutlet NSLayoutConstraint *nameCenterConstraint;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MPAvatarCell {
|
||||
}
|
||||
|
||||
+ (NSString *)reuseIdentifier {
|
||||
|
||||
return @"MPAvatarCell";
|
||||
}
|
||||
|
||||
- (void)awakeFromNib {
|
||||
|
||||
[super awakeFromNib];
|
||||
|
||||
self.nameContainer.layer.cornerRadius = 5;
|
||||
|
||||
self.avatarImageView.hidden = NO;
|
||||
self.avatarImageView.layer.cornerRadius = self.avatarImageView.bounds.size.height / 2;
|
||||
self.avatarImageView.layer.shadowColor = [UIColor blackColor].CGColor;
|
||||
self.avatarImageView.layer.shadowOpacity = 1;
|
||||
self.avatarImageView.layer.shadowRadius = 15;
|
||||
self.avatarImageView.layer.masksToBounds = NO;
|
||||
self.avatarImageView.backgroundColor = [UIColor clearColor];
|
||||
|
||||
[self observeKeyPath:@"selected" withBlock:^(id from, id to, NSKeyValueChange cause, id _self) {
|
||||
[_self onSelectedOrHighlighted];
|
||||
}];
|
||||
[self observeKeyPath:@"highlighted" withBlock:^(id from, id to, NSKeyValueChange cause, id _self) {
|
||||
[_self onSelectedOrHighlighted];
|
||||
}];
|
||||
|
||||
self.visibility = 0;
|
||||
self.mode = MPAvatarModeLowered;
|
||||
}
|
||||
|
||||
- (void)onSelectedOrHighlighted {
|
||||
|
||||
self.avatarImageView.backgroundColor = self.selected || self.highlighted? self.avatarImageView.tintColor: [UIColor clearColor];
|
||||
}
|
||||
|
||||
- (void)setAvatar:(long)avatar {
|
||||
|
||||
_avatar = avatar;
|
||||
|
||||
if (avatar == MPAvatarAdd)
|
||||
self.avatarImageView.image = [UIImage imageNamed:@"avatar-add"];
|
||||
else
|
||||
self.avatarImageView.image = [UIImage imageNamed:strf( @"avatar-%ld", avatar )];
|
||||
}
|
||||
|
||||
- (NSString *)name {
|
||||
|
||||
return self.nameLabel.text;
|
||||
}
|
||||
|
||||
- (void)setName:(NSString *)name {
|
||||
|
||||
self.nameLabel.text = name;
|
||||
}
|
||||
|
||||
- (void)setVisibility:(float)visibility {
|
||||
|
||||
_visibility = visibility;
|
||||
|
||||
self.nameContainer.alpha = visibility;
|
||||
}
|
||||
|
||||
- (void)setHighlighted:(BOOL)highlighted {
|
||||
|
||||
super.highlighted = highlighted;
|
||||
|
||||
[UIView animateWithDuration:0.1f animations:^{
|
||||
self.avatarImageView.transform = highlighted? CGAffineTransformMakeScale( 1.1f, 1.1f ): CGAffineTransformIdentity;
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)setMode:(MPAvatarMode)mode {
|
||||
|
||||
_mode = mode;
|
||||
|
||||
[UIView animateWithDuration:0.2f animations:^{
|
||||
self.avatarImageView.transform = CGAffineTransformIdentity;
|
||||
}];
|
||||
[UIView animateWithDuration:0.3f animations:^{
|
||||
switch (mode) {
|
||||
|
||||
case MPAvatarModeLowered: {
|
||||
self.nameCenterConstraint.priority = UILayoutPriorityDefaultLow;
|
||||
self.nameContainer.backgroundColor = [UIColor clearColor];
|
||||
self.avatarImageView.alpha = 1;
|
||||
break;
|
||||
}
|
||||
case MPAvatarModeRaisedButInactive: {
|
||||
self.nameCenterConstraint.priority = UILayoutPriorityDefaultLow;
|
||||
self.nameContainer.backgroundColor = [UIColor clearColor];
|
||||
self.avatarImageView.alpha = 0.3f;
|
||||
break;
|
||||
}
|
||||
case MPAvatarModeRaisedAndActive: {
|
||||
self.nameCenterConstraint.priority = UILayoutPriorityDefaultHigh;
|
||||
self.nameContainer.backgroundColor = [UIColor blackColor];
|
||||
self.avatarImageView.alpha = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
[self.nameCenterConstraint apply];
|
||||
}];
|
||||
}
|
||||
|
||||
@end
|
49
MasterPassword/ObjC/iOS/MPCombinedViewController.h
Normal file
49
MasterPassword/ObjC/iOS/MPCombinedViewController.h
Normal file
@ -0,0 +1,49 @@
|
||||
/**
|
||||
* Copyright Maarten Billemont (http://www.lhunath.com, lhunath@lyndir.com)
|
||||
*
|
||||
* See the enclosed file LICENSE for license information (LGPLv3). If you did
|
||||
* not receive this file, see http://www.gnu.org/licenses/lgpl-3.0.txt
|
||||
*
|
||||
* @author Maarten Billemont <lhunath@lyndir.com>
|
||||
* @license http://www.gnu.org/licenses/lgpl-3.0.txt
|
||||
*/
|
||||
|
||||
//
|
||||
// MPCombinedViewController.h
|
||||
// MPCombinedViewController
|
||||
//
|
||||
// Created by lhunath on 2014-03-08.
|
||||
// Copyright, lhunath (Maarten Billemont) 2014. All rights reserved.
|
||||
//
|
||||
|
||||
#import "LLGitTip.h"
|
||||
|
||||
typedef NS_ENUM(NSUInteger, MPCombinedMode) {
|
||||
MPCombinedModeUserSelection,
|
||||
MPCombinedModePasswordSelection,
|
||||
};
|
||||
|
||||
@interface MPCombinedViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegate, UITextFieldDelegate>
|
||||
|
||||
@property(assign, nonatomic) MPCombinedMode mode;
|
||||
|
||||
#pragma mark - UserSelection
|
||||
|
||||
@property(strong, nonatomic) IBOutlet UIView *userSelectionContainer;
|
||||
@property(weak, nonatomic) IBOutlet UILabel *hintLabel;
|
||||
@property(weak, nonatomic) IBOutlet UIView *gitTipTip;
|
||||
@property(weak, nonatomic) IBOutlet LLGitTip *gitTipButton;
|
||||
@property(weak, nonatomic) IBOutlet UITextField *entryField;
|
||||
@property(weak, nonatomic) IBOutlet UILabel *entryLabel;
|
||||
@property(weak, nonatomic) IBOutlet UIView *entryContainer;
|
||||
@property(weak, nonatomic) IBOutlet UICollectionView *avatarCollectionView;
|
||||
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *avatarCollectionCenterConstraint;
|
||||
|
||||
#pragma mark - PasswordSelection
|
||||
|
||||
@property(strong, nonatomic) IBOutlet UIView *passwordSelectionContainer;
|
||||
@property(strong, nonatomic) IBOutlet UICollectionView *passwordCollectionView;
|
||||
|
||||
- (IBAction)doSignOut:(UIBarButtonItem *)sender;
|
||||
|
||||
@end
|
661
MasterPassword/ObjC/iOS/MPCombinedViewController.m
Normal file
661
MasterPassword/ObjC/iOS/MPCombinedViewController.m
Normal file
@ -0,0 +1,661 @@
|
||||
/**
|
||||
* Copyright Maarten Billemont (http://www.lhunath.com, lhunath@lyndir.com)
|
||||
*
|
||||
* See the enclosed file LICENSE for license information (LGPLv3). If you did
|
||||
* not receive this file, see http://www.gnu.org/licenses/lgpl-3.0.txt
|
||||
*
|
||||
* @author Maarten Billemont <lhunath@lyndir.com>
|
||||
* @license http://www.gnu.org/licenses/lgpl-3.0.txt
|
||||
*/
|
||||
|
||||
//
|
||||
// MPCombinedViewController.h
|
||||
// MPCombinedViewController
|
||||
//
|
||||
// Created by lhunath on 2014-03-08.
|
||||
// Copyright, lhunath (Maarten Billemont) 2014. All rights reserved.
|
||||
//
|
||||
|
||||
#import "MPCombinedViewController.h"
|
||||
#import "MPEntities.h"
|
||||
#import "MPAvatarCell.h"
|
||||
#import "MPiOSAppDelegate.h"
|
||||
#import "MPAppDelegate_Store.h"
|
||||
#import "MPAppDelegate_Key.h"
|
||||
|
||||
typedef NS_ENUM(NSUInteger, MPActiveUserState) {
|
||||
MPActiveUserStateNone,
|
||||
MPActiveUserStateLogin,
|
||||
MPActiveUserStateUserName,
|
||||
MPActiveUserStateMasterPasswordChoice,
|
||||
MPActiveUserStateMasterPasswordConfirmation,
|
||||
};
|
||||
|
||||
@interface MPCombinedViewController()
|
||||
|
||||
@property(nonatomic) MPActiveUserState activeUserState;
|
||||
@property(nonatomic, strong) NSArray *userIDs;
|
||||
@end
|
||||
|
||||
@implementation MPCombinedViewController {
|
||||
__weak id _storeObserver;
|
||||
__weak id _mocObserver;
|
||||
NSArray *_notificationObservers;
|
||||
NSString *_masterPasswordChoice;
|
||||
}
|
||||
|
||||
- (void)viewDidLoad {
|
||||
|
||||
[super viewDidLoad];
|
||||
|
||||
self.avatarCollectionView.allowsMultipleSelection = YES;
|
||||
|
||||
[self observeKeyPath:@"avatarCollectionView.contentOffset" withBlock:
|
||||
^(id from, id to, NSKeyValueChange cause, MPCombinedViewController *_self) {
|
||||
[_self updateAvatars];
|
||||
}];
|
||||
|
||||
self.mode = MPCombinedModeUserSelection;
|
||||
}
|
||||
|
||||
- (void)viewDidAppear:(BOOL)animated {
|
||||
|
||||
[super viewDidAppear:animated];
|
||||
|
||||
[self registerObservers];
|
||||
[self updateMode];
|
||||
}
|
||||
|
||||
- (void)viewWillDisappear:(BOOL)animated {
|
||||
|
||||
[super viewWillDisappear:animated];
|
||||
|
||||
[self removeObservers];
|
||||
[self needStoreObserved:NO];
|
||||
}
|
||||
|
||||
#pragma mark - UITextFieldDelegate
|
||||
|
||||
- (void)textFieldDidEndEditing:(UITextField *)textField {
|
||||
}
|
||||
|
||||
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
|
||||
|
||||
if (textField == self.entryField) {
|
||||
switch (self.activeUserState) {
|
||||
case MPActiveUserStateNone: {
|
||||
[textField resignFirstResponder];
|
||||
break;
|
||||
}
|
||||
case MPActiveUserStateLogin: {
|
||||
[MPiOSAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
|
||||
BOOL signedIn = NO, isNew = NO;
|
||||
MPUserEntity *user = [self selectedUserInContext:context isNew:&isNew];
|
||||
if (!isNew && user)
|
||||
signedIn = [[MPiOSAppDelegate get] signInAsUser:user saveInContext:context
|
||||
usingMasterPassword:self.entryField.text];
|
||||
|
||||
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
|
||||
if (!signedIn) {
|
||||
// Sign in failed.
|
||||
// TODO: warn user
|
||||
return;
|
||||
}
|
||||
}];
|
||||
}];
|
||||
break;
|
||||
}
|
||||
case MPActiveUserStateUserName: {
|
||||
NSString *userName = self.entryField.text;
|
||||
if (![userName length]) {
|
||||
// No name entered.
|
||||
// TODO: warn user
|
||||
return NO;
|
||||
}
|
||||
|
||||
[self selectedAvatar].name = userName;
|
||||
self.activeUserState = MPActiveUserStateMasterPasswordChoice;
|
||||
break;
|
||||
}
|
||||
case MPActiveUserStateMasterPasswordChoice: {
|
||||
NSString *masterPassword = self.entryField.text;
|
||||
if (![masterPassword length]) {
|
||||
// No password entered.
|
||||
// TODO: warn user
|
||||
return NO;
|
||||
}
|
||||
|
||||
self.activeUserState = MPActiveUserStateMasterPasswordConfirmation;
|
||||
break;
|
||||
}
|
||||
case MPActiveUserStateMasterPasswordConfirmation: {
|
||||
NSString *masterPassword = self.entryField.text;
|
||||
if (![masterPassword length]) {
|
||||
// No password entered.
|
||||
// TODO: warn user
|
||||
return NO;
|
||||
}
|
||||
|
||||
if (![masterPassword isEqualToString:_masterPasswordChoice]) {
|
||||
// Master password confirmation failed.
|
||||
// TODO: warn user
|
||||
self.activeUserState = MPActiveUserStateMasterPasswordChoice;
|
||||
return NO;
|
||||
}
|
||||
|
||||
[MPiOSAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
|
||||
BOOL isNew = NO;
|
||||
MPUserEntity *user = [self selectedUserInContext:context isNew:&isNew];
|
||||
if (isNew) {
|
||||
user = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass( [MPUserEntity class] )
|
||||
inManagedObjectContext:context];
|
||||
MPAvatarCell *avatarCell = [self selectedAvatar];
|
||||
user.avatar = avatarCell.avatar;
|
||||
user.name = avatarCell.name;
|
||||
}
|
||||
|
||||
BOOL signedIn = [[MPiOSAppDelegate get] signInAsUser:user saveInContext:context usingMasterPassword:masterPassword];
|
||||
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
|
||||
if (!signedIn) {
|
||||
// Sign in failed, shouldn't happen for a new user.
|
||||
// TODO: warn user
|
||||
self.activeUserState = MPActiveUserStateNone;
|
||||
return;
|
||||
}
|
||||
}];
|
||||
}];
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
// This isn't really in UITextFieldDelegate. We fake it from UITextFieldTextDidChangeNotification.
|
||||
- (void)textFieldDidChange:(UITextField *)textField {
|
||||
|
||||
if (textField == self.entryField) {
|
||||
switch (self.activeUserState) {
|
||||
case MPActiveUserStateNone:
|
||||
break;
|
||||
case MPActiveUserStateLogin:
|
||||
break;
|
||||
case MPActiveUserStateUserName: {
|
||||
NSString *userName = self.entryField.text;
|
||||
[self selectedAvatar].name = [userName length]? userName: strl( @"New User" );
|
||||
break;
|
||||
}
|
||||
case MPActiveUserStateMasterPasswordChoice:
|
||||
break;
|
||||
case MPActiveUserStateMasterPasswordConfirmation:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - UICollectionViewDataSource
|
||||
|
||||
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
|
||||
|
||||
if (collectionView == self.avatarCollectionView)
|
||||
return [self.userIDs count] + 1;
|
||||
|
||||
else if (collectionView == self.passwordCollectionView)
|
||||
return 0;
|
||||
|
||||
Throw(@"unexpected collection view: %@", collectionView);
|
||||
}
|
||||
|
||||
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
|
||||
|
||||
if (collectionView == self.avatarCollectionView) {
|
||||
MPAvatarCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:[MPAvatarCell reuseIdentifier] forIndexPath:indexPath];
|
||||
[cell addGestureRecognizer:[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(didLongPress:)]];
|
||||
[self updateAvatar:cell atIndexPath:indexPath];
|
||||
|
||||
BOOL isNew = NO;
|
||||
MPUserEntity *user = [self userForIndexPath:indexPath inContext:[MPiOSAppDelegate managedObjectContextForMainThreadIfReady]
|
||||
isNew:&isNew];
|
||||
if (isNew) {
|
||||
// New User
|
||||
cell.avatar = MPAvatarAdd;
|
||||
cell.name = strl( @"New User" );
|
||||
}
|
||||
else {
|
||||
// Existing User
|
||||
cell.avatar = user.avatar;
|
||||
cell.name = user.name;
|
||||
}
|
||||
|
||||
NSArray *selectedIndexPaths = [self.avatarCollectionView indexPathsForSelectedItems];
|
||||
if (![selectedIndexPaths count])
|
||||
cell.mode = MPAvatarModeLowered;
|
||||
else if ([selectedIndexPaths containsObject:indexPath])
|
||||
cell.mode = MPAvatarModeRaisedAndActive;
|
||||
else
|
||||
cell.mode = MPAvatarModeRaisedButInactive;
|
||||
|
||||
return cell;
|
||||
}
|
||||
|
||||
else if (collectionView == self.passwordCollectionView)
|
||||
return nil;
|
||||
|
||||
Throw(@"unexpected collection view: %@", collectionView);
|
||||
}
|
||||
|
||||
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
|
||||
|
||||
if (collectionView == self.avatarCollectionView) {
|
||||
[self.avatarCollectionView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally
|
||||
animated:YES];
|
||||
|
||||
[UIView animateWithDuration:0.3f animations:^{
|
||||
for (NSUInteger otherItem = 0; otherItem < [collectionView numberOfItemsInSection:indexPath.section]; ++otherItem)
|
||||
if (otherItem != indexPath.item) {
|
||||
NSIndexPath *otherIndexPath = [NSIndexPath indexPathForItem:otherItem inSection:indexPath.section];
|
||||
[collectionView deselectItemAtIndexPath:otherIndexPath animated:YES];
|
||||
|
||||
MPAvatarCell *otherCell = (MPAvatarCell *)[self.avatarCollectionView cellForItemAtIndexPath:otherIndexPath];
|
||||
otherCell.mode = MPAvatarModeRaisedButInactive;
|
||||
}
|
||||
|
||||
MPAvatarCell *cell = (MPAvatarCell *)[self.avatarCollectionView cellForItemAtIndexPath:indexPath];
|
||||
cell.mode = MPAvatarModeRaisedAndActive;
|
||||
}];
|
||||
|
||||
BOOL isNew = NO;
|
||||
MPUserEntity *user = [self userForIndexPath:indexPath inContext:[MPiOSAppDelegate managedObjectContextForMainThreadIfReady]
|
||||
isNew:&isNew];
|
||||
if (isNew)
|
||||
self.activeUserState = MPActiveUserStateUserName;
|
||||
else if (!user.keyID)
|
||||
self.activeUserState = MPActiveUserStateMasterPasswordChoice;
|
||||
else
|
||||
self.activeUserState = MPActiveUserStateLogin;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath {
|
||||
|
||||
if (collectionView == self.avatarCollectionView) {
|
||||
self.activeUserState = MPActiveUserStateNone;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - UILongPressGestureRecognizer
|
||||
|
||||
- (void)didLongPress:(UILongPressGestureRecognizer *)recognizer {
|
||||
|
||||
if ([recognizer.view isKindOfClass:[MPAvatarCell class]]) {
|
||||
if (recognizer.state != UIGestureRecognizerStateBegan)
|
||||
// Don't show the action menu unless the state is Began.
|
||||
return;
|
||||
|
||||
MPAvatarCell *avatarCell = (MPAvatarCell *)recognizer.view;
|
||||
NSManagedObjectContext *mainContext = [MPiOSAppDelegate managedObjectContextForMainThreadIfReady];
|
||||
|
||||
BOOL isNew = NO;
|
||||
MPUserEntity *user = [self userForAvatar:avatarCell inContext:mainContext isNew:&isNew];
|
||||
NSManagedObjectID *userID = user.objectID;
|
||||
if (isNew || !user)
|
||||
return;
|
||||
|
||||
[PearlSheet showSheetWithTitle:user.name
|
||||
viewStyle:UIActionSheetStyleBlackTranslucent
|
||||
initSheet:nil tappedButtonBlock:^(UIActionSheet *sheet, NSInteger buttonIndex) {
|
||||
if (buttonIndex == [sheet cancelButtonIndex])
|
||||
return;
|
||||
|
||||
if (buttonIndex == [sheet destructiveButtonIndex]) {
|
||||
// Delete User
|
||||
[MPiOSAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
|
||||
NSManagedObject *user_ = [context existingObjectWithID:userID error:NULL];
|
||||
if (user_) {
|
||||
[context deleteObject:user_];
|
||||
[context saveToStore];
|
||||
}
|
||||
}];
|
||||
return;
|
||||
}
|
||||
|
||||
if (buttonIndex == [sheet firstOtherButtonIndex])
|
||||
// Reset Password
|
||||
[MPiOSAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
|
||||
MPUserEntity *user_ = (MPUserEntity *)[context existingObjectWithID:userID error:NULL];
|
||||
if (user_)
|
||||
[[MPiOSAppDelegate get] changeMasterPasswordFor:user_ saveInContext:context didResetBlock:^{
|
||||
dbg(@"changing mp for user: %@, keyID: %@", user_.name, user_.keyID);
|
||||
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
|
||||
NSIndexPath *avatarIndexPath = [self.avatarCollectionView indexPathForCell:avatarCell];
|
||||
[self.avatarCollectionView selectItemAtIndexPath:avatarIndexPath animated:NO
|
||||
scrollPosition:UICollectionViewScrollPositionNone];
|
||||
[self collectionView:self.avatarCollectionView didSelectItemAtIndexPath:avatarIndexPath];
|
||||
}];
|
||||
}];
|
||||
}];
|
||||
} cancelTitle:[PearlStrings get].commonButtonCancel
|
||||
destructiveTitle:@"Delete User" otherTitles:@"Reset Password", nil];
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - UIScrollViewDelegate
|
||||
|
||||
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity
|
||||
targetContentOffset:(inout CGPoint *)targetContentOffset {
|
||||
|
||||
if (scrollView == self.avatarCollectionView) {
|
||||
CGPoint offsetToCenter = CGPointMake(
|
||||
self.avatarCollectionView.bounds.size.width / 2,
|
||||
self.avatarCollectionView.bounds.size.height / 2 );
|
||||
NSIndexPath *avatarIndexPath = [self.avatarCollectionView indexPathForItemAtPoint:
|
||||
CGPointPlusCGPoint( *targetContentOffset, offsetToCenter )];
|
||||
CGPoint targetCenter = [self.avatarCollectionView layoutAttributesForItemAtIndexPath:avatarIndexPath].center;
|
||||
*targetContentOffset = CGPointMinusCGPoint( targetCenter, offsetToCenter );
|
||||
NSAssert([self.avatarCollectionView indexPathForItemAtPoint:targetCenter].item == avatarIndexPath.item, @"should be same item");
|
||||
}
|
||||
}
|
||||
|
||||
- (MPAvatarCell *)selectedAvatar {
|
||||
|
||||
NSArray *selectedIndexPaths = self.avatarCollectionView.indexPathsForSelectedItems;
|
||||
if (![selectedIndexPaths count]) {
|
||||
// No selected user.
|
||||
return nil;
|
||||
}
|
||||
|
||||
return (MPAvatarCell *)[self.avatarCollectionView cellForItemAtIndexPath:selectedIndexPaths.firstObject];
|
||||
}
|
||||
|
||||
- (MPUserEntity *)selectedUserInContext:(NSManagedObjectContext *)context isNew:(BOOL *)isNew {
|
||||
|
||||
MPAvatarCell *selectedAvatar = [self selectedAvatar];
|
||||
if (!selectedAvatar) {
|
||||
// No selected user.
|
||||
*isNew = NO;
|
||||
return nil;
|
||||
}
|
||||
|
||||
return [self userForAvatar:selectedAvatar inContext:context isNew:isNew];
|
||||
}
|
||||
|
||||
- (MPUserEntity *)userForAvatar:(MPAvatarCell *)cell inContext:(NSManagedObjectContext *)context isNew:(BOOL *)isNew {
|
||||
|
||||
return [self userForIndexPath:[self.avatarCollectionView indexPathForCell:cell] inContext:context isNew:isNew];
|
||||
}
|
||||
|
||||
- (MPUserEntity *)userForIndexPath:(NSIndexPath *)indexPath inContext:(NSManagedObjectContext *)context isNew:(BOOL *)isNew {
|
||||
|
||||
if ((*isNew = indexPath.item >= [self.userIDs count]))
|
||||
return nil;
|
||||
|
||||
NSError *error = nil;
|
||||
MPUserEntity *user = (MPUserEntity *)[context existingObjectWithID:self.userIDs[indexPath.item] error:&error];
|
||||
if (error)
|
||||
wrn(@"Failed to load user into context: %@", error);
|
||||
|
||||
return user;
|
||||
}
|
||||
|
||||
- (void)updateAvatars {
|
||||
|
||||
for (NSIndexPath *indexPath in self.avatarCollectionView.indexPathsForVisibleItems)
|
||||
[self updateAvatarAtIndexPath:indexPath];
|
||||
}
|
||||
|
||||
- (void)updateAvatarAtIndexPath:(NSIndexPath *)indexPath {
|
||||
|
||||
MPAvatarCell *cell = (MPAvatarCell *)[self.avatarCollectionView cellForItemAtIndexPath:indexPath];
|
||||
[self updateAvatar:cell atIndexPath:indexPath];
|
||||
}
|
||||
|
||||
- (void)updateAvatar:(MPAvatarCell *)cell atIndexPath:(NSIndexPath *)indexPath {
|
||||
|
||||
CGFloat current = [self.avatarCollectionView layoutAttributesForItemAtIndexPath:indexPath].center.x -
|
||||
self.avatarCollectionView.contentOffset.x;
|
||||
CGFloat max = self.avatarCollectionView.bounds.size.width;
|
||||
cell.visibility = MAX(0, MIN( 1, 1 - ABS( current / (max / 2) - 1 ) ));
|
||||
}
|
||||
|
||||
- (void)registerObservers {
|
||||
|
||||
if ([_notificationObservers count])
|
||||
return;
|
||||
|
||||
Weakify(self);
|
||||
_notificationObservers = @[
|
||||
[[NSNotificationCenter defaultCenter]
|
||||
addObserverForName:UIApplicationWillResignActiveNotification object:nil
|
||||
queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
|
||||
Strongify(self);
|
||||
|
||||
// [self emergencyCloseAnimated:NO];
|
||||
self.userSelectionContainer.alpha = 0;
|
||||
self.passwordSelectionContainer.alpha = 0;
|
||||
}],
|
||||
[[NSNotificationCenter defaultCenter]
|
||||
addObserverForName:UIApplicationDidBecomeActiveNotification object:nil
|
||||
queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
|
||||
Strongify(self);
|
||||
|
||||
[self updateMode];
|
||||
[UIView animateWithDuration:1 animations:^{
|
||||
self.userSelectionContainer.alpha = 1;
|
||||
self.passwordSelectionContainer.alpha = 1;
|
||||
}];
|
||||
}],
|
||||
[[NSNotificationCenter defaultCenter]
|
||||
addObserverForName:MPSignedInNotification object:nil
|
||||
queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
|
||||
Strongify(self);
|
||||
|
||||
self.mode = MPCombinedModePasswordSelection;
|
||||
}],
|
||||
[[NSNotificationCenter defaultCenter]
|
||||
addObserverForName:MPSignedOutNotification object:nil
|
||||
queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
|
||||
Strongify(self);
|
||||
|
||||
self.mode = MPCombinedModeUserSelection;
|
||||
}],
|
||||
[[NSNotificationCenter defaultCenter]
|
||||
addObserverForName:UITextFieldTextDidChangeNotification object:self.entryField
|
||||
queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
|
||||
Strongify(self);
|
||||
|
||||
[self textFieldDidChange:note.object];
|
||||
}],
|
||||
];
|
||||
}
|
||||
|
||||
- (void)removeObservers {
|
||||
|
||||
for (id observer in _notificationObservers)
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:observer];
|
||||
_notificationObservers = nil;
|
||||
}
|
||||
|
||||
- (void)needStoreObserved:(BOOL)observeStore {
|
||||
|
||||
if (observeStore) {
|
||||
Weakify(self);
|
||||
|
||||
NSManagedObjectContext *mainContext = [MPiOSAppDelegate managedObjectContextForMainThreadIfReady];
|
||||
if (!_mocObserver && mainContext)
|
||||
_mocObserver = [[NSNotificationCenter defaultCenter]
|
||||
addObserverForName:NSManagedObjectContextObjectsDidChangeNotification object:mainContext
|
||||
queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
|
||||
Strongify(self);
|
||||
[self updateMode];
|
||||
}];
|
||||
if (!_storeObserver)
|
||||
_storeObserver = [[NSNotificationCenter defaultCenter]
|
||||
addObserverForName:USMStoreDidChangeNotification object:nil
|
||||
queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
|
||||
Strongify(self);
|
||||
[self updateMode];
|
||||
}];
|
||||
}
|
||||
if (!observeStore) {
|
||||
if (_mocObserver)
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:_mocObserver];
|
||||
if (_storeObserver)
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:_storeObserver];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setUserIDs:(NSArray *)userIDs {
|
||||
|
||||
_userIDs = userIDs;
|
||||
|
||||
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
|
||||
[self.avatarCollectionView reloadData];
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)setMode:(MPCombinedMode)mode {
|
||||
|
||||
_mode = mode;
|
||||
|
||||
[self updateMode];
|
||||
}
|
||||
|
||||
- (void)updateMode {
|
||||
|
||||
// Ensure we're on the main thread.
|
||||
if (![NSThread isMainThread]) {
|
||||
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
|
||||
[self updateMode];
|
||||
}];
|
||||
return;
|
||||
}
|
||||
|
||||
self.userSelectionContainer.hidden = YES;
|
||||
self.passwordSelectionContainer.hidden = YES;
|
||||
|
||||
[self becomeFirstResponder];
|
||||
|
||||
switch (self.mode) {
|
||||
case MPCombinedModeUserSelection: {
|
||||
[[self navigationController] setNavigationBarHidden:YES animated:YES];
|
||||
self.userSelectionContainer.hidden = NO;
|
||||
[self needStoreObserved:YES];
|
||||
|
||||
[self setActiveUserState:MPActiveUserStateNone animated:NO];
|
||||
[MPiOSAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
|
||||
NSError *error = nil;
|
||||
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass( [MPUserEntity class] )];
|
||||
fetchRequest.sortDescriptors = @[ [NSSortDescriptor sortDescriptorWithKey:@"lastUsed" ascending:NO] ];
|
||||
NSArray *users = [context executeFetchRequest:fetchRequest error:&error];
|
||||
if (!users) {
|
||||
err(@"Failed to load users: %@", error);
|
||||
self.userIDs = nil;
|
||||
}
|
||||
|
||||
NSMutableArray *userIDs = [NSMutableArray arrayWithCapacity:[users count]];
|
||||
for (MPUserEntity *user in users)
|
||||
[userIDs addObject:user.objectID];
|
||||
self.userIDs = userIDs;
|
||||
}];
|
||||
|
||||
break;
|
||||
}
|
||||
case MPCombinedModePasswordSelection: {
|
||||
[[self navigationController] setNavigationBarHidden:NO animated:YES];
|
||||
self.passwordSelectionContainer.hidden = NO;
|
||||
[self needStoreObserved:NO];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setActiveUserState:(MPActiveUserState)activeUserState {
|
||||
|
||||
[self setActiveUserState:activeUserState animated:YES];
|
||||
}
|
||||
|
||||
- (void)setActiveUserState:(MPActiveUserState)activeUserState animated:(BOOL)animated {
|
||||
|
||||
_activeUserState = activeUserState;
|
||||
_masterPasswordChoice = nil;
|
||||
|
||||
[UIView animateWithDuration:animated? 0.3f: 0 animations:^{
|
||||
// Set the entry container's contents.
|
||||
switch (activeUserState) {
|
||||
case MPActiveUserStateNone: {
|
||||
for (NSUInteger item = 0; item < [self.avatarCollectionView numberOfItemsInSection:0]; ++item) {
|
||||
NSIndexPath *indexPath = [NSIndexPath indexPathForItem:item inSection:0];
|
||||
[self.avatarCollectionView deselectItemAtIndexPath:indexPath animated:YES];
|
||||
|
||||
MPAvatarCell *avatarCell = (MPAvatarCell *)[self.avatarCollectionView cellForItemAtIndexPath:indexPath];
|
||||
avatarCell.mode = MPAvatarModeLowered;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MPActiveUserStateLogin: {
|
||||
self.entryField.text = strl( @"Enter your master password:" );
|
||||
self.entryField.text = nil;
|
||||
self.entryField.secureTextEntry = YES;
|
||||
break;
|
||||
}
|
||||
case MPActiveUserStateUserName: {
|
||||
self.entryLabel.text = strl( @"Enter your full name:" );
|
||||
self.entryField.text = nil;
|
||||
self.entryField.secureTextEntry = NO;
|
||||
break;
|
||||
}
|
||||
case MPActiveUserStateMasterPasswordChoice: {
|
||||
self.entryLabel.text = strl( @"Choose your master password:" );
|
||||
self.entryField.text = nil;
|
||||
self.entryField.secureTextEntry = YES;
|
||||
break;
|
||||
}
|
||||
case MPActiveUserStateMasterPasswordConfirmation: {
|
||||
_masterPasswordChoice = self.entryField.text;
|
||||
self.entryLabel.text = strl( @"Confirm your master password:" );
|
||||
self.entryField.text = nil;
|
||||
self.entryField.secureTextEntry = YES;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Manage the random avatar for the new user if selected.
|
||||
MPAvatarCell *selectedAvatar = [self selectedAvatar];
|
||||
if (selectedAvatar.avatar == MPAvatarAdd) {
|
||||
selectedAvatar.avatar = arc4random() % MPAvatarCount;
|
||||
}
|
||||
else {
|
||||
NSIndexPath *newUserIndexPath = [NSIndexPath indexPathForItem:[_userIDs count] inSection:0];
|
||||
MPAvatarCell *newUserAvatar = (MPAvatarCell *)[[self avatarCollectionView] cellForItemAtIndexPath:newUserIndexPath];
|
||||
newUserAvatar.avatar = MPAvatarAdd;
|
||||
newUserAvatar.name = strl( @"New User" );
|
||||
}
|
||||
|
||||
// Manage the entry container depending on whether a user is activate or not.
|
||||
if (activeUserState == MPActiveUserStateNone) {
|
||||
self.avatarCollectionCenterConstraint.priority = UILayoutPriorityDefaultHigh;
|
||||
self.entryContainer.alpha = 0;
|
||||
}
|
||||
else {
|
||||
self.avatarCollectionCenterConstraint.priority = UILayoutPriorityDefaultLow;
|
||||
self.entryContainer.alpha = 1;
|
||||
}
|
||||
[self.avatarCollectionCenterConstraint apply];
|
||||
|
||||
// Toggle the keyboard.
|
||||
if (activeUserState == MPActiveUserStateNone)
|
||||
[self.entryField resignFirstResponder];
|
||||
} completion:^(BOOL finished) {
|
||||
if (activeUserState != MPActiveUserStateNone)
|
||||
[self.entryField becomeFirstResponder];
|
||||
}];
|
||||
}
|
||||
|
||||
- (IBAction)doSignOut:(UIBarButtonItem *)sender {
|
||||
|
||||
[[MPiOSAppDelegate get] signOutAnimated:YES];
|
||||
}
|
||||
|
||||
@end
|
@ -23,9 +23,9 @@
|
||||
|
||||
self.avatarTemplate.hidden = YES;
|
||||
|
||||
for (int a = 0; a < MPAvatarCount; ++a) {
|
||||
for (NSUInteger a = 0; a < MPAvatarCount; ++a) {
|
||||
UIButton *avatar = [self.avatarTemplate clone];
|
||||
avatar.tag = a;
|
||||
avatar.tag = (NSInteger)a;
|
||||
avatar.hidden = NO;
|
||||
avatar.center = CGPointMake(
|
||||
self.avatarTemplate.center.x * (a + 1) + self.avatarTemplate.bounds.size.width / 2 * a,
|
||||
|
@ -46,10 +46,10 @@
|
||||
[alert addSubview:alertAvatarScrollView];
|
||||
|
||||
CGPoint selectedOffset = CGPointZero;
|
||||
for (int a = 0; a < MPAvatarCount; ++a) {
|
||||
for (NSUInteger a = 0; a < MPAvatarCount; ++a) {
|
||||
UIButton *avatar = [self.avatarTemplate cloneAddedTo:alertAvatarScrollView];
|
||||
|
||||
avatar.tag = a;
|
||||
avatar.tag = (NSInteger)a;
|
||||
avatar.hidden = NO;
|
||||
avatar.center = CGPointMake(
|
||||
(20 + self.avatarTemplate.bounds.size.width / 2) * (a + 1) + self.avatarTemplate.bounds.size.width / 2 * a,
|
||||
@ -368,7 +368,7 @@
|
||||
avatar.layer.shadowRadius = 20;
|
||||
avatar.layer.masksToBounds = NO;
|
||||
avatar.backgroundColor = [UIColor clearColor];
|
||||
avatar.tag = user.avatar;
|
||||
avatar.tag = (NSInteger)user.avatar;
|
||||
|
||||
[avatar setBackgroundImage:[UIImage imageNamed:PearlString( @"avatar-%lu", (unsigned long)user.avatar )]
|
||||
forState:UIControlStateNormal];
|
||||
@ -599,7 +599,7 @@
|
||||
BOOL isTargeted = avatar == targetedAvatar;
|
||||
|
||||
avatar.userInteractionEnabled = isTargeted;
|
||||
avatar.alpha = isTargeted? 1: [self selectedUserForThread]? 0.1: 0.4;
|
||||
avatar.alpha = isTargeted? 1: [self selectedUserForThread]? 0.1F: 0.4F;
|
||||
|
||||
[self updateAvatarShadowColor:avatar isTargeted:isTargeted];
|
||||
} recurse:NO];
|
||||
@ -649,7 +649,7 @@
|
||||
|
||||
- (void)initializeWordLabel:(UILabel *)wordLabel {
|
||||
|
||||
wordLabel.alpha = 0.05 + (random() % 35) / 100.0F;
|
||||
wordLabel.alpha = 0.05F + (random() % 35) / 100.0F;
|
||||
wordLabel.text = (self.wordList)[(NSUInteger)random() % [self.wordList count]];
|
||||
}
|
||||
|
||||
|
@ -404,23 +404,23 @@
|
||||
|
||||
- (void)showGuide {
|
||||
|
||||
[self.navigationController performSegueWithIdentifier:@"MP_Guide" sender:self];
|
||||
//TODO [self.navigationController performSegueWithIdentifier:@"MP_Guide" sender:self];
|
||||
|
||||
MPCheckpoint( MPCheckpointShowGuide, nil );
|
||||
}
|
||||
|
||||
- (void)showSetup {
|
||||
|
||||
[self.navigationController performSegueWithIdentifier:@"MP_Setup" sender:self];
|
||||
//TODO [self.navigationController performSegueWithIdentifier:@"MP_Setup" sender:self];
|
||||
|
||||
MPCheckpoint( MPCheckpointShowSetup, nil );
|
||||
}
|
||||
|
||||
- (void)showReview {
|
||||
|
||||
MPCheckpoint( MPCheckpointReview, nil );
|
||||
|
||||
[super showReview];
|
||||
|
||||
MPCheckpoint( MPCheckpointReview, nil );
|
||||
}
|
||||
|
||||
- (void)showFeedbackWithLogs:(BOOL)logs forVC:(UIViewController *)viewController {
|
||||
|
@ -470,15 +470,15 @@ Your passwords will be AES-encrypted with your master password.</string>
|
||||
<objects>
|
||||
<viewController id="Tx0-mM-kHk" customClass="MPLogsViewController" sceneMemberID="viewController">
|
||||
<view key="view" contentMode="scaleToFill" id="3oc-v8-YGP">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<rect key="frame" x="0.0" y="64" width="320" height="504"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="center" image="background.png" id="mtJ-9r-6yT">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="504"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
</imageView>
|
||||
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" editable="NO" id="ojc-Tn-DM1">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="524"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="460"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<string key="text">119-20:51:52 MPiOSAppDelegate.m:36 | INFO : Initializing TestFlight
|
||||
@ -508,7 +508,7 @@ Your passwords will be AES-encrypted with your master password.</string>
|
||||
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
|
||||
</textView>
|
||||
<toolbar contentMode="scaleToFill" barStyle="black" translucent="NO" id="QPO-l8-Opz">
|
||||
<rect key="frame" x="0.0" y="524" width="320" height="44"/>
|
||||
<rect key="frame" x="0.0" y="460" width="320" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<items>
|
||||
<barButtonItem systemItem="compose" id="Yvq-If-VqG">
|
||||
@ -1640,6 +1640,7 @@ You can use the words in the background for inspiration in finding a memorable m
|
||||
<outlet property="uiContainer" destination="PHH-XC-9QQ" id="ogr-ak-h1V"/>
|
||||
<outlet property="wordWall" destination="JTj-nh-BWs" id="Mdy-OW-ouS"/>
|
||||
<segue destination="PQa-Xl-A3x" kind="push" identifier="MP_Unlock" id="wiY-Sg-Ba4"/>
|
||||
<segue destination="xq0-wq-JCC" kind="push" id="EtC-ot-s1R"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="OGA-5j-IcQ" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
@ -1823,6 +1824,112 @@ You can use the words in the background for inspiration in finding a memorable m
|
||||
</objects>
|
||||
<point key="canvasLocation" x="455" y="145"/>
|
||||
</scene>
|
||||
<!--Combined View Controller-->
|
||||
<scene sceneID="QH8-Nk-KaH">
|
||||
<objects>
|
||||
<viewController id="xq0-wq-JCC" customClass="MPCombinedViewController" sceneMemberID="viewController">
|
||||
<view key="view" contentMode="scaleToFill" id="j8f-w6-4eY">
|
||||
<rect key="frame" x="0.0" y="64" width="320" height="504"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="center" image="background.png" id="lbt-4z-QGi">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="504"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
</imageView>
|
||||
<view contentMode="scaleToFill" id="LpM-29-IaB" userLabel="View - MP Entry">
|
||||
<rect key="frame" x="20" y="158" width="280" height="88"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Enter your full name:" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="jrz-j5-Wyq">
|
||||
<rect key="frame" x="10" y="0.0" width="260" height="20"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" name="Copperplate" family="Copperplate" pointSize="17"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="ui_textfield.png" id="P96-bw-UwF">
|
||||
<rect key="frame" x="0.0" y="28" width="280" height="60"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<rect key="contentStretch" x="0.25" y="0.25" width="0.49999999999999961" height="0.49999999999999961"/>
|
||||
</imageView>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" textAlignment="center" clearsOnBeginEditing="YES" minimumFontSize="17" id="vF6-yj-Fi1">
|
||||
<rect key="frame" x="10" y="28" width="260" height="60"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<fontDescription key="fontDescription" name="Copperplate" family="Copperplate" pointSize="36"/>
|
||||
<textInputTraits key="textInputTraits" enablesReturnKeyAutomatically="YES" secureTextEntry="YES"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="Nbn-Rv-sP1" id="7AG-Oh-4fi"/>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<collectionView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" pagingEnabled="YES" minimumZoomScale="0.0" maximumZoomScale="0.0" dataMode="prototypes" id="8R1-SW-Eup">
|
||||
<rect key="frame" x="0.0" y="20" width="320" height="130"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="0.0" minimumInteritemSpacing="0.0" id="Z2n-2Z-E66">
|
||||
<size key="itemSize" width="160" height="110"/>
|
||||
<size key="headerReferenceSize" width="80" height="50"/>
|
||||
<size key="footerReferenceSize" width="80" height="50"/>
|
||||
<inset key="sectionInset" minX="0.0" minY="10" maxX="0.0" maxY="10"/>
|
||||
</collectionViewFlowLayout>
|
||||
<cells>
|
||||
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="wxJ-sJ-2eh">
|
||||
<rect key="frame" x="80" y="10" width="160" height="110"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="110"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<button opaque="NO" contentMode="scaleToFill" selected="YES" contentHorizontalAlignment="center" contentVerticalAlignment="top" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="xh4-cC-tlZ">
|
||||
<rect key="frame" x="25" y="0.0" width="110" height="110"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" red="0.40000000600000002" green="0.80000001190000003" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
||||
<state key="normal" backgroundImage="avatar-0.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>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
</collectionViewCell>
|
||||
</cells>
|
||||
<collectionReusableView key="sectionHeaderView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="QP7-AZ-N0k">
|
||||
<rect key="frame" x="0.0" y="0.0" width="80" height="130"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</collectionReusableView>
|
||||
<collectionReusableView key="sectionFooterView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="dUs-OO-Rlt">
|
||||
<rect key="frame" x="240" y="0.0" width="80" height="130"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</collectionReusableView>
|
||||
</collectionView>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Maarten Billemont" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" minimumFontSize="10" id="SlG-Kl-hMc">
|
||||
<rect key="frame" x="90" y="77" width="140" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<fontDescription key="fontDescription" name="Futura-CondensedExtraBold" family="Futura" pointSize="13"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" id="Mc0-uv-zDi">
|
||||
<barButtonItem key="leftBarButtonItem" systemItem="cancel" id="VbW-OM-624"/>
|
||||
<barButtonItem key="rightBarButtonItem" style="done" systemItem="done" id="if6-Lk-tcu"/>
|
||||
</navigationItem>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="WvC-pQ-beY" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="455" y="785"/>
|
||||
</scene>
|
||||
<!--Pearl Navigation Controller-->
|
||||
<scene sceneID="wrY-9D-LEc">
|
||||
<objects>
|
||||
@ -1873,11 +1980,11 @@ You can use the words in the background for inspiration in finding a memorable m
|
||||
<rect key="frame" x="20" y="137" width="280" height="288"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<mutableString 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.
|
||||
<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.
|
||||
|
||||
Note that even without iCloud syncing, you can make your passwords available from any device by simply creating the same user on all your devices. Enabling iCloud is mainly benefitial to keep the list of sites you use in sync on all your devices.
|
||||
|
||||
Only site names and custom passwords are sent to iCloud. Passwords are encrypted with your master password and illegible by Apple or any interceptor.</mutableString>
|
||||
Only site names and custom passwords are sent to iCloud. Passwords are encrypted with your master password and illegible by Apple or any interceptor.</string>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
|
||||
@ -2359,7 +2466,7 @@ Only site names and custom passwords are sent to iCloud. Passwords are encrypte
|
||||
<objects>
|
||||
<tableViewController id="Vrp-Gl-7qn" customClass="IASKAppSettingsViewController" sceneMemberID="viewController">
|
||||
<tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" id="NCp-ii-ux0">
|
||||
<rect key="frame" x="0.0" y="64" width="320" height="504"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
|
||||
<prototypes>
|
||||
@ -3062,8 +3169,8 @@ However, it means that anyone who finds your device unlocked can do the same.</s
|
||||
</simulatedMetricsContainer>
|
||||
<inferredMetricsTieBreakers>
|
||||
<segue reference="jgo-j3-gbW"/>
|
||||
<segue reference="hxY-aA-ngI"/>
|
||||
<segue reference="9Bs-cD-ddF"/>
|
||||
<segue reference="5Im-dm-qfS"/>
|
||||
<segue reference="rWT-Kr-cAs"/>
|
||||
<segue reference="hxY-aA-ngI"/>
|
||||
</inferredMetricsTieBreakers>
|
||||
</document>
|
@ -78,7 +78,7 @@
|
||||
<string>SourceCodePro-ExtraLight.otf</string>
|
||||
</array>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
<string>MainStoryboard_iPhone</string>
|
||||
<string>Storyboard</string>
|
||||
<key>UIStatusBarHidden</key>
|
||||
<true/>
|
||||
<key>UIStatusBarStyle</key>
|
||||
|
@ -12,6 +12,7 @@
|
||||
93D39262A8A97DB748213309 /* PearlEMail.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D393BB973253D4BAAC84AA /* PearlEMail.m */; };
|
||||
93D392EC39DA43C46C692C12 /* NSDictionary+Indexing.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D393B97158D7BE9332EA53 /* NSDictionary+Indexing.h */; };
|
||||
93D3932889B6B4206E66A6D6 /* PearlEMail.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D39F7C9F47BF6387FBC5C3 /* PearlEMail.h */; };
|
||||
93D3957237D303DE2D38C267 /* MPAvatarCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39B381350802A194BF332 /* MPAvatarCell.m */; };
|
||||
93D395F08A087F8A24689347 /* NSArray+Indexing.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39067C0AFDC581794E2B8 /* NSArray+Indexing.m */; };
|
||||
93D396AA30690B256F30378A /* PearlNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D3956915634581E737B38C /* PearlNavigationController.m */; };
|
||||
93D396BA1C74C4A06FD86437 /* PearlOverlay.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D3942A356B639724157982 /* PearlOverlay.h */; };
|
||||
@ -22,10 +23,17 @@
|
||||
93D39B842AB9A5D072810D76 /* NSError+PearlFullDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D398C95847261903D781D3 /* NSError+PearlFullDescription.h */; };
|
||||
93D39C34FE35830EF5BE1D2A /* NSArray+Indexing.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D396D04E57792A54D437AC /* NSArray+Indexing.h */; };
|
||||
93D39C8AD8EAB747856B3A8C /* LLModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D3923B42DA2DA18F287092 /* LLModel.m */; };
|
||||
93D39D596A2E376D6F6F5DA1 /* MPCombinedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D393310223DDB35218467A /* MPCombinedViewController.m */; };
|
||||
93D39E281E3658B30550CB55 /* NSDictionary+Indexing.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39AA1EE2E1E7B81372240 /* NSDictionary+Indexing.m */; };
|
||||
93D39F8A9254177891F38705 /* MPSetupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39A28369954D147E239BA /* MPSetupViewController.m */; };
|
||||
DA04E33E14B1E70400ECA4F3 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA04E33D14B1E70400ECA4F3 /* MobileCoreServices.framework */; };
|
||||
DA095E75172F4CD8001C948B /* MPLogsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D3979190DACEBD1F6AE9F4 /* MPLogsViewController.m */; };
|
||||
DA2CA4DD18D28859007798F8 /* NSArray+Pearl.m in Sources */ = {isa = PBXBuildFile; fileRef = DA2CA4D918D28859007798F8 /* NSArray+Pearl.m */; };
|
||||
DA2CA4DE18D28859007798F8 /* NSArray+Pearl.h in Headers */ = {isa = PBXBuildFile; fileRef = DA2CA4DA18D28859007798F8 /* NSArray+Pearl.h */; };
|
||||
DA2CA4DF18D28859007798F8 /* NSTimer+PearlBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = DA2CA4DB18D28859007798F8 /* NSTimer+PearlBlock.m */; };
|
||||
DA2CA4E018D28859007798F8 /* NSTimer+PearlBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = DA2CA4DC18D28859007798F8 /* NSTimer+PearlBlock.h */; };
|
||||
DA2CA4E418D28866007798F8 /* NSLayoutConstraint+PearlUIKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DA2CA4E218D28866007798F8 /* NSLayoutConstraint+PearlUIKit.h */; };
|
||||
DA2CA4E618D2AC10007798F8 /* NSLayoutConstraint+PearlUIKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DA2CA4E518D2AC10007798F8 /* NSLayoutConstraint+PearlUIKit.m */; };
|
||||
DA30E9CE15722ECA00A68B4C /* NSBundle+PearlMutableInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DA30E9CB15722ECA00A68B4C /* NSBundle+PearlMutableInfo.h */; };
|
||||
DA30E9CF15722ECA00A68B4C /* NSBundle+PearlMutableInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DA30E9CC15722ECA00A68B4C /* NSBundle+PearlMutableInfo.m */; };
|
||||
DA30E9D015722ECA00A68B4C /* Pearl.m in Sources */ = {isa = PBXBuildFile; fileRef = DA30E9CD15722ECA00A68B4C /* Pearl.m */; };
|
||||
@ -35,6 +43,7 @@
|
||||
DA30E9D815723E6900A68B4C /* PearlLazy.m in Sources */ = {isa = PBXBuildFile; fileRef = DA30E9D615723E6900A68B4C /* PearlLazy.m */; };
|
||||
DA3509FE15F101A500C14A8E /* PearlQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3509FC15F101A500C14A8E /* PearlQueue.h */; };
|
||||
DA3509FF15F101A500C14A8E /* PearlQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3509FD15F101A500C14A8E /* PearlQueue.m */; };
|
||||
DA38D6A318CCB5BF009AEB3E /* Storyboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DA38D6A218CCB5BF009AEB3E /* Storyboard.storyboard */; };
|
||||
DA4425CC1557BED40052177D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
|
||||
DA44260A1557D9E40052177D /* libUbiquityStoreManager.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA4425CB1557BED40052177D /* libUbiquityStoreManager.a */; };
|
||||
DA4DA1D91564471A00F6F596 /* libjrswizzle.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC6326C148680650075AEA5 /* libjrswizzle.a */; };
|
||||
@ -58,6 +67,8 @@
|
||||
DA70EC801811B13C00F65DB2 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA70EC7F1811B13C00F65DB2 /* StoreKit.framework */; };
|
||||
DA829E52159847E0002417D3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
|
||||
DA829E6215984832002417D3 /* libFontReplacer.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA829E51159847E0002417D3 /* libFontReplacer.a */; };
|
||||
DA854C8318D4CFBF00106317 /* avatar-add@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA854C8118D4CFBF00106317 /* avatar-add@2x.png */; };
|
||||
DA854C8418D4CFBF00106317 /* avatar-add.png in Resources */ = {isa = PBXBuildFile; fileRef = DA854C8218D4CFBF00106317 /* avatar-add.png */; };
|
||||
DA945C8717E3F3FD0053236B /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DA945C8617E3F3FD0053236B /* Images.xcassets */; };
|
||||
DA95D5F214DF0B2C008D1B94 /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA95D5F014DF0B1E008D1B94 /* MessageUI.framework */; };
|
||||
DA9B51551895D79E009D2A0B /* gittip.png in Resources */ = {isa = PBXBuildFile; fileRef = DA9B51541895D79E009D2A0B /* gittip.png */; };
|
||||
@ -489,6 +500,7 @@
|
||||
93D390FADEB325D8D54A957D /* PearlOverlay.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlOverlay.m; sourceTree = "<group>"; };
|
||||
93D391943675426839501BB8 /* MPLogsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPLogsViewController.h; sourceTree = "<group>"; };
|
||||
93D3923B42DA2DA18F287092 /* LLModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LLModel.m; sourceTree = "<group>"; };
|
||||
93D393310223DDB35218467A /* MPCombinedViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPCombinedViewController.m; sourceTree = "<group>"; };
|
||||
93D393B97158D7BE9332EA53 /* NSDictionary+Indexing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+Indexing.h"; sourceTree = "<group>"; };
|
||||
93D393BB973253D4BAAC84AA /* PearlEMail.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlEMail.m; sourceTree = "<group>"; };
|
||||
93D394077F8FAB8167647187 /* Twitter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Twitter.framework; path = System/Library/Frameworks/Twitter.framework; sourceTree = SDKROOT; };
|
||||
@ -503,12 +515,21 @@
|
||||
93D39A28369954D147E239BA /* MPSetupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPSetupViewController.m; sourceTree = "<group>"; };
|
||||
93D39A3CC4D8330831FC8CB4 /* LLToggleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LLToggleViewController.h; sourceTree = "<group>"; };
|
||||
93D39AA1EE2E1E7B81372240 /* NSDictionary+Indexing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+Indexing.m"; sourceTree = "<group>"; };
|
||||
93D39B381350802A194BF332 /* MPAvatarCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAvatarCell.m; sourceTree = "<group>"; };
|
||||
93D39BA6C5CB452973918B7D /* LLButtonView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LLButtonView.h; sourceTree = "<group>"; };
|
||||
93D39BF6BCBDFFE844E7D34C /* LLButtonView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LLButtonView.m; sourceTree = "<group>"; };
|
||||
93D39C8E26B06F01566785B7 /* LLToggleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LLToggleViewController.m; sourceTree = "<group>"; };
|
||||
93D39CF8ADF4542CDC4CD385 /* MPCombinedViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPCombinedViewController.h; sourceTree = "<group>"; };
|
||||
93D39DA27D768B53C8B1330C /* MPAvatarCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAvatarCell.h; sourceTree = "<group>"; };
|
||||
93D39F7C9F47BF6387FBC5C3 /* PearlEMail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlEMail.h; sourceTree = "<group>"; };
|
||||
93D39F9106F2CCFB94283188 /* NSError+PearlFullDescription.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSError+PearlFullDescription.m"; sourceTree = "<group>"; };
|
||||
DA04E33D14B1E70400ECA4F3 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; };
|
||||
DA2CA4D918D28859007798F8 /* NSArray+Pearl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+Pearl.m"; sourceTree = "<group>"; };
|
||||
DA2CA4DA18D28859007798F8 /* NSArray+Pearl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+Pearl.h"; sourceTree = "<group>"; };
|
||||
DA2CA4DB18D28859007798F8 /* NSTimer+PearlBlock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSTimer+PearlBlock.m"; sourceTree = "<group>"; };
|
||||
DA2CA4DC18D28859007798F8 /* NSTimer+PearlBlock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSTimer+PearlBlock.h"; sourceTree = "<group>"; };
|
||||
DA2CA4E218D28866007798F8 /* NSLayoutConstraint+PearlUIKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSLayoutConstraint+PearlUIKit.h"; sourceTree = "<group>"; };
|
||||
DA2CA4E518D2AC10007798F8 /* NSLayoutConstraint+PearlUIKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSLayoutConstraint+PearlUIKit.m"; sourceTree = "<group>"; };
|
||||
DA30E9CB15722ECA00A68B4C /* NSBundle+PearlMutableInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSBundle+PearlMutableInfo.h"; sourceTree = "<group>"; };
|
||||
DA30E9CC15722ECA00A68B4C /* NSBundle+PearlMutableInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSBundle+PearlMutableInfo.m"; sourceTree = "<group>"; };
|
||||
DA30E9CD15722ECA00A68B4C /* Pearl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Pearl.m; sourceTree = "<group>"; };
|
||||
@ -520,6 +541,7 @@
|
||||
DA340E9F17CD830E00712B77 /* TestFlight+ManualSessions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "TestFlight+ManualSessions.h"; sourceTree = "<group>"; };
|
||||
DA3509FC15F101A500C14A8E /* PearlQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlQueue.h; sourceTree = "<group>"; };
|
||||
DA3509FD15F101A500C14A8E /* PearlQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlQueue.m; sourceTree = "<group>"; };
|
||||
DA38D6A218CCB5BF009AEB3E /* Storyboard.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Storyboard.storyboard; sourceTree = "<group>"; };
|
||||
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; };
|
||||
DA5A09DD171A70E4005284AB /* play.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = play.png; sourceTree = "<group>"; };
|
||||
@ -538,6 +560,8 @@
|
||||
DA672D2E14F92C6B004A189C /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
|
||||
DA70EC7F1811B13C00F65DB2 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; };
|
||||
DA829E51159847E0002417D3 /* libFontReplacer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libFontReplacer.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
DA854C8118D4CFBF00106317 /* avatar-add@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "avatar-add@2x.png"; sourceTree = "<group>"; };
|
||||
DA854C8218D4CFBF00106317 /* avatar-add.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "avatar-add.png"; sourceTree = "<group>"; };
|
||||
DA945C8617E3F3FD0053236B /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
||||
DA95D5F014DF0B1E008D1B94 /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; };
|
||||
DA9B51541895D79E009D2A0B /* gittip.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = gittip.png; sourceTree = "<group>"; };
|
||||
@ -1854,6 +1878,8 @@
|
||||
DABD366B1711E29400CF925C /* Avatars */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
DA854C8118D4CFBF00106317 /* avatar-add@2x.png */,
|
||||
DA854C8218D4CFBF00106317 /* avatar-add.png */,
|
||||
DABD366C1711E29400CF925C /* avatar-0.png */,
|
||||
DABD366D1711E29400CF925C /* avatar-0@2x.png */,
|
||||
DABD366E1711E29400CF925C /* avatar-1.png */,
|
||||
@ -2488,6 +2514,11 @@
|
||||
93D39730673227EFF6DEFF19 /* MPSetupViewController.h */,
|
||||
93D3979190DACEBD1F6AE9F4 /* MPLogsViewController.m */,
|
||||
93D391943675426839501BB8 /* MPLogsViewController.h */,
|
||||
93D393310223DDB35218467A /* MPCombinedViewController.m */,
|
||||
93D39CF8ADF4542CDC4CD385 /* MPCombinedViewController.h */,
|
||||
DA38D6A218CCB5BF009AEB3E /* Storyboard.storyboard */,
|
||||
93D39B381350802A194BF332 /* MPAvatarCell.m */,
|
||||
93D39DA27D768B53C8B1330C /* MPAvatarCell.h */,
|
||||
);
|
||||
path = iOS;
|
||||
sourceTree = "<group>";
|
||||
@ -2892,6 +2923,10 @@
|
||||
DAFE45D715039823003ABA7C /* Pearl */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
DA2CA4D918D28859007798F8 /* NSArray+Pearl.m */,
|
||||
DA2CA4DA18D28859007798F8 /* NSArray+Pearl.h */,
|
||||
DA2CA4DB18D28859007798F8 /* NSTimer+PearlBlock.m */,
|
||||
DA2CA4DC18D28859007798F8 /* NSTimer+PearlBlock.h */,
|
||||
DA3509FC15F101A500C14A8E /* PearlQueue.h */,
|
||||
DA3509FD15F101A500C14A8E /* PearlQueue.m */,
|
||||
93D393B97158D7BE9332EA53 /* NSDictionary+Indexing.h */,
|
||||
@ -2973,6 +3008,8 @@
|
||||
DAFE460715039823003ABA7C /* Pearl-UIKit */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
DA2CA4E518D2AC10007798F8 /* NSLayoutConstraint+PearlUIKit.m */,
|
||||
DA2CA4E218D28866007798F8 /* NSLayoutConstraint+PearlUIKit.h */,
|
||||
93D39F7C9F47BF6387FBC5C3 /* PearlEMail.h */,
|
||||
93D393BB973253D4BAAC84AA /* PearlEMail.m */,
|
||||
DAFE4A63150399FF003ABA8F /* UIScrollView+PearlFlashingIndicators.h */,
|
||||
@ -3102,6 +3139,7 @@
|
||||
DAEB935A18AA537D000490CC /* idea.h in Headers */,
|
||||
DAEB933A18AA537D000490CC /* sysendian.h in Headers */,
|
||||
DAFE4A2415039824003ABA7C /* PearlInfoPlist.h in Headers */,
|
||||
DA2CA4E418D28866007798F8 /* NSLayoutConstraint+PearlUIKit.h in Headers */,
|
||||
DAFE4A2615039824003ABA7C /* PearlLogger.h in Headers */,
|
||||
DAFE4A2815039824003ABA7C /* PearlMathUtils.h in Headers */,
|
||||
DAEB934418AA537D000490CC /* camellia.h in Headers */,
|
||||
@ -3113,6 +3151,7 @@
|
||||
DAEB935318AA537D000490CC /* ec.h in Headers */,
|
||||
DAEB937818AA537D000490CC /* ssl3.h in Headers */,
|
||||
DAEB935E18AA537D000490CC /* md4.h in Headers */,
|
||||
DA2CA4E018D28859007798F8 /* NSTimer+PearlBlock.h in Headers */,
|
||||
DAEB933518AA537D000490CC /* memlimit.h in Headers */,
|
||||
DAFE4A3315039824003ABA7C /* Pearl-Crypto.h in Headers */,
|
||||
DAEB937318AA537D000490CC /* seed.h in Headers */,
|
||||
@ -3189,6 +3228,7 @@
|
||||
DAEB936C18AA537D000490CC /* pqueue.h in Headers */,
|
||||
DAEB937B18AA537D000490CC /* tls1.h in Headers */,
|
||||
DAEB933818AA537D000490CC /* scryptenc_cpuperf.h in Headers */,
|
||||
DA2CA4DE18D28859007798F8 /* NSArray+Pearl.h in Headers */,
|
||||
93D392EC39DA43C46C692C12 /* NSDictionary+Indexing.h in Headers */,
|
||||
DAEB935418AA537D000490CC /* ecdh.h in Headers */,
|
||||
DAEB937D18AA537D000490CC /* txt_db.h in Headers */,
|
||||
@ -3558,6 +3598,7 @@
|
||||
DABD38FF1711E29700CF925C /* ui_navbar_container.png in Resources */,
|
||||
DABD39001711E29700CF925C /* ui_navbar_container@2x.png in Resources */,
|
||||
DABD39011711E29700CF925C /* ui_panel_container.png in Resources */,
|
||||
DA854C8318D4CFBF00106317 /* avatar-add@2x.png in Resources */,
|
||||
DABD39021711E29700CF925C /* ui_panel_container@2x.png in Resources */,
|
||||
DABD39031711E29700CF925C /* ui_panel_display.png in Resources */,
|
||||
DABD39041711E29700CF925C /* ui_panel_display@2x.png in Resources */,
|
||||
@ -3678,6 +3719,7 @@
|
||||
DABD3B9D1711E29800CF925C /* social-twitter.png in Resources */,
|
||||
DABD3B9E1711E29800CF925C /* social-twitter@2x.png in Resources */,
|
||||
DABD3C191711E2DC00CF925C /* MPElementListCellView.xib in Resources */,
|
||||
DA854C8418D4CFBF00106317 /* avatar-add.png in Resources */,
|
||||
DABD3C221711E2DC00CF925C /* MainStoryboard_iPhone.storyboard in Resources */,
|
||||
DABD3C241711E2DC00CF925C /* MasterPassword.entitlements in Resources */,
|
||||
DABD3C251711E2DC00CF925C /* Settings.bundle in Resources */,
|
||||
@ -3688,6 +3730,7 @@
|
||||
DABD3FCF1714F45C00CF925C /* identity@2x.png in Resources */,
|
||||
DADEF4151810D2940052CA3E /* love-lyndir.button.grey@2x.png in Resources */,
|
||||
DAE1EF2217E942DE00BC0086 /* Localizable.strings in Resources */,
|
||||
DA38D6A318CCB5BF009AEB3E /* Storyboard.storyboard in Resources */,
|
||||
DA5A09DF171A70E4005284AB /* play.png in Resources */,
|
||||
DA5A09E0171A70E4005284AB /* play@2x.png in Resources */,
|
||||
DA5A09EA171BB0F7005284AB /* unlocked.png in Resources */,
|
||||
@ -3774,6 +3817,8 @@
|
||||
DABD3C271711E2DC00CF925C /* main.m in Sources */,
|
||||
93D39F8A9254177891F38705 /* MPSetupViewController.m in Sources */,
|
||||
DA095E75172F4CD8001C948B /* MPLogsViewController.m in Sources */,
|
||||
93D39D596A2E376D6F6F5DA1 /* MPCombinedViewController.m in Sources */,
|
||||
93D3957237D303DE2D38C267 /* MPAvatarCell.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -3845,9 +3890,11 @@
|
||||
DA30E9D815723E6900A68B4C /* PearlLazy.m in Sources */,
|
||||
DAFE4A63150399FF003ABA82 /* UIControl+PearlBlocks.m in Sources */,
|
||||
DAFE4A63150399FF003ABA86 /* NSObject+PearlKVO.m in Sources */,
|
||||
DA2CA4DD18D28859007798F8 /* NSArray+Pearl.m in Sources */,
|
||||
DAFE4A63150399FF003ABA8A /* UIControl+PearlSelect.m in Sources */,
|
||||
DAFE4A63150399FF003ABA8E /* UIScrollView+PearlFlashingIndicators.m in Sources */,
|
||||
DAFE4A63150399FF003ABA92 /* NSDateFormatter+RFC3339.m in Sources */,
|
||||
DA2CA4E618D2AC10007798F8 /* NSLayoutConstraint+PearlUIKit.m in Sources */,
|
||||
93D395F08A087F8A24689347 /* NSArray+Indexing.m in Sources */,
|
||||
93D39E281E3658B30550CB55 /* NSDictionary+Indexing.m in Sources */,
|
||||
93D39262A8A97DB748213309 /* PearlEMail.m in Sources */,
|
||||
@ -3855,6 +3902,7 @@
|
||||
93D3922A53E41A54832E90D9 /* PearlOverlay.m in Sources */,
|
||||
93D396AA30690B256F30378A /* PearlNavigationController.m in Sources */,
|
||||
93D397952F5635C793C24DF1 /* NSError+PearlFullDescription.m in Sources */,
|
||||
DA2CA4DF18D28859007798F8 /* NSTimer+PearlBlock.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -3980,7 +4028,7 @@
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES;
|
||||
CLANG_WARN_IMPLICIT_SIGN_CONVERSION = NO;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES;
|
||||
CLANG_WARN_OBJC_RECEIVER_WEAK = NO;
|
||||
@ -4025,7 +4073,7 @@
|
||||
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||
GCC_WARN_MISSING_PARENTHESES = YES;
|
||||
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
||||
GCC_WARN_SIGN_COMPARE = YES;
|
||||
GCC_WARN_SIGN_COMPARE = NO;
|
||||
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = NO;
|
||||
@ -4067,7 +4115,7 @@
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES;
|
||||
CLANG_WARN_IMPLICIT_SIGN_CONVERSION = NO;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES;
|
||||
CLANG_WARN_OBJC_RECEIVER_WEAK = NO;
|
||||
@ -4116,7 +4164,7 @@
|
||||
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||
GCC_WARN_MISSING_PARENTHESES = YES;
|
||||
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
||||
GCC_WARN_SIGN_COMPARE = YES;
|
||||
GCC_WARN_SIGN_COMPARE = NO;
|
||||
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||
@ -4225,7 +4273,7 @@
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES;
|
||||
CLANG_WARN_IMPLICIT_SIGN_CONVERSION = NO;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES;
|
||||
CLANG_WARN_OBJC_RECEIVER_WEAK = NO;
|
||||
@ -4273,7 +4321,7 @@
|
||||
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||
GCC_WARN_MISSING_PARENTHESES = YES;
|
||||
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
||||
GCC_WARN_SIGN_COMPARE = YES;
|
||||
GCC_WARN_SIGN_COMPARE = NO;
|
||||
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||
|
923
MasterPassword/ObjC/iOS/Storyboard.storyboard
Normal file
923
MasterPassword/ObjC/iOS/Storyboard.storyboard
Normal file
@ -0,0 +1,923 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5053" systemVersion="13C64" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="Q1S-vU-GGO">
|
||||
<dependencies>
|
||||
<deployment defaultVersion="1536" identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/>
|
||||
<capability name="Alignment constraints with different attributes" minToolsVersion="5.1"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--Combined View Controller-->
|
||||
<scene sceneID="jqt-XC-lOe">
|
||||
<objects>
|
||||
<viewController id="S8q-YF-Kt9" customClass="MPCombinedViewController" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="zp4-4O-wZI"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="VGz-R0-vMD"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="DOr-Xu-P9q" userLabel="Root">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="center" image="background.png" translatesAutoresizingMaskIntoConstraints="NO" id="am9-1J-ucG" userLabel="Background">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
</imageView>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Po8-18-Xax" userLabel="Password Selection">
|
||||
<rect key="frame" x="0.0" y="64" width="320" height="504"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="center" image="background.png" translatesAutoresizingMaskIntoConstraints="NO" id="9AA-6D-4V8" userLabel="Background">
|
||||
<rect key="frame" x="0.0" y="-64" width="320" height="568"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
</imageView>
|
||||
<searchBar contentMode="redraw" translatesAutoresizingMaskIntoConstraints="NO" id="7Ya-U5-fiO">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<textInputTraits key="textInputTraits"/>
|
||||
<scopeButtonTitles>
|
||||
<string>Title</string>
|
||||
<string>Title</string>
|
||||
</scopeButtonTitles>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="S8q-YF-Kt9" id="s2G-oh-tRj"/>
|
||||
</connections>
|
||||
</searchBar>
|
||||
<collectionView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" minimumZoomScale="0.0" maximumZoomScale="0.0" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="ChH-au-8t0" userLabel="Password Collection">
|
||||
<rect key="frame" x="0.0" y="44" width="320" height="460"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="LTf-6n-Zik">
|
||||
<size key="itemSize" width="320" height="100"/>
|
||||
<size key="headerReferenceSize" width="0.0" height="0.0"/>
|
||||
<size key="footerReferenceSize" width="0.0" height="0.0"/>
|
||||
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
|
||||
</collectionViewFlowLayout>
|
||||
<cells>
|
||||
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="aEi-R1-jax">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="100"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="100"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="SadwGafy7^Sidu" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="7Lg-KD-3eo">
|
||||
<rect key="frame" x="8" y="20" width="304" height="37"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="textColor" red="0.40000000600000002" green="0.80000001190000003" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<fontDescription key="fontDescription" name="AmericanTypewriter-Bold" family="American Typewriter" pointSize="30"/>
|
||||
<textInputTraits key="textInputTraits"/>
|
||||
</textField>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.5" contentMode="left" text="apple.com" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="D9N-sv-mia" userLabel="Site Name">
|
||||
<rect key="frame" x="20" y="71" width="280" height="14"/>
|
||||
<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>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.5" contentMode="left" text="1" textAlignment="right" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="yiW-Ya-r4A" userLabel="Counter">
|
||||
<rect key="frame" x="236" y="69" width="11" height="19"/>
|
||||
<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" translatesAutoresizingMaskIntoConstraints="NO" id="Vll-u0-ngm" userLabel="Upgrade">
|
||||
<rect key="frame" x="241" y="56" width="44" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" hint="Upgrades the password."/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="44" id="805-8F-kkg"/>
|
||||
<constraint firstAttribute="height" constant="44" id="xFn-Zp-gQT"/>
|
||||
</constraints>
|
||||
<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>
|
||||
</button>
|
||||
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="PP4-Uz-Kh7" userLabel="Incrementer">
|
||||
<rect key="frame" x="241" y="56" width="44" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" hint="Increments the site counter."/>
|
||||
<gestureRecognizers/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="44" id="OxA-i3-mx6"/>
|
||||
<constraint firstAttribute="height" constant="44" id="ZOC-px-qmv"/>
|
||||
</constraints>
|
||||
<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>
|
||||
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Y1n-Gr-JLC" userLabel="User">
|
||||
<rect key="frame" x="276" y="56" width="44" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" hint="Upgrades the password."/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="44" id="Opz-f4-3Z1"/>
|
||||
<constraint firstAttribute="width" constant="44" id="S79-BS-s8b"/>
|
||||
</constraints>
|
||||
<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>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.59999999999999998" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="7Lg-KD-3eo" secondAttribute="trailing" constant="8" id="79E-9m-Lnt"/>
|
||||
<constraint firstItem="PP4-Uz-Kh7" firstAttribute="leading" secondItem="yiW-Ya-r4A" secondAttribute="trailing" constant="-6" id="Fpd-63-Hjd"/>
|
||||
<constraint firstItem="D9N-sv-mia" firstAttribute="leading" secondItem="aEi-R1-jax" secondAttribute="leading" constant="20" id="GbA-qh-erf"/>
|
||||
<constraint firstItem="Vll-u0-ngm" firstAttribute="centerX" secondItem="PP4-Uz-Kh7" secondAttribute="centerX" id="IA9-OD-BxA"/>
|
||||
<constraint firstItem="D9N-sv-mia" firstAttribute="centerY" secondItem="yiW-Ya-r4A" secondAttribute="centerY" id="J2n-Ck-ENw"/>
|
||||
<constraint firstItem="Y1n-Gr-JLC" firstAttribute="centerY" secondItem="PP4-Uz-Kh7" secondAttribute="centerY" id="LW1-2V-0xJ"/>
|
||||
<constraint firstItem="7Lg-KD-3eo" firstAttribute="leading" secondItem="aEi-R1-jax" secondAttribute="leading" constant="8" id="LeR-d5-ize"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Y1n-Gr-JLC" secondAttribute="bottom" id="N6F-rc-nUn"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Y1n-Gr-JLC" secondAttribute="trailing" id="SH5-Iv-kcL"/>
|
||||
<constraint firstItem="PP4-Uz-Kh7" firstAttribute="centerY" secondItem="yiW-Ya-r4A" secondAttribute="centerY" id="Vr7-3W-OPL"/>
|
||||
<constraint firstItem="Y1n-Gr-JLC" firstAttribute="leading" secondItem="PP4-Uz-Kh7" secondAttribute="trailing" constant="-9" id="bo2-9I-J8M"/>
|
||||
<constraint firstAttribute="trailing" secondItem="D9N-sv-mia" secondAttribute="trailing" constant="20" id="cdz-7b-rjt"/>
|
||||
<constraint firstItem="7Lg-KD-3eo" firstAttribute="top" secondItem="aEi-R1-jax" secondAttribute="top" constant="20" id="o6x-JA-QnT"/>
|
||||
<constraint firstItem="Vll-u0-ngm" firstAttribute="centerY" secondItem="PP4-Uz-Kh7" secondAttribute="centerY" id="vpv-Bb-4bE"/>
|
||||
</constraints>
|
||||
</collectionViewCell>
|
||||
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="ONP-Bd-TZj">
|
||||
<rect key="frame" x="0.0" y="110" width="320" height="100"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="100"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="Pa$sW0rD" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="YLn-s3-Ce0">
|
||||
<rect key="frame" x="8" y="20" width="304" height="37"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="textColor" red="0.40000000600000002" green="0.80000001190000003" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<fontDescription key="fontDescription" name="AmericanTypewriter-Bold" family="American Typewriter" pointSize="30"/>
|
||||
<textInputTraits key="textInputTraits"/>
|
||||
</textField>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.5" contentMode="left" text="apple.com" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="ylg-ew-F64" userLabel="Site Name">
|
||||
<rect key="frame" x="20" y="71" width="280" height="14"/>
|
||||
<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>
|
||||
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="75M-ru-7cN" userLabel="Edit">
|
||||
<rect key="frame" x="241" y="56" width="44" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" hint="Edits the password."/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="44" id="3ey-YL-wm7"/>
|
||||
<constraint firstAttribute="height" constant="44" id="kkj-Ln-HKO"/>
|
||||
</constraints>
|
||||
<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>
|
||||
</button>
|
||||
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="2Lh-oI-kqA" userLabel="User">
|
||||
<rect key="frame" x="276" y="56" width="44" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" hint="Upgrades the password."/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="44" id="4dQ-GY-8Nl"/>
|
||||
<constraint firstAttribute="width" constant="44" id="SEm-VJ-pZf"/>
|
||||
</constraints>
|
||||
<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>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.59999999999999998" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="ylg-ew-F64" secondAttribute="trailing" constant="20" id="3JX-iW-WQW"/>
|
||||
<constraint firstItem="ylg-ew-F64" firstAttribute="centerY" secondItem="2Lh-oI-kqA" secondAttribute="centerY" id="3iy-Ph-D4j"/>
|
||||
<constraint firstItem="ylg-ew-F64" firstAttribute="leading" secondItem="ONP-Bd-TZj" secondAttribute="leading" constant="20" id="Ad7-NU-p1G"/>
|
||||
<constraint firstAttribute="trailing" secondItem="2Lh-oI-kqA" secondAttribute="trailing" id="F8m-1V-vQT"/>
|
||||
<constraint firstItem="75M-ru-7cN" firstAttribute="centerY" secondItem="2Lh-oI-kqA" secondAttribute="centerY" id="VCS-4I-klB"/>
|
||||
<constraint firstAttribute="trailing" secondItem="YLn-s3-Ce0" secondAttribute="trailing" constant="8" id="f3L-Wi-ivC"/>
|
||||
<constraint firstAttribute="bottom" secondItem="2Lh-oI-kqA" secondAttribute="bottom" id="lSr-rx-cVU"/>
|
||||
<constraint firstItem="YLn-s3-Ce0" firstAttribute="top" secondItem="ONP-Bd-TZj" secondAttribute="top" constant="20" id="sef-UG-6Yd"/>
|
||||
<constraint firstItem="YLn-s3-Ce0" firstAttribute="leading" secondItem="ONP-Bd-TZj" secondAttribute="leading" constant="8" id="tXg-BG-sqt"/>
|
||||
<constraint firstItem="2Lh-oI-kqA" firstAttribute="leading" secondItem="75M-ru-7cN" secondAttribute="trailing" constant="-9" id="vgs-B7-kja"/>
|
||||
</constraints>
|
||||
</collectionViewCell>
|
||||
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="hEx-Vi-XnZ">
|
||||
<rect key="frame" x="0.0" y="220" width="155" height="100"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||
<rect key="frame" x="0.0" y="0.0" width="155" height="100"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="SadwGafy7^Sidu" textAlignment="center" minimumFontSize="8" translatesAutoresizingMaskIntoConstraints="NO" id="Ohy-hG-gPH">
|
||||
<rect key="frame" x="8" y="20" width="139" height="37"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="textColor" red="0.40000000600000002" green="0.80000001190000003" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<fontDescription key="fontDescription" name="AmericanTypewriter-Bold" family="American Typewriter" pointSize="30"/>
|
||||
<textInputTraits key="textInputTraits"/>
|
||||
</textField>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.5" contentMode="left" text="apple.com" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="1J3-nh-Qy4" userLabel="Site Name">
|
||||
<rect key="frame" x="20" y="71" width="115" height="14"/>
|
||||
<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>
|
||||
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="tYp-Zl-sYG" userLabel="Upgrade">
|
||||
<rect key="frame" x="76" y="56" width="44" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" hint="Upgrades the password."/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="44" id="Npw-ZT-2U1"/>
|
||||
<constraint firstAttribute="width" constant="44" id="aZJ-Z0-RXU"/>
|
||||
</constraints>
|
||||
<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>
|
||||
</button>
|
||||
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ltM-tc-n8k" userLabel="User">
|
||||
<rect key="frame" x="111" y="56" width="44" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" hint="Upgrades the password."/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="44" id="SHJ-vw-llV"/>
|
||||
<constraint firstAttribute="height" constant="44" id="sCY-vi-pxa"/>
|
||||
</constraints>
|
||||
<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>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.59999999999999998" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="tYp-Zl-sYG" firstAttribute="centerY" secondItem="ltM-tc-n8k" secondAttribute="centerY" id="Aq2-Zh-tr8"/>
|
||||
<constraint firstItem="ltM-tc-n8k" firstAttribute="centerY" secondItem="1J3-nh-Qy4" secondAttribute="centerY" id="Ltf-XL-T7W"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Ohy-hG-gPH" secondAttribute="trailing" constant="8" id="PJ4-Gn-Yj4"/>
|
||||
<constraint firstItem="ltM-tc-n8k" firstAttribute="leading" secondItem="tYp-Zl-sYG" secondAttribute="trailing" constant="-9" id="Qvv-eU-bBa"/>
|
||||
<constraint firstAttribute="bottom" secondItem="ltM-tc-n8k" secondAttribute="bottom" id="Tph-4t-0Ck"/>
|
||||
<constraint firstAttribute="trailing" secondItem="ltM-tc-n8k" secondAttribute="trailing" id="V2b-0o-p6x"/>
|
||||
<constraint firstItem="Ohy-hG-gPH" firstAttribute="top" secondItem="hEx-Vi-XnZ" secondAttribute="top" constant="20" id="bH8-gB-Hxq"/>
|
||||
<constraint firstItem="1J3-nh-Qy4" firstAttribute="leading" secondItem="hEx-Vi-XnZ" secondAttribute="leading" constant="20" id="jbv-eK-7qk"/>
|
||||
<constraint firstAttribute="trailing" secondItem="1J3-nh-Qy4" secondAttribute="trailing" constant="20" id="od4-eJ-AvD"/>
|
||||
<constraint firstItem="Ohy-hG-gPH" firstAttribute="leading" secondItem="hEx-Vi-XnZ" secondAttribute="leading" constant="8" id="z0B-ci-Qj5"/>
|
||||
</constraints>
|
||||
<size key="customSize" width="155" height="100"/>
|
||||
</collectionViewCell>
|
||||
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="Yyq-NQ-BWV">
|
||||
<rect key="frame" x="165" y="220" width="155" height="100"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||
<rect key="frame" x="0.0" y="0.0" width="155" height="100"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="Pa$sW0rD" textAlignment="center" minimumFontSize="8" translatesAutoresizingMaskIntoConstraints="NO" id="hQL-mx-xOr">
|
||||
<rect key="frame" x="8" y="20" width="139" height="37"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="textColor" red="0.40000000600000002" green="0.80000001190000003" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<fontDescription key="fontDescription" name="AmericanTypewriter-Bold" family="American Typewriter" pointSize="30"/>
|
||||
<textInputTraits key="textInputTraits"/>
|
||||
</textField>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.5" contentMode="left" text="apple.com" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="QMF-cz-UxP" userLabel="Site Name">
|
||||
<rect key="frame" x="20" y="71" width="115" height="14"/>
|
||||
<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>
|
||||
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Cfg-y6-jTn" userLabel="User">
|
||||
<rect key="frame" x="111" y="56" width="44" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" hint="Upgrades the password."/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="44" id="5Fb-Jo-bCW"/>
|
||||
<constraint firstAttribute="height" constant="44" id="aeL-Sb-Git"/>
|
||||
</constraints>
|
||||
<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>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.59999999999999998" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="QMF-cz-UxP" secondAttribute="trailing" constant="20" id="4Tm-0x-dlD"/>
|
||||
<constraint firstItem="hQL-mx-xOr" firstAttribute="leading" secondItem="Yyq-NQ-BWV" secondAttribute="leading" constant="8" id="9rQ-T3-kla"/>
|
||||
<constraint firstItem="hQL-mx-xOr" firstAttribute="top" secondItem="Yyq-NQ-BWV" secondAttribute="top" constant="20" id="Vlj-4z-E3f"/>
|
||||
<constraint firstAttribute="trailing" secondItem="hQL-mx-xOr" secondAttribute="trailing" constant="8" id="ZZ6-B2-87P"/>
|
||||
<constraint firstItem="Cfg-y6-jTn" firstAttribute="centerY" secondItem="QMF-cz-UxP" secondAttribute="centerY" id="ieR-Yz-Wai"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Cfg-y6-jTn" secondAttribute="bottom" id="iyn-Sz-p9X"/>
|
||||
<constraint firstItem="QMF-cz-UxP" firstAttribute="leading" secondItem="Yyq-NQ-BWV" secondAttribute="leading" constant="20" id="luB-DO-qFY"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Cfg-y6-jTn" secondAttribute="trailing" id="lwY-gx-Ac5"/>
|
||||
</constraints>
|
||||
<size key="customSize" width="155" height="100"/>
|
||||
</collectionViewCell>
|
||||
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="NAb-gd-esL">
|
||||
<rect key="frame" x="0.0" y="330" width="155" height="100"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||
<rect key="frame" x="0.0" y="0.0" width="155" height="100"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="Pa$sW0rD" textAlignment="center" minimumFontSize="8" translatesAutoresizingMaskIntoConstraints="NO" id="NXQ-Od-Jy6">
|
||||
<rect key="frame" x="8" y="20" width="139" height="37"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="textColor" red="0.40000000600000002" green="0.80000001190000003" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<fontDescription key="fontDescription" name="AmericanTypewriter-Bold" family="American Typewriter" pointSize="30"/>
|
||||
<textInputTraits key="textInputTraits"/>
|
||||
</textField>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.5" contentMode="left" text="apple.com" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="v9z-aA-Wf8" userLabel="Site Name">
|
||||
<rect key="frame" x="20" y="71" width="115" height="14"/>
|
||||
<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>
|
||||
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Frg-bw-g8o" userLabel="User">
|
||||
<rect key="frame" x="111" y="56" width="44" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" hint="Upgrades the password."/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="44" id="UGD-KU-u8S"/>
|
||||
<constraint firstAttribute="height" constant="44" id="wFx-lM-WCI"/>
|
||||
</constraints>
|
||||
<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>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.59999999999999998" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="NXQ-Od-Jy6" secondAttribute="trailing" constant="8" id="3dh-IZ-SNM"/>
|
||||
<constraint firstItem="NXQ-Od-Jy6" firstAttribute="top" secondItem="NAb-gd-esL" secondAttribute="top" constant="20" id="8a2-K2-sKN"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Frg-bw-g8o" secondAttribute="trailing" id="GC6-y3-tF7"/>
|
||||
<constraint firstItem="Frg-bw-g8o" firstAttribute="centerY" secondItem="v9z-aA-Wf8" secondAttribute="centerY" id="kxu-pO-2nt"/>
|
||||
<constraint firstItem="NXQ-Od-Jy6" firstAttribute="leading" secondItem="NAb-gd-esL" secondAttribute="leading" constant="8" id="lmb-U5-pxt"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Frg-bw-g8o" secondAttribute="bottom" id="nqb-wl-6mz"/>
|
||||
<constraint firstItem="v9z-aA-Wf8" firstAttribute="leading" secondItem="NAb-gd-esL" secondAttribute="leading" constant="20" id="sK7-qr-zbH"/>
|
||||
<constraint firstAttribute="trailing" secondItem="v9z-aA-Wf8" secondAttribute="trailing" constant="20" id="uNd-WT-Lcc"/>
|
||||
</constraints>
|
||||
<size key="customSize" width="155" height="100"/>
|
||||
</collectionViewCell>
|
||||
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="xsE-rV-8nf">
|
||||
<rect key="frame" x="165" y="330" width="155" height="100"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||
<rect key="frame" x="0.0" y="0.0" width="155" height="100"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="Pa$sW0rD" textAlignment="center" minimumFontSize="8" translatesAutoresizingMaskIntoConstraints="NO" id="Yrc-dU-d6S">
|
||||
<rect key="frame" x="8" y="20" width="139" height="37"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="textColor" red="0.40000000600000002" green="0.80000001190000003" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<fontDescription key="fontDescription" name="AmericanTypewriter-Bold" family="American Typewriter" pointSize="30"/>
|
||||
<textInputTraits key="textInputTraits"/>
|
||||
</textField>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.5" contentMode="left" text="apple.com" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="zs7-11-ikM" userLabel="Site Name">
|
||||
<rect key="frame" x="20" y="71" width="115" height="14"/>
|
||||
<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>
|
||||
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="LeF-6z-Ifm" userLabel="User">
|
||||
<rect key="frame" x="111" y="56" width="44" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" hint="Upgrades the password."/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="44" id="6mc-YO-3q6"/>
|
||||
<constraint firstAttribute="height" constant="44" id="e6g-fx-ckQ"/>
|
||||
</constraints>
|
||||
<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>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.59999999999999998" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="Yrc-dU-d6S" secondAttribute="trailing" constant="8" id="8yf-H3-zbZ"/>
|
||||
<constraint firstItem="LeF-6z-Ifm" firstAttribute="centerY" secondItem="zs7-11-ikM" secondAttribute="centerY" id="9AK-bk-Qfg"/>
|
||||
<constraint firstAttribute="trailing" secondItem="LeF-6z-Ifm" secondAttribute="trailing" id="Beh-AC-HaP"/>
|
||||
<constraint firstItem="Yrc-dU-d6S" firstAttribute="top" secondItem="xsE-rV-8nf" secondAttribute="top" constant="20" id="EOH-hn-h1Y"/>
|
||||
<constraint firstAttribute="trailing" secondItem="zs7-11-ikM" secondAttribute="trailing" constant="20" id="M0J-fx-26z"/>
|
||||
<constraint firstAttribute="bottom" secondItem="LeF-6z-Ifm" secondAttribute="bottom" id="NLT-HP-KpN"/>
|
||||
<constraint firstItem="zs7-11-ikM" firstAttribute="leading" secondItem="xsE-rV-8nf" secondAttribute="leading" constant="20" id="QMf-MV-lOW"/>
|
||||
<constraint firstItem="Yrc-dU-d6S" firstAttribute="leading" secondItem="xsE-rV-8nf" secondAttribute="leading" constant="8" id="aHB-Rf-cUO"/>
|
||||
</constraints>
|
||||
<size key="customSize" width="155" height="100"/>
|
||||
</collectionViewCell>
|
||||
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="zHS-Th-3gn">
|
||||
<rect key="frame" x="0.0" y="440" width="155" height="100"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||
<rect key="frame" x="0.0" y="0.0" width="155" height="100"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="Pa$sW0rD" textAlignment="center" minimumFontSize="8" translatesAutoresizingMaskIntoConstraints="NO" id="9ee-mJ-eh3">
|
||||
<rect key="frame" x="8" y="20" width="139" height="37"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="textColor" red="0.40000000600000002" green="0.80000001190000003" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<fontDescription key="fontDescription" name="AmericanTypewriter-Bold" family="American Typewriter" pointSize="30"/>
|
||||
<textInputTraits key="textInputTraits"/>
|
||||
</textField>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.5" contentMode="left" text="apple.com" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="dCl-BE-v0K" userLabel="Site Name">
|
||||
<rect key="frame" x="20" y="71" width="115" height="14"/>
|
||||
<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>
|
||||
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WaC-h5-oeJ" userLabel="User">
|
||||
<rect key="frame" x="111" y="56" width="44" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" hint="Upgrades the password."/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="44" id="DFK-9p-ZxD"/>
|
||||
<constraint firstAttribute="height" constant="44" id="xDl-42-Hve"/>
|
||||
</constraints>
|
||||
<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>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.59999999999999998" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="WaC-h5-oeJ" secondAttribute="trailing" id="BlA-PG-1jV"/>
|
||||
<constraint firstItem="WaC-h5-oeJ" firstAttribute="centerY" secondItem="dCl-BE-v0K" secondAttribute="centerY" id="HbH-b4-DS9"/>
|
||||
<constraint firstAttribute="bottom" secondItem="WaC-h5-oeJ" secondAttribute="bottom" id="UWg-oy-PRr"/>
|
||||
<constraint firstItem="9ee-mJ-eh3" firstAttribute="leading" secondItem="zHS-Th-3gn" secondAttribute="leading" constant="8" id="XGH-2B-Hvu"/>
|
||||
<constraint firstAttribute="trailing" secondItem="dCl-BE-v0K" secondAttribute="trailing" constant="20" id="cdu-a2-mbx"/>
|
||||
<constraint firstItem="9ee-mJ-eh3" firstAttribute="top" secondItem="zHS-Th-3gn" secondAttribute="top" constant="20" id="dIr-Dk-WN2"/>
|
||||
<constraint firstItem="dCl-BE-v0K" firstAttribute="leading" secondItem="zHS-Th-3gn" secondAttribute="leading" constant="20" id="hsW-p3-3bG"/>
|
||||
<constraint firstAttribute="trailing" secondItem="9ee-mJ-eh3" secondAttribute="trailing" constant="8" id="ivQ-wr-P6l"/>
|
||||
</constraints>
|
||||
<size key="customSize" width="155" height="100"/>
|
||||
</collectionViewCell>
|
||||
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="bJe-tf-5Rx">
|
||||
<rect key="frame" x="165" y="440" width="155" height="100"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||
<rect key="frame" x="0.0" y="0.0" width="155" height="100"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="Pa$sW0rD" textAlignment="center" minimumFontSize="8" translatesAutoresizingMaskIntoConstraints="NO" id="3nm-mc-zzo">
|
||||
<rect key="frame" x="8" y="20" width="139" height="37"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="textColor" red="0.40000000600000002" green="0.80000001190000003" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<fontDescription key="fontDescription" name="AmericanTypewriter-Bold" family="American Typewriter" pointSize="30"/>
|
||||
<textInputTraits key="textInputTraits"/>
|
||||
</textField>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.5" contentMode="left" text="apple.com" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="2BA-oe-kQD" userLabel="Site Name">
|
||||
<rect key="frame" x="20" y="71" width="115" height="14"/>
|
||||
<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>
|
||||
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qMO-6W-GuU" userLabel="User">
|
||||
<rect key="frame" x="111" y="56" width="44" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" hint="Upgrades the password."/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="44" id="LbZ-uh-nol"/>
|
||||
<constraint firstAttribute="height" constant="44" id="Ndb-t9-TxW"/>
|
||||
</constraints>
|
||||
<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>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.59999999999999998" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="3nm-mc-zzo" firstAttribute="leading" secondItem="bJe-tf-5Rx" secondAttribute="leading" constant="8" id="AYp-e8-5gC"/>
|
||||
<constraint firstAttribute="trailing" secondItem="3nm-mc-zzo" secondAttribute="trailing" constant="8" id="T38-qM-e2M"/>
|
||||
<constraint firstAttribute="trailing" secondItem="2BA-oe-kQD" secondAttribute="trailing" constant="20" id="f7l-I9-zaM"/>
|
||||
<constraint firstItem="3nm-mc-zzo" firstAttribute="top" secondItem="bJe-tf-5Rx" secondAttribute="top" constant="20" id="hRe-TW-46o"/>
|
||||
<constraint firstItem="2BA-oe-kQD" firstAttribute="leading" secondItem="bJe-tf-5Rx" secondAttribute="leading" constant="20" id="nWC-EX-ofO"/>
|
||||
<constraint firstAttribute="trailing" secondItem="qMO-6W-GuU" secondAttribute="trailing" id="toe-Bl-T6c"/>
|
||||
<constraint firstItem="qMO-6W-GuU" firstAttribute="centerY" secondItem="2BA-oe-kQD" secondAttribute="centerY" id="tsY-7P-F90"/>
|
||||
<constraint firstAttribute="bottom" secondItem="qMO-6W-GuU" secondAttribute="bottom" id="xsD-cK-4sK"/>
|
||||
</constraints>
|
||||
<size key="customSize" width="155" height="100"/>
|
||||
</collectionViewCell>
|
||||
</cells>
|
||||
</collectionView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="7Ya-U5-fiO" secondAttribute="trailing" id="8qJ-gg-fUO"/>
|
||||
<constraint firstAttribute="trailing" secondItem="9AA-6D-4V8" secondAttribute="trailing" id="FP7-Qe-blu"/>
|
||||
<constraint firstAttribute="bottom" secondItem="9AA-6D-4V8" secondAttribute="bottom" id="JbS-w0-5wP"/>
|
||||
<constraint firstItem="9AA-6D-4V8" firstAttribute="leading" secondItem="Po8-18-Xax" secondAttribute="leading" id="M2b-bS-NVY"/>
|
||||
<constraint firstItem="7Ya-U5-fiO" firstAttribute="leading" secondItem="Po8-18-Xax" secondAttribute="leading" id="a7q-di-M5Z"/>
|
||||
<constraint firstAttribute="trailing" secondItem="ChH-au-8t0" secondAttribute="trailing" id="fMf-oZ-BFw"/>
|
||||
<constraint firstAttribute="bottom" secondItem="ChH-au-8t0" secondAttribute="bottom" id="hLt-H9-tnd"/>
|
||||
<constraint firstItem="ChH-au-8t0" firstAttribute="leading" secondItem="Po8-18-Xax" secondAttribute="leading" id="qNv-w0-MXa"/>
|
||||
<constraint firstItem="ChH-au-8t0" firstAttribute="top" secondItem="7Ya-U5-fiO" secondAttribute="bottom" id="sya-hG-BjO"/>
|
||||
<constraint firstItem="7Ya-U5-fiO" firstAttribute="top" secondItem="Po8-18-Xax" secondAttribute="top" id="xN9-bT-6oI"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="rWM-08-aab" userLabel="User Selection">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="center" image="background.png" translatesAutoresizingMaskIntoConstraints="NO" id="ogf-kv-OVc" userLabel="Background">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
</imageView>
|
||||
<collectionView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" minimumZoomScale="0.0" maximumZoomScale="0.0" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="L6J-pd-gcp" userLabel="Avatar Collection">
|
||||
<rect key="frame" x="0.0" y="184" width="320" height="200"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="200" id="rzg-26-0FR"/>
|
||||
</constraints>
|
||||
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="0.0" minimumInteritemSpacing="0.0" id="ATB-kM-EGu">
|
||||
<size key="itemSize" width="160" height="200"/>
|
||||
<size key="headerReferenceSize" width="80" height="0.0"/>
|
||||
<size key="footerReferenceSize" width="80" height="0.0"/>
|
||||
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
|
||||
</collectionViewFlowLayout>
|
||||
<cells>
|
||||
<collectionViewCell opaque="NO" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="MPAvatarCell" id="Zab-uQ-uk9" customClass="MPAvatarCell">
|
||||
<rect key="frame" x="80" y="0.0" width="160" height="200"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="200"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="avatar-0.png" translatesAutoresizingMaskIntoConstraints="NO" id="Aca-he-7Qi" userLabel="Avatar">
|
||||
<rect key="frame" x="25" y="45" width="110" height="110"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="tintColor" red="0.47450980390000003" green="0.86666666670000003" blue="0.98431372549999996" alpha="1" colorSpace="calibratedRGB"/>
|
||||
</imageView>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0Sa-Vg-EEI" userLabel="Name Backdrop">
|
||||
<rect key="frame" x="20" y="92" width="120" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Maarten Billemont" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" adjustsLetterSpacingToFitWidth="YES" translatesAutoresizingMaskIntoConstraints="NO" id="cLT-s0-4SQ" userLabel="Name Field">
|
||||
<rect key="frame" x="5" y="0.0" width="110" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" name="Futura-CondensedExtraBold" family="Futura" pointSize="13"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="cLT-s0-4SQ" firstAttribute="leading" secondItem="0Sa-Vg-EEI" secondAttribute="leading" constant="5" id="Cs4-sn-MNX"/>
|
||||
<constraint firstItem="cLT-s0-4SQ" firstAttribute="top" secondItem="0Sa-Vg-EEI" secondAttribute="top" id="Dra-0a-zof"/>
|
||||
<constraint firstAttribute="trailing" secondItem="cLT-s0-4SQ" secondAttribute="trailing" constant="5" id="Ggy-TK-Iie"/>
|
||||
<constraint firstAttribute="bottom" secondItem="cLT-s0-4SQ" secondAttribute="bottom" id="YbE-dk-EQl"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<constraints>
|
||||
<constraint firstAttribute="centerX" secondItem="0Sa-Vg-EEI" secondAttribute="centerX" id="EYH-CQ-6TX"/>
|
||||
<constraint firstItem="0Sa-Vg-EEI" firstAttribute="top" secondItem="Aca-he-7Qi" secondAttribute="bottom" priority="500" constant="8" symbolic="YES" id="F67-h9-FDi"/>
|
||||
<constraint firstAttribute="centerX" secondItem="Aca-he-7Qi" secondAttribute="centerX" id="K7L-KI-BH9"/>
|
||||
<constraint firstAttribute="centerY" secondItem="Aca-he-7Qi" secondAttribute="centerY" id="fKx-ZZ-sJa"/>
|
||||
<constraint firstAttribute="centerY" secondItem="0Sa-Vg-EEI" secondAttribute="centerY" priority="750" id="qQO-z9-4AA"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
<outlet property="avatarImageView" destination="Aca-he-7Qi" id="Me2-jn-hSX"/>
|
||||
<outlet property="nameCenterConstraint" destination="qQO-z9-4AA" id="vBo-7a-Q1A"/>
|
||||
<outlet property="nameContainer" destination="0Sa-Vg-EEI" id="VLy-AI-Yh8"/>
|
||||
<outlet property="nameLabel" destination="cLT-s0-4SQ" id="85r-AJ-Zkb"/>
|
||||
</connections>
|
||||
</collectionViewCell>
|
||||
</cells>
|
||||
<collectionReusableView key="sectionHeaderView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="LD1-mt-htC">
|
||||
<rect key="frame" x="0.0" y="0.0" width="80" height="200"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</collectionReusableView>
|
||||
<collectionReusableView key="sectionFooterView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="G8v-Sb-ilL">
|
||||
<rect key="frame" x="240" y="0.0" width="80" height="200"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</collectionReusableView>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="S8q-YF-Kt9" id="mm7-Yb-NWW"/>
|
||||
<outlet property="delegate" destination="S8q-YF-Kt9" id="det-Eh-phM"/>
|
||||
</connections>
|
||||
</collectionView>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qp1-nX-o4i" userLabel="Entry">
|
||||
<rect key="frame" x="20" y="392" width="280" height="63"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Enter your full name:" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="5fe-rt-zFa">
|
||||
<rect key="frame" x="20" y="0.0" width="240" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" name="Copperplate" family="Copperplate" pointSize="17"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="ui_textfield.png" translatesAutoresizingMaskIntoConstraints="NO" id="UfK-na-vOU">
|
||||
<rect key="frame" x="0.0" y="26" width="280" height="37"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<rect key="contentStretch" x="0.25" y="0.25" width="0.49999999999999961" height="0.49999999999999961"/>
|
||||
</imageView>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" textAlignment="center" clearsOnBeginEditing="YES" minimumFontSize="14" translatesAutoresizingMaskIntoConstraints="NO" id="z3Z-AB-fG2">
|
||||
<rect key="frame" x="10" y="30" width="260" height="29"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<fontDescription key="fontDescription" name="Copperplate" family="Copperplate" pointSize="28"/>
|
||||
<textInputTraits key="textInputTraits" enablesReturnKeyAutomatically="YES" secureTextEntry="YES"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="S8q-YF-Kt9" id="5u3-XN-LOe"/>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="z3Z-AB-fG2" firstAttribute="bottom" secondItem="UfK-na-vOU" secondAttribute="bottom" constant="-4" id="753-1g-2UH"/>
|
||||
<constraint firstItem="5fe-rt-zFa" firstAttribute="leading" secondItem="qp1-nX-o4i" secondAttribute="leading" constant="20" symbolic="YES" id="B5U-63-4Dk"/>
|
||||
<constraint firstItem="z3Z-AB-fG2" firstAttribute="top" secondItem="UfK-na-vOU" secondAttribute="top" constant="4" id="DSx-ER-FLa"/>
|
||||
<constraint firstItem="UfK-na-vOU" firstAttribute="top" secondItem="5fe-rt-zFa" secondAttribute="bottom" constant="8" symbolic="YES" id="JSZ-G0-mRm"/>
|
||||
<constraint firstItem="UfK-na-vOU" firstAttribute="leading" secondItem="qp1-nX-o4i" secondAttribute="leading" id="MiQ-8c-N3e"/>
|
||||
<constraint firstAttribute="trailing" secondItem="5fe-rt-zFa" secondAttribute="trailing" constant="20" symbolic="YES" id="TZY-ev-UUs"/>
|
||||
<constraint firstItem="z3Z-AB-fG2" firstAttribute="leading" secondItem="UfK-na-vOU" secondAttribute="leading" constant="10" id="XRN-Nd-Dqu"/>
|
||||
<constraint firstItem="5fe-rt-zFa" firstAttribute="top" secondItem="qp1-nX-o4i" secondAttribute="top" id="caW-jx-6Ui"/>
|
||||
<constraint firstAttribute="bottom" secondItem="UfK-na-vOU" secondAttribute="bottom" id="iN7-BO-Qwf"/>
|
||||
<constraint firstAttribute="trailing" secondItem="UfK-na-vOU" secondAttribute="trailing" id="k3M-Oh-kM1"/>
|
||||
<constraint firstItem="z3Z-AB-fG2" firstAttribute="trailing" secondItem="UfK-na-vOU" secondAttribute="trailing" constant="-10" id="nEd-y0-Fzk"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vHz-dw-oPb" userLabel="GitTip" customClass="LLGitTip">
|
||||
<rect key="frame" x="116" y="505" width="89" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<state key="normal" image="gittip.png">
|
||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
</button>
|
||||
<view userInteractionEnabled="NO" alpha="0.0" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="069-Pu-yXe" userLabel="GitTip Tip">
|
||||
<rect key="frame" x="42" y="455" width="236" height="60"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="tip_basic_black.png" translatesAutoresizingMaskIntoConstraints="NO" id="Z8P-ZK-aS0">
|
||||
<rect key="frame" x="0.0" y="0.0" width="236" height="60"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<rect key="contentStretch" x="0.15000000000000002" y="0.0" width="0.69999999999999973" height="1"/>
|
||||
</imageView>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Why is Master Password free?" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="BLV-3x-Q0z">
|
||||
<rect key="frame" x="20" y="12" width="196" height="17"/>
|
||||
<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"/>
|
||||
<constraints>
|
||||
<constraint firstItem="BLV-3x-Q0z" firstAttribute="centerY" secondItem="069-Pu-yXe" secondAttribute="top" constant="20" id="1OF-bW-nts"/>
|
||||
<constraint firstAttribute="trailing" secondItem="BLV-3x-Q0z" secondAttribute="trailing" constant="20" id="25E-CG-7Kd"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Z8P-ZK-aS0" secondAttribute="bottom" id="3J6-eS-5gM"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Z8P-ZK-aS0" secondAttribute="trailing" id="7HN-va-k5B"/>
|
||||
<constraint firstItem="Z8P-ZK-aS0" firstAttribute="leading" secondItem="069-Pu-yXe" secondAttribute="leading" id="M1g-gb-jx2"/>
|
||||
<constraint firstItem="BLV-3x-Q0z" firstAttribute="leading" secondItem="069-Pu-yXe" secondAttribute="leading" constant="20" id="UNf-fZ-Bvm"/>
|
||||
<constraint firstItem="Z8P-ZK-aS0" firstAttribute="top" secondItem="069-Pu-yXe" secondAttribute="top" id="wre-wd-rRo"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.5" contentMode="left" text="Press and hold to delete or reset user." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="N9g-Kk-yjc" userLabel="Hint">
|
||||
<rect key="frame" x="20" y="534" width="280" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<fontDescription key="fontDescription" name="Copperplate" family="Copperplate" pointSize="12"/>
|
||||
<color key="textColor" cocoaTouchSystemColor="lightTextColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
<color key="shadowColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="ogf-kv-OVc" secondAttribute="trailing" id="0lH-vI-1xC"/>
|
||||
<constraint firstAttribute="trailing" secondItem="L6J-pd-gcp" secondAttribute="trailing" id="9fV-8e-y3E"/>
|
||||
<constraint firstItem="L6J-pd-gcp" firstAttribute="leading" secondItem="rWM-08-aab" secondAttribute="leading" id="BcO-0y-Nih"/>
|
||||
<constraint firstAttribute="centerY" secondItem="L6J-pd-gcp" secondAttribute="centerY" priority="750" id="CP5-mM-v8g"/>
|
||||
<constraint firstItem="qp1-nX-o4i" firstAttribute="leading" secondItem="rWM-08-aab" secondAttribute="leading" constant="20" symbolic="YES" id="DY1-Ad-Mbi"/>
|
||||
<constraint firstItem="qp1-nX-o4i" firstAttribute="top" secondItem="L6J-pd-gcp" secondAttribute="bottom" constant="8" symbolic="YES" id="IR6-Kh-W4O"/>
|
||||
<constraint firstItem="N9g-Kk-yjc" firstAttribute="top" secondItem="vHz-dw-oPb" secondAttribute="bottom" constant="8" symbolic="YES" id="Kgq-h5-fnU"/>
|
||||
<constraint firstItem="N9g-Kk-yjc" firstAttribute="leading" secondItem="rWM-08-aab" secondAttribute="leading" constant="20" id="QcK-dd-GJw"/>
|
||||
<constraint firstAttribute="trailing" secondItem="N9g-Kk-yjc" secondAttribute="trailing" constant="20" id="S20-mQ-WCJ"/>
|
||||
<constraint firstAttribute="bottom" secondItem="N9g-Kk-yjc" secondAttribute="bottom" constant="20" id="ZeY-ml-Ofn"/>
|
||||
<constraint firstItem="069-Pu-yXe" firstAttribute="bottom" secondItem="vHz-dw-oPb" secondAttribute="centerY" id="c3E-Dt-cD4"/>
|
||||
<constraint firstAttribute="trailing" secondItem="qp1-nX-o4i" secondAttribute="trailing" constant="20" symbolic="YES" id="cOq-BS-Xmo"/>
|
||||
<constraint firstItem="ogf-kv-OVc" firstAttribute="leading" secondItem="rWM-08-aab" secondAttribute="leading" id="ifY-DN-QCx"/>
|
||||
<constraint firstItem="069-Pu-yXe" firstAttribute="centerX" secondItem="vHz-dw-oPb" secondAttribute="centerX" constant="-0.5" id="jL7-kt-rXW"/>
|
||||
<constraint firstAttribute="centerX" secondItem="vHz-dw-oPb" secondAttribute="centerX" id="plh-tl-Wqc"/>
|
||||
<constraint firstAttribute="bottom" secondItem="ogf-kv-OVc" secondAttribute="bottom" id="yba-x9-YDp"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="am9-1J-ucG" secondAttribute="trailing" id="1fU-4J-Y6L"/>
|
||||
<constraint firstItem="am9-1J-ucG" firstAttribute="leading" secondItem="DOr-Xu-P9q" secondAttribute="leading" id="Enm-YH-vsP"/>
|
||||
<constraint firstItem="VGz-R0-vMD" firstAttribute="top" secondItem="Po8-18-Xax" secondAttribute="bottom" id="GpW-nq-C7W"/>
|
||||
<constraint firstItem="rWM-08-aab" firstAttribute="leading" secondItem="DOr-Xu-P9q" secondAttribute="leading" id="Il8-kg-Dra"/>
|
||||
<constraint firstItem="Po8-18-Xax" firstAttribute="leading" secondItem="DOr-Xu-P9q" secondAttribute="leading" id="JAA-Bc-QyC"/>
|
||||
<constraint firstItem="L6J-pd-gcp" firstAttribute="top" secondItem="zp4-4O-wZI" secondAttribute="bottom" priority="500" id="LNa-Fa-8yG"/>
|
||||
<constraint firstItem="am9-1J-ucG" firstAttribute="top" secondItem="DOr-Xu-P9q" secondAttribute="top" id="Pms-Ha-gAl"/>
|
||||
<constraint firstAttribute="trailing" secondItem="rWM-08-aab" secondAttribute="trailing" id="UPP-1n-zIe"/>
|
||||
<constraint firstItem="Po8-18-Xax" firstAttribute="top" secondItem="zp4-4O-wZI" secondAttribute="bottom" id="XkR-H1-R7r"/>
|
||||
<constraint firstItem="VGz-R0-vMD" firstAttribute="top" secondItem="rWM-08-aab" secondAttribute="bottom" id="fcH-lm-76a"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Po8-18-Xax" secondAttribute="trailing" id="iWn-vl-fqL"/>
|
||||
<constraint firstItem="rWM-08-aab" firstAttribute="top" secondItem="DOr-Xu-P9q" secondAttribute="top" id="tf6-jJ-CPm"/>
|
||||
<constraint firstItem="VGz-R0-vMD" firstAttribute="top" secondItem="am9-1J-ucG" secondAttribute="bottom" id="zc7-3w-j6g"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" id="Y58-uL-OQA">
|
||||
<barButtonItem key="leftBarButtonItem" title="Sign Out" id="xpl-jm-MOQ">
|
||||
<connections>
|
||||
<action selector="doSignOut:" destination="S8q-YF-Kt9" id="wim-fb-ioW"/>
|
||||
</connections>
|
||||
</barButtonItem>
|
||||
</navigationItem>
|
||||
<connections>
|
||||
<outlet property="avatarCollectionCenterConstraint" destination="CP5-mM-v8g" id="35U-gY-EkY"/>
|
||||
<outlet property="avatarCollectionView" destination="L6J-pd-gcp" id="fAq-mC-iVZ"/>
|
||||
<outlet property="entryContainer" destination="qp1-nX-o4i" id="tSJ-e8-W8b"/>
|
||||
<outlet property="entryField" destination="z3Z-AB-fG2" id="iAO-Gd-flO"/>
|
||||
<outlet property="entryLabel" destination="5fe-rt-zFa" id="Nn1-nQ-oy3"/>
|
||||
<outlet property="gitTipButton" destination="vHz-dw-oPb" id="3tG-8S-u13"/>
|
||||
<outlet property="gitTipTip" destination="069-Pu-yXe" id="wWf-2X-Ryw"/>
|
||||
<outlet property="hintLabel" destination="N9g-Kk-yjc" id="Tve-2r-t0Q"/>
|
||||
<outlet property="passwordCollectionView" destination="ChH-au-8t0" id="1KK-zM-cgk"/>
|
||||
<outlet property="passwordSelectionContainer" destination="Po8-18-Xax" id="8aa-W1-vo1"/>
|
||||
<outlet property="searchDisplayController" destination="h98-GT-FoS" id="VvS-JO-rqq"/>
|
||||
<outlet property="userSelectionContainer" destination="rWM-08-aab" id="Yme-hX-8P0"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="8hZ-Tb-wZw" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
<searchDisplayController id="h98-GT-FoS">
|
||||
<connections>
|
||||
<outlet property="delegate" destination="S8q-YF-Kt9" id="hyY-rf-2x2"/>
|
||||
<outlet property="searchBar" destination="7Ya-U5-fiO" id="CT1-nG-f2Z"/>
|
||||
<outlet property="searchContentsController" destination="S8q-YF-Kt9" id="2RA-rs-GhH"/>
|
||||
<outlet property="searchResultsDataSource" destination="S8q-YF-Kt9" id="Cdu-go-UBQ"/>
|
||||
<outlet property="searchResultsDelegate" destination="S8q-YF-Kt9" id="xxe-xE-sFM"/>
|
||||
</connections>
|
||||
</searchDisplayController>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="813" y="464"/>
|
||||
</scene>
|
||||
<!--Navigation Controller-->
|
||||
<scene sceneID="bzn-yi-kMJ">
|
||||
<objects>
|
||||
<navigationController definesPresentationContext="YES" id="Q1S-vU-GGO" sceneMemberID="viewController">
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" id="4yl-zs-iUd">
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<color key="barTintColor" red="0.12549020350000001" green="0.1411764771" blue="0.14901961389999999" alpha="1" colorSpace="calibratedRGB"/>
|
||||
</navigationBar>
|
||||
<connections>
|
||||
<segue destination="S8q-YF-Kt9" kind="relationship" relationship="rootViewController" id="te6-8H-M7K"/>
|
||||
</connections>
|
||||
</navigationController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="OhM-cb-bMF" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="276" y="464"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="avatar-0.png" width="110" height="110"/>
|
||||
<image name="background.png" width="568" height="568"/>
|
||||
<image name="gittip.png" width="89" height="18"/>
|
||||
<image name="icon_edit.png" width="32" height="32"/>
|
||||
<image name="icon_person.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="tip_basic_black.png" width="210" height="60"/>
|
||||
<image name="ui_textfield.png" width="158" height="34"/>
|
||||
</resources>
|
||||
<color key="tintColor" name="controlLightHighlightColor" catalog="System" colorSpace="catalog"/>
|
||||
<simulatedMetricsContainer key="defaultSimulatedMetrics">
|
||||
<simulatedStatusBarMetrics key="statusBar"/>
|
||||
<simulatedOrientationMetrics key="orientation"/>
|
||||
<simulatedScreenMetrics key="destination" type="retina4"/>
|
||||
</simulatedMetricsContainer>
|
||||
</document>
|
BIN
MasterPassword/Resources/Media/Avatars/avatar-add.png
Normal file
BIN
MasterPassword/Resources/Media/Avatars/avatar-add.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.6 KiB |
BIN
MasterPassword/Resources/Media/Avatars/avatar-add@2x.png
Normal file
BIN
MasterPassword/Resources/Media/Avatars/avatar-add@2x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
Loading…
Reference in New Issue
Block a user