2
0

Clean up classes after removing the small password cell.

This commit is contained in:
Maarten Billemont 2014-05-13 22:56:06 -04:00
parent fa57b8817b
commit 9941dba008
16 changed files with 144 additions and 284 deletions

2
External/Pearl vendored

@ -1 +1 @@
Subproject commit d37640cc0133e56b1d58baf7ed44ce69dcb20f2f
Subproject commit c140337883f04a803a547ba9932315e29f1fce16

View File

@ -22,13 +22,7 @@
@interface MPPasswordCell : MPCell
@property(strong, nonatomic) IBOutlet UILabel *nameLabel;
@property(strong, nonatomic) IBOutlet UIButton *loginButton;
/** Populate our UI to reflect the current state. */
- (void)updateAnimated:(BOOL)animated;
- (void)reloadWithElement:(MPElementEntity *)mainElement;
- (void)reloadWithTransientSite:(NSString *)siteName;
@end

View File

@ -24,17 +24,6 @@
#pragma mark - Life cycle
- (void)awakeFromNib {
[super awakeFromNib];
self.layer.cornerRadius = 5;
self.layer.shadowOffset = CGSizeZero;
self.layer.shadowRadius = 5;
self.layer.shadowOpacity = 0;
self.layer.shadowColor = [UIColor whiteColor].CGColor;
}
- (void)prepareForReuse {
[super prepareForReuse];
@ -83,14 +72,4 @@
}];
}
- (void)reloadWithElement:(MPElementEntity *)mainElement {
self.nameLabel.text = mainElement.name;
}
- (void)reloadWithTransientSite:(NSString *)siteName {
self.nameLabel.text = strl( @"%@ - Tap to create", siteName );
}
@end

View File

@ -1,33 +0,0 @@
/**
* 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
*/
//
// MPPasswordElementCell.h
// MPPasswordElementCell
//
// Created by lhunath on 2014-04-03.
// Copyright, lhunath (Maarten Billemont) 2014. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "MPPasswordCell.h"
#import "MPPasswordsViewController.h"
@interface MPPasswordElementCell : MPPasswordCell
@property(nonatomic, copy) NSString *transientSite;
@property(nonatomic, weak) MPPasswordsViewController *passwordsViewController;
- (MPElementEntity *)mainElement;
- (MPElementEntity *)elementInContext:(NSManagedObjectContext *)context;
- (void)setElement:(MPElementEntity *)element;
- (void)reloadData;
@end

View File

@ -1,87 +0,0 @@
/**
* 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
*/
//
// MPPasswordElementCell.h
// MPPasswordElementCell
//
// Created by lhunath on 2014-04-03.
// Copyright, lhunath (Maarten Billemont) 2014. All rights reserved.
//
#import "MPPasswordElementCell.h"
#import "MPiOSAppDelegate.h"
#import "MPAppDelegate_Store.h"
@implementation MPPasswordElementCell {
NSManagedObjectID *_elementOID;
}
- (void)prepareForReuse {
_elementOID = nil;
_transientSite = nil;
[super prepareForReuse];
}
- (void)setTransientSite:(NSString *)transientSite {
if ([_transientSite isEqualToString:transientSite])
return;
dbg(@"transientSite: %@ -> %@", _transientSite, transientSite);
_transientSite = transientSite;
_elementOID = nil;
[self updateAnimated:YES];
[self reloadData];
}
- (void)setElement:(MPElementEntity *)element {
NSManagedObjectID *newElementOID = element.objectID;
NSAssert(!newElementOID.isTemporaryID, @"Element doesn't have a permanent objectID: %@", element);
if ([_elementOID isEqual:newElementOID])
return;
dbg(@"element: %@ -> %@", _elementOID, newElementOID);
_transientSite = nil;
_elementOID = newElementOID;
[self updateAnimated:YES];
[self reloadData];
}
- (MPElementEntity *)mainElement {
return [self elementInContext:[MPiOSAppDelegate managedObjectContextForMainThreadIfReady]];
}
- (MPElementEntity *)elementInContext:(NSManagedObjectContext *)context {
return [MPElementEntity existingObjectWithID:_elementOID inContext:context];
}
- (void)reloadData {
if (self.transientSite)
PearlMainQueue( ^{
[self reloadWithTransientSite:self.transientSite];
} );
else
[MPiOSAppDelegate managedObjectContextForMainThreadPerformBlockAndWait:^(NSManagedObjectContext *mainContext) {
[self reloadWithElement:[self elementInContext:mainContext]];
}];
}
@end

