Improved overlay navigation, store refactoring and automatic sizing of store cells.
This commit is contained in:
parent
fe5828c724
commit
466863f8fd
@ -24,7 +24,7 @@ id<MPAlgorithm> MPAlgorithmForVersion(NSUInteger version) {
|
|||||||
versionToAlgorithm = [NSMutableDictionary dictionary];
|
versionToAlgorithm = [NSMutableDictionary dictionary];
|
||||||
|
|
||||||
id<MPAlgorithm> algorithm = versionToAlgorithm[@(version)];
|
id<MPAlgorithm> algorithm = versionToAlgorithm[@(version)];
|
||||||
if (!algorithm) if ((algorithm = [NSClassFromString( strf( @"MPAlgorithmV%lu", (unsigned long)version ) ) new]))
|
if (!algorithm && (algorithm = (id<MPAlgorithm>)[NSClassFromString( strf( @"MPAlgorithmV%lu", (unsigned long)version ) ) new]))
|
||||||
versionToAlgorithm[@(version)] = algorithm;
|
versionToAlgorithm[@(version)] = algorithm;
|
||||||
|
|
||||||
return algorithm;
|
return algorithm;
|
||||||
|
@ -6,15 +6,21 @@
|
|||||||
// Copyright (c) 2011 Lyndir. All rights reserved.
|
// Copyright (c) 2011 Lyndir. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <StoreKit/StoreKit.h>
|
|
||||||
#import "MPAppDelegate_Shared.h"
|
#import "MPAppDelegate_Shared.h"
|
||||||
|
|
||||||
@interface MPAppDelegate_Shared(InApp)<SKProductsRequestDelegate, SKPaymentTransactionObserver>
|
#define MPProductGenerateLogins @"com.lyndir.masterpassword.products.generatelogins"
|
||||||
|
#define MPProductGenerateAnswers @"com.lyndir.masterpassword.products.generateanswers"
|
||||||
|
|
||||||
|
@interface MPAppDelegate_Shared(InApp)
|
||||||
|
|
||||||
@property(nonatomic, strong) NSArray /* SKProduct */ *products;
|
@property(nonatomic, strong) NSArray /* SKProduct */ *products;
|
||||||
@property(nonatomic, strong) NSArray /* SKPaymentTransaction */ *paymentTransactions;
|
@property(nonatomic, strong) NSArray /* SKPaymentTransaction */ *paymentTransactions;
|
||||||
|
|
||||||
- (void)updateProducts;
|
- (void)updateProducts;
|
||||||
|
- (BOOL)canMakePayments;
|
||||||
- (BOOL)isPurchased:(NSString *)productIdentifier;
|
- (BOOL)isPurchased:(NSString *)productIdentifier;
|
||||||
|
|
||||||
|
- (void)restoreCompletedTransactions;
|
||||||
|
- (void)purchaseProductWithIdentifier:(NSString *)productIdentifier;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -7,6 +7,10 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import "MPAppDelegate_InApp.h"
|
#import "MPAppDelegate_InApp.h"
|
||||||
|
#import <StoreKit/StoreKit.h>
|
||||||
|
|
||||||
|
@interface MPAppDelegate_Shared(InApp_Private)<SKProductsRequestDelegate, SKPaymentTransactionObserver>
|
||||||
|
@end
|
||||||
|
|
||||||
@implementation MPAppDelegate_Shared(InApp)
|
@implementation MPAppDelegate_Shared(InApp)
|
||||||
|
|
||||||
@ -15,22 +19,46 @@ PearlAssociatedObjectProperty( NSArray*, PaymentTransactions, paymentTransaction
|
|||||||
|
|
||||||
- (void)updateProducts {
|
- (void)updateProducts {
|
||||||
|
|
||||||
static dispatch_once_t once = 0;
|
|
||||||
dispatch_once( &once, ^{
|
|
||||||
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
|
|
||||||
} );
|
|
||||||
|
|
||||||
SKProductsRequest *productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:
|
SKProductsRequest *productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:
|
||||||
[[NSSet alloc] initWithObjects:MPProductGenerateLogins, MPProductGenerateAnswers, nil]];
|
[[NSSet alloc] initWithObjects:MPProductGenerateLogins, MPProductGenerateAnswers, nil]];
|
||||||
productsRequest.delegate = self;
|
productsRequest.delegate = self;
|
||||||
[productsRequest start];
|
[productsRequest start];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (SKPaymentQueue *)paymentQueue {
|
||||||
|
|
||||||
|
static dispatch_once_t once = 0;
|
||||||
|
dispatch_once( &once, ^{
|
||||||
|
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
|
||||||
|
} );
|
||||||
|
|
||||||
|
return [SKPaymentQueue defaultQueue];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)canMakePayments {
|
||||||
|
|
||||||
|
return [SKPaymentQueue canMakePayments];
|
||||||
|
}
|
||||||
|
|
||||||
- (BOOL)isPurchased:(NSString *)productIdentifier {
|
- (BOOL)isPurchased:(NSString *)productIdentifier {
|
||||||
|
|
||||||
return YES; //[[NSUserDefaults standardUserDefaults] objectForKey:productIdentifier] != nil;
|
return YES; //[[NSUserDefaults standardUserDefaults] objectForKey:productIdentifier] != nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)restoreCompletedTransactions {
|
||||||
|
|
||||||
|
[[self paymentQueue] restoreCompletedTransactions];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)purchaseProductWithIdentifier:(NSString *)productIdentifier {
|
||||||
|
|
||||||
|
for (SKProduct *product in self.products)
|
||||||
|
if ([product.productIdentifier isEqualToString:productIdentifier]) {
|
||||||
|
[[self paymentQueue] addPayment:[SKPayment paymentWithProduct:product]];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - SKProductsRequestDelegate
|
#pragma mark - SKProductsRequestDelegate
|
||||||
|
|
||||||
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
|
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
// Copyright (c) 2011 Lyndir. All rights reserved.
|
// Copyright (c) 2011 Lyndir. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#import <StoreKit/StoreKit.h>
|
||||||
#import "MPAppDelegate_Shared.h"
|
#import "MPAppDelegate_Shared.h"
|
||||||
#import "MPAppDelegate_Store.h"
|
#import "MPAppDelegate_Store.h"
|
||||||
#import "MPAppDelegate_Key.h"
|
#import "MPAppDelegate_Key.h"
|
||||||
|
@ -87,9 +87,6 @@ typedef NS_ENUM(NSUInteger, MPSiteType) {
|
|||||||
#define MPSitesImportedNotificationUserKey @"MPSitesImportedNotificationUserKey"
|
#define MPSitesImportedNotificationUserKey @"MPSitesImportedNotificationUserKey"
|
||||||
#define MPInconsistenciesFixResultUserKey @"MPInconsistenciesFixResultUserKey"
|
#define MPInconsistenciesFixResultUserKey @"MPInconsistenciesFixResultUserKey"
|
||||||
|
|
||||||
#define MPProductGenerateLogins @"com.lyndir.masterpassword.products.generatelogins"
|
|
||||||
#define MPProductGenerateAnswers @"com.lyndir.masterpassword.products.generateanswers"
|
|
||||||
|
|
||||||
static void MPCheckpoint(NSString *checkpoint, NSDictionary *attributes) {
|
static void MPCheckpoint(NSString *checkpoint, NSDictionary *attributes) {
|
||||||
|
|
||||||
inf(@"%@: %@", checkpoint, attributes);
|
inf(@"%@: %@", checkpoint, attributes);
|
||||||
|
@ -32,10 +32,14 @@
|
|||||||
|
|
||||||
self.tableView.tableHeaderView = [UIView new];
|
self.tableView.tableHeaderView = [UIView new];
|
||||||
self.tableView.tableFooterView = [UIView new];
|
self.tableView.tableFooterView = [UIView new];
|
||||||
self.tableView.layer.shadowOpacity = 1;
|
|
||||||
self.view.backgroundColor = [UIColor clearColor];
|
self.view.backgroundColor = [UIColor clearColor];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (UIStatusBarStyle)preferredStatusBarStyle {
|
||||||
|
|
||||||
|
return UIStatusBarStyleLightContent;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - State
|
#pragma mark - State
|
||||||
|
|
||||||
- (void)setSite:(MPSiteEntity *)site {
|
- (void)setSite:(MPSiteEntity *)site {
|
||||||
@ -203,6 +207,7 @@
|
|||||||
|
|
||||||
- (void)setSite:(MPSiteEntity *)site {
|
- (void)setSite:(MPSiteEntity *)site {
|
||||||
|
|
||||||
|
self.titleLabel.text = strl( @"Answer for %@:", site.name );
|
||||||
self.answerField.text = @"...";
|
self.answerField.text = @"...";
|
||||||
[site.algorithm resolveAnswerForSite:site usingKey:[MPiOSAppDelegate get].key result:^(NSString *result) {
|
[site.algorithm resolveAnswerForSite:site usingKey:[MPiOSAppDelegate get].key result:^(NSString *result) {
|
||||||
PearlMainQueue( ^{
|
PearlMainQueue( ^{
|
||||||
|
@ -19,23 +19,6 @@
|
|||||||
#import "MPAppSettingsViewController.h"
|
#import "MPAppSettingsViewController.h"
|
||||||
#import "UIColor+Expanded.h"
|
#import "UIColor+Expanded.h"
|
||||||
|
|
||||||
@interface MPTableView:UITableView
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation MPTableView
|
|
||||||
|
|
||||||
- (void)layoutSubviews {
|
|
||||||
|
|
||||||
[super layoutSubviews];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setContentInset:(UIEdgeInsets)contentInset {
|
|
||||||
|
|
||||||
[super setContentInset:contentInset];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation MPAppSettingsViewController {
|
@implementation MPAppSettingsViewController {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,6 +53,11 @@
|
|||||||
[self reset];
|
[self reset];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (UIStatusBarStyle)preferredStatusBarStyle {
|
||||||
|
|
||||||
|
return UIStatusBarStyleLightContent;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - UITextFieldDelegate
|
#pragma mark - UITextFieldDelegate
|
||||||
|
|
||||||
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
|
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
|
||||||
|
@ -18,8 +18,16 @@
|
|||||||
|
|
||||||
#import "MPOverlayViewController.h"
|
#import "MPOverlayViewController.h"
|
||||||
|
|
||||||
|
@implementation MPOverlayViewController {
|
||||||
|
NSMutableDictionary *_dismissSegueByButton;
|
||||||
|
}
|
||||||
|
|
||||||
@implementation MPOverlayViewController
|
- (void)awakeFromNib {
|
||||||
|
|
||||||
|
[super awakeFromNib];
|
||||||
|
|
||||||
|
_dismissSegueByButton = [NSMutableDictionary dictionary];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)viewWillAppear:(BOOL)animated {
|
- (void)viewWillAppear:(BOOL)animated {
|
||||||
|
|
||||||
@ -29,12 +37,62 @@
|
|||||||
[self performSegueWithIdentifier:@"root" sender:self];
|
[self performSegueWithIdentifier:@"root" sender:self];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (UIViewController *)childViewControllerForStatusBarStyle {
|
||||||
|
|
||||||
|
return [self.childViewControllers lastObject];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIViewController *)childViewControllerForStatusBarHidden {
|
||||||
|
|
||||||
|
return self.childViewControllerForStatusBarStyle;
|
||||||
|
}
|
||||||
|
|
||||||
- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController
|
- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController
|
||||||
fromViewController:(UIViewController *)fromViewController identifier:(NSString *)identifier {
|
fromViewController:(UIViewController *)fromViewController identifier:(NSString *)identifier {
|
||||||
|
|
||||||
return [[MPOverlaySegue alloc] initWithIdentifier:identifier source:fromViewController destination:toViewController];
|
return [[MPOverlaySegue alloc] initWithIdentifier:identifier source:fromViewController destination:toViewController];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)addDismissButtonForSegue:(MPOverlaySegue *)segue {
|
||||||
|
|
||||||
|
UIButton *dismissButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||||
|
[dismissButton addTarget:self action:@selector( dismissOverlay: ) forControlEvents:UIControlEventTouchUpInside];
|
||||||
|
dismissButton.backgroundColor = [UIColor colorWithWhite:0 alpha:0.3f];
|
||||||
|
dismissButton.frame = self.view.bounds;
|
||||||
|
dismissButton.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
||||||
|
_dismissSegueByButton[[NSValue valueWithNonretainedObject:dismissButton]] =
|
||||||
|
[[MPOverlaySegue alloc] initWithIdentifier:@"dismiss-overlay"
|
||||||
|
source:segue.destinationViewController destination:segue.sourceViewController];
|
||||||
|
[self.view addSubview:dismissButton];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)dismissOverlay:(UIButton *)dismissButton {
|
||||||
|
|
||||||
|
NSValue *dismissSegueKey = [NSValue valueWithNonretainedObject:dismissButton];
|
||||||
|
[((UIStoryboardSegue *)_dismissSegueByButton[dismissSegueKey]) perform];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)removeDismissButtonForViewController:(UIViewController *)viewController {
|
||||||
|
|
||||||
|
UIButton *dismissButton = nil;
|
||||||
|
for (NSValue *dismissButtonValue in [_dismissSegueByButton allKeys])
|
||||||
|
if (((UIStoryboardSegue *)_dismissSegueByButton[dismissButtonValue]).sourceViewController == viewController) {
|
||||||
|
dismissButton = [dismissButtonValue nonretainedObjectValue];
|
||||||
|
NSAssert([self.view.subviews containsObject:dismissButton], @"Missing dismiss button in dictionary.");
|
||||||
|
}
|
||||||
|
if (!dismissButton)
|
||||||
|
return;
|
||||||
|
|
||||||
|
NSValue *dismissSegueKey = [NSValue valueWithNonretainedObject:dismissButton];
|
||||||
|
[_dismissSegueByButton removeObjectForKey:dismissSegueKey];
|
||||||
|
|
||||||
|
[UIView animateWithDuration:0.1f animations:^{
|
||||||
|
dismissButton.alpha = 0;
|
||||||
|
} completion:^(BOOL finished) {
|
||||||
|
[dismissButton removeFromSuperview];
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation MPOverlaySegue
|
@implementation MPOverlaySegue
|
||||||
@ -44,7 +102,7 @@
|
|||||||
UIViewController *sourceViewController = self.sourceViewController;
|
UIViewController *sourceViewController = self.sourceViewController;
|
||||||
UIViewController *destinationViewController = self.destinationViewController;
|
UIViewController *destinationViewController = self.destinationViewController;
|
||||||
MPOverlayViewController *containerViewController = self.sourceViewController;
|
MPOverlayViewController *containerViewController = self.sourceViewController;
|
||||||
while (![containerViewController isKindOfClass:[MPOverlayViewController class]])
|
while (containerViewController && ![(id)containerViewController isKindOfClass:[MPOverlayViewController class]])
|
||||||
containerViewController = (id)containerViewController.parentViewController;
|
containerViewController = (id)containerViewController.parentViewController;
|
||||||
NSAssert( [containerViewController isKindOfClass:[MPOverlayViewController class]],
|
NSAssert( [containerViewController isKindOfClass:[MPOverlayViewController class]],
|
||||||
@"Not an overlay container: %@", containerViewController );
|
@"Not an overlay container: %@", containerViewController );
|
||||||
@ -52,11 +110,23 @@
|
|||||||
if (!destinationViewController.parentViewController) {
|
if (!destinationViewController.parentViewController) {
|
||||||
// Winding
|
// Winding
|
||||||
[containerViewController addChildViewController:destinationViewController];
|
[containerViewController addChildViewController:destinationViewController];
|
||||||
|
[containerViewController setNeedsStatusBarAppearanceUpdate];
|
||||||
|
|
||||||
|
[containerViewController addDismissButtonForSegue:self];
|
||||||
|
destinationViewController.view.frame = containerViewController.view.bounds;
|
||||||
|
destinationViewController.view.translatesAutoresizingMaskIntoConstraints = YES;
|
||||||
|
destinationViewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
||||||
[containerViewController.view addSubview:destinationViewController.view];
|
[containerViewController.view addSubview:destinationViewController.view];
|
||||||
CGRectSetY( destinationViewController.view.frame, containerViewController.view.frame.size.height );
|
|
||||||
[UIView transitionWithView:containerViewController.view duration:0.3f
|
CGRectSetY( destinationViewController.view.frame, 100 );
|
||||||
|
destinationViewController.view.transform = CGAffineTransformMakeScale( 1.2f, 1.2f );
|
||||||
|
destinationViewController.view.alpha = 0;
|
||||||
|
|
||||||
|
[UIView transitionWithView:containerViewController.view duration:[self.identifier isEqualToString:@"root"]? 0: 0.3f
|
||||||
options:UIViewAnimationOptionAllowAnimatedContent animations:^{
|
options:UIViewAnimationOptionAllowAnimatedContent animations:^{
|
||||||
|
destinationViewController.view.transform = CGAffineTransformIdentity;
|
||||||
CGRectSetY( destinationViewController.view.frame, 0 );
|
CGRectSetY( destinationViewController.view.frame, 0 );
|
||||||
|
destinationViewController.view.alpha = 1;
|
||||||
} completion:^(BOOL finished) {
|
} completion:^(BOOL finished) {
|
||||||
if (finished)
|
if (finished)
|
||||||
[destinationViewController didMoveToParentViewController:containerViewController];
|
[destinationViewController didMoveToParentViewController:containerViewController];
|
||||||
@ -65,13 +135,17 @@
|
|||||||
else {
|
else {
|
||||||
// Unwinding
|
// Unwinding
|
||||||
[sourceViewController willMoveToParentViewController:nil];
|
[sourceViewController willMoveToParentViewController:nil];
|
||||||
[UIView transitionWithView:containerViewController.view duration:0.3f
|
[UIView transitionWithView:containerViewController.view duration:0.2f
|
||||||
options:UIViewAnimationOptionAllowAnimatedContent animations:^{
|
options:UIViewAnimationOptionAllowAnimatedContent animations:^{
|
||||||
CGRectSetY( sourceViewController.view.bounds, containerViewController.view.frame.size.height );
|
CGRectSetY( sourceViewController.view.frame, 100 );
|
||||||
|
sourceViewController.view.transform = CGAffineTransformMakeScale( 0.8f, 0.8f );
|
||||||
|
sourceViewController.view.alpha = 0;
|
||||||
|
[containerViewController removeDismissButtonForViewController:sourceViewController];
|
||||||
} completion:^(BOOL finished) {
|
} completion:^(BOOL finished) {
|
||||||
if (finished) {
|
if (finished) {
|
||||||
[sourceViewController.view removeFromSuperview];
|
[sourceViewController.view removeFromSuperview];
|
||||||
[sourceViewController removeFromParentViewController];
|
[sourceViewController removeFromParentViewController];
|
||||||
|
[containerViewController setNeedsStatusBarAppearanceUpdate];
|
||||||
}
|
}
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
@ -62,11 +62,10 @@
|
|||||||
|
|
||||||
[self setupLayer];
|
[self setupLayer];
|
||||||
|
|
||||||
[self observeKeyPath:@"bounds" withBlock:^(id from, id to, NSKeyValueChange cause, id _self) {
|
[self observeKeyPath:@"bounds" withBlock:^(id from, id to, NSKeyValueChange cause, MPPasswordCell *_self) {
|
||||||
if (from && !CGSizeEqualToSize( [from CGRectValue].size, [to CGRectValue].size ))
|
if (from && !CGSizeEqualToSize( [from CGRectValue].size, [to CGRectValue].size ))
|
||||||
[_self setupLayer];
|
[_self setupLayer];
|
||||||
}];
|
}];
|
||||||
|
|
||||||
[self.contentButton observeKeyPath:@"highlighted"
|
[self.contentButton observeKeyPath:@"highlighted"
|
||||||
withBlock:^(id from, id to, NSKeyValueChange cause, UIButton *button) {
|
withBlock:^(id from, id to, NSKeyValueChange cause, UIButton *button) {
|
||||||
[UIView animateWithDuration:.2f delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
|
[UIView animateWithDuration:.2f delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
|
||||||
@ -141,6 +140,7 @@
|
|||||||
|
|
||||||
- (void)dealloc {
|
- (void)dealloc {
|
||||||
|
|
||||||
|
[self removeKeyPathObservers];
|
||||||
[self.contentButton removeKeyPathObservers];
|
[self.contentButton removeKeyPathObservers];
|
||||||
[self.loginNameButton removeKeyPathObservers];
|
[self.loginNameButton removeKeyPathObservers];
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
#import "MPTypeViewController.h"
|
|
||||||
@class MPStoreProductCell;
|
@class MPStoreProductCell;
|
||||||
|
|
||||||
@interface MPStoreViewController : PearlMutableStaticTableViewController
|
@interface MPStoreViewController : PearlMutableStaticTableViewController
|
||||||
|
@ -6,15 +6,11 @@
|
|||||||
// Copyright (c) 2012 Lyndir. All rights reserved.
|
// Copyright (c) 2012 Lyndir. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <StoreKit/StoreKit.h>
|
|
||||||
#import "MPStoreViewController.h"
|
#import "MPStoreViewController.h"
|
||||||
#import "MPiOSAppDelegate.h"
|
#import "MPiOSAppDelegate.h"
|
||||||
#import "MPAppDelegate_Key.h"
|
|
||||||
#import "MPAppDelegate_Store.h"
|
|
||||||
#import "UIColor+Expanded.h"
|
#import "UIColor+Expanded.h"
|
||||||
#import "MPPasswordsViewController.h"
|
|
||||||
#import "MPCoachmarkViewController.h"
|
|
||||||
#import "MPAppDelegate_InApp.h"
|
#import "MPAppDelegate_InApp.h"
|
||||||
|
#import <StoreKit/StoreKit.h>
|
||||||
|
|
||||||
@interface MPStoreViewController()
|
@interface MPStoreViewController()
|
||||||
|
|
||||||
@ -31,6 +27,9 @@
|
|||||||
self.currencyFormatter = [NSNumberFormatter new];
|
self.currencyFormatter = [NSNumberFormatter new];
|
||||||
self.currencyFormatter.numberStyle = NSNumberFormatterCurrencyStyle;
|
self.currencyFormatter.numberStyle = NSNumberFormatterCurrencyStyle;
|
||||||
|
|
||||||
|
self.tableView.tableHeaderView = [UIView new];
|
||||||
|
self.tableView.tableFooterView = [UIView new];
|
||||||
|
self.tableView.estimatedRowHeight = 400;
|
||||||
self.view.backgroundColor = [UIColor clearColor];
|
self.view.backgroundColor = [UIColor clearColor];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,6 +72,13 @@
|
|||||||
- (MPStoreProductCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
- (MPStoreProductCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||||
|
|
||||||
MPStoreProductCell *cell = (MPStoreProductCell *)[super tableView:tableView cellForRowAtIndexPath:indexPath];
|
MPStoreProductCell *cell = (MPStoreProductCell *)[super tableView:tableView cellForRowAtIndexPath:indexPath];
|
||||||
|
if (cell.contentView.translatesAutoresizingMaskIntoConstraints) {
|
||||||
|
cell.contentView.translatesAutoresizingMaskIntoConstraints = NO;
|
||||||
|
[cell addConstraint:
|
||||||
|
[NSLayoutConstraint constraintWithItem:cell attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual
|
||||||
|
toItem:cell.contentView attribute:NSLayoutAttributeWidth multiplier:1 constant:0]];
|
||||||
|
}
|
||||||
|
|
||||||
if (indexPath.section == 0)
|
if (indexPath.section == 0)
|
||||||
cell.selectionStyle = [[MPiOSAppDelegate get] isPurchased:[self productForCell:cell].productIdentifier]?
|
cell.selectionStyle = [[MPiOSAppDelegate get] isPurchased:[self productForCell:cell].productIdentifier]?
|
||||||
UITableViewCellSelectionStyleDefault: UITableViewCellSelectionStyleNone;
|
UITableViewCellSelectionStyleDefault: UITableViewCellSelectionStyleNone;
|
||||||
@ -85,9 +91,17 @@
|
|||||||
return cell;
|
return cell;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||||
|
|
||||||
|
UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
|
||||||
|
[cell layoutIfNeeded];
|
||||||
|
|
||||||
|
return cell.contentView.bounds.size.height;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
|
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||||
|
|
||||||
if (![SKPaymentQueue canMakePayments]) {
|
if (![[MPAppDelegate_Shared get] canMakePayments]) {
|
||||||
[PearlAlert showAlertWithTitle:@"Store Not Set Up" message:
|
[PearlAlert showAlertWithTitle:@"Store Not Set Up" message:
|
||||||
@"Try logging using the App Store or from Settings."
|
@"Try logging using the App Store or from Settings."
|
||||||
viewStyle:UIAlertViewStyleDefault initAlert:nil
|
viewStyle:UIAlertViewStyleDefault initAlert:nil
|
||||||
@ -99,7 +113,7 @@
|
|||||||
SKProduct *product = [self productForCell:cell];
|
SKProduct *product = [self productForCell:cell];
|
||||||
|
|
||||||
if (product)
|
if (product)
|
||||||
[[SKPaymentQueue defaultQueue] addPayment:[SKPayment paymentWithProduct:product]];
|
[[MPAppDelegate_Shared get] purchaseProductWithIdentifier:product.productIdentifier];
|
||||||
|
|
||||||
[tableView deselectRowAtIndexPath:indexPath animated:YES];
|
[tableView deselectRowAtIndexPath:indexPath animated:YES];
|
||||||
}
|
}
|
||||||
@ -115,7 +129,7 @@
|
|||||||
if (buttonIndex == [alert cancelButtonIndex])
|
if (buttonIndex == [alert cancelButtonIndex])
|
||||||
return;
|
return;
|
||||||
|
|
||||||
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
|
[[MPAppDelegate_Shared get] restoreCompletedTransactions];
|
||||||
} cancelTitle:@"Cancel" otherTitles:@"Find Purchases", nil];
|
} cancelTitle:@"Cancel" otherTitles:@"Find Purchases", nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,6 +74,8 @@ typedef NS_ENUM( NSUInteger, MPActiveUserState ) {
|
|||||||
self.view.backgroundColor = [UIColor clearColor];
|
self.view.backgroundColor = [UIColor clearColor];
|
||||||
self.avatarCollectionView.allowsMultipleSelection = YES;
|
self.avatarCollectionView.allowsMultipleSelection = YES;
|
||||||
[self.entryField addTarget:self action:@selector( textFieldEditingChanged: ) forControlEvents:UIControlEventEditingChanged];
|
[self.entryField addTarget:self action:@selector( textFieldEditingChanged: ) forControlEvents:UIControlEventEditingChanged];
|
||||||
|
|
||||||
|
[self setActive:YES animated:NO];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)viewWillAppear:(BOOL)animated {
|
- (void)viewWillAppear:(BOOL)animated {
|
||||||
@ -81,7 +83,6 @@ typedef NS_ENUM( NSUInteger, MPActiveUserState ) {
|
|||||||
[super viewWillAppear:animated];
|
[super viewWillAppear:animated];
|
||||||
|
|
||||||
self.userSelectionContainer.alpha = 0;
|
self.userSelectionContainer.alpha = 0;
|
||||||
[self setActive:YES animated:NO];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)viewWillDisappear:(BOOL)animated {
|
- (void)viewWillDisappear:(BOOL)animated {
|
||||||
|
@ -7,8 +7,6 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
#import <MessageUI/MessageUI.h>
|
|
||||||
#import <StoreKit/StoreKit.h>
|
|
||||||
|
|
||||||
#import "MPAppDelegate_Shared.h"
|
#import "MPAppDelegate_Shared.h"
|
||||||
|
|
||||||
|
@ -6,13 +6,10 @@
|
|||||||
// Copyright (c) 2011 Lyndir. All rights reserved.
|
// Copyright (c) 2011 Lyndir. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Crashlytics/Crashlytics.h>
|
|
||||||
#import <MobileCoreServices/MobileCoreServices.h>
|
|
||||||
#import "MPiOSAppDelegate.h"
|
#import "MPiOSAppDelegate.h"
|
||||||
#import "MPAppDelegate_Key.h"
|
#import "MPAppDelegate_Key.h"
|
||||||
#import "MPAppDelegate_Store.h"
|
#import "MPAppDelegate_Store.h"
|
||||||
#import "IASKSettingsReader.h"
|
#import "IASKSettingsReader.h"
|
||||||
#import "MPAppDelegate_InApp.h"
|
|
||||||
|
|
||||||
@interface MPiOSAppDelegate()<UIDocumentInteractionControllerDelegate>
|
@interface MPiOSAppDelegate()<UIDocumentInteractionControllerDelegate>
|
||||||
|
|
||||||
|
@ -123,6 +123,9 @@
|
|||||||
DA32D01B19D046E1004F3F0E /* PearlFixedTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = DA32D01919D046E1004F3F0E /* PearlFixedTableView.h */; };
|
DA32D01B19D046E1004F3F0E /* PearlFixedTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = DA32D01919D046E1004F3F0E /* PearlFixedTableView.h */; };
|
||||||
DA32D03C19D111EB004F3F0E /* NSManagedObjectModel+KCOrderedAccessorFix.m in Sources */ = {isa = PBXBuildFile; fileRef = DA32D03A19D111EB004F3F0E /* NSManagedObjectModel+KCOrderedAccessorFix.m */; };
|
DA32D03C19D111EB004F3F0E /* NSManagedObjectModel+KCOrderedAccessorFix.m in Sources */ = {isa = PBXBuildFile; fileRef = DA32D03A19D111EB004F3F0E /* NSManagedObjectModel+KCOrderedAccessorFix.m */; };
|
||||||
DA32D03E19D11293004F3F0E /* libKCOrderedAccessorFix.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA32D02019D111C6004F3F0E /* libKCOrderedAccessorFix.a */; };
|
DA32D03E19D11293004F3F0E /* libKCOrderedAccessorFix.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA32D02019D111C6004F3F0E /* libKCOrderedAccessorFix.a */; };
|
||||||
|
DA32D04219D27093004F3F0E /* thumb_generated_answers@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA32D03F19D27093004F3F0E /* thumb_generated_answers@3x.png */; };
|
||||||
|
DA32D04319D27093004F3F0E /* thumb_generated_answers@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA32D04019D27093004F3F0E /* thumb_generated_answers@2x.png */; };
|
||||||
|
DA32D04419D27093004F3F0E /* thumb_generated_answers.png in Resources */ = {isa = PBXBuildFile; fileRef = DA32D04119D27093004F3F0E /* thumb_generated_answers.png */; };
|
||||||
DA3509FE15F101A500C14A8E /* PearlQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3509FC15F101A500C14A8E /* PearlQueue.h */; };
|
DA3509FE15F101A500C14A8E /* PearlQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3509FC15F101A500C14A8E /* PearlQueue.h */; };
|
||||||
DA3509FF15F101A500C14A8E /* PearlQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3509FD15F101A500C14A8E /* PearlQueue.m */; };
|
DA3509FF15F101A500C14A8E /* PearlQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3509FD15F101A500C14A8E /* PearlQueue.m */; };
|
||||||
DA38D6A318CCB5BF009AEB3E /* Storyboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DA38D6A218CCB5BF009AEB3E /* Storyboard.storyboard */; };
|
DA38D6A318CCB5BF009AEB3E /* Storyboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DA38D6A218CCB5BF009AEB3E /* Storyboard.storyboard */; };
|
||||||
@ -543,6 +546,9 @@
|
|||||||
DA32D02019D111C6004F3F0E /* libKCOrderedAccessorFix.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libKCOrderedAccessorFix.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
DA32D02019D111C6004F3F0E /* libKCOrderedAccessorFix.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libKCOrderedAccessorFix.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
DA32D03919D111EB004F3F0E /* NSManagedObjectModel+KCOrderedAccessorFix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSManagedObjectModel+KCOrderedAccessorFix.h"; sourceTree = "<group>"; };
|
DA32D03919D111EB004F3F0E /* NSManagedObjectModel+KCOrderedAccessorFix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSManagedObjectModel+KCOrderedAccessorFix.h"; sourceTree = "<group>"; };
|
||||||
DA32D03A19D111EB004F3F0E /* NSManagedObjectModel+KCOrderedAccessorFix.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSManagedObjectModel+KCOrderedAccessorFix.m"; sourceTree = "<group>"; };
|
DA32D03A19D111EB004F3F0E /* NSManagedObjectModel+KCOrderedAccessorFix.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSManagedObjectModel+KCOrderedAccessorFix.m"; sourceTree = "<group>"; };
|
||||||
|
DA32D03F19D27093004F3F0E /* thumb_generated_answers@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "thumb_generated_answers@3x.png"; sourceTree = "<group>"; };
|
||||||
|
DA32D04019D27093004F3F0E /* thumb_generated_answers@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "thumb_generated_answers@2x.png"; sourceTree = "<group>"; };
|
||||||
|
DA32D04119D27093004F3F0E /* thumb_generated_answers.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = thumb_generated_answers.png; sourceTree = "<group>"; };
|
||||||
DA3509FC15F101A500C14A8E /* PearlQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlQueue.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>"; };
|
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>"; };
|
DA38D6A218CCB5BF009AEB3E /* Storyboard.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Storyboard.storyboard; sourceTree = "<group>"; };
|
||||||
@ -1597,6 +1603,9 @@
|
|||||||
DABD360D1711E29400CF925C /* Media */ = {
|
DABD360D1711E29400CF925C /* Media */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
DA32D03F19D27093004F3F0E /* thumb_generated_answers@3x.png */,
|
||||||
|
DA32D04019D27093004F3F0E /* thumb_generated_answers@2x.png */,
|
||||||
|
DA32D04119D27093004F3F0E /* thumb_generated_answers.png */,
|
||||||
DA29993119C9132F00AF7DF1 /* thumb_generated_login@3x.png */,
|
DA29993119C9132F00AF7DF1 /* thumb_generated_login@3x.png */,
|
||||||
DA29992D19C86F5700AF7DF1 /* thumb_generated_login@2x.png */,
|
DA29992D19C86F5700AF7DF1 /* thumb_generated_login@2x.png */,
|
||||||
DA29992E19C86F5700AF7DF1 /* thumb_generated_login.png */,
|
DA29992E19C86F5700AF7DF1 /* thumb_generated_login.png */,
|
||||||
@ -3116,9 +3125,11 @@
|
|||||||
DABD394A1711E29700CF925C /* avatar-18.png in Resources */,
|
DABD394A1711E29700CF925C /* avatar-18.png in Resources */,
|
||||||
DABD394B1711E29700CF925C /* avatar-18@2x.png in Resources */,
|
DABD394B1711E29700CF925C /* avatar-18@2x.png in Resources */,
|
||||||
DABD394C1711E29700CF925C /* avatar-1@2x.png in Resources */,
|
DABD394C1711E29700CF925C /* avatar-1@2x.png in Resources */,
|
||||||
|
DA32D04319D27093004F3F0E /* thumb_generated_answers@2x.png in Resources */,
|
||||||
DA29993319C9214600AF7DF1 /* icon_star-hollow.png in Resources */,
|
DA29993319C9214600AF7DF1 /* icon_star-hollow.png in Resources */,
|
||||||
DA29993019C86F5700AF7DF1 /* thumb_generated_login.png in Resources */,
|
DA29993019C86F5700AF7DF1 /* thumb_generated_login.png in Resources */,
|
||||||
DA071BF3190187FE00179766 /* empty@2x.png in Resources */,
|
DA071BF3190187FE00179766 /* empty@2x.png in Resources */,
|
||||||
|
DA32D04219D27093004F3F0E /* thumb_generated_answers@3x.png in Resources */,
|
||||||
DA67460E18DE7F0C00DFE240 /* Exo2.0-Regular.otf in Resources */,
|
DA67460E18DE7F0C00DFE240 /* Exo2.0-Regular.otf in Resources */,
|
||||||
DABD394D1711E29700CF925C /* avatar-2.png in Resources */,
|
DABD394D1711E29700CF925C /* avatar-2.png in Resources */,
|
||||||
DABD394E1711E29700CF925C /* avatar-2@2x.png in Resources */,
|
DABD394E1711E29700CF925C /* avatar-2@2x.png in Resources */,
|
||||||
@ -3181,6 +3192,7 @@
|
|||||||
DABD3ABF1711E29800CF925C /* icon_plus@2x.png in Resources */,
|
DABD3ABF1711E29800CF925C /* icon_plus@2x.png in Resources */,
|
||||||
DA69540717D975D900BF294E /* icon_gears@2x.png in Resources */,
|
DA69540717D975D900BF294E /* icon_gears@2x.png in Resources */,
|
||||||
DABD3B1C1711E29800CF925C /* icon_up.png in Resources */,
|
DABD3B1C1711E29800CF925C /* icon_up.png in Resources */,
|
||||||
|
DA32D04419D27093004F3F0E /* thumb_generated_answers.png in Resources */,
|
||||||
DABD3B1D1711E29800CF925C /* icon_up@2x.png in Resources */,
|
DABD3B1D1711E29800CF925C /* icon_up@2x.png in Resources */,
|
||||||
DA3BCFCB19BD09D5006B2681 /* SourceCodePro-Regular.otf in Resources */,
|
DA3BCFCB19BD09D5006B2681 /* SourceCodePro-Regular.otf in Resources */,
|
||||||
DA250A121956484D00AC23F1 /* image-0.png in Resources */,
|
DA250A121956484D00AC23F1 /* image-0.png in Resources */,
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6238"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6238"/>
|
||||||
<capability name="Alignment constraints with different attributes" minToolsVersion="5.1"/>
|
<capability name="Alignment constraints with different attributes" minToolsVersion="5.1"/>
|
||||||
<capability name="Aspect ratio constraints" minToolsVersion="5.1"/>
|
<capability name="Aspect ratio constraints" minToolsVersion="5.1"/>
|
||||||
|
<capability name="Unknown constraint types" minToolsVersion="5.1"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<customFonts key="customFonts">
|
<customFonts key="customFonts">
|
||||||
<mutableArray key="Exo2.0-Bold.otf">
|
<mutableArray key="Exo2.0-Bold.otf">
|
||||||
@ -612,7 +613,7 @@
|
|||||||
<scene sceneID="w0h-au-0xw">
|
<scene sceneID="w0h-au-0xw">
|
||||||
<objects>
|
<objects>
|
||||||
<tableViewController automaticallyAdjustsScrollViewInsets="NO" id="JFc-sj-awD" customClass="MPPreferencesViewController" sceneMemberID="viewController">
|
<tableViewController automaticallyAdjustsScrollViewInsets="NO" id="JFc-sj-awD" customClass="MPPreferencesViewController" sceneMemberID="viewController">
|
||||||
<tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="i7C-FZ-DNs" customClass="MPTableView">
|
<tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="i7C-FZ-DNs">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<color key="backgroundColor" red="0.12549020350000001" green="0.1411764771" blue="0.14901961389999999" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="backgroundColor" red="0.12549020350000001" green="0.1411764771" blue="0.14901961389999999" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
@ -1166,7 +1167,7 @@
|
|||||||
<rect key="frame" x="0.0" y="20" width="300" height="43"/>
|
<rect key="frame" x="0.0" y="20" width="300" height="43"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="CuzaSasy3*Rimo" textAlignment="center" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="blw-Ou-8I8" userLabel="Password">
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="CuzaSasy3*Rimo" textAlignment="center" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="blw-Ou-8I8" userLabel="Password">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="300" height="31"/>
|
<rect key="frame" x="8" y="0.0" width="284" height="31"/>
|
||||||
<color key="textColor" red="0.40000000600000002" green="0.80000001190000003" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.40000000600000002" green="0.80000001190000003" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<fontDescription key="fontDescription" name="SourceCodePro-Black" family="Source Code Pro" pointSize="24"/>
|
<fontDescription key="fontDescription" name="SourceCodePro-Black" family="Source Code Pro" pointSize="24"/>
|
||||||
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="alphabet" keyboardAppearance="alert" returnKeyType="next"/>
|
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="alphabet" keyboardAppearance="alert" returnKeyType="next"/>
|
||||||
@ -1189,9 +1190,9 @@
|
|||||||
<constraint firstAttribute="trailing" secondItem="wfM-xz-roR" secondAttribute="trailing" id="O0o-KW-Od0"/>
|
<constraint firstAttribute="trailing" secondItem="wfM-xz-roR" secondAttribute="trailing" id="O0o-KW-Od0"/>
|
||||||
<constraint firstItem="blw-Ou-8I8" firstAttribute="top" secondItem="2tX-WK-ASq" secondAttribute="top" id="Sea-3Y-JdY"/>
|
<constraint firstItem="blw-Ou-8I8" firstAttribute="top" secondItem="2tX-WK-ASq" secondAttribute="top" id="Sea-3Y-JdY"/>
|
||||||
<constraint firstAttribute="bottom" secondItem="blw-Ou-8I8" secondAttribute="bottom" priority="250" id="bdr-Yi-Dro"/>
|
<constraint firstAttribute="bottom" secondItem="blw-Ou-8I8" secondAttribute="bottom" priority="250" id="bdr-Yi-Dro"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="blw-Ou-8I8" secondAttribute="trailing" id="lJn-c1-Cay"/>
|
<constraint firstAttribute="trailing" secondItem="blw-Ou-8I8" secondAttribute="trailing" constant="8" id="lJn-c1-Cay"/>
|
||||||
<constraint firstAttribute="bottom" secondItem="wfM-xz-roR" secondAttribute="bottom" id="w1O-DM-5gJ"/>
|
<constraint firstAttribute="bottom" secondItem="wfM-xz-roR" secondAttribute="bottom" id="w1O-DM-5gJ"/>
|
||||||
<constraint firstItem="blw-Ou-8I8" firstAttribute="leading" secondItem="2tX-WK-ASq" secondAttribute="leading" id="x6P-h1-nhk"/>
|
<constraint firstItem="blw-Ou-8I8" firstAttribute="leading" secondItem="2tX-WK-ASq" secondAttribute="leading" constant="8" id="x6P-h1-nhk"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<userDefinedRuntimeAttributes>
|
<userDefinedRuntimeAttributes>
|
||||||
<userDefinedRuntimeAttribute type="boolean" keyPath="ignoreTouches" value="YES"/>
|
<userDefinedRuntimeAttribute type="boolean" keyPath="ignoreTouches" value="YES"/>
|
||||||
@ -1638,28 +1639,15 @@
|
|||||||
<viewControllerLayoutGuide type="top" id="cmU-lf-Fxd"/>
|
<viewControllerLayoutGuide type="top" id="cmU-lf-Fxd"/>
|
||||||
<viewControllerLayoutGuide type="bottom" id="IV3-lc-Fnf"/>
|
<viewControllerLayoutGuide type="bottom" id="IV3-lc-Fnf"/>
|
||||||
</layoutGuides>
|
</layoutGuides>
|
||||||
<view key="view" contentMode="scaleToFill" id="7jl-cw-kaJ" userLabel="Root">
|
<view key="view" contentMode="scaleToFill" id="GiS-3g-cDj" userLabel="Root">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="GiS-3g-cDj" userLabel="Emergency Generator Root">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
|
||||||
<subviews>
|
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="i0q-rq-0T2" userLabel="Dismiss Button">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
|
||||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="calibratedRGB"/>
|
|
||||||
<state key="normal">
|
|
||||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
|
||||||
</state>
|
|
||||||
<connections>
|
|
||||||
<segue destination="p6o-h3-NRH" kind="unwind" identifier="unwind-popover" unwindAction="unwindToCombined:" id="E2V-ll-ZD7"/>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1lc-e7-Qme" userLabel="Emergency Generator">
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1lc-e7-Qme" userLabel="Emergency Generator">
|
||||||
<rect key="frame" x="8" y="28" width="359" height="387"/>
|
<rect key="frame" x="20" y="28" width="335" height="387"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Emergency Generator" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="4Lh-s0-Dbt">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Emergency Generator" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="4Lh-s0-Dbt">
|
||||||
<rect key="frame" x="20" y="20" width="319" height="21.5"/>
|
<rect key="frame" x="20" y="20" width="295" height="21.5"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2.0-Bold" family="Exo 2.0" pointSize="17"/>
|
<fontDescription key="fontDescription" name="Exo2.0-Bold" family="Exo 2.0" pointSize="17"/>
|
||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@ -1667,7 +1655,7 @@
|
|||||||
<size key="shadowOffset" width="0.0" height="1"/>
|
<size key="shadowOffset" width="0.0" height="1"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Generate your password without logging in. Great for if you're borrowing a friend's device or are having trouble logging in." lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" preferredMaxLayoutWidth="264" translatesAutoresizingMaskIntoConstraints="NO" id="vHS-3A-Tae">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Generate your password without logging in. Great for if you're borrowing a friend's device or are having trouble logging in." lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" preferredMaxLayoutWidth="264" translatesAutoresizingMaskIntoConstraints="NO" id="vHS-3A-Tae">
|
||||||
<rect key="frame" x="20" y="49.5" width="319" height="51.5"/>
|
<rect key="frame" x="20" y="49.5" width="295" height="51.5"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2.0-Thin" family="Exo 2.0" pointSize="14"/>
|
<fontDescription key="fontDescription" name="Exo2.0-Thin" family="Exo 2.0" pointSize="14"/>
|
||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@ -1675,7 +1663,7 @@
|
|||||||
<size key="shadowOffset" width="0.0" height="1"/>
|
<size key="shadowOffset" width="0.0" height="1"/>
|
||||||
</label>
|
</label>
|
||||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Your Name" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="XAC-Da-lpf" userLabel="User Name">
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Your Name" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="XAC-Da-lpf" userLabel="User Name">
|
||||||
<rect key="frame" x="20" y="109" width="319" height="30"/>
|
<rect key="frame" x="20" y="109" width="295" height="30"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2.0-Regular" family="Exo 2.0" pointSize="14"/>
|
<fontDescription key="fontDescription" name="Exo2.0-Regular" family="Exo 2.0" pointSize="14"/>
|
||||||
<textInputTraits key="textInputTraits" autocapitalizationType="words" keyboardAppearance="alert" returnKeyType="next" enablesReturnKeyAutomatically="YES"/>
|
<textInputTraits key="textInputTraits" autocapitalizationType="words" keyboardAppearance="alert" returnKeyType="next" enablesReturnKeyAutomatically="YES"/>
|
||||||
<connections>
|
<connections>
|
||||||
@ -1684,7 +1672,7 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Your Master Password" clearsOnBeginEditing="YES" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="J46-0E-no3" userLabel="Master Password">
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Your Master Password" clearsOnBeginEditing="YES" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="J46-0E-no3" userLabel="Master Password">
|
||||||
<rect key="frame" x="20" y="147" width="319" height="30"/>
|
<rect key="frame" x="20" y="147" width="295" height="30"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2.0-Regular" family="Exo 2.0" pointSize="14"/>
|
<fontDescription key="fontDescription" name="Exo2.0-Regular" family="Exo 2.0" pointSize="14"/>
|
||||||
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardAppearance="alert" returnKeyType="next" enablesReturnKeyAutomatically="YES" secureTextEntry="YES"/>
|
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardAppearance="alert" returnKeyType="next" enablesReturnKeyAutomatically="YES" secureTextEntry="YES"/>
|
||||||
<connections>
|
<connections>
|
||||||
@ -1693,7 +1681,7 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Site Name" clearsOnBeginEditing="YES" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="56H-xR-09J" userLabel="Site Name">
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Site Name" clearsOnBeginEditing="YES" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="56H-xR-09J" userLabel="Site Name">
|
||||||
<rect key="frame" x="20" y="185" width="319" height="30"/>
|
<rect key="frame" x="20" y="185" width="295" height="30"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2.0-Regular" family="Exo 2.0" pointSize="14"/>
|
<fontDescription key="fontDescription" name="Exo2.0-Regular" family="Exo 2.0" pointSize="14"/>
|
||||||
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="URL" keyboardAppearance="alert" returnKeyType="done" enablesReturnKeyAutomatically="YES"/>
|
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="URL" keyboardAppearance="alert" returnKeyType="done" enablesReturnKeyAutomatically="YES"/>
|
||||||
<connections>
|
<connections>
|
||||||
@ -1702,7 +1690,7 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="bar" selectedSegmentIndex="1" translatesAutoresizingMaskIntoConstraints="NO" id="e4b-Iv-Pk9" userLabel="Type">
|
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="bar" selectedSegmentIndex="1" translatesAutoresizingMaskIntoConstraints="NO" id="e4b-Iv-Pk9" userLabel="Type">
|
||||||
<rect key="frame" x="20" y="223" width="319" height="29"/>
|
<rect key="frame" x="20" y="223" width="295" height="29"/>
|
||||||
<segments>
|
<segments>
|
||||||
<segment title="Max"/>
|
<segment title="Max"/>
|
||||||
<segment title="Long"/>
|
<segment title="Long"/>
|
||||||
@ -1725,19 +1713,19 @@
|
|||||||
<size key="shadowOffset" width="0.0" height="1"/>
|
<size key="shadowOffset" width="0.0" height="1"/>
|
||||||
</label>
|
</label>
|
||||||
<stepper opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" maximumValue="100" translatesAutoresizingMaskIntoConstraints="NO" id="ZPT-EI-yuv" userLabel="Counter">
|
<stepper opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" maximumValue="100" translatesAutoresizingMaskIntoConstraints="NO" id="ZPT-EI-yuv" userLabel="Counter">
|
||||||
<rect key="frame" x="245" y="259" width="94" height="29"/>
|
<rect key="frame" x="221" y="259" width="94" height="29"/>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="controlChanged:" destination="osn-5H-SWW" eventType="valueChanged" id="eQA-3X-uc9"/>
|
<action selector="controlChanged:" destination="osn-5H-SWW" eventType="valueChanged" id="eQA-3X-uc9"/>
|
||||||
</connections>
|
</connections>
|
||||||
</stepper>
|
</stepper>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="1" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="3Cd-XH-Wau">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="1" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="3Cd-XH-Wau">
|
||||||
<rect key="frame" x="230" y="262.5" width="7" height="20.5"/>
|
<rect key="frame" x="206" y="262.5" width="7" height="20.5"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2.0-Regular" family="Exo 2.0" pointSize="17"/>
|
<fontDescription key="fontDescription" name="Exo2.0-Regular" family="Exo 2.0" pointSize="17"/>
|
||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<color key="highlightedColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="highlightedColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</label>
|
</label>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="bON-0a-K0M" userLabel="Close Button">
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="bON-0a-K0M" userLabel="Close Button">
|
||||||
<rect key="frame" x="315" y="0.0" width="44" height="44"/>
|
<rect key="frame" x="291" y="0.0" width="44" height="44"/>
|
||||||
<accessibility key="accessibilityConfiguration" hint="" label="Close"/>
|
<accessibility key="accessibilityConfiguration" hint="" label="Close"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="44" id="ETb-fm-wAa"/>
|
<constraint firstAttribute="height" constant="44" id="ETb-fm-wAa"/>
|
||||||
@ -1772,10 +1760,10 @@
|
|||||||
</state>
|
</state>
|
||||||
</button>
|
</button>
|
||||||
<activityIndicatorView hidden="YES" opaque="NO" contentMode="scaleToFill" hidesWhenStopped="YES" style="whiteLarge" translatesAutoresizingMaskIntoConstraints="NO" id="4sN-hm-xio">
|
<activityIndicatorView hidden="YES" opaque="NO" contentMode="scaleToFill" hidesWhenStopped="YES" style="whiteLarge" translatesAutoresizingMaskIntoConstraints="NO" id="4sN-hm-xio">
|
||||||
<rect key="frame" x="161.5" y="329" width="37" height="37"/>
|
<rect key="frame" x="149.5" y="329" width="37" height="37"/>
|
||||||
</activityIndicatorView>
|
</activityIndicatorView>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="XapaNuwjFihn6$" textAlignment="center" lineBreakMode="clip" baselineAdjustment="alignBaselines" minimumFontSize="10" adjustsLetterSpacingToFitWidth="YES" translatesAutoresizingMaskIntoConstraints="NO" id="bHR-he-dnZ" userLabel="Password Label">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="XapaNuwjFihn6$" textAlignment="center" lineBreakMode="clip" baselineAdjustment="alignBaselines" minimumFontSize="10" adjustsLetterSpacingToFitWidth="YES" translatesAutoresizingMaskIntoConstraints="NO" id="bHR-he-dnZ" userLabel="Password Label">
|
||||||
<rect key="frame" x="20" y="328" width="319" height="39"/>
|
<rect key="frame" x="20" y="328" width="295" height="39"/>
|
||||||
<gestureRecognizers/>
|
<gestureRecognizers/>
|
||||||
<fontDescription key="fontDescription" name="SourceCodePro-Black" family="Source Code Pro" pointSize="30"/>
|
<fontDescription key="fontDescription" name="SourceCodePro-Black" family="Source Code Pro" pointSize="30"/>
|
||||||
<color key="textColor" red="0.47450980390000003" green="0.86666666670000003" blue="0.98431372549999996" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.47450980390000003" green="0.86666666670000003" blue="0.98431372549999996" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
@ -1786,7 +1774,7 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</label>
|
</label>
|
||||||
<view userInteractionEnabled="NO" alpha="0.0" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="beo-cJ-jIn" userLabel="View - Content Tip">
|
<view userInteractionEnabled="NO" alpha="0.0" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="beo-cJ-jIn" userLabel="View - Content Tip">
|
||||||
<rect key="frame" x="74.5" y="287" width="210" height="60"/>
|
<rect key="frame" x="62.5" y="287.5" width="210" height="60"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="tip_basic_black.png" translatesAutoresizingMaskIntoConstraints="NO" id="nyL-cO-aPa">
|
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="tip_basic_black.png" translatesAutoresizingMaskIntoConstraints="NO" id="nyL-cO-aPa">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="210" height="60"/>
|
<rect key="frame" x="0.0" y="0.0" width="210" height="60"/>
|
||||||
@ -1852,24 +1840,19 @@
|
|||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
</subviews>
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstItem="1lc-e7-Qme" firstAttribute="leading" secondItem="GiS-3g-cDj" secondAttribute="leading" constant="8" id="3xS-Ou-InS"/>
|
<constraint firstItem="1lc-e7-Qme" firstAttribute="leading" secondItem="GiS-3g-cDj" secondAttribute="leading" constant="20" symbolic="YES" id="04d-tv-W4S"/>
|
||||||
<constraint firstItem="i0q-rq-0T2" firstAttribute="leading" secondItem="GiS-3g-cDj" secondAttribute="leading" id="Jvz-1G-8UK"/>
|
<constraint firstAttribute="trailing" secondItem="1lc-e7-Qme" secondAttribute="trailing" constant="20" symbolic="YES" id="5af-wt-tGJ"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="1lc-e7-Qme" secondAttribute="trailing" constant="8" id="KWW-Vx-P8J"/>
|
|
||||||
<constraint firstAttribute="bottom" secondItem="i0q-rq-0T2" secondAttribute="bottom" id="Leo-BC-ix6"/>
|
|
||||||
<constraint firstItem="i0q-rq-0T2" firstAttribute="top" secondItem="GiS-3g-cDj" secondAttribute="top" id="hlj-vB-7AH"/>
|
|
||||||
<constraint firstAttribute="trailing" secondItem="i0q-rq-0T2" secondAttribute="trailing" id="r8s-OP-rWe"/>
|
|
||||||
</constraints>
|
|
||||||
</view>
|
|
||||||
</subviews>
|
|
||||||
<color key="backgroundColor" cocoaTouchSystemColor="viewFlipsideBackgroundColor"/>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstAttribute="trailing" secondItem="GiS-3g-cDj" secondAttribute="trailing" id="TjK-B6-KoI"/>
|
<constraint firstAttribute="trailing" secondItem="GiS-3g-cDj" secondAttribute="trailing" id="TjK-B6-KoI"/>
|
||||||
<constraint firstItem="GiS-3g-cDj" firstAttribute="top" secondItem="7jl-cw-kaJ" secondAttribute="top" id="Zzd-AD-1X5"/>
|
<constraint firstAttribute="top" secondAttribute="top" id="Zzd-AD-1X5"/>
|
||||||
<constraint firstItem="GiS-3g-cDj" firstAttribute="leading" secondItem="7jl-cw-kaJ" secondAttribute="leading" id="bk6-yS-CW5"/>
|
<constraint firstAttribute="leading" secondAttribute="leading" id="bk6-yS-CW5"/>
|
||||||
<constraint firstItem="1lc-e7-Qme" firstAttribute="top" secondItem="cmU-lf-Fxd" secondAttribute="bottom" constant="8" id="mhg-9h-rmE"/>
|
<constraint firstItem="1lc-e7-Qme" firstAttribute="top" secondItem="cmU-lf-Fxd" secondAttribute="bottom" constant="8" id="mhg-9h-rmE"/>
|
||||||
<constraint firstItem="IV3-lc-Fnf" firstAttribute="top" secondItem="GiS-3g-cDj" secondAttribute="bottom" id="t22-RN-Hm0"/>
|
<constraint firstItem="IV3-lc-Fnf" firstAttribute="top" secondItem="GiS-3g-cDj" secondAttribute="bottom" id="t22-RN-Hm0"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="boolean" keyPath="ignoreTouches" value="YES"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
</view>
|
</view>
|
||||||
<navigationItem key="navigationItem" id="Iif-Vk-z5j">
|
<navigationItem key="navigationItem" id="Iif-Vk-z5j">
|
||||||
<barButtonItem key="backBarButtonItem" title="Log Out" id="cKa-vZ-q96"/>
|
<barButtonItem key="backBarButtonItem" title="Log Out" id="cKa-vZ-q96"/>
|
||||||
@ -2440,7 +2423,7 @@ See </string>
|
|||||||
<scene sceneID="j3J-72-mva">
|
<scene sceneID="j3J-72-mva">
|
||||||
<objects>
|
<objects>
|
||||||
<tableViewController automaticallyAdjustsScrollViewInsets="NO" id="pdl-xv-zjX" customClass="MPStoreViewController" sceneMemberID="viewController">
|
<tableViewController automaticallyAdjustsScrollViewInsets="NO" id="pdl-xv-zjX" customClass="MPStoreViewController" sceneMemberID="viewController">
|
||||||
<tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="Yd8-L6-OMk" customClass="MPTableView">
|
<tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="Yd8-L6-OMk">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<color key="backgroundColor" red="0.12549020350000001" green="0.1411764771" blue="0.14901961389999999" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="backgroundColor" red="0.12549020350000001" green="0.1411764771" blue="0.14901961389999999" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
@ -2462,7 +2445,7 @@ See </string>
|
|||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="335" translatesAutoresizingMaskIntoConstraints="NO" id="Ra0-yS-99P">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ra0-yS-99P">
|
||||||
<rect key="frame" x="20" y="254" width="335" height="92.5"/>
|
<rect key="frame" x="20" y="254" width="335" height="92.5"/>
|
||||||
<string key="text">Master Password is great for making your passwords immune to loss, and it even lets you save your login name. But saved login names can't be recovered when all is lost. Generated login names use the same algorithm to generate a good login name to use for each of your sites. In addition, using unique non-identifying login names for your sites helps protect against companies working together to build a bigger picture on your identity.</string>
|
<string key="text">Master Password is great for making your passwords immune to loss, and it even lets you save your login name. But saved login names can't be recovered when all is lost. Generated login names use the same algorithm to generate a good login name to use for each of your sites. In addition, using unique non-identifying login names for your sites helps protect against companies working together to build a bigger picture on your identity.</string>
|
||||||
<fontDescription key="fontDescription" name="Exo2.0-Thin" family="Exo 2.0" pointSize="11"/>
|
<fontDescription key="fontDescription" name="Exo2.0-Thin" family="Exo 2.0" pointSize="11"/>
|
||||||
@ -2527,14 +2510,14 @@ See </string>
|
|||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="335" translatesAutoresizingMaskIntoConstraints="NO" id="yRH-27-edZ">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yRH-27-edZ">
|
||||||
<rect key="frame" x="20" y="254" width="335" height="132"/>
|
<rect key="frame" x="20" y="254" width="335" height="132"/>
|
||||||
<string key="text">The infamous security questions are in fact a veritable assault on your security. For starters, they weaken the protection of your account by allowing an attacker in by simply knowing enough about you, allowing him to bypass guessing your strong password. Arguably worse is the amount of highly personal and private information you're "willingly" divulging to these websites, under the assumption that only you know the answers. Generating security answers allows you to stop sharing your highly personal details and weakening your acccounts by generating unguessable answers to these questions.</string>
|
<string key="text">The infamous security questions are in fact a veritable assault on your security. For starters, they weaken the protection of your account by allowing an attacker in by simply knowing enough about you, allowing him to bypass guessing your strong password. Arguably worse is the amount of highly personal and private information you're "willingly" divulging to these websites, under the assumption that only you know the answers. Generating security answers allows you to stop sharing your highly personal details and weakening your acccounts by generating unguessable answers to these questions.</string>
|
||||||
<fontDescription key="fontDescription" name="Exo2.0-Thin" family="Exo 2.0" pointSize="11"/>
|
<fontDescription key="fontDescription" name="Exo2.0-Thin" family="Exo 2.0" pointSize="11"/>
|
||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="thumb_generated_login.png" translatesAutoresizingMaskIntoConstraints="NO" id="6km-y3-4gu">
|
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="thumb_generated_answers.png" translatesAutoresizingMaskIntoConstraints="NO" id="6km-y3-4gu">
|
||||||
<rect key="frame" x="88" y="20" width="198" height="198"/>
|
<rect key="frame" x="88" y="20" width="198" height="198"/>
|
||||||
</imageView>
|
</imageView>
|
||||||
<activityIndicatorView hidden="YES" opaque="NO" tag="2" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" hidesWhenStopped="YES" style="whiteLarge" translatesAutoresizingMaskIntoConstraints="NO" id="X2g-Go-2Hz">
|
<activityIndicatorView hidden="YES" opaque="NO" tag="2" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" hidesWhenStopped="YES" style="whiteLarge" translatesAutoresizingMaskIntoConstraints="NO" id="X2g-Go-2Hz">
|
||||||
@ -2592,7 +2575,7 @@ See </string>
|
|||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="335" translatesAutoresizingMaskIntoConstraints="NO" id="riF-bB-x5g">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="riF-bB-x5g">
|
||||||
<rect key="frame" x="20" y="254" width="335" height="66.5"/>
|
<rect key="frame" x="20" y="254" width="335" height="66.5"/>
|
||||||
<string key="text">Up to now, the best way to use your passwords in other iOS apps was by copy/pasting them from Master Password. With iOS integration, you can access your Master Password passwords directly from other applications, without having to switch back and forth between it and Master Password.</string>
|
<string key="text">Up to now, the best way to use your passwords in other iOS apps was by copy/pasting them from Master Password. With iOS integration, you can access your Master Password passwords directly from other applications, without having to switch back and forth between it and Master Password.</string>
|
||||||
<fontDescription key="fontDescription" name="Exo2.0-Thin" family="Exo 2.0" pointSize="11"/>
|
<fontDescription key="fontDescription" name="Exo2.0-Thin" family="Exo 2.0" pointSize="11"/>
|
||||||
@ -2657,7 +2640,7 @@ See </string>
|
|||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="335" translatesAutoresizingMaskIntoConstraints="NO" id="Yxc-Lr-382">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Yxc-Lr-382">
|
||||||
<rect key="frame" x="20" y="254" width="335" height="79.5"/>
|
<rect key="frame" x="20" y="254" width="335" height="79.5"/>
|
||||||
<string key="text">Since the iPhone 5s, all iPhones are now equipped with an advanced Touch ID fingerprint sensor in the home button. This sensor allows you to quickly and easily identify yourself to the system. With Touch ID support, you will be able to skip the step of entering your Master Password manually and gain the ability to unlock your user using Touch ID instead.</string>
|
<string key="text">Since the iPhone 5s, all iPhones are now equipped with an advanced Touch ID fingerprint sensor in the home button. This sensor allows you to quickly and easily identify yourself to the system. With Touch ID support, you will be able to skip the step of entering your Master Password manually and gain the ability to unlock your user using Touch ID instead.</string>
|
||||||
<fontDescription key="fontDescription" name="Exo2.0-Thin" family="Exo 2.0" pointSize="11"/>
|
<fontDescription key="fontDescription" name="Exo2.0-Thin" family="Exo 2.0" pointSize="11"/>
|
||||||
@ -2784,16 +2767,6 @@ See </string>
|
|||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="JMb-s5-kLc" userLabel="Dismiss Button">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
|
||||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="calibratedRGB"/>
|
|
||||||
<state key="normal">
|
|
||||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
|
||||||
</state>
|
|
||||||
<connections>
|
|
||||||
<segue destination="iXL-Dr-gEZ" kind="unwind" identifier="unwind-popover" unwindAction="unwindToCombined:" id="uvN-tM-jSz"/>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<toolbar opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" barStyle="black" translatesAutoresizingMaskIntoConstraints="NO" id="CqV-Mw-g16">
|
<toolbar opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" barStyle="black" translatesAutoresizingMaskIntoConstraints="NO" id="CqV-Mw-g16">
|
||||||
<rect key="frame" x="0.0" y="294" width="375" height="373"/>
|
<rect key="frame" x="0.0" y="294" width="375" height="373"/>
|
||||||
<items/>
|
<items/>
|
||||||
@ -2951,7 +2924,7 @@ See </string>
|
|||||||
</connections>
|
</connections>
|
||||||
</tableView>
|
</tableView>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" cocoaTouchSystemColor="viewFlipsideBackgroundColor"/>
|
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstItem="CqV-Mw-g16" firstAttribute="bottom" secondItem="vKY-AK-ugj" secondAttribute="bottom" id="30y-ji-78v"/>
|
<constraint firstItem="CqV-Mw-g16" firstAttribute="bottom" secondItem="vKY-AK-ugj" secondAttribute="bottom" id="30y-ji-78v"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="vKY-AK-ugj" secondAttribute="trailing" id="5Nj-ev-quC"/>
|
<constraint firstAttribute="trailing" secondItem="vKY-AK-ugj" secondAttribute="trailing" id="5Nj-ev-quC"/>
|
||||||
@ -2959,20 +2932,18 @@ See </string>
|
|||||||
<constraint firstItem="vKY-AK-ugj" firstAttribute="top" relation="greaterThanOrEqual" secondItem="i3q-t5-XCA" secondAttribute="top" constant="100" id="F0k-Ku-5zl"/>
|
<constraint firstItem="vKY-AK-ugj" firstAttribute="top" relation="greaterThanOrEqual" secondItem="i3q-t5-XCA" secondAttribute="top" constant="100" id="F0k-Ku-5zl"/>
|
||||||
<constraint firstItem="CqV-Mw-g16" firstAttribute="leading" secondItem="vKY-AK-ugj" secondAttribute="leading" id="J9c-YW-ANL"/>
|
<constraint firstItem="CqV-Mw-g16" firstAttribute="leading" secondItem="vKY-AK-ugj" secondAttribute="leading" id="J9c-YW-ANL"/>
|
||||||
<constraint firstItem="vKY-AK-ugj" firstAttribute="leading" secondItem="i3q-t5-XCA" secondAttribute="leading" id="RZC-h2-KpP"/>
|
<constraint firstItem="vKY-AK-ugj" firstAttribute="leading" secondItem="i3q-t5-XCA" secondAttribute="leading" id="RZC-h2-KpP"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="JMb-s5-kLc" secondAttribute="trailing" id="Tz3-kq-5jq"/>
|
|
||||||
<constraint firstItem="CqV-Mw-g16" firstAttribute="top" secondItem="vKY-AK-ugj" secondAttribute="top" id="U40-id-tLK"/>
|
<constraint firstItem="CqV-Mw-g16" firstAttribute="top" secondItem="vKY-AK-ugj" secondAttribute="top" id="U40-id-tLK"/>
|
||||||
<constraint firstItem="9uS-oI-qfo" firstAttribute="top" secondItem="vKY-AK-ugj" secondAttribute="bottom" id="WiT-cf-a89"/>
|
<constraint firstItem="9uS-oI-qfo" firstAttribute="top" secondItem="vKY-AK-ugj" secondAttribute="bottom" id="WiT-cf-a89"/>
|
||||||
<constraint firstItem="JMb-s5-kLc" firstAttribute="top" secondItem="i3q-t5-XCA" secondAttribute="top" id="ZIm-Ua-ZtR"/>
|
|
||||||
<constraint firstItem="JMb-s5-kLc" firstAttribute="leading" secondItem="i3q-t5-XCA" secondAttribute="leading" id="cjI-Sn-WaM"/>
|
|
||||||
<constraint firstAttribute="bottom" secondItem="JMb-s5-kLc" secondAttribute="bottom" id="ivq-ne-fRk"/>
|
|
||||||
</constraints>
|
</constraints>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="boolean" keyPath="ignoreTouches" value="YES"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
</view>
|
</view>
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="tableView" destination="vKY-AK-ugj" id="p4r-Cb-Vfr"/>
|
<outlet property="tableView" destination="vKY-AK-ugj" id="p4r-Cb-Vfr"/>
|
||||||
</connections>
|
</connections>
|
||||||
</viewController>
|
</viewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="D8c-ll-gWC" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="D8c-ll-gWC" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
<exit id="iXL-Dr-gEZ" userLabel="Exit" sceneMemberID="exit"/>
|
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="1408.5" y="2175.5"/>
|
<point key="canvasLocation" x="1408.5" y="2175.5"/>
|
||||||
</scene>
|
</scene>
|
||||||
@ -2995,6 +2966,7 @@ See </string>
|
|||||||
<image name="icon_up.png" width="32" height="32"/>
|
<image name="icon_up.png" width="32" height="32"/>
|
||||||
<image name="identity.png" width="82" height="80"/>
|
<image name="identity.png" width="82" height="80"/>
|
||||||
<image name="image-0.png" width="320" height="568"/>
|
<image name="image-0.png" width="320" height="568"/>
|
||||||
|
<image name="thumb_generated_answers.png" width="198" height="198"/>
|
||||||
<image name="thumb_generated_login.png" width="198" height="198"/>
|
<image name="thumb_generated_login.png" width="198" height="198"/>
|
||||||
<image name="tip_basic_black.png" width="210" height="60"/>
|
<image name="tip_basic_black.png" width="210" height="60"/>
|
||||||
<image name="ui_spinner.png" width="75" height="75"/>
|
<image name="ui_spinner.png" width="75" height="75"/>
|
||||||
@ -3008,7 +2980,7 @@ See </string>
|
|||||||
</simulatedMetricsContainer>
|
</simulatedMetricsContainer>
|
||||||
<inferredMetricsTieBreakers>
|
<inferredMetricsTieBreakers>
|
||||||
<segue reference="GZk-I4-JyH"/>
|
<segue reference="GZk-I4-JyH"/>
|
||||||
<segue reference="k2G-nL-x3l"/>
|
<segue reference="Ql4-wf-T8u"/>
|
||||||
</inferredMetricsTieBreakers>
|
</inferredMetricsTieBreakers>
|
||||||
<color key="tintColor" name="controlLightHighlightColor" catalog="System" colorSpace="catalog"/>
|
<color key="tintColor" name="controlLightHighlightColor" catalog="System" colorSpace="catalog"/>
|
||||||
</document>
|
</document>
|
||||||
|
BIN
MasterPassword/Resources/Media/thumb_generated_answers.png
Normal file
BIN
MasterPassword/Resources/Media/thumb_generated_answers.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 37 KiB |
BIN
MasterPassword/Resources/Media/thumb_generated_answers@2x.png
Normal file
BIN
MasterPassword/Resources/Media/thumb_generated_answers@2x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 116 KiB |
BIN
MasterPassword/Resources/Media/thumb_generated_answers@3x.png
Normal file
BIN
MasterPassword/Resources/Media/thumb_generated_answers@3x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 253 KiB |
Loading…
Reference in New Issue
Block a user