diff --git a/External/Pearl b/External/Pearl index adcbc1f1..2642d720 160000 --- a/External/Pearl +++ b/External/Pearl @@ -1 +1 @@ -Subproject commit adcbc1f10abd55199130b02280fccdfaa8ce4211 +Subproject commit 2642d720cc874635c336406a01f1e8d2ee5bcb09 diff --git a/MasterPassword/ObjC/MPAppDelegate_Key.m b/MasterPassword/ObjC/MPAppDelegate_Key.m index 47ef09a6..8963bfff 100644 --- a/MasterPassword/ObjC/MPAppDelegate_Key.m +++ b/MasterPassword/ObjC/MPAppDelegate_Key.m @@ -8,6 +8,7 @@ #import "MPAppDelegate_Key.h" #import "MPAppDelegate_Store.h" +#import @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) diff --git a/MasterPassword/ObjC/MPEntities.h b/MasterPassword/ObjC/MPEntities.h index db2a82c8..edd2c375 100644 --- a/MasterPassword/ObjC/MPEntities.h +++ b/MasterPassword/ObjC/MPEntities.h @@ -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 algorithm; diff --git a/MasterPassword/ObjC/MPEntities.m b/MasterPassword/ObjC/MPEntities.m index 3b0c619f..6beba92a 100644 --- a/MasterPassword/ObjC/MPEntities.m +++ b/MasterPassword/ObjC/MPEntities.m @@ -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; diff --git a/MasterPassword/ObjC/MPUserEntity.h b/MasterPassword/ObjC/MPUserEntity.h index ef838dd0..0d7c687d 100644 --- a/MasterPassword/ObjC/MPUserEntity.h +++ b/MasterPassword/ObjC/MPUserEntity.h @@ -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 diff --git a/MasterPassword/ObjC/MPUserEntity.m b/MasterPassword/ObjC/MPUserEntity.m index c2cdaff0..d969ebba 100644 --- a/MasterPassword/ObjC/MPUserEntity.m +++ b/MasterPassword/ObjC/MPUserEntity.m @@ -18,6 +18,7 @@ @dynamic lastUsed; @dynamic name; @dynamic saveKey_; +@dynamic touchID_; @dynamic version_; @dynamic sites; diff --git a/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/project.pbxproj b/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/project.pbxproj index da487a02..0a1857b8 100644 --- a/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/project.pbxproj +++ b/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/project.pbxproj @@ -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 = ""; }; DA831A291A6E1146000AC234 /* mpw-algorithm_v2.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "mpw-algorithm_v2.c"; sourceTree = ""; }; DA831A2A1A6E1146000AC234 /* mpw-algorithm_v3.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "mpw-algorithm_v3.c"; sourceTree = ""; }; - DA8495291A915EF400B3053D /* MasterPassword 1.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 1.xcdatamodel"; sourceTree = ""; }; - DA84952A1A915EF400B3053D /* MasterPassword 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 2.xcdatamodel"; sourceTree = ""; }; - DA84952B1A915EF400B3053D /* MasterPassword 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 3.xcdatamodel"; sourceTree = ""; }; - DA84952C1A915EF400B3053D /* MasterPassword 4.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 4.xcdatamodel"; sourceTree = ""; }; - DA84952D1A915EF400B3053D /* MasterPassword 5.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 5.xcdatamodel"; sourceTree = ""; }; - DA84952E1A915EF400B3053D /* MasterPassword 6.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 6.xcdatamodel"; sourceTree = ""; }; - DA84952F1A915EF400B3053D /* MasterPassword 7.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 7.xcdatamodel"; sourceTree = ""; }; DA89D4EA1A51EABD00AC64D7 /* Pearl-Cocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Pearl-Cocoa.h"; sourceTree = ""; }; DA89D4EB1A51EABD00AC64D7 /* Pearl-Cocoa.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Pearl-Cocoa.m"; sourceTree = ""; }; DA8ED891192906920099B726 /* PearlTween.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlTween.m; sourceTree = ""; }; @@ -808,6 +801,14 @@ DA9261501BE1A86700369DE5 /* Fabric.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Fabric.framework; sourceTree = ""; }; 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 = ""; }; + DA95B51C1C477DE10067F5EF /* MasterPassword 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 2.xcdatamodel"; sourceTree = ""; }; + DA95B51D1C477DE10067F5EF /* MasterPassword 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 3.xcdatamodel"; sourceTree = ""; }; + DA95B51E1C477DE10067F5EF /* MasterPassword 4.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 4.xcdatamodel"; sourceTree = ""; }; + DA95B51F1C477DE10067F5EF /* MasterPassword 5.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 5.xcdatamodel"; sourceTree = ""; }; + DA95B5201C477DE10067F5EF /* MasterPassword 6.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 6.xcdatamodel"; sourceTree = ""; }; + DA95B5211C477DE10067F5EF /* MasterPassword 7.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 7.xcdatamodel"; sourceTree = ""; }; + DA95B5221C477DE10067F5EF /* MasterPassword 8.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 8.xcdatamodel"; sourceTree = ""; }; DAAA81AF195A8D1300FA30D9 /* gradient.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = gradient.png; sourceTree = ""; }; DAADCC3E19FAFFAD00987B1D /* NSNotificationCenter+PearlEasyCleanup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSNotificationCenter+PearlEasyCleanup.h"; sourceTree = ""; }; DAADCC3F19FAFFAD00987B1D /* NSPersistentStore+PearlMigration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSPersistentStore+PearlMigration.h"; sourceTree = ""; }; @@ -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 = ""; versionGroupType = wrapper.xcdatamodel; diff --git a/MasterPassword/ObjC/MasterPassword.xcdatamodeld/.xccurrentversion b/MasterPassword/ObjC/MasterPassword.xcdatamodeld/.xccurrentversion index 1ac59ba4..e06bb915 100644 --- a/MasterPassword/ObjC/MasterPassword.xcdatamodeld/.xccurrentversion +++ b/MasterPassword/ObjC/MasterPassword.xcdatamodeld/.xccurrentversion @@ -3,6 +3,6 @@ _XCCurrentVersionName - MasterPassword 7.xcdatamodel + MasterPassword 8.xcdatamodel diff --git a/MasterPassword/ObjC/MasterPassword.xcdatamodeld/MasterPassword 8.xcdatamodel/contents b/MasterPassword/ObjC/MasterPassword.xcdatamodeld/MasterPassword 8.xcdatamodel/contents new file mode 100644 index 00000000..e8f23eb7 --- /dev/null +++ b/MasterPassword/ObjC/MasterPassword.xcdatamodeld/MasterPassword 8.xcdatamodel/contents @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MasterPassword/ObjC/iOS/MPPreferencesViewController.h b/MasterPassword/ObjC/iOS/MPPreferencesViewController.h index fd97b35a..412dfd0d 100644 --- a/MasterPassword/ObjC/iOS/MPPreferencesViewController.h +++ b/MasterPassword/ObjC/iOS/MPPreferencesViewController.h @@ -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; diff --git a/MasterPassword/ObjC/iOS/MPPreferencesViewController.m b/MasterPassword/ObjC/iOS/MPPreferencesViewController.m index c4e09e19..f2ba845a 100644 --- a/MasterPassword/ObjC/iOS/MPPreferencesViewController.m +++ b/MasterPassword/ObjC/iOS/MPPreferencesViewController.m @@ -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; diff --git a/MasterPassword/ObjC/iOS/MPiOSAppDelegate.m b/MasterPassword/ObjC/iOS/MPiOSAppDelegate.m index bee7db5b..5031788e 100644 --- a/MasterPassword/ObjC/iOS/MPiOSAppDelegate.m +++ b/MasterPassword/ObjC/iOS/MPiOSAppDelegate.m @@ -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]; diff --git a/MasterPassword/ObjC/iOS/MPiOSConfig.m b/MasterPassword/ObjC/iOS/MPiOSConfig.m index 4baf43d6..3359b61c 100644 --- a/MasterPassword/ObjC/iOS/MPiOSConfig.m +++ b/MasterPassword/ObjC/iOS/MPiOSConfig.m @@ -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, diff --git a/MasterPassword/ObjC/iOS/MasterPassword-Prefix.pch b/MasterPassword/ObjC/iOS/MasterPassword-Prefix.pch index 0d9d53a1..85677158 100644 --- a/MasterPassword/ObjC/iOS/MasterPassword-Prefix.pch +++ b/MasterPassword/ObjC/iOS/MasterPassword-Prefix.pch @@ -28,42 +28,80 @@ #import #import #import +#import +#import -#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 diff --git a/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj b/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj index 75ad21b9..3414118a 100644 --- a/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj +++ b/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj @@ -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 = ""; }; DA2CA4E218D28866007798F8 /* NSLayoutConstraint+PearlUIKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSLayoutConstraint+PearlUIKit.h"; sourceTree = ""; }; DA2CA4E518D2AC10007798F8 /* NSLayoutConstraint+PearlUIKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSLayoutConstraint+PearlUIKit.m"; sourceTree = ""; }; - DA30E9CB15722ECA00A68B4C /* NSBundle+PearlMutableInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSBundle+PearlMutableInfo.h"; sourceTree = ""; }; - DA30E9CC15722ECA00A68B4C /* NSBundle+PearlMutableInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSBundle+PearlMutableInfo.m"; sourceTree = ""; }; DA30E9CD15722ECA00A68B4C /* Pearl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Pearl.m; sourceTree = ""; }; DA30E9D115722EE500A68B4C /* Pearl-Crypto.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Pearl-Crypto.m"; sourceTree = ""; }; DA30E9D315722EF400A68B4C /* Pearl-UIKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Pearl-UIKit.m"; sourceTree = ""; }; @@ -624,12 +622,6 @@ DA32CFED19CF1C8F004F3F0E /* MPSiteEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPSiteEntity.h; sourceTree = ""; }; DA32CFEE19CF1C8F004F3F0E /* MPGeneratedSiteEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPGeneratedSiteEntity.m; sourceTree = ""; }; DA32CFEF19CF1C8F004F3F0E /* MPGeneratedSiteEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPGeneratedSiteEntity.h; sourceTree = ""; }; - DA32D00219CF4735004F3F0E /* MasterPassword 1.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 1.xcdatamodel"; sourceTree = ""; }; - DA32D00319CF4735004F3F0E /* MasterPassword 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 2.xcdatamodel"; sourceTree = ""; }; - DA32D00419CF4735004F3F0E /* MasterPassword 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 3.xcdatamodel"; sourceTree = ""; }; - DA32D00519CF4735004F3F0E /* MasterPassword 4.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 4.xcdatamodel"; sourceTree = ""; }; - DA32D00619CF4735004F3F0E /* MasterPassword 5.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 5.xcdatamodel"; sourceTree = ""; }; - DA32D00719CF4735004F3F0E /* MasterPassword 6.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 6.xcdatamodel"; sourceTree = ""; }; DA32D01819D046E1004F3F0E /* PearlFixedTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlFixedTableView.m; sourceTree = ""; }; DA32D01919D046E1004F3F0E /* PearlFixedTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlFixedTableView.h; sourceTree = ""; }; 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 = ""; }; 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 = ""; }; - DA8495271A9146E600B3053D /* MasterPassword 7.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 7.xcdatamodel"; sourceTree = ""; }; DA854C8118D4CFBF00106317 /* avatar-add@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "avatar-add@2x.png"; sourceTree = ""; }; DA854C8218D4CFBF00106317 /* avatar-add.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "avatar-add.png"; sourceTree = ""; }; DA92614C1BE1A57500369DE5 /* MPAppDelegate_InApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAppDelegate_InApp.h; sourceTree = ""; }; DA92614D1BE1A57500369DE5 /* MPAppDelegate_InApp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAppDelegate_InApp.m; sourceTree = ""; }; DA945C8617E3F3FD0053236B /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + 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 = ""; }; + DA95B50E1C4776F00067F5EF /* NSMutableSet+Pearl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableSet+Pearl.m"; sourceTree = ""; }; + DA95B5111C477DB50067F5EF /* MasterPassword 1.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 1.xcdatamodel"; sourceTree = ""; }; + DA95B5121C477DB50067F5EF /* MasterPassword 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 2.xcdatamodel"; sourceTree = ""; }; + DA95B5131C477DB50067F5EF /* MasterPassword 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 3.xcdatamodel"; sourceTree = ""; }; + DA95B5141C477DB50067F5EF /* MasterPassword 4.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 4.xcdatamodel"; sourceTree = ""; }; + DA95B5151C477DB50067F5EF /* MasterPassword 5.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 5.xcdatamodel"; sourceTree = ""; }; + DA95B5161C477DB50067F5EF /* MasterPassword 6.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 6.xcdatamodel"; sourceTree = ""; }; + DA95B5171C477DB50067F5EF /* MasterPassword 7.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 7.xcdatamodel"; sourceTree = ""; }; + DA95B5181C477DB50067F5EF /* MasterPassword 8.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 8.xcdatamodel"; sourceTree = ""; }; 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 = ""; }; DAA1411C1922FF020032B392 /* PearlTween.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlTween.m; sourceTree = ""; }; @@ -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 = ""; @@ -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 = ""; @@ -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 = ""; versionGroupType = wrapper.xcdatamodel; diff --git a/MasterPassword/ObjC/iOS/Storyboard.storyboard b/MasterPassword/ObjC/iOS/Storyboard.storyboard index 570b9c67..aeaa733f 100644 --- a/MasterPassword/ObjC/iOS/Storyboard.storyboard +++ b/MasterPassword/ObjC/iOS/Storyboard.storyboard @@ -1,8 +1,8 @@ - + - + @@ -33,6 +33,7 @@ Exo2.0-Bold Exo2.0-Bold Exo2.0-Bold + Exo2.0-Bold Exo2.0-ExtraBold @@ -99,6 +100,7 @@ Exo2.0-Thin Exo2.0-Thin Exo2.0-Thin + Exo2.0-Thin SourceCodePro-Black @@ -132,7 +134,6 @@ - - @@ -253,12 +243,10 @@ - - @@ -267,7 +255,6 @@ - @@ -961,7 +897,6 @@ - @@ -973,28 +908,24 @@ - - @@ -1007,11 +938,51 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -1019,20 +990,17 @@ - @@ -1043,11 +1011,10 @@ - - + @@ -1055,20 +1022,17 @@ - @@ -1079,11 +1043,10 @@ - - + @@ -1091,21 +1054,18 @@ - @@ -1116,11 +1076,10 @@ - - + @@ -1128,14 +1087,12 @@ - @@ -1198,7 +1151,6 @@ - @@ -1222,6 +1174,7 @@ + @@ -1248,7 +1201,6 @@ - @@ -1273,7 +1225,6 @@ - @@ -1318,7 +1266,6 @@ - @@ -1339,7 +1286,6 @@ - @@ -1350,13 +1296,11 @@ - @@ -1377,7 +1321,6 @@ - @@ -1404,7 +1346,6 @@ - @@ -1560,7 +1494,6 @@ - @@ -1612,7 +1543,6 @@ - @@ -1641,10 +1571,8 @@ - - @@ -1678,7 +1606,6 @@ - @@ -1689,14 +1616,12 @@ -