View File

@ -33,9 +33,14 @@ typedef NS_ENUM (NSUInteger, MPContentFieldMode) {
@property(nonatomic, strong) IBOutlet UILabel *typeLabel;
@property(nonatomic, strong) IBOutlet UITextField *contentField;
@property(nonatomic, strong) IBOutlet UIButton *upgradeButton;
@property(nonatomic, strong) IBOutlet UILabel *nameLabel;
@property(nonatomic, strong) IBOutlet UIButton *loginButton;
+ (instancetype)dequeueCellWithType:(MPElementType)type fromCollectionView:(UICollectionView *)collectionView atIndexPath:(NSIndexPath *)indexPath;
- (void)reloadWithElement:(MPElementEntity *)mainElement;
- (void)reloadWithTransientSite:(NSString *)siteName;
- (void)resolveContentOfCellTypeForTransientSite:(NSString *)siteName usingKey:(MPKey *)key result:(void (^)(NSString *))resultBlock;
- (void)resolveContentOfCellTypeForElement:(MPElementEntity *)element usingKey:(MPKey *)key result:(void (^)(NSString *))resultBlock;

View File

@ -51,6 +51,12 @@
[super awakeFromNib];
self.layer.cornerRadius = 5;
self.layer.shadowOffset = CGSizeZero;
self.layer.shadowRadius = 5;
self.layer.shadowOpacity = 0;
self.layer.shadowColor = [UIColor whiteColor].CGColor;
[self prepareForReuse];
}
@ -64,7 +70,7 @@
- (void)reloadWithTransientSite:(NSString *)siteName {
[super reloadWithTransientSite:siteName];
self.nameLabel.text = strl( @"%@ - Tap to create", siteName );
self.loginButton.alpha = 0;
self.upgradeButton.alpha = 0;
@ -90,25 +96,29 @@
- (void)reloadWithElement:(MPElementEntity *)mainElement {
[super reloadWithElement:mainElement];
if (!mainElement) {
self.loginButton.alpha = 0;
self.upgradeButton.alpha = 0;
self.typeLabel.text = @"";
self.nameLabel.text = @"";
self.contentField.text = @"";
return;
}
self.nameLabel.alpha = 1;
self.loginButton.alpha = 1;
if (self.type != (MPElementType)NSNotFound)
self.typeLabel.text = [mainElement.algorithm nameOfType:self.type];
if (mainElement.requiresExplicitMigration)
self.upgradeButton.alpha = 1;
else
self.upgradeButton.alpha = 0;
if (self.type == (MPElementType)NSNotFound)
self.typeLabel.text = @"Delete";
else
self.typeLabel.text = [mainElement.algorithm nameOfType:self.type];
self.nameLabel.text = mainElement.name;
switch (self.contentFieldMode) {
case MPContentFieldModePassword: {
if (self.type & MPElementTypeClassStored) {
@ -174,7 +184,7 @@
NSString *newContent = textField.text;
[MPiOSAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
MPElementEntity *element = [[MPPasswordElementCell findAsSuperviewOf:self] elementInContext:context];
MPElementEntity *element = [[MPPasswordTypesCell findAsSuperviewOf:self] elementInContext:context];
if (!element)
return;
@ -215,11 +225,11 @@
- (IBAction)doUpgrade:(UIButton *)sender {
[MPiOSAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
if ([[[MPPasswordElementCell findAsSuperviewOf:self] elementInContext:context] migrateExplicitly:YES]) {
if ([[[MPPasswordTypesCell findAsSuperviewOf:self] elementInContext:context] migrateExplicitly:YES]) {
[context saveToStore];
PearlMainQueue( ^{
[[MPPasswordElementCell findAsSuperviewOf:self] reloadData];
[[MPPasswordTypesCell findAsSuperviewOf:self] reloadData];
[PearlOverlay showTemporaryOverlayWithTitle:@"Site Upgraded" dismissAfter:2];
} );
}
@ -239,7 +249,7 @@
_contentFieldMode = contentFieldMode;
[[MPPasswordElementCell findAsSuperviewOf:self] reloadData];
[[MPPasswordTypesCell findAsSuperviewOf:self] reloadData];
}
@end

View File

@ -17,9 +17,6 @@
//
#import "MPPasswordLargeDeleteCell.h"
#import "MPiOSAppDelegate.h"
#import "MPAppDelegate_Store.h"
#import "MPPasswordElementCell.h"
@implementation MPPasswordLargeDeleteCell

View File

@ -19,7 +19,7 @@
#import "MPPasswordLargeGeneratedCell.h"
#import "MPiOSAppDelegate.h"
#import "MPAppDelegate_Store.h"
#import "MPPasswordElementCell.h"
#import "MPPasswordTypesCell.h"
@implementation MPPasswordLargeGeneratedCell
@ -125,7 +125,7 @@
- (MPElementGeneratedEntity *)generatedElementInContext:(NSManagedObjectContext *)context {
return [self generatedElement:[[MPPasswordElementCell findAsSuperviewOf:self] elementInContext:context]];
return [self generatedElement:[[MPPasswordTypesCell findAsSuperviewOf:self] elementInContext:context]];
}
- (MPElementGeneratedEntity *)generatedElement:(MPElementEntity *)element {

View File

@ -19,7 +19,7 @@
#import "MPPasswordLargeStoredCell.h"
#import "MPiOSAppDelegate.h"
#import "MPAppDelegate_Store.h"
#import "MPPasswordElementCell.h"
#import "MPPasswordTypesCell.h"
@interface MPPasswordLargeStoredCell()
@ -96,7 +96,7 @@
- (MPElementStoredEntity *)storedElementInContext:(NSManagedObjectContext *)context {
return [self storedElement:[[MPPasswordElementCell findAsSuperviewOf:self] elementInContext:context]];
return [self storedElement:[[MPPasswordTypesCell findAsSuperviewOf:self] elementInContext:context]];
}
- (MPElementStoredEntity *)storedElement:(MPElementEntity *)element {

View File

@ -1,33 +0,0 @@
/**
* 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
*/
//
// MPPasswordSmallCell.h
// MPPasswordSmallCell
//
// Created by lhunath on 2014-03-28.
// Copyright, lhunath (Maarten Billemont) 2014. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "MPPasswordCell.h"
@interface MPPasswordSmallCell : MPPasswordElementCell
+ (instancetype)dequeueCellForElement:(MPElementEntity *)element
fromCollectionView:(UICollectionView *)collectionView atIndexPath:(NSIndexPath *)indexPath;
@end
@interface MPPasswordSmallGeneratedCell : MPPasswordSmallCell
@end
@interface MPPasswordSmallStoredCell : MPPasswordSmallCell
@end

View File

@ -1,48 +0,0 @@
/**
* 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
*/
//
// MPPasswordSmallCell.h
// MPPasswordSmallCell
//
// Created by lhunath on 2014-03-28.
// Copyright, lhunath (Maarten Billemont) 2014. All rights reserved.
//
#import "MPPasswordElementCell.h"
#import "MPPasswordSmallCell.h"
@implementation MPPasswordSmallCell {
}
+ (instancetype)dequeueCellForElement:(MPElementEntity *)element fromCollectionView:(UICollectionView *)collectionView
atIndexPath:(NSIndexPath *)indexPath {
NSString *reuseIdentifier;
if (element.type & MPElementTypeClassGenerated)
reuseIdentifier = NSStringFromClass( [MPPasswordSmallGeneratedCell class] );
else if (element.type & MPElementTypeClassStored)
reuseIdentifier = NSStringFromClass( [MPPasswordSmallStoredCell class] );
else
Throw(@"Unexpected password type: %@", [MPAlgorithmDefault nameOfType:element.type]);
MPPasswordSmallCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
[cell setElement:element];
return cell;
}
@end
@implementation MPPasswordSmallGeneratedCell
@end
@implementation MPPasswordSmallStoredCell
@end

View File

@ -19,15 +19,23 @@
#import <Foundation/Foundation.h>
#import "MPCell.h"
#import "MPPasswordCell.h"
#import "MPPasswordElementCell.h"
#import "MPPasswordsViewController.h"
@interface MPPasswordTypesCell : MPPasswordElementCell <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
@interface MPPasswordTypesCell : MPPasswordCell <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
@property(nonatomic, strong) IBOutlet UICollectionView *contentCollectionView;
@property(nonatomic, strong) id<MPAlgorithm> algorithm;
@property(nonatomic, weak) MPPasswordsViewController *passwordsViewController;
@property(nonatomic, copy) NSString *transientSite;
@property(nonatomic, strong) id<MPAlgorithm> algorithm;
@property(nonatomic) MPElementType activeType;
- (MPElementEntity *)mainElement;
- (MPElementEntity *)elementInContext:(NSManagedObjectContext *)context;
- (void)setElement:(MPElementEntity *)element;
- (void)reloadData;
+ (instancetype)dequeueCellForElement:(MPElementEntity *)element
fromCollectionView:(UICollectionView *)collectionView atIndexPath:(NSIndexPath *)indexPath;
+ (instancetype)dequeueCellForTransientSite:(NSString *)siteName

View File

@ -21,7 +21,9 @@
#import "MPiOSAppDelegate.h"
#import "MPAppDelegate_Store.h"
@implementation MPPasswordTypesCell
@implementation MPPasswordTypesCell {
NSManagedObjectID *_elementOID;
}
#pragma mark - Lifecycle
@ -57,6 +59,8 @@
- (void)prepareForReuse {
_elementOID = nil;
_transientSite = nil;
_activeType = 0;
_algorithm = MPAlgorithmDefault;
@ -71,24 +75,6 @@
[self scrollToActiveType];
}
- (void)reloadWithTransientSite:(NSString *)siteName {
[super reloadWithTransientSite:siteName];
[self.contentCollectionView reloadData];
self.activeType = IfElse( [[MPiOSAppDelegate get] activeUserForMainThread].defaultType, MPElementTypeGeneratedLong );
}
- (void)reloadWithElement:(MPElementEntity *)mainElement {
[super reloadWithElement:mainElement];
self.algorithm = IfNotNilElse( [self mainElement].algorithm, MPAlgorithmDefault );
[self.contentCollectionView reloadData];
self.activeType = mainElement.type;
}
#pragma mark - UICollectionViewDataSource
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout
@ -219,6 +205,23 @@
#pragma mark - Private
- (void)reloadData {
if (self.transientSite)
PearlMainQueue( ^{
[self.contentCollectionView reloadData];
self.activeType = IfElse( [[MPiOSAppDelegate get] activeUserForMainThread].defaultType, MPElementTypeGeneratedLong );
} );
else
[MPiOSAppDelegate managedObjectContextForMainThreadPerformBlockAndWait:^(NSManagedObjectContext *mainContext) {
MPElementEntity *mainElement = [self mainElement];
self.algorithm = IfNotNilElse( mainElement.algorithm, MPAlgorithmDefault );
[self.contentCollectionView reloadData];
self.activeType = mainElement.type;
}];
}
- (void)scrollToActiveType {
if (self.activeType && self.activeType != (MPElementType)NSNotFound)
@ -283,6 +286,46 @@
#pragma mark - State
- (void)setTransientSite:(NSString *)transientSite {
if ([_transientSite isEqualToString:transientSite])
return;
dbg( @"transientSite: %@ -> %@", _transientSite, transientSite );
_transientSite = transientSite;
_elementOID = nil;
[self updateAnimated:YES];
[self reloadData];
}
- (void)setElement:(MPElementEntity *)element {
NSManagedObjectID *newElementOID = element.objectID;
NSAssert( !newElementOID.isTemporaryID, @"Element doesn't have a permanent objectID: %@", element );
if ([_elementOID isEqual:newElementOID])
return;
dbg( @"element: %@ -> %@", _elementOID, newElementOID );
_transientSite = nil;
_elementOID = newElementOID;
[self updateAnimated:YES];
[self reloadData];
}
- (MPElementEntity *)mainElement {
return [self elementInContext:[MPiOSAppDelegate managedObjectContextForMainThreadIfReady]];
}
- (MPElementEntity *)elementInContext:(NSManagedObjectContext *)context {
return [MPElementEntity existingObjectWithID:_elementOID inContext:context];
}
- (void)setActiveType:(MPElementType)activeType {
_activeType = activeType;

View File

@ -21,7 +21,6 @@
#import "MPAppDelegate_Store.h"
#import "MPPasswordLargeCell.h"
#import "MPPasswordTypesCell.h"
#import "MPPasswordSmallCell.h"
#import "MPPopdownSegue.h"
#import "MPAppDelegate_Key.h"
#import "MPCoachmarkViewController.h"
@ -146,7 +145,7 @@ referenceSizeForHeaderInSection:(NSInteger)section {
if (collectionView == self.passwordCollectionView) {
[UIView setAnimationsEnabled:NO];
MPPasswordElementCell *cell;
MPPasswordTypesCell *cell;
if (indexPath.item < ((id<NSFetchedResultsSectionInfo>)self.fetchedResultsController.sections[indexPath.section]).numberOfObjects) {
MPElementEntity *element = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell = [MPPasswordTypesCell dequeueCellForElement:element fromCollectionView:collectionView atIndexPath:indexPath];

View File

@ -17,7 +17,6 @@
93D392EC39DA43C46C692C12 /* NSDictionary+Indexing.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D393B97158D7BE9332EA53 /* NSDictionary+Indexing.h */; };
93D3932889B6B4206E66A6D6 /* PearlEMail.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D39F7C9F47BF6387FBC5C3 /* PearlEMail.h */; };
93D39392DEDA376F93C6C718 /* MPCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39BAA71DE51B4D8A1286C /* MPCell.m */; };
93D393BA1B8402D08DB40231 /* MPPasswordElementCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39342E5F115EFCC90E976 /* MPPasswordElementCell.m */; };
93D393DB5325820241BA90A7 /* PearlSizedTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D39A4759186F6D2D34AA6B /* PearlSizedTextView.h */; };
93D394982CBD25D46692DD7C /* MPWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D3990E0CD1B5CF9FBB2C07 /* MPWebViewController.m */; };
93D394B5036C882B33C71872 /* MPPasswordsSegue.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39E7A12CC352B2825AA66 /* MPPasswordsSegue.m */; };
@ -54,7 +53,6 @@
93D39E281E3658B30550CB55 /* NSDictionary+Indexing.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39AA1EE2E1E7B81372240 /* NSDictionary+Indexing.m */; };
93D39E34FD28D24FE3442C48 /* UITextView+PearlAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D3977321EB249981821AB0 /* UITextView+PearlAttributes.m */; };
93D39EAA4D064193074D3021 /* MPFixable.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39A813CA9D7E192261ED2 /* MPFixable.m */; };
93D39EDD960C381D64E4DCDD /* MPPasswordSmallCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D3952CC60991B97D69F26A /* MPPasswordSmallCell.m */; };
93D39F8A9254177891F38705 /* MPSetupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39A28369954D147E239BA /* MPSetupViewController.m */; };
93D39FA97F4C3F69A75D5A03 /* MPPasswordLargeGeneratedCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D3993422E207BF0B21D089 /* MPPasswordLargeGeneratedCell.m */; };
DA04E33E14B1E70400ECA4F3 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA04E33D14B1E70400ECA4F3 /* MobileCoreServices.framework */; };
@ -117,6 +115,9 @@
DA95D5F214DF0B2C008D1B94 /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA95D5F014DF0B1E008D1B94 /* MessageUI.framework */; };
DA9B51551895D79E009D2A0B /* gittip.png in Resources */ = {isa = PBXBuildFile; fileRef = DA9B51541895D79E009D2A0B /* gittip.png */; };
DA9B51581895D853009D2A0B /* LLGitTip.m in Sources */ = {isa = PBXBuildFile; fileRef = DA9B51561895D853009D2A0B /* LLGitTip.m */; };
DAA141201922FF020032B392 /* PearlTween.m in Sources */ = {isa = PBXBuildFile; fileRef = DAA1411C1922FF020032B392 /* PearlTween.m */; };
DAA141211922FF020032B392 /* PearlTween.h in Headers */ = {isa = PBXBuildFile; fileRef = DAA1411D1922FF020032B392 /* PearlTween.h */; };
DAA141221922FF020032B392 /* map-macro.h in Headers */ = {isa = PBXBuildFile; fileRef = DAA1411F1922FF020032B392 /* map-macro.h */; };
DABB981615100B4000B05417 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DABB981515100B4000B05417 /* SystemConfiguration.framework */; };
DABD38DB1711E29700CF925C /* ui_background.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD360F1711E29400CF925C /* ui_background.png */; };
DABD38DC1711E29700CF925C /* ui_background@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD36101711E29400CF925C /* ui_background@2x.png */; };
@ -535,9 +536,7 @@
93D3923B42DA2DA18F287092 /* LLModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LLModel.m; sourceTree = "<group>"; };
93D3924EE15017F8A12CB436 /* MPPasswordsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordsViewController.m; sourceTree = "<group>"; };
93D392876BE5C011DE73B43F /* MPPopdownSegue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPopdownSegue.h; sourceTree = "<group>"; };
93D3932D6C25F2C2D929F8A1 /* MPPasswordElementCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordElementCell.h; sourceTree = "<group>"; };
93D393310223DDB35218467A /* MPCombinedViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPCombinedViewController.m; sourceTree = "<group>"; };
93D39342E5F115EFCC90E976 /* MPPasswordElementCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordElementCell.m; sourceTree = "<group>"; };
93D3937712BF1B67623E5764 /* MPEmergencySegue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPEmergencySegue.m; sourceTree = "<group>"; };
93D3937863061C3916AF7AD2 /* MPPasswordLargeCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordLargeCell.m; sourceTree = "<group>"; };
93D393B97158D7BE9332EA53 /* NSDictionary+Indexing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+Indexing.h"; sourceTree = "<group>"; };
@ -546,7 +545,6 @@
93D3942A356B639724157982 /* PearlOverlay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlOverlay.h; sourceTree = "<group>"; };
93D394482BB07F90E8FD1314 /* UIResponder+PearlFirstResponder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIResponder+PearlFirstResponder.h"; sourceTree = "<group>"; };
93D3947F6BB69CA9A9124A5D /* MPPasswordLargeStoredCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordLargeStoredCell.m; sourceTree = "<group>"; };
93D3952CC60991B97D69F26A /* MPPasswordSmallCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordSmallCell.m; sourceTree = "<group>"; };
93D3956915634581E737B38C /* PearlNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlNavigationController.m; sourceTree = "<group>"; };
93D395BA6B2CFF5F49A4D25F /* MPPasswordLargeStoredCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordLargeStoredCell.h; sourceTree = "<group>"; };
93D3966B527CA47A0A661CE2 /* MPPasswordLargeDeleteCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordLargeDeleteCell.h; sourceTree = "<group>"; };
@ -558,7 +556,6 @@
93D397E3650384498E7E53C4 /* MPPasswordsCoachmarkViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordsCoachmarkViewController.m; sourceTree = "<group>"; };
93D3983278751A530262F64E /* LLConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LLConfig.h; sourceTree = "<group>"; };
93D398567FD02DB2647B8CF3 /* PearlNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlNavigationController.h; sourceTree = "<group>"; };
93D39888EE06F06264CC963B /* MPPasswordSmallCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordSmallCell.h; sourceTree = "<group>"; };
93D398C95847261903D781D3 /* NSError+PearlFullDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSError+PearlFullDescription.h"; sourceTree = "<group>"; };
93D3990E0CD1B5CF9FBB2C07 /* MPWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPWebViewController.m; sourceTree = "<group>"; };
93D3993422E207BF0B21D089 /* MPPasswordLargeGeneratedCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordLargeGeneratedCell.m; sourceTree = "<group>"; };
@ -649,6 +646,11 @@
DA9B51541895D79E009D2A0B /* gittip.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = gittip.png; sourceTree = "<group>"; };
DA9B51561895D853009D2A0B /* LLGitTip.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LLGitTip.m; sourceTree = "<group>"; };
DA9B51571895D853009D2A0B /* LLGitTip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LLGitTip.h; sourceTree = "<group>"; };
DAA141191922FED80032B392 /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Crashlytics.framework; sourceTree = "<group>"; };
DAA1411B1922FED80032B392 /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Crashlytics.framework; sourceTree = "<group>"; };
DAA1411C1922FF020032B392 /* PearlTween.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlTween.m; sourceTree = "<group>"; };
DAA1411D1922FF020032B392 /* PearlTween.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlTween.h; sourceTree = "<group>"; };
DAA1411F1922FF020032B392 /* map-macro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "map-macro.h"; sourceTree = "<group>"; };
DAAC35DD156BD77D00C5FD93 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; };
DABB981515100B4000B05417 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
DABD360F1711E29400CF925C /* ui_background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ui_background.png; sourceTree = "<group>"; };
@ -1359,7 +1361,6 @@
DAC632871486D95D0075AEA5 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
DAC77CAD148291A600BCF976 /* libPearl.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPearl.a; sourceTree = BUILT_PRODUCTS_DIR; };
DAC77CB1148291A600BCF976 /* Pearl-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "Pearl-Prefix.pch"; path = "../../MasterPassword/ObjC/Pearl/Pearl-Prefix.pch"; sourceTree = "<group>"; };
DACA22181705DE28002C6C22 /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Crashlytics.framework; sourceTree = "<group>"; };
DACA22B71705DE7D002C6C22 /* UbiquityStoreManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UbiquityStoreManager.m; sourceTree = "<group>"; };
DACA22B81705DE7D002C6C22 /* NSError+UbiquityStoreManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSError+UbiquityStoreManager.h"; sourceTree = "<group>"; };
DACA22B91705DE7D002C6C22 /* NSError+UbiquityStoreManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSError+UbiquityStoreManager.m"; sourceTree = "<group>"; };
@ -1777,6 +1778,30 @@
path = include;
sourceTree = "<group>";
};
DAA141181922FED80032B392 /* iOS */ = {
isa = PBXGroup;
children = (
DAA141191922FED80032B392 /* Crashlytics.framework */,
);
path = iOS;
sourceTree = "<group>";
};
DAA1411A1922FED80032B392 /* Mac */ = {
isa = PBXGroup;
children = (
DAA1411B1922FED80032B392 /* Crashlytics.framework */,
);
path = Mac;
sourceTree = "<group>";
};
DAA1411E1922FF020032B392 /* include */ = {
isa = PBXGroup;
children = (
DAA1411F1922FF020032B392 /* map-macro.h */,
);
path = include;
sourceTree = "<group>";
};
DABD360D1711E29400CF925C /* Media */ = {
isa = PBXGroup;
children = (
@ -2589,10 +2614,6 @@
93D390519405B76CC6A57C4F /* MPCell.h */,
93D39097C0AAE62C1C321BFC /* MPPasswordTypesCell.m */,
93D391243F64A77798B4D6A4 /* MPPasswordTypesCell.h */,
93D3952CC60991B97D69F26A /* MPPasswordSmallCell.m */,
93D39888EE06F06264CC963B /* MPPasswordSmallCell.h */,
93D39342E5F115EFCC90E976 /* MPPasswordElementCell.m */,
93D3932D6C25F2C2D929F8A1 /* MPPasswordElementCell.h */,
93D3937712BF1B67623E5764 /* MPEmergencySegue.m */,
93D39A41340CF778E00D0E6D /* MPEmergencySegue.h */,
93D39E7A12CC352B2825AA66 /* MPPasswordsSegue.m */,
@ -2627,8 +2648,9 @@
DACA22121705DDC5002C6C22 /* External */ = {
isa = PBXGroup;
children = (
DAA141181922FED80032B392 /* iOS */,
DAA1411A1922FED80032B392 /* Mac */,
DADEF3E91810D1980052CA3E /* LoveLyndir */,
DACA22181705DE28002C6C22 /* Crashlytics.framework */,
DAFC5662172C57EC00CB5CC5 /* InAppSettingsKit */,
DACA22C71705DEB0002C6C22 /* Localytics */,
DAC77CAF148291A600BCF976 /* Pearl */,
@ -2953,6 +2975,9 @@
DAFE45D715039823003ABA7C /* Pearl */ = {
isa = PBXGroup;
children = (
DAA1411C1922FF020032B392 /* PearlTween.m */,
DAA1411D1922FF020032B392 /* PearlTween.h */,
DAA1411E1922FF020032B392 /* include */,
DAF4EF4E190A81E400023C90 /* NSManagedObject+Pearl.m */,
DAF4EF4F190A81E400023C90 /* NSManagedObject+Pearl.h */,
DA2CA4D918D28859007798F8 /* NSArray+Pearl.m */,
@ -3253,6 +3278,7 @@
DA30E9D715723E6900A68B4C /* PearlLazy.h in Headers */,
DAEB936918AA537D000490CC /* pem2.h in Headers */,
DAEB937F18AA537D000490CC /* ui_compat.h in Headers */,
DAA141211922FF020032B392 /* PearlTween.h in Headers */,
DAFE4A63150399FF003ABA84 /* UIControl+PearlBlocks.h in Headers */,
DAEB934A18AA537D000490CC /* crypto.h in Headers */,
DAEB935618AA537D000490CC /* engine.h in Headers */,
@ -3286,6 +3312,7 @@
DAEB936218AA537D000490CC /* obj_mac.h in Headers */,
DAEB934218AA537D000490CC /* bn.h in Headers */,
DAF4EF51190A81E400023C90 /* NSManagedObject+Pearl.h in Headers */,
DAA141221922FF020032B392 /* map-macro.h in Headers */,
93D39B76DD5AB108BA8928E8 /* UIScrollView+PearlAdjustInsets.h in Headers */,
93D3980046016EFD05B35BC5 /* PearlUICollectionView.h in Headers */,
93D39536EB550E811CCD04BC /* UIResponder+PearlFirstResponder.h in Headers */,
@ -3861,8 +3888,6 @@
93D39392DEDA376F93C6C718 /* MPCell.m in Sources */,
93D399278165FD6D950F0025 /* MPPasswordTypesCell.m in Sources */,
93D39A5FF670957C0AF8298D /* MPPasswordCell.m in Sources */,
93D39EDD960C381D64E4DCDD /* MPPasswordSmallCell.m in Sources */,
93D393BA1B8402D08DB40231 /* MPPasswordElementCell.m in Sources */,
93D398ECD7D1A0DEDDADF516 /* MPEmergencyViewController.m in Sources */,
93D391ED37C9F687FA51EAA1 /* MPEmergencySegue.m in Sources */,
93D394B5036C882B33C71872 /* MPPasswordsSegue.m in Sources */,
@ -3956,6 +3981,7 @@
93D3954E96236384AFA00453 /* UIScrollView+PearlAdjustInsets.m in Sources */,
93D39A8EA1C49CE43B63F47B /* PearlUICollectionView.m in Sources */,
93D399246DC90F50913A1287 /* UIResponder+PearlFirstResponder.m in Sources */,
DAA141201922FF020032B392 /* PearlTween.m in Sources */,
93D391ECBD9BD2C64115B5DD /* PearlSizedTextView.m in Sources */,
93D39E34FD28D24FE3442C48 /* UITextView+PearlAttributes.m in Sources */,
);