TouchID integration and fixes to PearlLogger integration into mpw C code.
This commit is contained in:
parent
360b20d06f
commit
a42edec918
2
External/Pearl
vendored
2
External/Pearl
vendored
@ -1 +1 @@
|
||||
Subproject commit adcbc1f10abd55199130b02280fccdfaa8ce4211
|
||||
Subproject commit 2642d720cc874635c336406a01f1e8d2ee5bcb09
|
@ -8,6 +8,7 @@
|
||||
|
||||
#import "MPAppDelegate_Key.h"
|
||||
#import "MPAppDelegate_Store.h"
|
||||
#import <LocalAuthentication/LocalAuthentication.h>
|
||||
|
||||
@interface MPAppDelegate_Shared()
|
||||
|
||||
@ -17,19 +18,57 @@
|
||||
|
||||
@implementation MPAppDelegate_Shared(Key)
|
||||
|
||||
static NSDictionary *keyQuery(MPUserEntity *user) {
|
||||
static NSDictionary *keyQuery(MPUserEntity *user, BOOL newItem) {
|
||||
|
||||
if (user.touchID && &SecAccessControlCreateWithFlags) {
|
||||
CFErrorRef acError = NULL;
|
||||
SecAccessControlRef accessControl = SecAccessControlCreateWithFlags( nil,
|
||||
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly, kSecAccessControlTouchIDCurrentSet, &acError );
|
||||
if (!accessControl || acError)
|
||||
err( @"Could not use TouchID on this device: %@", acError );
|
||||
|
||||
else {
|
||||
LAContext *context = [LAContext new];
|
||||
dispatch_group_t waitGroup = dispatch_group_create();
|
||||
dispatch_group_enter( waitGroup );
|
||||
__block BOOL contextSuccess = NO;
|
||||
__block NSError *contextError = nil;
|
||||
[context evaluateAccessControl:accessControl
|
||||
operation:newItem? LAAccessControlOperationCreateItem: LAAccessControlOperationUseItem
|
||||
localizedReason:@"Moo"
|
||||
reply:^(BOOL success, NSError *error) {
|
||||
contextSuccess = success;
|
||||
contextError = error;
|
||||
dispatch_group_leave( waitGroup );
|
||||
}];
|
||||
dispatch_group_wait( waitGroup, DISPATCH_TIME_FOREVER );
|
||||
|
||||
if (!contextSuccess || contextError)
|
||||
err( @"TouchID authentication failed: %@", contextError );
|
||||
|
||||
else
|
||||
return [PearlKeyChain createQueryForClass:kSecClassGenericPassword
|
||||
attributes:@{
|
||||
(__bridge id)kSecAttrService : @"Saved Master Password",
|
||||
(__bridge id)kSecAttrAccount : user.name?: @"",
|
||||
(__bridge id)kSecUseAuthenticationUI : (__bridge id)kSecUseAuthenticationUIAllow,
|
||||
(__bridge id)kSecAttrAccessControl : (__bridge id)accessControl,
|
||||
}
|
||||
matches:nil];
|
||||
}
|
||||
}
|
||||
|
||||
return [PearlKeyChain createQueryForClass:kSecClassGenericPassword
|
||||
attributes:@{
|
||||
(__bridge id)kSecAttrService : @"Saved Master Password",
|
||||
(__bridge id)kSecAttrAccount : user.name?: @""
|
||||
(__bridge id)kSecAttrAccount : user.name?: @"",
|
||||
}
|
||||
matches:nil];
|
||||
}
|
||||
|
||||
- (MPKey *)loadSavedKeyFor:(MPUserEntity *)user {
|
||||
|
||||
NSData *keyData = [PearlKeyChain dataOfItemForQuery:keyQuery( user )];
|
||||
NSData *keyData = [PearlKeyChain dataOfItemForQuery:keyQuery( user, NO )];
|
||||
if (!keyData) {
|
||||
inf( @"No key found in keychain for user: %@", user.userID );
|
||||
return nil;
|
||||
@ -42,25 +81,21 @@ static NSDictionary *keyQuery(MPUserEntity *user) {
|
||||
- (void)storeSavedKeyFor:(MPUserEntity *)user {
|
||||
|
||||
if (user.saveKey) {
|
||||
NSData *existingKeyData = [PearlKeyChain dataOfItemForQuery:keyQuery( user )];
|
||||
inf( @"Saving key in keychain for user: %@", user.userID );
|
||||
|
||||
if (![existingKeyData isEqualToData:[self.key keyDataForAlgorithm:user.algorithm]]) {
|
||||
inf( @"Saving key in keychain for user: %@", user.userID );
|
||||
|
||||
[PearlKeyChain addOrUpdateItemForQuery:keyQuery( user )
|
||||
withAttributes:@{
|
||||
(__bridge id)kSecValueData : [self.key keyDataForAlgorithm:user.algorithm],
|
||||
[PearlKeyChain addOrUpdateItemForQuery:keyQuery( user, YES )
|
||||
withAttributes:@{
|
||||
(__bridge id)kSecValueData : [self.key keyDataForAlgorithm:user.algorithm],
|
||||
#if TARGET_OS_IPHONE
|
||||
(__bridge id)kSecAttrAccessible : (__bridge id)kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
|
||||
(__bridge id)kSecAttrAccessible : (__bridge id)(kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly?: kSecAttrAccessibleWhenUnlockedThisDeviceOnly),
|
||||
#endif
|
||||
}];
|
||||
}
|
||||
}];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)forgetSavedKeyFor:(MPUserEntity *)user {
|
||||
|
||||
OSStatus result = [PearlKeyChain deleteItemForQuery:keyQuery( user )];
|
||||
OSStatus result = [PearlKeyChain deleteItemForQuery:keyQuery( user, NO )];
|
||||
if (result == noErr) {
|
||||
inf( @"Removed key from keychain for user: %@", user.userID );
|
||||
|
||||
@ -201,17 +236,17 @@ static NSDictionary *keyQuery(MPUserEntity *user) {
|
||||
site.name )
|
||||
viewStyle:UIAlertViewStyleSecureTextInput
|
||||
initAlert:nil tappedButtonBlock:^(UIAlertView *alert_, NSInteger buttonIndex_) {
|
||||
@try {
|
||||
if (buttonIndex_ == [alert_ cancelButtonIndex])
|
||||
// Don't Migrate
|
||||
return;
|
||||
@try {
|
||||
if (buttonIndex_ == [alert_ cancelButtonIndex])
|
||||
// Don't Migrate
|
||||
return;
|
||||
|
||||
masterPassword = [alert_ textFieldAtIndex:0].text;
|
||||
}
|
||||
@finally {
|
||||
dispatch_group_leave( recoverPasswordGroup );
|
||||
}
|
||||
} cancelTitle:@"Don't Migrate" otherTitles:@"Migrate", nil];
|
||||
masterPassword = [alert_ textFieldAtIndex:0].text;
|
||||
}
|
||||
@finally {
|
||||
dispatch_group_leave( recoverPasswordGroup );
|
||||
}
|
||||
} cancelTitle:@"Don't Migrate" otherTitles:@"Migrate", nil];
|
||||
dispatch_group_wait( recoverPasswordGroup, DISPATCH_TIME_FOREVER );
|
||||
#endif
|
||||
if (!masterPassword)
|
||||
|
@ -53,6 +53,7 @@
|
||||
|
||||
@property(assign) NSUInteger avatar;
|
||||
@property(assign) BOOL saveKey;
|
||||
@property(assign) BOOL touchID;
|
||||
@property(assign) MPSiteType defaultType;
|
||||
@property(readonly) NSString *userID;
|
||||
@property(strong) id<MPAlgorithm> algorithm;
|
||||
|
@ -285,6 +285,16 @@
|
||||
self.saveKey_ = @(aSaveKey);
|
||||
}
|
||||
|
||||
- (BOOL)touchID {
|
||||
|
||||
return [self.touchID_ boolValue];
|
||||
}
|
||||
|
||||
- (void)setTouchID:(BOOL)aTouchID {
|
||||
|
||||
self.touchID_ = @(aTouchID);
|
||||
}
|
||||
|
||||
- (MPSiteType)defaultType {
|
||||
|
||||
return (MPSiteType)[self.defaultType_ unsignedIntegerValue]?: MPSiteTypeGeneratedLong;
|
||||
|
@ -19,6 +19,7 @@
|
||||
@property (nonatomic, retain) NSDate * lastUsed;
|
||||
@property (nonatomic, retain) NSString * name;
|
||||
@property (nonatomic, retain) NSNumber * saveKey_;
|
||||
@property (nonatomic, retain) NSNumber * touchID_;
|
||||
@property (nonatomic, retain) NSNumber * version_;
|
||||
@property (nonatomic, retain) NSSet *sites;
|
||||
@end
|
||||
|
@ -18,6 +18,7 @@
|
||||
@dynamic lastUsed;
|
||||
@dynamic name;
|
||||
@dynamic saveKey_;
|
||||
@dynamic touchID_;
|
||||
@dynamic version_;
|
||||
@dynamic sites;
|
||||
|
||||
|
@ -91,7 +91,6 @@
|
||||
DA6774451A474A3B004F356A /* mpw-types.c in Sources */ = {isa = PBXBuildFile; fileRef = DA6773C21A4746AF004F356A /* mpw-types.c */; };
|
||||
DA6774461A474A3B004F356A /* mpw-util.c in Sources */ = {isa = PBXBuildFile; fileRef = DA6773C51A4746AF004F356A /* mpw-util.c */; };
|
||||
DA67744A1A47C8F7004F356A /* mpw-tests-util.c in Sources */ = {isa = PBXBuildFile; fileRef = DA6774481A47C8F7004F356A /* mpw-tests-util.c */; };
|
||||
DA8495301A915EF400B3053D /* MasterPassword.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = DA8495281A915EF400B3053D /* MasterPassword.xcdatamodeld */; };
|
||||
DA89D4EC1A51EABD00AC64D7 /* Pearl-Cocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = DA89D4EA1A51EABD00AC64D7 /* Pearl-Cocoa.h */; };
|
||||
DA89D4ED1A51EABD00AC64D7 /* Pearl-Cocoa.m in Sources */ = {isa = PBXBuildFile; fileRef = DA89D4EB1A51EABD00AC64D7 /* Pearl-Cocoa.m */; };
|
||||
DA8ED895192906920099B726 /* PearlTween.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8ED891192906920099B726 /* PearlTween.m */; };
|
||||
@ -102,6 +101,7 @@
|
||||
DA9261521BE1A86700369DE5 /* Fabric.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA9261501BE1A86700369DE5 /* Fabric.framework */; };
|
||||
DA9261541BE1A88900369DE5 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = DA9261531BE1A88900369DE5 /* libc++.tbd */; };
|
||||
DA9261561BE1A89600369DE5 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = DA9261551BE1A89600369DE5 /* libz.tbd */; };
|
||||
DA95B5231C477DE10067F5EF /* MasterPassword.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = DA95B51A1C477DE10067F5EF /* MasterPassword.xcdatamodeld */; };
|
||||
DAAA81B0195A8D1300FA30D9 /* gradient.png in Resources */ = {isa = PBXBuildFile; fileRef = DAAA81AF195A8D1300FA30D9 /* gradient.png */; };
|
||||
DAADCC4719FAFFAD00987B1D /* NSNotificationCenter+PearlEasyCleanup.h in Headers */ = {isa = PBXBuildFile; fileRef = DAADCC3E19FAFFAD00987B1D /* NSNotificationCenter+PearlEasyCleanup.h */; };
|
||||
DAADCC4819FAFFAD00987B1D /* NSPersistentStore+PearlMigration.h in Headers */ = {isa = PBXBuildFile; fileRef = DAADCC3F19FAFFAD00987B1D /* NSPersistentStore+PearlMigration.h */; };
|
||||
@ -792,13 +792,6 @@
|
||||
DA831A281A6E1146000AC234 /* mpw-algorithm_v1.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "mpw-algorithm_v1.c"; sourceTree = "<group>"; };
|
||||
DA831A291A6E1146000AC234 /* mpw-algorithm_v2.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "mpw-algorithm_v2.c"; sourceTree = "<group>"; };
|
||||
DA831A2A1A6E1146000AC234 /* mpw-algorithm_v3.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "mpw-algorithm_v3.c"; sourceTree = "<group>"; };
|
||||
DA8495291A915EF400B3053D /* MasterPassword 1.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 1.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA84952A1A915EF400B3053D /* MasterPassword 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 2.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA84952B1A915EF400B3053D /* MasterPassword 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 3.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA84952C1A915EF400B3053D /* MasterPassword 4.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 4.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA84952D1A915EF400B3053D /* MasterPassword 5.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 5.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA84952E1A915EF400B3053D /* MasterPassword 6.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 6.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA84952F1A915EF400B3053D /* MasterPassword 7.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 7.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA89D4EA1A51EABD00AC64D7 /* Pearl-Cocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Pearl-Cocoa.h"; sourceTree = "<group>"; };
|
||||
DA89D4EB1A51EABD00AC64D7 /* Pearl-Cocoa.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Pearl-Cocoa.m"; sourceTree = "<group>"; };
|
||||
DA8ED891192906920099B726 /* PearlTween.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlTween.m; sourceTree = "<group>"; };
|
||||
@ -808,6 +801,14 @@
|
||||
DA9261501BE1A86700369DE5 /* Fabric.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Fabric.framework; sourceTree = "<group>"; };
|
||||
DA9261531BE1A88900369DE5 /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; };
|
||||
DA9261551BE1A89600369DE5 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
|
||||
DA95B51B1C477DE10067F5EF /* MasterPassword 1.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 1.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA95B51C1C477DE10067F5EF /* MasterPassword 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 2.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA95B51D1C477DE10067F5EF /* MasterPassword 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 3.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA95B51E1C477DE10067F5EF /* MasterPassword 4.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 4.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA95B51F1C477DE10067F5EF /* MasterPassword 5.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 5.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA95B5201C477DE10067F5EF /* MasterPassword 6.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 6.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA95B5211C477DE10067F5EF /* MasterPassword 7.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 7.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA95B5221C477DE10067F5EF /* MasterPassword 8.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 8.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DAAA81AF195A8D1300FA30D9 /* gradient.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = gradient.png; sourceTree = "<group>"; };
|
||||
DAADCC3E19FAFFAD00987B1D /* NSNotificationCenter+PearlEasyCleanup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSNotificationCenter+PearlEasyCleanup.h"; sourceTree = "<group>"; };
|
||||
DAADCC3F19FAFFAD00987B1D /* NSPersistentStore+PearlMigration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSPersistentStore+PearlMigration.h"; sourceTree = "<group>"; };
|
||||
@ -1070,7 +1071,7 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
DA5E5CB21724A667003798D8 /* Mac */,
|
||||
DA8495281A915EF400B3053D /* MasterPassword.xcdatamodeld */,
|
||||
DA95B51A1C477DE10067F5EF /* MasterPassword.xcdatamodeld */,
|
||||
DA5E5C971724A667003798D8 /* MPAlgorithm.h */,
|
||||
DA5E5C981724A667003798D8 /* MPAlgorithm.m */,
|
||||
DA5E5C991724A667003798D8 /* MPAlgorithmV0.h */,
|
||||
@ -2257,7 +2258,7 @@
|
||||
93D39784E725A34D1EE3FB3B /* MPInitialWindowController.m in Sources */,
|
||||
DA32CFDF19CF1C70004F3F0E /* MPSiteEntity.m in Sources */,
|
||||
93D394C4254EEB45FB335AFB /* MPSitesTableView.m in Sources */,
|
||||
DA8495301A915EF400B3053D /* MasterPassword.xcdatamodeld in Sources */,
|
||||
DA95B5231C477DE10067F5EF /* MasterPassword.xcdatamodeld in Sources */,
|
||||
DA6774291A4746AF004F356A /* mpw-algorithm.c in Sources */,
|
||||
93D395E4830290EBB6E71F34 /* MPNoStateButton.m in Sources */,
|
||||
DA4DAE941A7D8117003E5423 /* MPAlgorithmV3.m in Sources */,
|
||||
@ -2946,18 +2947,19 @@
|
||||
/* End XCConfigurationList section */
|
||||
|
||||
/* Begin XCVersionGroup section */
|
||||
DA8495281A915EF400B3053D /* MasterPassword.xcdatamodeld */ = {
|
||||
DA95B51A1C477DE10067F5EF /* MasterPassword.xcdatamodeld */ = {
|
||||
isa = XCVersionGroup;
|
||||
children = (
|
||||
DA8495291A915EF400B3053D /* MasterPassword 1.xcdatamodel */,
|
||||
DA84952A1A915EF400B3053D /* MasterPassword 2.xcdatamodel */,
|
||||
DA84952B1A915EF400B3053D /* MasterPassword 3.xcdatamodel */,
|
||||
DA84952C1A915EF400B3053D /* MasterPassword 4.xcdatamodel */,
|
||||
DA84952D1A915EF400B3053D /* MasterPassword 5.xcdatamodel */,
|
||||
DA84952E1A915EF400B3053D /* MasterPassword 6.xcdatamodel */,
|
||||
DA84952F1A915EF400B3053D /* MasterPassword 7.xcdatamodel */,
|
||||
DA95B51B1C477DE10067F5EF /* MasterPassword 1.xcdatamodel */,
|
||||
DA95B51C1C477DE10067F5EF /* MasterPassword 2.xcdatamodel */,
|
||||
DA95B51D1C477DE10067F5EF /* MasterPassword 3.xcdatamodel */,
|
||||
DA95B51E1C477DE10067F5EF /* MasterPassword 4.xcdatamodel */,
|
||||
DA95B51F1C477DE10067F5EF /* MasterPassword 5.xcdatamodel */,
|
||||
DA95B5201C477DE10067F5EF /* MasterPassword 6.xcdatamodel */,
|
||||
DA95B5211C477DE10067F5EF /* MasterPassword 7.xcdatamodel */,
|
||||
DA95B5221C477DE10067F5EF /* MasterPassword 8.xcdatamodel */,
|
||||
);
|
||||
currentVersion = DA84952F1A915EF400B3053D /* MasterPassword 7.xcdatamodel */;
|
||||
currentVersion = DA95B5221C477DE10067F5EF /* MasterPassword 8.xcdatamodel */;
|
||||
path = MasterPassword.xcdatamodeld;
|
||||
sourceTree = "<group>";
|
||||
versionGroupType = wrapper.xcdatamodel;
|
||||
|
@ -3,6 +3,6 @@
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>_XCCurrentVersionName</key>
|
||||
<string>MasterPassword 7.xcdatamodel</string>
|
||||
<string>MasterPassword 8.xcdatamodel</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
@ -0,0 +1,50 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<model userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="9525" systemVersion="15C50" minimumToolsVersion="Automatic">
|
||||
<entity name="MPGeneratedSiteEntity" representedClassName="MPGeneratedSiteEntity" parentEntity="MPSiteEntity" elementID="789304EA-070D-4982-8C20-54EECFC20CB6" syncable="YES">
|
||||
<attribute name="counter_" optional="YES" attributeType="Integer 32" defaultValueString="1" syncable="YES"/>
|
||||
</entity>
|
||||
<entity name="MPSiteEntity" representedClassName="MPSiteEntity" isAbstract="YES" elementID="58EE245C-6827-4C11-BB7E-5722F2426EC2" syncable="YES">
|
||||
<attribute name="content" optional="YES" transient="YES" attributeType="Transformable" syncable="YES"/>
|
||||
<attribute name="lastUsed" attributeType="Date" indexed="YES" syncable="YES"/>
|
||||
<attribute name="loginGenerated_" attributeType="Boolean" defaultValueString="NO" syncable="YES"/>
|
||||
<attribute name="loginName" optional="YES" attributeType="String" elementID="A1B9F981-D33C-4BFE-9F94-C9D3E1F78E51" syncable="YES"/>
|
||||
<attribute name="name" attributeType="String" minValueString="1" indexed="YES" syncable="YES"/>
|
||||
<attribute name="requiresExplicitMigration_" attributeType="Boolean" defaultValueString="NO">
|
||||
<userInfo/>
|
||||
</attribute>
|
||||
<attribute name="type_" attributeType="Integer 16" defaultValueString="17" syncable="YES"/>
|
||||
<attribute name="uses_" attributeType="Integer 16" defaultValueString="0" indexed="YES" syncable="YES"/>
|
||||
<attribute name="version_" attributeType="Integer 16" minValueString="0" defaultValueString="0" syncable="YES"/>
|
||||
<relationship name="questions" optional="YES" toMany="YES" deletionRule="Cascade" ordered="YES" destinationEntity="MPSiteQuestionEntity" inverseName="site" inverseEntity="MPSiteQuestionEntity" syncable="YES"/>
|
||||
<relationship name="user" minCount="1" maxCount="1" deletionRule="Nullify" destinationEntity="MPUserEntity" inverseName="sites" inverseEntity="MPUserEntity" elementID="FC8AE32E-7BE3-4FA6-8611-B7DC0DB063EF" syncable="YES"/>
|
||||
</entity>
|
||||
<entity name="MPSiteQuestionEntity" representedClassName="MPSiteQuestionEntity" syncable="YES">
|
||||
<attribute name="keyword" attributeType="String" syncable="YES"/>
|
||||
<relationship name="site" maxCount="1" deletionRule="Nullify" destinationEntity="MPSiteEntity" inverseName="questions" inverseEntity="MPSiteEntity" syncable="YES"/>
|
||||
</entity>
|
||||
<entity name="MPStoredSiteEntity" representedClassName="MPStoredSiteEntity" parentEntity="MPSiteEntity" elementID="BEEF1688-0CCD-4699-A86A-4D860FE2CEB8" syncable="YES">
|
||||
<attribute name="contentObject" optional="YES" attributeType="Transformable" storedInTruthFile="YES" syncable="YES"/>
|
||||
</entity>
|
||||
<entity name="MPUserEntity" representedClassName="MPUserEntity" syncable="YES">
|
||||
<attribute name="avatar_" attributeType="Integer 16" defaultValueString="0" syncable="YES"/>
|
||||
<attribute name="defaultType_" attributeType="Integer 16" defaultValueString="17" syncable="YES"/>
|
||||
<attribute name="keyID" optional="YES" attributeType="Binary" syncable="YES"/>
|
||||
<attribute name="lastUsed" optional="YES" attributeType="Date" syncable="YES"/>
|
||||
<attribute name="name" attributeType="String" syncable="YES"/>
|
||||
<attribute name="saveKey_" attributeType="Boolean" defaultValueString="NO">
|
||||
<userInfo/>
|
||||
</attribute>
|
||||
<attribute name="touchID_" attributeType="Boolean" defaultValueString="0">
|
||||
<userInfo/>
|
||||
</attribute>
|
||||
<attribute name="version_" attributeType="Integer 16" minValueString="0" defaultValueString="2" syncable="YES"/>
|
||||
<relationship name="sites" optional="YES" toMany="YES" deletionRule="Cascade" destinationEntity="MPSiteEntity" inverseName="user" inverseEntity="MPSiteEntity" elementID="D18D6772-040E-4CFE-8F32-A34B08E9E9BC" syncable="YES"/>
|
||||
</entity>
|
||||
<elements>
|
||||
<element name="MPGeneratedSiteEntity" positionX="216" positionY="-288" width="128" height="58"/>
|
||||
<element name="MPSiteEntity" positionX="-0" positionY="-286" width="128" height="208"/>
|
||||
<element name="MPSiteQuestionEntity" positionX="-2" positionY="-9" width="128" height="73"/>
|
||||
<element name="MPStoredSiteEntity" positionX="214" positionY="-171" width="128" height="58"/>
|
||||
<element name="MPUserEntity" positionX="-218" positionY="-288" width="128" height="178"/>
|
||||
</elements>
|
||||
</model>
|
@ -12,6 +12,7 @@
|
||||
@interface MPPreferencesViewController : UITableViewController
|
||||
|
||||
@property(weak, nonatomic) IBOutlet UISwitch *savePasswordSwitch;
|
||||
@property(weak, nonatomic) IBOutlet UISwitch *touchIDSwitch;
|
||||
@property(weak, nonatomic) IBOutlet UITableViewCell *signOutCell;
|
||||
@property(weak, nonatomic) IBOutlet UITableViewCell *feedbackCell;
|
||||
@property(weak, nonatomic) IBOutlet UITableViewCell *showHelpCell;
|
||||
|
@ -40,6 +40,7 @@
|
||||
self.storedTypeControl.selectedSegmentIndex = [self storedSegmentIndexForType:activeUser.defaultType];
|
||||
self.avatarImage.image = [UIImage imageNamed:strf( @"avatar-%ld", (long)activeUser.avatar )];
|
||||
self.savePasswordSwitch.on = activeUser.saveKey;
|
||||
self.touchIDSwitch.on = activeUser.touchID;
|
||||
|
||||
self.tableView.contentInset = UIEdgeInsetsMake( 64, 0, 49, 0 );
|
||||
}
|
||||
@ -98,6 +99,16 @@
|
||||
[context saveToStore];
|
||||
}];
|
||||
|
||||
if (sender == self.touchIDSwitch)
|
||||
[MPiOSAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
|
||||
MPUserEntity *activeUser = [[MPiOSAppDelegate get] activeUserInContext:context];
|
||||
if ((activeUser.touchID = self.touchIDSwitch.on))
|
||||
[[MPiOSAppDelegate get] storeSavedKeyFor:activeUser];
|
||||
else
|
||||
[[MPiOSAppDelegate get] forgetSavedKeyFor:activeUser];
|
||||
[context saveToStore];
|
||||
}];
|
||||
|
||||
if (sender == self.generatedTypeControl || sender == self.storedTypeControl) {
|
||||
if (sender == self.generatedTypeControl)
|
||||
self.storedTypeControl.selectedSegmentIndex = -1;
|
||||
|
@ -36,8 +36,8 @@
|
||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
|
||||
|
||||
@try {
|
||||
[[NSBundle mainBundle] mutableInfoDictionary][@"CFBundleDisplayName"] = @"Master Password";
|
||||
[[NSBundle mainBundle] mutableLocalizedInfoDictionary][@"CFBundleDisplayName"] = @"Master Password";
|
||||
// [[NSBundle mainBundle] mutableInfoDictionary][@"CFBundleDisplayName"] = @"Master Password";
|
||||
// [[NSBundle mainBundle] mutableLocalizedInfoDictionary][@"CFBundleDisplayName"] = @"Master Password";
|
||||
|
||||
#ifdef CRASHLYTICS
|
||||
NSString *crashlyticsAPIKey = [self crashlyticsAPIKey];
|
||||
|
@ -20,7 +20,7 @@
|
||||
NSStringFromSelector( @selector( helpHidden ) ) : @NO,
|
||||
NSStringFromSelector( @selector( siteInfoHidden ) ) : @YES,
|
||||
NSStringFromSelector( @selector( showSetup ) ) : @YES,
|
||||
NSStringFromSelector( @selector( iTunesID ) ) : @"510296984",
|
||||
NSStringFromSelector( @selector( appleID ) ) : @"510296984",
|
||||
NSStringFromSelector( @selector( actionsTipShown ) ) : @(!self.firstRun),
|
||||
NSStringFromSelector( @selector( typeTipShown ) ) : @(!self.firstRun),
|
||||
NSStringFromSelector( @selector( loginNameTipShown ) ) : @NO,
|
||||
|
@ -28,42 +28,80 @@
|
||||
#import <CoreFoundation/CFString.h>
|
||||
#import <objc/runtime.h>
|
||||
#import <objc/message.h>
|
||||
#import <objc/NSObjCRuntime.h>
|
||||
#import <stdlib.h>
|
||||
|
||||
#define trc(format, ...) objc_msgSend( \
|
||||
objc_msgSend( (id)objc_getClass("PearlLogger"), sel_getUid( "get" ) ), \
|
||||
sel_getUid( "inFile:atLine:trc:" ), \
|
||||
basename( (char *)__FILE__ ), __LINE__, \
|
||||
CFStringCreateWithCString( NULL, format, kCFStringEncodingUTF8 ), \
|
||||
##__VA_ARGS__)
|
||||
#define dbg(format, ...) objc_msgSend( \
|
||||
objc_msgSend( (id)objc_getClass("PearlLogger"), sel_getUid( "get" ) ), \
|
||||
sel_getUid( "inFile:atLine:dbg:" ), \
|
||||
basename( (char *)__FILE__ ), __LINE__, \
|
||||
CFStringCreateWithCString( NULL, format, kCFStringEncodingUTF8 ), \
|
||||
##__VA_ARGS__)
|
||||
#define inf(format, ...) objc_msgSend( \
|
||||
objc_msgSend( (id)objc_getClass("PearlLogger"), sel_getUid( "get" ) ), \
|
||||
sel_getUid( "inFile:atLine:inf:" ), \
|
||||
basename( (char *)__FILE__ ), __LINE__, \
|
||||
CFStringCreateWithCString( NULL, format, kCFStringEncodingUTF8 ), \
|
||||
##__VA_ARGS__)
|
||||
#define wrn(format, ...) objc_msgSend( \
|
||||
objc_msgSend( (id)objc_getClass("PearlLogger"), sel_getUid( "get" ) ), \
|
||||
sel_getUid( "inFile:atLine:wrn:" ), \
|
||||
basename( (char *)__FILE__ ), __LINE__, \
|
||||
CFStringCreateWithCString( NULL, format, kCFStringEncodingUTF8 ), \
|
||||
##__VA_ARGS__)
|
||||
#define err(format, ...) objc_msgSend( \
|
||||
objc_msgSend( (id)objc_getClass("PearlLogger"), sel_getUid( "get" ) ), \
|
||||
sel_getUid( "inFile:atLine:err:" ), \
|
||||
basename( (char *)__FILE__ ), __LINE__, \
|
||||
CFStringCreateWithCString( NULL, format, kCFStringEncodingUTF8 ), \
|
||||
##__VA_ARGS__)
|
||||
#define ftl(format, ...) do{objc_msgSend( \
|
||||
objc_msgSend( (id)objc_getClass("PearlLogger"), sel_getUid( "get" ) ), \
|
||||
sel_getUid( "inFile:atLine:ftl:" ), \
|
||||
basename( (char *)__FILE__ ), __LINE__, \
|
||||
CFStringCreateWithCString( NULL, format, kCFStringEncodingUTF8 ), \
|
||||
##__VA_ARGS__); abort(); } while (0)
|
||||
#define trc(format, ...) \
|
||||
do { \
|
||||
char *_msg = NULL; \
|
||||
asprintf( &_msg, format, ##__VA_ARGS__ ); \
|
||||
void (*_sendMsg)(id, SEL, CFStringRef, NSInteger, CFStringRef, NSUInteger, CFStringRef) = (void *)objc_msgSend; \
|
||||
_sendMsg( objc_msgSend( (id)objc_getClass( "PearlLogger" ), sel_getUid( "get" ) ), \
|
||||
sel_getUid( "inFile:atLine:fromFunction:withLevel:text:" ), \
|
||||
CFStringCreateWithCString( NULL, basename( (char *)__FILE__ ), kCFStringEncodingUTF8 ), __LINE__, \
|
||||
CFStringCreateWithCString( NULL, __FUNCTION__, kCFStringEncodingUTF8 ), 0, \
|
||||
CFStringCreateWithCString( NULL, _msg, kCFStringEncodingUTF8 ) ); \
|
||||
} while (0)
|
||||
|
||||
#define dbg(format, ...) \
|
||||
do { \
|
||||
char *_msg = NULL; \
|
||||
asprintf( &_msg, format, ##__VA_ARGS__ ); \
|
||||
void (*_sendMsg)(id, SEL, CFStringRef, NSInteger, CFStringRef, NSUInteger, CFStringRef) = (void *)objc_msgSend; \
|
||||
_sendMsg( objc_msgSend( (id)objc_getClass( "PearlLogger" ), sel_getUid( "get" ) ), \
|
||||
sel_getUid( "inFile:atLine:fromFunction:withLevel:text:" ), \
|
||||
CFStringCreateWithCString( NULL, basename( (char *)__FILE__ ), kCFStringEncodingUTF8 ), __LINE__, \
|
||||
CFStringCreateWithCString( NULL, __FUNCTION__, kCFStringEncodingUTF8 ), 1, \
|
||||
CFStringCreateWithCString( NULL, _msg, kCFStringEncodingUTF8 ) ); \
|
||||
} while (0)
|
||||
|
||||
#define inf(format, ...) \
|
||||
do { \
|
||||
char *_msg = NULL; \
|
||||
asprintf( &_msg, format, ##__VA_ARGS__ ); \
|
||||
void (*_sendMsg)(id, SEL, CFStringRef, NSInteger, CFStringRef, NSUInteger, CFStringRef) = (void *)objc_msgSend; \
|
||||
_sendMsg( objc_msgSend( (id)objc_getClass( "PearlLogger" ), sel_getUid( "get" ) ), \
|
||||
sel_getUid( "inFile:atLine:fromFunction:withLevel:text:" ), \
|
||||
CFStringCreateWithCString( NULL, basename( (char *)__FILE__ ), kCFStringEncodingUTF8 ), __LINE__, \
|
||||
CFStringCreateWithCString( NULL, __FUNCTION__, kCFStringEncodingUTF8 ), 2, \
|
||||
CFStringCreateWithCString( NULL, _msg, kCFStringEncodingUTF8 ) ); \
|
||||
} while (0)
|
||||
|
||||
#define wrn(format, ...) \
|
||||
do { \
|
||||
char *_msg = NULL; \
|
||||
asprintf( &_msg, format, ##__VA_ARGS__ ); \
|
||||
void (*_sendMsg)(id, SEL, CFStringRef, NSInteger, CFStringRef, NSUInteger, CFStringRef) = (void *)objc_msgSend; \
|
||||
_sendMsg( objc_msgSend( (id)objc_getClass( "PearlLogger" ), sel_getUid( "get" ) ), \
|
||||
sel_getUid( "inFile:atLine:fromFunction:withLevel:text:" ), \
|
||||
CFStringCreateWithCString( NULL, basename( (char *)__FILE__ ), kCFStringEncodingUTF8 ), __LINE__, \
|
||||
CFStringCreateWithCString( NULL, __FUNCTION__, kCFStringEncodingUTF8 ), 3, \
|
||||
CFStringCreateWithCString( NULL, _msg, kCFStringEncodingUTF8 ) ); \
|
||||
} while (0)
|
||||
|
||||
#define err(format, ...) \
|
||||
do { \
|
||||
char *_msg = NULL; \
|
||||
asprintf( &_msg, format, ##__VA_ARGS__ ); \
|
||||
void (*_sendMsg)(id, SEL, CFStringRef, NSInteger, CFStringRef, NSUInteger, CFStringRef) = (void *)objc_msgSend; \
|
||||
_sendMsg( objc_msgSend( (id)objc_getClass( "PearlLogger" ), sel_getUid( "get" ) ), \
|
||||
sel_getUid( "inFile:atLine:fromFunction:withLevel:text:" ), \
|
||||
CFStringCreateWithCString( NULL, basename( (char *)__FILE__ ), kCFStringEncodingUTF8 ), __LINE__, \
|
||||
CFStringCreateWithCString( NULL, __FUNCTION__, kCFStringEncodingUTF8 ), 4, \
|
||||
CFStringCreateWithCString( NULL, _msg, kCFStringEncodingUTF8 ) ); \
|
||||
} while (0)
|
||||
|
||||
#define ftl(format, ...) \
|
||||
do { \
|
||||
char *_msg = NULL; \
|
||||
asprintf( &_msg, format, ##__VA_ARGS__ ); \
|
||||
void (*_sendMsg)(id, SEL, CFStringRef, NSInteger, CFStringRef, NSUInteger, CFStringRef) = (void *)objc_msgSend; \
|
||||
_sendMsg( objc_msgSend( (id)objc_getClass( "PearlLogger" ), sel_getUid( "get" ) ), \
|
||||
sel_getUid( "inFile:atLine:fromFunction:withLevel:text:" ), \
|
||||
CFStringCreateWithCString( NULL, basename( (char *)__FILE__ ), kCFStringEncodingUTF8 ), __LINE__, \
|
||||
CFStringCreateWithCString( NULL, __FUNCTION__, kCFStringEncodingUTF8 ), 5, \
|
||||
CFStringCreateWithCString( NULL, _msg, kCFStringEncodingUTF8 ) ); \
|
||||
abort(); \
|
||||
} while (0)
|
||||
|
||||
#endif
|
||||
|
@ -106,8 +106,6 @@
|
||||
DA2CA4E018D28859007798F8 /* NSTimer+PearlBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = DA2CA4DC18D28859007798F8 /* NSTimer+PearlBlock.h */; };
|
||||
DA2CA4E418D28866007798F8 /* NSLayoutConstraint+PearlUIKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DA2CA4E218D28866007798F8 /* NSLayoutConstraint+PearlUIKit.h */; };
|
||||
DA2CA4E618D2AC10007798F8 /* NSLayoutConstraint+PearlUIKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DA2CA4E518D2AC10007798F8 /* NSLayoutConstraint+PearlUIKit.m */; };
|
||||
DA30E9CE15722ECA00A68B4C /* NSBundle+PearlMutableInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DA30E9CB15722ECA00A68B4C /* NSBundle+PearlMutableInfo.h */; };
|
||||
DA30E9CF15722ECA00A68B4C /* NSBundle+PearlMutableInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DA30E9CC15722ECA00A68B4C /* NSBundle+PearlMutableInfo.m */; };
|
||||
DA30E9D015722ECA00A68B4C /* Pearl.m in Sources */ = {isa = PBXBuildFile; fileRef = DA30E9CD15722ECA00A68B4C /* Pearl.m */; };
|
||||
DA30E9D215722EE500A68B4C /* Pearl-Crypto.m in Sources */ = {isa = PBXBuildFile; fileRef = DA30E9D115722EE500A68B4C /* Pearl-Crypto.m */; };
|
||||
DA30E9D415722EF400A68B4C /* Pearl-UIKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DA30E9D315722EF400A68B4C /* Pearl-UIKit.m */; };
|
||||
@ -117,7 +115,6 @@
|
||||
DA32CFF119CF1C8F004F3F0E /* MPStoredSiteEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = DA32CFE819CF1C8F004F3F0E /* MPStoredSiteEntity.m */; };
|
||||
DA32CFF319CF1C8F004F3F0E /* MPSiteEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = DA32CFEC19CF1C8F004F3F0E /* MPSiteEntity.m */; };
|
||||
DA32CFF419CF1C8F004F3F0E /* MPGeneratedSiteEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = DA32CFEE19CF1C8F004F3F0E /* MPGeneratedSiteEntity.m */; };
|
||||
DA32D00819CF4735004F3F0E /* MasterPassword.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = DA32D00119CF4735004F3F0E /* MasterPassword.xcdatamodeld */; };
|
||||
DA32D00919CF5C55004F3F0E /* icon_question.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD37FE1711E29600CF925C /* icon_question.png */; };
|
||||
DA32D00A19CF5C55004F3F0E /* icon_question@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD37FF1711E29600CF925C /* icon_question@2x.png */; };
|
||||
DA32D01A19D046E1004F3F0E /* PearlFixedTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = DA32D01819D046E1004F3F0E /* PearlFixedTableView.m */; };
|
||||
@ -186,6 +183,9 @@
|
||||
DA854C8418D4CFBF00106317 /* avatar-add.png in Resources */ = {isa = PBXBuildFile; fileRef = DA854C8218D4CFBF00106317 /* avatar-add.png */; };
|
||||
DA92614E1BE1A57500369DE5 /* MPAppDelegate_InApp.m in Sources */ = {isa = PBXBuildFile; fileRef = DA92614D1BE1A57500369DE5 /* MPAppDelegate_InApp.m */; };
|
||||
DA945C8717E3F3FD0053236B /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DA945C8617E3F3FD0053236B /* Images.xcassets */; };
|
||||
DA95B50C1C476B6A0067F5EF /* LocalAuthentication.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA95B50B1C476B6A0067F5EF /* LocalAuthentication.framework */; };
|
||||
DA95B50F1C4776F00067F5EF /* NSMutableSet+Pearl.m in Sources */ = {isa = PBXBuildFile; fileRef = DA95B50E1C4776F00067F5EF /* NSMutableSet+Pearl.m */; };
|
||||
DA95B5191C477DB50067F5EF /* MasterPassword.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = DA95B5101C477DB50067F5EF /* MasterPassword.xcdatamodeld */; };
|
||||
DA95D5F214DF0B2C008D1B94 /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA95D5F014DF0B1E008D1B94 /* MessageUI.framework */; };
|
||||
DAA141201922FF020032B392 /* PearlTween.m in Sources */ = {isa = PBXBuildFile; fileRef = DAA1411C1922FF020032B392 /* PearlTween.m */; };
|
||||
DAA141211922FF020032B392 /* PearlTween.h in Headers */ = {isa = PBXBuildFile; fileRef = DAA1411D1922FF020032B392 /* PearlTween.h */; };
|
||||
@ -609,8 +609,6 @@
|
||||
DA2CA4DC18D28859007798F8 /* NSTimer+PearlBlock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSTimer+PearlBlock.h"; sourceTree = "<group>"; };
|
||||
DA2CA4E218D28866007798F8 /* NSLayoutConstraint+PearlUIKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSLayoutConstraint+PearlUIKit.h"; sourceTree = "<group>"; };
|
||||
DA2CA4E518D2AC10007798F8 /* NSLayoutConstraint+PearlUIKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSLayoutConstraint+PearlUIKit.m"; sourceTree = "<group>"; };
|
||||
DA30E9CB15722ECA00A68B4C /* NSBundle+PearlMutableInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSBundle+PearlMutableInfo.h"; sourceTree = "<group>"; };
|
||||
DA30E9CC15722ECA00A68B4C /* NSBundle+PearlMutableInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSBundle+PearlMutableInfo.m"; sourceTree = "<group>"; };
|
||||
DA30E9CD15722ECA00A68B4C /* Pearl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Pearl.m; sourceTree = "<group>"; };
|
||||
DA30E9D115722EE500A68B4C /* Pearl-Crypto.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Pearl-Crypto.m"; sourceTree = "<group>"; };
|
||||
DA30E9D315722EF400A68B4C /* Pearl-UIKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Pearl-UIKit.m"; sourceTree = "<group>"; };
|
||||
@ -624,12 +622,6 @@
|
||||
DA32CFED19CF1C8F004F3F0E /* MPSiteEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPSiteEntity.h; sourceTree = "<group>"; };
|
||||
DA32CFEE19CF1C8F004F3F0E /* MPGeneratedSiteEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPGeneratedSiteEntity.m; sourceTree = "<group>"; };
|
||||
DA32CFEF19CF1C8F004F3F0E /* MPGeneratedSiteEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPGeneratedSiteEntity.h; sourceTree = "<group>"; };
|
||||
DA32D00219CF4735004F3F0E /* MasterPassword 1.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 1.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA32D00319CF4735004F3F0E /* MasterPassword 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 2.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA32D00419CF4735004F3F0E /* MasterPassword 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 3.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA32D00519CF4735004F3F0E /* MasterPassword 4.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 4.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA32D00619CF4735004F3F0E /* MasterPassword 5.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 5.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA32D00719CF4735004F3F0E /* MasterPassword 6.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 6.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA32D01819D046E1004F3F0E /* PearlFixedTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlFixedTableView.m; sourceTree = "<group>"; };
|
||||
DA32D01919D046E1004F3F0E /* PearlFixedTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlFixedTableView.h; sourceTree = "<group>"; };
|
||||
DA32D02019D111C6004F3F0E /* libKCOrderedAccessorFix.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libKCOrderedAccessorFix.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
@ -674,12 +666,22 @@
|
||||
DA6774351A4749CC004F356A /* mpw-tests.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "mpw-tests.c"; sourceTree = "<group>"; };
|
||||
DA70EC7F1811B13C00F65DB2 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; };
|
||||
DA72BD7719C137D500E6ACFE /* libopensslcrypto-ios-dev.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libopensslcrypto-ios-dev.a"; sourceTree = "<group>"; };
|
||||
DA8495271A9146E600B3053D /* MasterPassword 7.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 7.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA854C8118D4CFBF00106317 /* avatar-add@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "avatar-add@2x.png"; sourceTree = "<group>"; };
|
||||
DA854C8218D4CFBF00106317 /* avatar-add.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "avatar-add.png"; sourceTree = "<group>"; };
|
||||
DA92614C1BE1A57500369DE5 /* MPAppDelegate_InApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAppDelegate_InApp.h; sourceTree = "<group>"; };
|
||||
DA92614D1BE1A57500369DE5 /* MPAppDelegate_InApp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAppDelegate_InApp.m; sourceTree = "<group>"; };
|
||||
DA945C8617E3F3FD0053236B /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
||||
DA95B50B1C476B6A0067F5EF /* LocalAuthentication.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = LocalAuthentication.framework; path = System/Library/Frameworks/LocalAuthentication.framework; sourceTree = SDKROOT; };
|
||||
DA95B50D1C4776F00067F5EF /* NSMutableSet+Pearl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableSet+Pearl.h"; sourceTree = "<group>"; };
|
||||
DA95B50E1C4776F00067F5EF /* NSMutableSet+Pearl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableSet+Pearl.m"; sourceTree = "<group>"; };
|
||||
DA95B5111C477DB50067F5EF /* MasterPassword 1.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 1.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA95B5121C477DB50067F5EF /* MasterPassword 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 2.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA95B5131C477DB50067F5EF /* MasterPassword 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 3.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA95B5141C477DB50067F5EF /* MasterPassword 4.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 4.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA95B5151C477DB50067F5EF /* MasterPassword 5.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 5.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA95B5161C477DB50067F5EF /* MasterPassword 6.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 6.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA95B5171C477DB50067F5EF /* MasterPassword 7.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 7.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA95B5181C477DB50067F5EF /* MasterPassword 8.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 8.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DA95D5F014DF0B1E008D1B94 /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; };
|
||||
DAA141191922FED80032B392 /* 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>"; };
|
||||
@ -1551,6 +1553,7 @@
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
DA95B50C1C476B6A0067F5EF /* LocalAuthentication.framework in Frameworks */,
|
||||
DA2C3D651BD9612F001137B3 /* libz.tbd in Frameworks */,
|
||||
DA2C3D631BD96126001137B3 /* libc++.tbd in Frameworks */,
|
||||
DAA1761B19D86D0D0044227B /* libAttributedMarkdown.a in Frameworks */,
|
||||
@ -1764,6 +1767,7 @@
|
||||
DA5BFA47147E415C00F98B1E /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
DA95B50B1C476B6A0067F5EF /* LocalAuthentication.framework */,
|
||||
DA2C3D641BD9612F001137B3 /* libz.tbd */,
|
||||
DA2C3D621BD96126001137B3 /* libc++.tbd */,
|
||||
DA2C3D601BD95EEE001137B3 /* Fabric.framework */,
|
||||
@ -2559,7 +2563,7 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
DABD3BD71711E2DC00CF925C /* iOS */,
|
||||
DA32D00119CF4735004F3F0E /* MasterPassword.xcdatamodeld */,
|
||||
DA95B5101C477DB50067F5EF /* MasterPassword.xcdatamodeld */,
|
||||
DABD3BA01711E2DC00CF925C /* MPAlgorithm.h */,
|
||||
DABD3BA11711E2DC00CF925C /* MPAlgorithm.m */,
|
||||
DABD3BA21711E2DC00CF925C /* MPAlgorithmV0.h */,
|
||||
@ -2808,35 +2812,34 @@
|
||||
DAFE45D715039823003ABA7C /* Pearl */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
DACE2F6319BA6A0A0010F92E /* PearlProfiler.m */,
|
||||
DACE2F6419BA6A0A0010F92E /* PearlProfiler.h */,
|
||||
DAA1411C1922FF020032B392 /* PearlTween.m */,
|
||||
DAA1411D1922FF020032B392 /* PearlTween.h */,
|
||||
DAA1411E1922FF020032B392 /* include */,
|
||||
DAF4EF4E190A81E400023C90 /* NSManagedObject+Pearl.m */,
|
||||
DAF4EF4F190A81E400023C90 /* NSManagedObject+Pearl.h */,
|
||||
DA2CA4D918D28859007798F8 /* NSArray+Pearl.m */,
|
||||
DA2CA4DA18D28859007798F8 /* NSArray+Pearl.h */,
|
||||
DA2CA4DB18D28859007798F8 /* NSTimer+PearlBlock.m */,
|
||||
DA2CA4DC18D28859007798F8 /* NSTimer+PearlBlock.h */,
|
||||
DA3509FC15F101A500C14A8E /* PearlQueue.h */,
|
||||
DA3509FD15F101A500C14A8E /* PearlQueue.m */,
|
||||
93D393B97158D7BE9332EA53 /* NSDictionary+Indexing.h */,
|
||||
93D39AA1EE2E1E7B81372240 /* NSDictionary+Indexing.m */,
|
||||
93D396D04E57792A54D437AC /* NSArray+Indexing.h */,
|
||||
93D39067C0AFDC581794E2B8 /* NSArray+Indexing.m */,
|
||||
DA2CA4DA18D28859007798F8 /* NSArray+Pearl.h */,
|
||||
DA2CA4D918D28859007798F8 /* NSArray+Pearl.m */,
|
||||
DAFE4A63150399FF003ABA93 /* NSDateFormatter+RFC3339.h */,
|
||||
DAFE4A63150399FF003ABA91 /* NSDateFormatter+RFC3339.m */,
|
||||
DAFE4A63150399FF003ABA87 /* NSObject+PearlKVO.h */,
|
||||
DAFE4A63150399FF003ABA85 /* NSObject+PearlKVO.m */,
|
||||
DA30E9CB15722ECA00A68B4C /* NSBundle+PearlMutableInfo.h */,
|
||||
DA30E9CC15722ECA00A68B4C /* NSBundle+PearlMutableInfo.m */,
|
||||
93D393B97158D7BE9332EA53 /* NSDictionary+Indexing.h */,
|
||||
93D39AA1EE2E1E7B81372240 /* NSDictionary+Indexing.m */,
|
||||
93D398C95847261903D781D3 /* NSError+PearlFullDescription.h */,
|
||||
93D39F9106F2CCFB94283188 /* NSError+PearlFullDescription.m */,
|
||||
DAF4EF4F190A81E400023C90 /* NSManagedObject+Pearl.h */,
|
||||
DAF4EF4E190A81E400023C90 /* NSManagedObject+Pearl.m */,
|
||||
DA95B50D1C4776F00067F5EF /* NSMutableSet+Pearl.h */,
|
||||
DA95B50E1C4776F00067F5EF /* NSMutableSet+Pearl.m */,
|
||||
93D391AA32F24290C424438E /* NSNotificationCenter+PearlEasyCleanup.h */,
|
||||
DAFE45D815039823003ABA7C /* NSObject+PearlExport.h */,
|
||||
DAFE45D915039823003ABA7C /* NSObject+PearlExport.m */,
|
||||
DAFE4A63150399FF003ABA87 /* NSObject+PearlKVO.h */,
|
||||
DAFE4A63150399FF003ABA85 /* NSObject+PearlKVO.m */,
|
||||
93D397F4BAFFF7CF3F1B21A4 /* NSPersistentStore+PearlMigration.h */,
|
||||
93D399C2F3D48E57C4803BDC /* NSPersistentStore+PearlMigration.m */,
|
||||
DAFE45DA15039823003ABA7C /* NSString+PearlNSArrayFormat.h */,
|
||||
DAFE45DB15039823003ABA7C /* NSString+PearlNSArrayFormat.m */,
|
||||
DAFE45DC15039823003ABA7C /* NSString+PearlSEL.h */,
|
||||
DAFE45DD15039823003ABA7C /* NSString+PearlSEL.m */,
|
||||
DA2CA4DC18D28859007798F8 /* NSTimer+PearlBlock.h */,
|
||||
DA2CA4DB18D28859007798F8 /* NSTimer+PearlBlock.m */,
|
||||
DAFE45DE15039823003ABA7C /* Pearl.h */,
|
||||
DA30E9CD15722ECA00A68B4C /* Pearl.m */,
|
||||
DAFE45DF15039823003ABA7C /* PearlAbstractStrings.h */,
|
||||
@ -2857,18 +2860,19 @@
|
||||
DAFE45EE15039823003ABA7C /* PearlMathUtils.m */,
|
||||
DAFE45EF15039823003ABA7C /* PearlObjectUtils.h */,
|
||||
DAFE45F015039823003ABA7C /* PearlObjectUtils.m */,
|
||||
DACE2F6419BA6A0A0010F92E /* PearlProfiler.h */,
|
||||
DACE2F6319BA6A0A0010F92E /* PearlProfiler.m */,
|
||||
DA3509FC15F101A500C14A8E /* PearlQueue.h */,
|
||||
DA3509FD15F101A500C14A8E /* PearlQueue.m */,
|
||||
DAFE45F115039823003ABA7C /* PearlResettable.h */,
|
||||
DAFE45F215039823003ABA7C /* PearlStrings.h */,
|
||||
DAFE45F315039823003ABA7C /* PearlStrings.m */,
|
||||
DAFE45F415039823003ABA7C /* PearlStringUtils.h */,
|
||||
DAFE45F515039823003ABA7C /* PearlStringUtils.m */,
|
||||
DAA1411D1922FF020032B392 /* PearlTween.h */,
|
||||
DAA1411C1922FF020032B392 /* PearlTween.m */,
|
||||
DAFE45F815039823003ABA7C /* README */,
|
||||
DAFE45F915039823003ABA7C /* Resources */,
|
||||
93D39F9106F2CCFB94283188 /* NSError+PearlFullDescription.m */,
|
||||
93D398C95847261903D781D3 /* NSError+PearlFullDescription.h */,
|
||||
93D391AA32F24290C424438E /* NSNotificationCenter+PearlEasyCleanup.h */,
|
||||
93D399C2F3D48E57C4803BDC /* NSPersistentStore+PearlMigration.m */,
|
||||
93D397F4BAFFF7CF3F1B21A4 /* NSPersistentStore+PearlMigration.h */,
|
||||
);
|
||||
path = Pearl;
|
||||
sourceTree = "<group>";
|
||||
@ -2903,45 +2907,23 @@
|
||||
DAFE460715039823003ABA7C /* Pearl-UIKit */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
DA32D01819D046E1004F3F0E /* PearlFixedTableView.m */,
|
||||
DA32D01919D046E1004F3F0E /* PearlFixedTableView.h */,
|
||||
DAE2726119CE9CB3007C5262 /* UITableViewCell+PearlDeque.m */,
|
||||
DAE2726219CE9CB3007C5262 /* UITableViewCell+PearlDeque.h */,
|
||||
DAEFB01C19BCBD9E00525079 /* UIView+LayoutGone.m */,
|
||||
DAEFB01D19BCBD9E00525079 /* UIView+LayoutGone.h */,
|
||||
DACE2F6719BA6A2A0010F92E /* UIView+FontScale.m */,
|
||||
DACE2F6819BA6A2A0010F92E /* PearlMutableStaticTableViewController.m */,
|
||||
DACE2F6919BA6A2A0010F92E /* PearlMutableStaticTableViewController.h */,
|
||||
DACE2F6A19BA6A2A0010F92E /* UIView+FontScale.h */,
|
||||
DA250A13195665A100AC23F1 /* UITableView+PearlReloadFromArray.m */,
|
||||
DA250A14195665A100AC23F1 /* UITableView+PearlReloadFromArray.h */,
|
||||
DA250A15195665A100AC23F1 /* UICollectionReusableView+PearlDequeue.m */,
|
||||
DA250A16195665A100AC23F1 /* UICollectionReusableView+PearlDequeue.h */,
|
||||
DAEC85B118E3DD9A007FC0DF /* UIView+Touches.m */,
|
||||
DAEC85B218E3DD9A007FC0DF /* PearlUINavigationBar.m */,
|
||||
DAEC85B318E3DD9A007FC0DF /* PearlUINavigationBar.h */,
|
||||
DAEC85B418E3DD9A007FC0DF /* UIView+Touches.h */,
|
||||
DA2CA4E518D2AC10007798F8 /* NSLayoutConstraint+PearlUIKit.m */,
|
||||
DA2CA4E218D28866007798F8 /* NSLayoutConstraint+PearlUIKit.h */,
|
||||
93D39F7C9F47BF6387FBC5C3 /* PearlEMail.h */,
|
||||
93D393BB973253D4BAAC84AA /* PearlEMail.m */,
|
||||
DAFE4A63150399FF003ABA8F /* UIScrollView+PearlFlashingIndicators.h */,
|
||||
DAFE4A63150399FF003ABA8D /* UIScrollView+PearlFlashingIndicators.m */,
|
||||
DAFE4A63150399FF003ABA8B /* UIControl+PearlSelect.h */,
|
||||
DAFE4A63150399FF003ABA89 /* UIControl+PearlSelect.m */,
|
||||
DAFE4A63150399FF003ABA83 /* UIControl+PearlBlocks.h */,
|
||||
DAFE4A63150399FF003ABA81 /* UIControl+PearlBlocks.m */,
|
||||
DA2CA4E518D2AC10007798F8 /* NSLayoutConstraint+PearlUIKit.m */,
|
||||
DAFE460815039823003ABA7C /* Pearl-UIKit-Dependencies.h */,
|
||||
DAFE460915039823003ABA7C /* Pearl-UIKit.h */,
|
||||
DA30E9D315722EF400A68B4C /* Pearl-UIKit.m */,
|
||||
DAFE460A15039823003ABA7C /* PearlAlert.h */,
|
||||
DAFE460B15039823003ABA7C /* PearlAlert.m */,
|
||||
DAFE4A60150399FF003ABA7C /* PearlAppDelegate.m */,
|
||||
DAFE4A61150399FF003ABA7C /* PearlAppDelegate.h */,
|
||||
DAFE4A60150399FF003ABA7C /* PearlAppDelegate.m */,
|
||||
DAFE460C15039823003ABA7C /* PearlArrayTVC.h */,
|
||||
DAFE460D15039823003ABA7C /* PearlArrayTVC.m */,
|
||||
DAFE460E15039823003ABA7C /* PearlBoxView.h */,
|
||||
DAFE460F15039823003ABA7C /* PearlBoxView.m */,
|
||||
93D39F7C9F47BF6387FBC5C3 /* PearlEMail.h */,
|
||||
93D393BB973253D4BAAC84AA /* PearlEMail.m */,
|
||||
DA32D01919D046E1004F3F0E /* PearlFixedTableView.h */,
|
||||
DA32D01819D046E1004F3F0E /* PearlFixedTableView.m */,
|
||||
DAFE461015039823003ABA7C /* PearlGradientView.h */,
|
||||
DAFE461115039823003ABA7C /* PearlGradientView.m */,
|
||||
DAFE461215039823003ABA7C /* PearlLayout.h */,
|
||||
@ -2950,12 +2932,24 @@
|
||||
DAFE461515039823003ABA7C /* PearlLayoutView.m */,
|
||||
DAFE461615039823003ABA7C /* PearlMessageView.h */,
|
||||
DAFE461715039823003ABA7C /* PearlMessageView.m */,
|
||||
DACE2F6919BA6A2A0010F92E /* PearlMutableStaticTableViewController.h */,
|
||||
DACE2F6819BA6A2A0010F92E /* PearlMutableStaticTableViewController.m */,
|
||||
93D398567FD02DB2647B8CF3 /* PearlNavigationController.h */,
|
||||
93D3956915634581E737B38C /* PearlNavigationController.m */,
|
||||
93D3942A356B639724157982 /* PearlOverlay.h */,
|
||||
93D390FADEB325D8D54A957D /* PearlOverlay.m */,
|
||||
DAFE461815039823003ABA7C /* PearlRootViewController.h */,
|
||||
DAFE461915039823003ABA7C /* PearlRootViewController.m */,
|
||||
DAFE461A15039823003ABA7C /* PearlSheet.h */,
|
||||
DAFE461B15039823003ABA7C /* PearlSheet.m */,
|
||||
93D39A4759186F6D2D34AA6B /* PearlSizedTextView.h */,
|
||||
93D39156E806BB78E04F78B9 /* PearlSizedTextView.m */,
|
||||
93D39B1D8177A86C5B9EDDE3 /* PearlUICollectionView.h */,
|
||||
93D39D8A953779B35403AF6E /* PearlUICollectionView.m */,
|
||||
DAFE461C15039823003ABA7C /* PearlUIDebug.h */,
|
||||
DAFE461D15039823003ABA7C /* PearlUIDebug.m */,
|
||||
DAEC85B318E3DD9A007FC0DF /* PearlUINavigationBar.h */,
|
||||
DAEC85B218E3DD9A007FC0DF /* PearlUINavigationBar.m */,
|
||||
DAFE461E15039823003ABA7C /* PearlUIUtils.h */,
|
||||
DAFE461F15039823003ABA7C /* PearlUIUtils.m */,
|
||||
DAFE462015039823003ABA7C /* PearlValidatingTextField.h */,
|
||||
@ -2964,24 +2958,34 @@
|
||||
DAFE462315039823003ABA7C /* PearlWebViewController.m */,
|
||||
DAFE462415039823003ABA7C /* README */,
|
||||
DAFE462515039823003ABA7C /* Resources */,
|
||||
DA250A16195665A100AC23F1 /* UICollectionReusableView+PearlDequeue.h */,
|
||||
DA250A15195665A100AC23F1 /* UICollectionReusableView+PearlDequeue.m */,
|
||||
93D39246FC21C6E63E35D615 /* UICollectionView+PearlReloadFromArray.h */,
|
||||
93D3908DF8EABBD952065DC0 /* UICollectionView+PearlReloadFromArray.m */,
|
||||
DAFE4A63150399FF003ABA83 /* UIControl+PearlBlocks.h */,
|
||||
DAFE4A63150399FF003ABA81 /* UIControl+PearlBlocks.m */,
|
||||
DAFE4A63150399FF003ABA8B /* UIControl+PearlSelect.h */,
|
||||
DAFE4A63150399FF003ABA89 /* UIControl+PearlSelect.m */,
|
||||
DAFE4A1115039824003ABA7C /* UIImage+PearlScaling.h */,
|
||||
DAFE4A1215039824003ABA7C /* UIImage+PearlScaling.m */,
|
||||
93D390FADEB325D8D54A957D /* PearlOverlay.m */,
|
||||
93D3942A356B639724157982 /* PearlOverlay.h */,
|
||||
93D3956915634581E737B38C /* PearlNavigationController.m */,
|
||||
93D398567FD02DB2647B8CF3 /* PearlNavigationController.h */,
|
||||
93D390FB3110DCCE68E600DC /* UIScrollView+PearlAdjustInsets.m */,
|
||||
93D39DE2CB351D4E3789462B /* UIScrollView+PearlAdjustInsets.h */,
|
||||
93D39D8A953779B35403AF6E /* PearlUICollectionView.m */,
|
||||
93D39B1D8177A86C5B9EDDE3 /* PearlUICollectionView.h */,
|
||||
93D39A1DDFA09AE2E14D26DC /* UIResponder+PearlFirstResponder.m */,
|
||||
93D394482BB07F90E8FD1314 /* UIResponder+PearlFirstResponder.h */,
|
||||
93D39156E806BB78E04F78B9 /* PearlSizedTextView.m */,
|
||||
93D39A4759186F6D2D34AA6B /* PearlSizedTextView.h */,
|
||||
93D3977321EB249981821AB0 /* UITextView+PearlAttributes.m */,
|
||||
93D39A1DDFA09AE2E14D26DC /* UIResponder+PearlFirstResponder.m */,
|
||||
93D39DE2CB351D4E3789462B /* UIScrollView+PearlAdjustInsets.h */,
|
||||
93D390FB3110DCCE68E600DC /* UIScrollView+PearlAdjustInsets.m */,
|
||||
DAFE4A63150399FF003ABA8F /* UIScrollView+PearlFlashingIndicators.h */,
|
||||
DAFE4A63150399FF003ABA8D /* UIScrollView+PearlFlashingIndicators.m */,
|
||||
DA250A14195665A100AC23F1 /* UITableView+PearlReloadFromArray.h */,
|
||||
DA250A13195665A100AC23F1 /* UITableView+PearlReloadFromArray.m */,
|
||||
DAE2726219CE9CB3007C5262 /* UITableViewCell+PearlDeque.h */,
|
||||
DAE2726119CE9CB3007C5262 /* UITableViewCell+PearlDeque.m */,
|
||||
93D39AA10CD00D05937671B1 /* UITextView+PearlAttributes.h */,
|
||||
93D3908DF8EABBD952065DC0 /* UICollectionView+PearlReloadFromArray.m */,
|
||||
93D39246FC21C6E63E35D615 /* UICollectionView+PearlReloadFromArray.h */,
|
||||
93D3977321EB249981821AB0 /* UITextView+PearlAttributes.m */,
|
||||
DACE2F6A19BA6A2A0010F92E /* UIView+FontScale.h */,
|
||||
DACE2F6719BA6A2A0010F92E /* UIView+FontScale.m */,
|
||||
DAEFB01D19BCBD9E00525079 /* UIView+LayoutGone.h */,
|
||||
DAEFB01C19BCBD9E00525079 /* UIView+LayoutGone.m */,
|
||||
DAEC85B418E3DD9A007FC0DF /* UIView+Touches.h */,
|
||||
DAEC85B118E3DD9A007FC0DF /* UIView+Touches.m */,
|
||||
);
|
||||
path = "Pearl-UIKit";
|
||||
sourceTree = "<group>";
|
||||
@ -3067,7 +3071,6 @@
|
||||
DAFE4A5615039824003ABA7C /* PearlWebViewController.h in Headers */,
|
||||
DAFE4A5815039824003ABA7C /* UIImage+PearlScaling.h in Headers */,
|
||||
DAFE4A63150399FF003ABA7C /* PearlAppDelegate.h in Headers */,
|
||||
DA30E9CE15722ECA00A68B4C /* NSBundle+PearlMutableInfo.h in Headers */,
|
||||
DA30E9D715723E6900A68B4C /* PearlLazy.h in Headers */,
|
||||
DAA141211922FF020032B392 /* PearlTween.h in Headers */,
|
||||
DAFE4A63150399FF003ABA84 /* UIControl+PearlBlocks.h in Headers */,
|
||||
@ -3646,12 +3649,13 @@
|
||||
93D39392DEDA376F93C6C718 /* MPCell.m in Sources */,
|
||||
93D39A5FF670957C0AF8298D /* MPPasswordCell.m in Sources */,
|
||||
93D398ECD7D1A0DEDDADF516 /* MPEmergencyViewController.m in Sources */,
|
||||
DA32D00819CF4735004F3F0E /* MasterPassword.xcdatamodeld in Sources */,
|
||||
DA95B50F1C4776F00067F5EF /* NSMutableSet+Pearl.m in Sources */,
|
||||
93D394B5036C882B33C71872 /* MPPasswordsSegue.m in Sources */,
|
||||
93D39673DDC085BE72C34D7C /* MPPopdownSegue.m in Sources */,
|
||||
93D39BA1EA3CAAC8A220B4A6 /* MPAppSettingsViewController.m in Sources */,
|
||||
93D396D8B67DA6522CDBA142 /* MPCoachmarkViewController.m in Sources */,
|
||||
DAADBFE01A68763B00F7A756 /* mpw-algorithm.c in Sources */,
|
||||
DA95B5191C477DB50067F5EF /* MasterPassword.xcdatamodeld in Sources */,
|
||||
93D39EAA4D064193074D3021 /* MPFixable.m in Sources */,
|
||||
DA32CFF119CF1C8F004F3F0E /* MPStoredSiteEntity.m in Sources */,
|
||||
93D394982CBD25D46692DD7C /* MPWebViewController.m in Sources */,
|
||||
@ -3743,7 +3747,6 @@
|
||||
DACE2F6C19BA6A2A0010F92E /* PearlMutableStaticTableViewController.m in Sources */,
|
||||
DAFE4A5915039824003ABA7C /* UIImage+PearlScaling.m in Sources */,
|
||||
DAFE4A62150399FF003ABA7C /* PearlAppDelegate.m in Sources */,
|
||||
DA30E9CF15722ECA00A68B4C /* NSBundle+PearlMutableInfo.m in Sources */,
|
||||
DA30E9D015722ECA00A68B4C /* Pearl.m in Sources */,
|
||||
DA30E9D215722EE500A68B4C /* Pearl-Crypto.m in Sources */,
|
||||
DA30E9D415722EF400A68B4C /* Pearl-UIKit.m in Sources */,
|
||||
@ -4019,6 +4022,7 @@
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Maarten Billemont (DWGU95U4ZD)";
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"\"$(SRCROOT)/../../../External/iOS\"",
|
||||
@ -4046,8 +4050,6 @@
|
||||
"-lopensslcrypto-ios-dev",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lyndir.lhunath.MasterPassword;
|
||||
PROVISIONING_PROFILE = "";
|
||||
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "3251b7d3-04df-4c8e-a410-d020ffc92d10";
|
||||
SKIP_INSTALL = NO;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
};
|
||||
@ -4059,6 +4061,7 @@
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Maarten Billemont (HL3Q45LX9N)";
|
||||
COPY_PHASE_STRIP = YES;
|
||||
EXCLUDED_SOURCE_FILE_NAMES = libDCIntrospect.a;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
@ -4084,8 +4087,6 @@
|
||||
"-lopensslcrypto-ios-dev",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lyndir.lhunath.MasterPassword;
|
||||
PROVISIONING_PROFILE = "";
|
||||
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "59b587d0-3ef3-4691-9f12-c48f7f283002";
|
||||
SKIP_INSTALL = NO;
|
||||
STRIP_INSTALLED_PRODUCT = YES;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
@ -4183,6 +4184,7 @@
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Maarten Billemont (HL3Q45LX9N)";
|
||||
COPY_PHASE_STRIP = YES;
|
||||
EXCLUDED_SOURCE_FILE_NAMES = libDCIntrospect.a;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
@ -4208,8 +4210,6 @@
|
||||
"-lopensslcrypto-ios-dev",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lyndir.lhunath.MasterPassword;
|
||||
PROVISIONING_PROFILE = "";
|
||||
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "a1d8cfc8-b8db-4544-af34-28cc75e46c40";
|
||||
SKIP_INSTALL = NO;
|
||||
STRIP_INSTALLED_PRODUCT = YES;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
@ -4458,18 +4458,19 @@
|
||||
/* End XCConfigurationList section */
|
||||
|
||||
/* Begin XCVersionGroup section */
|
||||
DA32D00119CF4735004F3F0E /* MasterPassword.xcdatamodeld */ = {
|
||||
DA95B5101C477DB50067F5EF /* MasterPassword.xcdatamodeld */ = {
|
||||
isa = XCVersionGroup;
|
||||
children = (
|
||||
DA8495271A9146E600B3053D /* MasterPassword 7.xcdatamodel */,
|
||||
DA32D00219CF4735004F3F0E /* MasterPassword 1.xcdatamodel */,
|
||||
DA32D00319CF4735004F3F0E /* MasterPassword 2.xcdatamodel */,
|
||||
DA32D00419CF4735004F3F0E /* MasterPassword 3.xcdatamodel */,
|
||||
DA32D00519CF4735004F3F0E /* MasterPassword 4.xcdatamodel */,
|
||||
DA32D00619CF4735004F3F0E /* MasterPassword 5.xcdatamodel */,
|
||||
DA32D00719CF4735004F3F0E /* MasterPassword 6.xcdatamodel */,
|
||||
DA95B5111C477DB50067F5EF /* MasterPassword 1.xcdatamodel */,
|
||||
DA95B5121C477DB50067F5EF /* MasterPassword 2.xcdatamodel */,
|
||||
DA95B5131C477DB50067F5EF /* MasterPassword 3.xcdatamodel */,
|
||||
DA95B5141C477DB50067F5EF /* MasterPassword 4.xcdatamodel */,
|
||||
DA95B5151C477DB50067F5EF /* MasterPassword 5.xcdatamodel */,
|
||||
DA95B5161C477DB50067F5EF /* MasterPassword 6.xcdatamodel */,
|
||||
DA95B5171C477DB50067F5EF /* MasterPassword 7.xcdatamodel */,
|
||||
DA95B5181C477DB50067F5EF /* MasterPassword 8.xcdatamodel */,
|
||||
);
|
||||
currentVersion = DA8495271A9146E600B3053D /* MasterPassword 7.xcdatamodel */;
|
||||
currentVersion = DA95B5181C477DB50067F5EF /* MasterPassword 8.xcdatamodel */;
|
||||
path = MasterPassword.xcdatamodeld;
|
||||
sourceTree = "<group>";
|
||||
versionGroupType = wrapper.xcdatamodel;
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user