diff --git a/.gitmodules b/.gitmodules
index 8b03e0d0..d50d17c4 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -10,3 +10,6 @@
[submodule "External/RHStatusItemView"]
path = External/RHStatusItemView
url = git://github.com/lhunath/RHStatusItemView.git
+[submodule "External/KCOrderedAccessorFix"]
+ path = External/KCOrderedAccessorFix
+ url = https://github.com/CFKevinRef/KCOrderedAccessorFix.git
diff --git a/External/KCOrderedAccessorFix b/External/KCOrderedAccessorFix
new file mode 160000
index 00000000..e1955221
--- /dev/null
+++ b/External/KCOrderedAccessorFix
@@ -0,0 +1 @@
+Subproject commit e1955221bf52d53736e7d3e7d38465c509e02562
diff --git a/MasterPassword.xcworkspace/xcshareddata/MasterPassword.xccheckout b/MasterPassword.xcworkspace/xcshareddata/MasterPassword.xccheckout
index 9c5c4d58..f11d1ee6 100644
--- a/MasterPassword.xcworkspace/xcshareddata/MasterPassword.xccheckout
+++ b/MasterPassword.xcworkspace/xcshareddata/MasterPassword.xccheckout
@@ -18,6 +18,8 @@
github.com:Lyndir/Lyndir.git
2FE140B36B7D26140DC8D5E5C639DC5900EFCF35
git://github.com/lhunath/uicolor-utilities.git
+ 304AD0F97EA7B4893D91DFB8C3413D4E627B9472
+ https://github.com/CFKevinRef/KCOrderedAccessorFix.git
3E67FB08419C920516AAC3B00DAAF23073B8CF77
git://github.com/lhunath/RHStatusItemView.git
4DDCFFD91B41F00326AD14553BD66CFD366ABD91
@@ -41,6 +43,8 @@
../..
2FE140B36B7D26140DC8D5E5C639DC5900EFCF35
../External/Pearl/External/uicolor-utilities
+ 304AD0F97EA7B4893D91DFB8C3413D4E627B9472
+ ../External/KCOrderedAccessorFix/
3E67FB08419C920516AAC3B00DAAF23073B8CF77
../External/RHStatusItemView
4DDCFFD91B41F00326AD14553BD66CFD366ABD91
@@ -84,6 +88,14 @@
IDESourceControlWCCName
jrswizzle
+
+ IDESourceControlRepositoryExtensionIdentifierKey
+ public.vcs.git
+ IDESourceControlWCCIdentifierKey
+ 304AD0F97EA7B4893D91DFB8C3413D4E627B9472
+ IDESourceControlWCCName
+ KCOrderedAccessorFix
+
IDESourceControlRepositoryExtensionIdentifierKey
public.vcs.git
diff --git a/MasterPassword/ObjC/MPAppDelegate_Store.m b/MasterPassword/ObjC/MPAppDelegate_Store.m
index 6c80f7ea..5cdc7dbe 100644
--- a/MasterPassword/ObjC/MPAppDelegate_Store.m
+++ b/MasterPassword/ObjC/MPAppDelegate_Store.m
@@ -8,6 +8,7 @@
#import "MPAppDelegate_Store.h"
#import "MPGeneratedSiteEntity.h"
+#import "NSManagedObjectModel+KCOrderedAccessorFix.h"
#if TARGET_OS_IPHONE
#define STORE_OPTIONS NSPersistentStoreFileProtectionKey : NSFileProtectionComplete,
@@ -147,9 +148,12 @@ PearlAssociatedObjectProperty( NSManagedObjectContext*, MainManagedObjectContext
[self migrateStore];
// Create a new store coordinator.
- if (!self.persistentStoreCoordinator)
- self.persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:
- [NSManagedObjectModel mergedModelFromBundles:nil]];
+ if (!self.persistentStoreCoordinator) {
+ NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
+ [model kc_generateOrderedSetAccessors];
+ self.persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
+ }
+
NSError *error = nil;
NSURL *localStoreURL = [self localStoreURL];
if (![[NSFileManager defaultManager] createDirectoryAtURL:[localStoreURL URLByDeletingLastPathComponent]
diff --git a/MasterPassword/ObjC/iOS/MPAnswersViewController.m b/MasterPassword/ObjC/iOS/MPAnswersViewController.m
index 1c0bfccc..7c5a52d1 100644
--- a/MasterPassword/ObjC/iOS/MPAnswersViewController.m
+++ b/MasterPassword/ObjC/iOS/MPAnswersViewController.m
@@ -36,18 +36,6 @@
self.view.backgroundColor = [UIColor clearColor];
}
-- (BOOL)canPerformUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender {
-
- return [self respondsToSelector:action];
-}
-
-#pragma mark - Actions
-
-- (IBAction)unwindToCombined:(UIStoryboardSegue *)sender {
-
- dbg( @"unwindToCombined:%@", sender );
-}
-
#pragma mark - State
- (void)setSite:(MPSiteEntity *)site {
@@ -55,6 +43,13 @@
_siteOID = [site objectID];
_multiple = [site.questions count] > 0;
[self.tableView reloadData];
+ [self updateAnimated:NO];
+}
+
+- (void)setMultiple:(BOOL)multiple animated:(BOOL)animated {
+
+ _multiple = multiple;
+ [self updateAnimated:animated];
}
- (MPSiteEntity *)siteInContext:(NSManagedObjectContext *)context {
@@ -131,14 +126,14 @@
[UIPasteboard generalPasteboard].string = ((MPGlobalAnswersCell *)cell).answerField.text;
}
else if ([cell isKindOfClass:[MPMultipleAnswersCell class]]) {
- [[NSOperationQueue mainQueue] addOperationWithBlock:^{
- if (!_multiple) {
- _multiple = YES;
- cell.accessoryType = UITableViewCellAccessoryCheckmark;
- [tableView reloadSections:[NSIndexSet indexSetWithIndex:1]
- withRowAnimation:UITableViewRowAnimationAutomatic];
- }
- else if (_multiple && [site.questions count])
+ if (!_multiple)
+ [self setMultiple:YES animated:YES];
+
+ else if (_multiple) {
+ if (![site.questions count])
+ [self setMultiple:NO animated:YES];
+
+ else
[PearlAlert showAlertWithTitle:@"Remove Site Questions?" message:
@"Do you want to remove the questions you have configured for this site?"
viewStyle:UIAlertViewStyleDefault initAlert:nil
@@ -150,15 +145,10 @@
MPSiteEntity *site_ = [self siteInContext:context];
[site_ removeQuestions:site_.questions];
[context saveToStore];
- PearlMainQueue( ^{
- _multiple = NO;
- cell.accessoryType = UITableViewCellAccessoryNone;
- [tableView reloadSections:[NSIndexSet indexSetWithIndex:1]
- withRowAnimation:UITableViewRowAnimationAutomatic];
- } );
+ [self setMultiple:NO animated:YES];
}];
} cancelTitle:@"Cancel" otherTitles:@"Remove Questions", nil];
- }];
+ }
}
else if ([cell isKindOfClass:[MPSendAnswersCell class]]) {
NSString *body;
@@ -191,6 +181,20 @@
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
+#pragma mark - Private
+
+- (void)updateAnimated:(BOOL)animated {
+
+ PearlMainQueue( ^{
+ UITableViewCell *multipleAnswersCell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForItem:2 inSection:0]];
+ multipleAnswersCell.accessoryType = _multiple? UITableViewCellAccessoryCheckmark: UITableViewCellAccessoryNone;
+
+ [[NSOperationQueue mainQueue] addOperationWithBlock:^{
+ [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationAutomatic];
+ }];
+ } );
+}
+
@end
@implementation MPGlobalAnswersCell
diff --git a/MasterPassword/ObjC/iOS/MPCombinedViewController.m b/MasterPassword/ObjC/iOS/MPCombinedViewController.m
index dcdad03f..dbb245e8 100644
--- a/MasterPassword/ObjC/iOS/MPCombinedViewController.m
+++ b/MasterPassword/ObjC/iOS/MPCombinedViewController.m
@@ -19,7 +19,6 @@
#import "MPCombinedViewController.h"
#import "MPUsersViewController.h"
#import "MPPasswordsViewController.h"
-#import "MPPopoverSegue.h"
#import "MPEmergencyViewController.h"
#import "MPPasswordsSegue.h"
@@ -34,6 +33,8 @@
MPPasswordsViewController *_passwordsVC;
}
+#pragma mark - Life
+
- (void)viewDidLoad {
[super viewDidLoad];
@@ -99,16 +100,14 @@
[self performSegueWithIdentifier:@"emergency" sender:self];
}
-- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController
- fromViewController:(UIViewController *)fromViewController identifier:(NSString *)identifier {
+#pragma mark - Actions
- if ([identifier isEqualToString:@"unwind-popover"])
- return [[MPPopoverSegue alloc] initWithIdentifier:identifier source:fromViewController destination:toViewController];
+- (IBAction)unwindToCombined:(UIStoryboardSegue *)sender {
- return nil;
+ dbg( @"unwindToCombined:%@", sender );
}
-#pragma mark - Properties
+#pragma mark - State
- (void)setMode:(MPCombinedMode)mode {
diff --git a/MasterPassword/ObjC/iOS/MPEmergencyViewController.m b/MasterPassword/ObjC/iOS/MPEmergencyViewController.m
index 5e82f128..785e1c9d 100644
--- a/MasterPassword/ObjC/iOS/MPEmergencyViewController.m
+++ b/MasterPassword/ObjC/iOS/MPEmergencyViewController.m
@@ -53,18 +53,6 @@
[self reset];
}
-- (BOOL)canPerformUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender {
-
- return [self respondsToSelector:action];
-}
-
-#pragma mark - Actions
-
-- (IBAction)unwindToCombined:(UIStoryboardSegue *)sender {
-
- dbg(@"unwindToCombined:%@", sender);
-}
-
#pragma mark - UITextFieldDelegate
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
diff --git a/MasterPassword/ObjC/iOS/MPPopoverSegue.h b/MasterPassword/ObjC/iOS/MPOverlayViewController.h
similarity index 69%
rename from MasterPassword/ObjC/iOS/MPPopoverSegue.h
rename to MasterPassword/ObjC/iOS/MPOverlayViewController.h
index 84c80791..5f2090d7 100644
--- a/MasterPassword/ObjC/iOS/MPPopoverSegue.h
+++ b/MasterPassword/ObjC/iOS/MPOverlayViewController.h
@@ -9,15 +9,18 @@
*/
//
-// MPPopoverSegue.h
-// MPPopoverSegue
+// MPOverlayViewController.h
+// MPOverlayViewController
//
-// Created by lhunath on 2014-04-09.
+// Created by lhunath on 2014-09-22.
// Copyright, lhunath (Maarten Billemont) 2014. All rights reserved.
//
#import
-@interface MPPopoverSegue : UIStoryboardSegue
+@interface MPOverlayViewController : UIViewController
+@end
+
+@interface MPOverlaySegue : UIStoryboardSegue
@end
diff --git a/MasterPassword/ObjC/iOS/MPOverlayViewController.m b/MasterPassword/ObjC/iOS/MPOverlayViewController.m
new file mode 100644
index 00000000..ea95b357
--- /dev/null
+++ b/MasterPassword/ObjC/iOS/MPOverlayViewController.m
@@ -0,0 +1,80 @@
+/**
+ * Copyright Maarten Billemont (http://www.lhunath.com, lhunath@lyndir.com)
+ *
+ * See the enclosed file LICENSE for license information (LGPLv3). If you did
+ * not receive this file, see http://www.gnu.org/licenses/lgpl-3.0.txt
+ *
+ * @author Maarten Billemont
+ * @license http://www.gnu.org/licenses/lgpl-3.0.txt
+ */
+
+//
+// MPOverlayViewController.h
+// MPOverlayViewController
+//
+// Created by lhunath on 2014-09-22.
+// Copyright, lhunath (Maarten Billemont) 2014. All rights reserved.
+//
+
+#import "MPOverlayViewController.h"
+
+
+@implementation MPOverlayViewController
+
+- (void)viewWillAppear:(BOOL)animated {
+
+ [super viewWillAppear:animated];
+
+ if (![self.childViewControllers count])
+ [self performSegueWithIdentifier:@"root" sender:self];
+}
+
+- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController
+ fromViewController:(UIViewController *)fromViewController identifier:(NSString *)identifier {
+
+ return [[MPOverlaySegue alloc] initWithIdentifier:identifier source:fromViewController destination:toViewController];
+}
+
+@end
+
+@implementation MPOverlaySegue
+
+- (void)perform {
+
+ UIViewController *sourceViewController = self.sourceViewController;
+ UIViewController *destinationViewController = self.destinationViewController;
+ MPOverlayViewController *containerViewController = self.sourceViewController;
+ while (![containerViewController isKindOfClass:[MPOverlayViewController class]])
+ containerViewController = (id)containerViewController.parentViewController;
+ NSAssert( [containerViewController isKindOfClass:[MPOverlayViewController class]],
+ @"Not an overlay container: %@", containerViewController );
+
+ if (!destinationViewController.parentViewController) {
+ // Winding
+ [containerViewController addChildViewController:destinationViewController];
+ [containerViewController.view addSubview:destinationViewController.view];
+ CGRectSetY( destinationViewController.view.frame, containerViewController.view.frame.size.height );
+ [UIView transitionWithView:containerViewController.view duration:0.3f
+ options:UIViewAnimationOptionAllowAnimatedContent animations:^{
+ CGRectSetY( destinationViewController.view.frame, 0 );
+ } completion:^(BOOL finished) {
+ if (finished)
+ [destinationViewController didMoveToParentViewController:containerViewController];
+ }];
+ }
+ else {
+ // Unwinding
+ [sourceViewController willMoveToParentViewController:nil];
+ [UIView transitionWithView:containerViewController.view duration:0.3f
+ options:UIViewAnimationOptionAllowAnimatedContent animations:^{
+ CGRectSetY( sourceViewController.view.bounds, containerViewController.view.frame.size.height );
+ } completion:^(BOOL finished) {
+ if (finished) {
+ [sourceViewController.view removeFromSuperview];
+ [sourceViewController removeFromParentViewController];
+ }
+ }];
+ }
+}
+
+@end
diff --git a/MasterPassword/ObjC/iOS/MPPopoverSegue.m b/MasterPassword/ObjC/iOS/MPPopoverSegue.m
deleted file mode 100644
index 3aa1d5ee..00000000
--- a/MasterPassword/ObjC/iOS/MPPopoverSegue.m
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
-* Copyright Maarten Billemont (http://www.lhunath.com, lhunath@lyndir.com)
-*
-* See the enclosed file LICENSE for license information (LGPLv3). If you did
-* not receive this file, see http://www.gnu.org/licenses/lgpl-3.0.txt
-*
-* @author Maarten Billemont
-* @license http://www.gnu.org/licenses/lgpl-3.0.txt
-*/
-
-//
-// MPPopoverSegue.h
-// MPPopoverSegue
-//
-// Created by lhunath on 2014-04-09.
-// Copyright, lhunath (Maarten Billemont) 2014. All rights reserved.
-//
-
-#import "MPPopoverSegue.h"
-
-@implementation MPPopoverSegue {
-}
-
-- (void)perform {
-
- UIViewController *sourceViewController = self.sourceViewController;
- UIViewController *destinationViewController = self.destinationViewController;
-
- if ([sourceViewController parentViewController] != destinationViewController) {
- // Winding
- [sourceViewController addChildViewController:destinationViewController];
- [sourceViewController.view addSubview:destinationViewController.view];
- CGRectSetY( destinationViewController.view.bounds, sourceViewController.view.frame.size.height );
- [UIView transitionWithView:sourceViewController.view duration:0.3f
- options:UIViewAnimationOptionAllowAnimatedContent animations:^{
- CGRectSetY( destinationViewController.view.bounds, 0 );
- } completion:^(BOOL finished) {
- if (finished)
- [destinationViewController didMoveToParentViewController:sourceViewController];
- }];
- }
- else {
- // Unwinding
- [sourceViewController willMoveToParentViewController:nil];
- [UIView transitionWithView:sourceViewController.parentViewController.view duration:0.3f
- options:UIViewAnimationOptionAllowAnimatedContent animations:^{
- CGRectSetY( sourceViewController.view.bounds, sourceViewController.parentViewController.view.frame.size.height );
- } completion:^(BOOL finished) {
- if (finished) {
- [sourceViewController.view removeFromSuperview];
- [sourceViewController removeFromParentViewController];
- }
- }];
- }
-}
-
-@end
diff --git a/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj b/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj
index 4c9b2a29..e8a6d37d 100644
--- a/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj
+++ b/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj
@@ -9,7 +9,6 @@
/* Begin PBXBuildFile section */
93D390C1B93F9D3AE37DD0A5 /* MPAnswersViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39C426E03358384018E85 /* MPAnswersViewController.m */; };
93D391ECBD9BD2C64115B5DD /* PearlSizedTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39156E806BB78E04F78B9 /* PearlSizedTextView.m */; };
- 93D391ED37C9F687FA51EAA1 /* MPPopoverSegue.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D3937712BF1B67623E5764 /* MPPopoverSegue.m */; };
93D3922A53E41A54832E90D9 /* PearlOverlay.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D390FADEB325D8D54A957D /* PearlOverlay.m */; };
93D39262A8A97DB748213309 /* PearlEMail.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D393BB973253D4BAAC84AA /* PearlEMail.m */; };
93D392A8777DC30C11361647 /* UITextView+PearlAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D39AA10CD00D05937671B1 /* UITextView+PearlAttributes.h */; };
@@ -35,6 +34,7 @@
93D399246DC90F50913A1287 /* UIResponder+PearlFirstResponder.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39A1DDFA09AE2E14D26DC /* UIResponder+PearlFirstResponder.m */; };
93D3992FA1546E01F498F665 /* PearlNavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D398567FD02DB2647B8CF3 /* PearlNavigationController.h */; };
93D399433EA75E50656040CB /* Twitter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93D394077F8FAB8167647187 /* Twitter.framework */; };
+ 93D399D7E08A142776A74CB8 /* MPOverlayViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D395105935859D71679931 /* MPOverlayViewController.m */; };
93D39A53D76CA70786423458 /* UICollectionView+PearlReloadFromArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D39246FC21C6E63E35D615 /* UICollectionView+PearlReloadFromArray.h */; };
93D39A5FF670957C0AF8298D /* MPPasswordCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39DEA995041A13DC9CAF7 /* MPPasswordCell.m */; };
93D39A8EA1C49CE43B63F47B /* PearlUICollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39D8A953779B35403AF6E /* PearlUICollectionView.m */; };
@@ -121,6 +121,8 @@
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 */; };
DA32D01B19D046E1004F3F0E /* PearlFixedTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = DA32D01919D046E1004F3F0E /* PearlFixedTableView.h */; };
+ DA32D03C19D111EB004F3F0E /* NSManagedObjectModel+KCOrderedAccessorFix.m in Sources */ = {isa = PBXBuildFile; fileRef = DA32D03A19D111EB004F3F0E /* NSManagedObjectModel+KCOrderedAccessorFix.m */; };
+ DA32D03E19D11293004F3F0E /* libKCOrderedAccessorFix.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA32D02019D111C6004F3F0E /* libKCOrderedAccessorFix.a */; };
DA3509FE15F101A500C14A8E /* PearlQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3509FC15F101A500C14A8E /* PearlQueue.h */; };
DA3509FF15F101A500C14A8E /* PearlQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3509FD15F101A500C14A8E /* PearlQueue.m */; };
DA38D6A318CCB5BF009AEB3E /* Storyboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DA38D6A218CCB5BF009AEB3E /* Storyboard.storyboard */; };
@@ -395,6 +397,18 @@
DAFE4A63150399FF003ABA94 /* NSDateFormatter+RFC3339.h in Headers */ = {isa = PBXBuildFile; fileRef = DAFE4A63150399FF003ABA93 /* NSDateFormatter+RFC3339.h */; };
/* End PBXBuildFile section */
+/* Begin PBXCopyFilesBuildPhase section */
+ DA32D01E19D111C6004F3F0E /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "include/$(PRODUCT_NAME)";
+ dstSubfolderSpec = 16;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
/* Begin PBXFileReference section */
93D390519405B76CC6A57C4F /* MPCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPCell.h; sourceTree = ""; };
93D39067C0AFDC581794E2B8 /* NSArray+Indexing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+Indexing.m"; sourceTree = ""; };
@@ -410,13 +424,13 @@
93D3924EE15017F8A12CB436 /* MPPasswordsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordsViewController.m; sourceTree = ""; };
93D392876BE5C011DE73B43F /* MPPopdownSegue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPopdownSegue.h; sourceTree = ""; };
93D393310223DDB35218467A /* MPCombinedViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPCombinedViewController.m; sourceTree = ""; };
- 93D3937712BF1B67623E5764 /* MPPopoverSegue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPopoverSegue.m; sourceTree = ""; };
93D393B97158D7BE9332EA53 /* NSDictionary+Indexing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+Indexing.h"; sourceTree = ""; };
93D393BB973253D4BAAC84AA /* PearlEMail.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlEMail.m; sourceTree = ""; };
93D394077F8FAB8167647187 /* Twitter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Twitter.framework; path = System/Library/Frameworks/Twitter.framework; sourceTree = SDKROOT; };
93D3942A356B639724157982 /* PearlOverlay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlOverlay.h; sourceTree = ""; };
93D394482BB07F90E8FD1314 /* UIResponder+PearlFirstResponder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIResponder+PearlFirstResponder.h"; sourceTree = ""; };
93D394C78C7B879C9AD9152C /* MPAppDelegate_InApp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAppDelegate_InApp.m; sourceTree = ""; };
+ 93D395105935859D71679931 /* MPOverlayViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPOverlayViewController.m; sourceTree = ""; };
93D3956915634581E737B38C /* PearlNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlNavigationController.m; sourceTree = ""; };
93D3957D76F71A652716EECC /* MPStoreViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPStoreViewController.m; sourceTree = ""; };
93D396D04E57792A54D437AC /* NSArray+Indexing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+Indexing.h"; sourceTree = ""; };
@@ -435,7 +449,6 @@
93D399F244BB522A317811BB /* MPFixable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPFixable.h; sourceTree = ""; };
93D39A1DDFA09AE2E14D26DC /* UIResponder+PearlFirstResponder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIResponder+PearlFirstResponder.m"; sourceTree = ""; };
93D39A28369954D147E239BA /* MPSetupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPSetupViewController.m; sourceTree = ""; };
- 93D39A41340CF778E00D0E6D /* MPPopoverSegue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPopoverSegue.h; sourceTree = ""; };
93D39A4759186F6D2D34AA6B /* PearlSizedTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlSizedTextView.h; sourceTree = ""; };
93D39A813CA9D7E192261ED2 /* MPFixable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPFixable.m; sourceTree = ""; };
93D39AA10CD00D05937671B1 /* UITextView+PearlAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITextView+PearlAttributes.h"; sourceTree = ""; };
@@ -444,6 +457,7 @@
93D39B050DD5F55E9794EFD4 /* MPPopdownSegue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPopdownSegue.m; sourceTree = ""; };
93D39B1D8177A86C5B9EDDE3 /* PearlUICollectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlUICollectionView.h; sourceTree = ""; };
93D39B381350802A194BF332 /* MPAvatarCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAvatarCell.m; sourceTree = ""; };
+ 93D39B455A71EC98C749E623 /* MPOverlayViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPOverlayViewController.h; sourceTree = ""; };
93D39BAA71DE51B4D8A1286C /* MPCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPCell.m; sourceTree = ""; };
93D39C426E03358384018E85 /* MPAnswersViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAnswersViewController.m; sourceTree = ""; };
93D39C44361BE57AF0B3071F /* MPPasswordsSegue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordsSegue.h; sourceTree = ""; };
@@ -526,6 +540,9 @@
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; };
+ DA32D03919D111EB004F3F0E /* NSManagedObjectModel+KCOrderedAccessorFix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSManagedObjectModel+KCOrderedAccessorFix.h"; sourceTree = ""; };
+ DA32D03A19D111EB004F3F0E /* NSManagedObjectModel+KCOrderedAccessorFix.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSManagedObjectModel+KCOrderedAccessorFix.m"; sourceTree = ""; };
DA3509FC15F101A500C14A8E /* PearlQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlQueue.h; sourceTree = ""; };
DA3509FD15F101A500C14A8E /* PearlQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlQueue.m; sourceTree = ""; };
DA38D6A218CCB5BF009AEB3E /* Storyboard.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Storyboard.storyboard; sourceTree = ""; };
@@ -1376,10 +1393,18 @@
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
+ DA32D01D19D111C6004F3F0E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
DA5BFA41147E415C00F98B1E /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ DA32D03E19D11293004F3F0E /* libKCOrderedAccessorFix.a in Frameworks */,
DA04E33E14B1E70400ECA4F3 /* MobileCoreServices.framework in Frameworks */,
DAE2725A19C93B8E007C5262 /* StoreKit.framework in Frameworks */,
DAE2725919C93B80007C5262 /* libInAppSettingsKit.a in Frameworks */,
@@ -1470,6 +1495,15 @@
path = Guide;
sourceTree = "";
};
+ DA32D03719D111EB004F3F0E /* KCOrderedAccessorFix */ = {
+ isa = PBXGroup;
+ children = (
+ DA32D03919D111EB004F3F0E /* NSManagedObjectModel+KCOrderedAccessorFix.h */,
+ DA32D03A19D111EB004F3F0E /* NSManagedObjectModel+KCOrderedAccessorFix.m */,
+ );
+ path = KCOrderedAccessorFix;
+ sourceTree = "";
+ };
DA5BFA39147E415C00F98B1E = {
isa = PBXGroup;
children = (
@@ -1493,6 +1527,7 @@
DAC6325D1486805C0075AEA5 /* libuicolor-utilities.a */,
DAC6326C148680650075AEA5 /* libjrswizzle.a */,
DAFC5655172C573B00CB5CC5 /* libInAppSettingsKit.a */,
+ DA32D02019D111C6004F3F0E /* libKCOrderedAccessorFix.a */,
);
name = Products;
sourceTree = "";
@@ -2342,8 +2377,6 @@
93D3971FE104BB4052484151 /* MPUsersViewController.h */,
93D39BAA71DE51B4D8A1286C /* MPCell.m */,
93D390519405B76CC6A57C4F /* MPCell.h */,
- 93D3937712BF1B67623E5764 /* MPPopoverSegue.m */,
- 93D39A41340CF778E00D0E6D /* MPPopoverSegue.h */,
93D39E7A12CC352B2825AA66 /* MPPasswordsSegue.m */,
93D39C44361BE57AF0B3071F /* MPPasswordsSegue.h */,
93D39B050DD5F55E9794EFD4 /* MPPopdownSegue.m */,
@@ -2356,6 +2389,8 @@
93D39F556F2F142740A65E59 /* MPWebViewController.h */,
93D39CC01630D0421205C4C4 /* MPNavigationController.m */,
93D3970502644794E8A027BE /* MPNavigationController.h */,
+ 93D395105935859D71679931 /* MPOverlayViewController.m */,
+ 93D39B455A71EC98C749E623 /* MPOverlayViewController.h */,
);
path = iOS;
sourceTree = "";
@@ -2376,6 +2411,7 @@
DACA22121705DDC5002C6C22 /* External */ = {
isa = PBXGroup;
children = (
+ DA32D03719D111EB004F3F0E /* KCOrderedAccessorFix */,
DAA141181922FED80032B392 /* iOS */,
DAFC5662172C57EC00CB5CC5 /* InAppSettingsKit */,
DAC77CAF148291A600BCF976 /* Pearl */,
@@ -2786,6 +2822,23 @@
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
+ DA32D01F19D111C6004F3F0E /* KCOrderedAccessorFix */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = DA32D03419D111C7004F3F0E /* Build configuration list for PBXNativeTarget "KCOrderedAccessorFix" */;
+ buildPhases = (
+ DA32D01C19D111C6004F3F0E /* Sources */,
+ DA32D01D19D111C6004F3F0E /* Frameworks */,
+ DA32D01E19D111C6004F3F0E /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = KCOrderedAccessorFix;
+ productName = KCOrderedAccessorFix;
+ productReference = DA32D02019D111C6004F3F0E /* libKCOrderedAccessorFix.a */;
+ productType = "com.apple.product-type.library.static";
+ };
DA5BFA43147E415C00F98B1E /* MasterPassword */ = {
isa = PBXNativeTarget;
buildConfigurationList = DA5BFA6D147E415C00F98B1E /* Build configuration list for PBXNativeTarget "MasterPassword" */;
@@ -2882,6 +2935,9 @@
LastUpgradeCheck = 0600;
ORGANIZATIONNAME = Lyndir;
TargetAttributes = {
+ DA32D01F19D111C6004F3F0E = {
+ CreatedOnToolsVersion = 6.0;
+ };
DA5BFA43147E415C00F98B1E = {
DevelopmentTeam = HL3Q45LX9N;
SystemCapabilities = {
@@ -3003,6 +3059,7 @@
DAC6325C1486805C0075AEA5 /* uicolor-utilities */,
DAC6326B148680650075AEA5 /* jrswizzle */,
DAFC5654172C573B00CB5CC5 /* InAppSettingsKit */,
+ DA32D01F19D111C6004F3F0E /* KCOrderedAccessorFix */,
);
};
/* End PBXProject section */
@@ -3203,6 +3260,14 @@
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
+ DA32D01C19D111C6004F3F0E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ DA32D03C19D111EB004F3F0E /* NSManagedObjectModel+KCOrderedAccessorFix.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
DA5BFA40147E415C00F98B1E /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -3235,7 +3300,6 @@
93D39A5FF670957C0AF8298D /* MPPasswordCell.m in Sources */,
93D398ECD7D1A0DEDDADF516 /* MPEmergencyViewController.m in Sources */,
DA32D00819CF4735004F3F0E /* MasterPassword.xcdatamodeld in Sources */,
- 93D391ED37C9F687FA51EAA1 /* MPPopoverSegue.m in Sources */,
93D394B5036C882B33C71872 /* MPPasswordsSegue.m in Sources */,
93D39673DDC085BE72C34D7C /* MPPopdownSegue.m in Sources */,
93D39BA1EA3CAAC8A220B4A6 /* MPAppSettingsViewController.m in Sources */,
@@ -3248,6 +3312,7 @@
DA32CFF019CF1C8F004F3F0E /* MPUserEntity.m in Sources */,
93D39D38356F59DBEF934D70 /* MPAppDelegate_InApp.m in Sources */,
93D390C1B93F9D3AE37DD0A5 /* MPAnswersViewController.m in Sources */,
+ 93D399D7E08A142776A74CB8 /* MPOverlayViewController.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -3396,6 +3461,24 @@
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
+ DA32D02E19D111C7004F3F0E /* Debug-iOS */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ };
+ name = "Debug-iOS";
+ };
+ DA32D02F19D111C7004F3F0E /* AdHoc-iOS */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ };
+ name = "AdHoc-iOS";
+ };
+ DA32D03019D111C7004F3F0E /* AppStore-iOS */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ };
+ name = "AppStore-iOS";
+ };
DA5BFA6B147E415C00F98B1E /* Debug-iOS */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -3747,11 +3830,7 @@
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_OBJC_ARC = NO;
- DSTROOT = /tmp/jrswizzle.dst;
GCC_WARN_INHIBIT_ALL_WARNINGS = YES;
- OTHER_LDFLAGS = "-ObjC";
- PRODUCT_NAME = "$(TARGET_NAME)";
- SKIP_INSTALL = YES;
};
name = "AppStore-iOS";
};
@@ -3783,11 +3862,7 @@
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_OBJC_ARC = NO;
- DSTROOT = /tmp/jrswizzle.dst;
GCC_WARN_INHIBIT_ALL_WARNINGS = YES;
- OTHER_LDFLAGS = "-ObjC";
- PRODUCT_NAME = "$(TARGET_NAME)";
- SKIP_INSTALL = YES;
};
name = "Debug-iOS";
};
@@ -3795,11 +3870,7 @@
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_OBJC_ARC = NO;
- DSTROOT = /tmp/jrswizzle.dst;
GCC_WARN_INHIBIT_ALL_WARNINGS = YES;
- OTHER_LDFLAGS = "-ObjC";
- PRODUCT_NAME = "$(TARGET_NAME)";
- SKIP_INSTALL = YES;
};
name = "AdHoc-iOS";
};
@@ -3862,6 +3933,15 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
+ DA32D03419D111C7004F3F0E /* Build configuration list for PBXNativeTarget "KCOrderedAccessorFix" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ DA32D02E19D111C7004F3F0E /* Debug-iOS */,
+ DA32D02F19D111C7004F3F0E /* AdHoc-iOS */,
+ DA32D03019D111C7004F3F0E /* AppStore-iOS */,
+ );
+ defaultConfigurationIsVisible = 0;
+ };
DA5BFA3E147E415C00F98B1E /* Build configuration list for PBXProject "MasterPassword-iOS" */ = {
isa = XCConfigurationList;
buildConfigurations = (
diff --git a/MasterPassword/ObjC/iOS/Storyboard.storyboard b/MasterPassword/ObjC/iOS/Storyboard.storyboard
index 098fadcc..45edf3c4 100644
--- a/MasterPassword/ObjC/iOS/Storyboard.storyboard
+++ b/MasterPassword/ObjC/iOS/Storyboard.storyboard
@@ -501,7 +501,7 @@
-
+
@@ -512,14 +512,36 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -558,7 +580,7 @@
-
+
@@ -1240,7 +1262,7 @@
-
+
@@ -2236,7 +2258,7 @@ However, it means that anyone who finds your device unlocked can do the same.
-
+
@@ -2412,7 +2434,7 @@ See
-
+
@@ -2772,9 +2794,13 @@ See
+
+
+
+
-
+
@@ -2927,10 +2953,14 @@ See
+
-
+
+
+
+
@@ -2977,8 +3007,8 @@ See
-
-
+
+