From 6f37f28a4c35bdcaae795b58a2021934ad13a1c8 Mon Sep 17 00:00:00 2001 From: Maarten Billemont Date: Tue, 10 Jul 2012 07:26:49 +0200 Subject: [PATCH] Element versioning + upgrade tool & tip. [ADDED] "version" to MPElementEntity. [ADDED] Tool tip, a tip that points at the content tool. [ADDED] Upgrade tool, a tool used for upgrading outdated elements. --- MasterPassword-iOS.xcodeproj/project.pbxproj | 28 ++++-- MasterPassword/MPElementEntity.h | 3 +- MasterPassword/MPElementEntity.m | 3 +- .../.xccurrentversion | 2 +- .../contents | 0 .../MasterPassword 2.xcdatamodel/contents | 33 +++++++ MasterPassword/iOS/MPMainViewController.h | 5 +- MasterPassword/iOS/MPMainViewController.m | 51 +++++++++-- .../iOS/MainStoryboard_iPhone.storyboard | 84 +++++++++++++----- .../Tooltips/tip_basic_black_bottom_right.png | Bin 0 -> 2040 bytes .../tip_basic_black_bottom_right@2x.png | Bin 0 -> 4917 bytes 11 files changed, 165 insertions(+), 44 deletions(-) rename MasterPassword/MasterPassword.xcdatamodeld/{MasterPassword.xcdatamodel => MasterPassword 1.xcdatamodel}/contents (100%) create mode 100644 MasterPassword/MasterPassword.xcdatamodeld/MasterPassword 2.xcdatamodel/contents create mode 100644 Resources/Tooltips/tip_basic_black_bottom_right.png create mode 100644 Resources/Tooltips/tip_basic_black_bottom_right@2x.png diff --git a/MasterPassword-iOS.xcodeproj/project.pbxproj b/MasterPassword-iOS.xcodeproj/project.pbxproj index f167b9c7..4f6714fd 100644 --- a/MasterPassword-iOS.xcodeproj/project.pbxproj +++ b/MasterPassword-iOS.xcodeproj/project.pbxproj @@ -26,7 +26,6 @@ DA3EF18315A47744003ABF4E /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = DA3EF18115A47744003ABF4E /* InfoPlist.strings */; }; DA3EF18615A47744003ABF4E /* Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3EF18515A47744003ABF4E /* Tests.m */; }; DA40C2611586099D0079CE6E /* MPUserEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = DA40C2601586099D0079CE6E /* MPUserEntity.m */; }; - DA40C2641586099E0079CE6E /* MPElementEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = DA40C2631586099E0079CE6E /* MPElementEntity.m */; }; DA40C2671586099E0079CE6E /* MPElementGeneratedEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = DA40C2661586099E0079CE6E /* MPElementGeneratedEntity.m */; }; DA40C26A1586099E0079CE6E /* MPElementStoredEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = DA40C2691586099E0079CE6E /* MPElementStoredEntity.m */; }; DA4425CC1557BED40052177D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; }; @@ -35,6 +34,9 @@ DA4426081557C1990052177D /* MPAppDelegate_Shared.m in Sources */ = {isa = PBXBuildFile; fileRef = DA4426051557C1990052177D /* MPAppDelegate_Shared.m */; }; DA4426091557C1990052177D /* MPAppDelegate_Store.m in Sources */ = {isa = PBXBuildFile; fileRef = DA4426071557C1990052177D /* MPAppDelegate_Store.m */; }; DA44260A1557D9E40052177D /* libiCloudStoreManager.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA4425CB1557BED40052177D /* libiCloudStoreManager.a */; }; + DA46826F15AB843200FB09E7 /* tip_basic_black_bottom_right.png in Resources */ = {isa = PBXBuildFile; fileRef = DA46826D15AB843200FB09E7 /* tip_basic_black_bottom_right.png */; }; + DA46827015AB843200FB09E7 /* tip_basic_black_bottom_right@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA46826E15AB843200FB09E7 /* tip_basic_black_bottom_right@2x.png */; }; + DA46827315ABF00100FB09E7 /* MPElementEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = DA46827215ABF00100FB09E7 /* MPElementEntity.m */; }; DA4DA1D91564471A00F6F596 /* libjrswizzle.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC6326C148680650075AEA5 /* libjrswizzle.a */; }; DA4DA1DA1564471F00F6F596 /* libuicolor-utilities.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC6325D1486805C0075AEA5 /* libuicolor-utilities.a */; }; DA4DA1DB1564475E00F6F596 /* libscryptenc-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA79A9BB1557DB6F00BAA07A /* libscryptenc-ios.a */; }; @@ -914,8 +916,6 @@ DA3EF18715A47744003ABF4E /* Tests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Tests-Prefix.pch"; sourceTree = ""; }; DA40C25F1586099D0079CE6E /* MPUserEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPUserEntity.h; sourceTree = ""; }; DA40C2601586099D0079CE6E /* MPUserEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPUserEntity.m; sourceTree = ""; }; - DA40C2621586099E0079CE6E /* MPElementEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPElementEntity.h; sourceTree = ""; }; - DA40C2631586099E0079CE6E /* MPElementEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPElementEntity.m; sourceTree = ""; }; DA40C2651586099E0079CE6E /* MPElementGeneratedEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPElementGeneratedEntity.h; sourceTree = ""; }; DA40C2661586099E0079CE6E /* MPElementGeneratedEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPElementGeneratedEntity.m; sourceTree = ""; }; DA40C2681586099E0079CE6E /* MPElementStoredEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPElementStoredEntity.h; sourceTree = ""; }; @@ -927,6 +927,11 @@ DA4426051557C1990052177D /* MPAppDelegate_Shared.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAppDelegate_Shared.m; sourceTree = ""; }; DA4426061557C1990052177D /* MPAppDelegate_Store.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAppDelegate_Store.h; sourceTree = ""; }; DA4426071557C1990052177D /* MPAppDelegate_Store.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAppDelegate_Store.m; sourceTree = ""; }; + DA46826C15AB48F100FB09E7 /* MasterPassword 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 2.xcdatamodel"; sourceTree = ""; }; + DA46826D15AB843200FB09E7 /* tip_basic_black_bottom_right.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tip_basic_black_bottom_right.png; sourceTree = ""; }; + DA46826E15AB843200FB09E7 /* tip_basic_black_bottom_right@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tip_basic_black_bottom_right@2x.png"; sourceTree = ""; }; + DA46827115ABF00100FB09E7 /* MPElementEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPElementEntity.h; sourceTree = ""; }; + DA46827215ABF00100FB09E7 /* MPElementEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPElementEntity.m; sourceTree = ""; }; DA5BFA44147E415C00F98B1E /* MasterPassword.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MasterPassword.app; sourceTree = BUILT_PRODUCTS_DIR; }; DA5BFA48147E415C00F98B1E /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; DA5BFA4A147E415C00F98B1E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -982,7 +987,7 @@ DA95D5CE14DF0691008D1B94 /* IASKSpecifierValuesView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IASKSpecifierValuesView.xib; sourceTree = ""; }; DA95D5F014DF0B1E008D1B94 /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; }; DAAC35DD156BD77D00C5FD93 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; }; - DAB8D43D15036BCF00CED3BC /* MasterPassword.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = MasterPassword.xcdatamodel; sourceTree = ""; }; + DAB8D43D15036BCF00CED3BC /* MasterPassword 1.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 1.xcdatamodel"; sourceTree = ""; }; DAB8D44015036BCF00CED3BC /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; DAB8D44115036BCF00CED3BC /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; DAB8D44215036BCF00CED3BC /* MainStoryboard_iPhone.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = MainStoryboard_iPhone.storyboard; sourceTree = ""; }; @@ -1998,13 +2003,13 @@ DA40C2691586099E0079CE6E /* MPElementStoredEntity.m */, DA40C2651586099E0079CE6E /* MPElementGeneratedEntity.h */, DA40C2661586099E0079CE6E /* MPElementGeneratedEntity.m */, - DA40C2621586099E0079CE6E /* MPElementEntity.h */, - DA40C2631586099E0079CE6E /* MPElementEntity.m */, DA40C25F1586099D0079CE6E /* MPUserEntity.h */, DA40C2601586099D0079CE6E /* MPUserEntity.m */, DA0E07941577FE490008A67E /* MPEntities.h */, DA0E07951577FE490008A67E /* MPEntities.m */, DAB8D43C15036BCF00CED3BC /* MasterPassword.xcdatamodeld */, + DA46827115ABF00100FB09E7 /* MPElementEntity.h */, + DA46827215ABF00100FB09E7 /* MPElementEntity.m */, DA600C2415054F3A008E9AB6 /* MPAppDelegate_Key.h */, DA600C2315054F3A008E9AB6 /* MPAppDelegate_Key.m */, DA4426041557C1990052177D /* MPAppDelegate_Shared.h */, @@ -2832,6 +2837,8 @@ DAB8D6B715036BF600CED3BC /* Tooltips */ = { isa = PBXGroup; children = ( + DA46826D15AB843200FB09E7 /* tip_basic_black_bottom_right.png */, + DA46826E15AB843200FB09E7 /* tip_basic_black_bottom_right@2x.png */, DACABB8E1572B769008BA211 /* tip_basic_black_top.png */, DACABB8F1572B769008BA211 /* tip_basic_black_top@2x.png */, DACABB8A1572A4A4008BA211 /* tip_basic_black_top_right.png */, @@ -4148,6 +4155,8 @@ DAE4C98C157E63BE00EFE047 /* avatar-17@2x.png in Resources */, DAE4C98D157E63BE00EFE047 /* avatar-18.png in Resources */, DAE4C98E157E63BE00EFE047 /* avatar-18@2x.png in Resources */, + DA46826F15AB843200FB09E7 /* tip_basic_black_bottom_right.png in Resources */, + DA46827015AB843200FB09E7 /* tip_basic_black_bottom_right@2x.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4237,9 +4246,9 @@ DA0E07961577FE490008A67E /* MPEntities.m in Sources */, DAC728CA157C247B00889EF2 /* MPPreferencesViewController.m in Sources */, DA40C2611586099D0079CE6E /* MPUserEntity.m in Sources */, - DA40C2641586099E0079CE6E /* MPElementEntity.m in Sources */, DA40C2671586099E0079CE6E /* MPElementGeneratedEntity.m in Sources */, DA40C26A1586099E0079CE6E /* MPElementStoredEntity.m in Sources */, + DA46827315ABF00100FB09E7 /* MPElementEntity.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5059,9 +5068,10 @@ DAB8D43C15036BCF00CED3BC /* MasterPassword.xcdatamodeld */ = { isa = XCVersionGroup; children = ( - DAB8D43D15036BCF00CED3BC /* MasterPassword.xcdatamodel */, + DA46826C15AB48F100FB09E7 /* MasterPassword 2.xcdatamodel */, + DAB8D43D15036BCF00CED3BC /* MasterPassword 1.xcdatamodel */, ); - currentVersion = DAB8D43D15036BCF00CED3BC /* MasterPassword.xcdatamodel */; + currentVersion = DA46826C15AB48F100FB09E7 /* MasterPassword 2.xcdatamodel */; path = MasterPassword.xcdatamodeld; sourceTree = ""; versionGroupType = wrapper.xcdatamodel; diff --git a/MasterPassword/MPElementEntity.h b/MasterPassword/MPElementEntity.h index f4d8251f..d57d50f9 100644 --- a/MasterPassword/MPElementEntity.h +++ b/MasterPassword/MPElementEntity.h @@ -2,7 +2,7 @@ // MPElementEntity.h // MasterPassword-iOS // -// Created by Maarten Billemont on 11/06/12. +// Created by Maarten Billemont on 10/07/12. // Copyright (c) 2012 Lyndir. All rights reserved. // @@ -18,6 +18,7 @@ @property (nonatomic, retain) NSString * name; @property (nonatomic, retain) NSNumber * type_; @property (nonatomic, retain) NSNumber * uses_; +@property (nonatomic, retain) NSNumber * version_; @property (nonatomic, retain) MPUserEntity *user; @end diff --git a/MasterPassword/MPElementEntity.m b/MasterPassword/MPElementEntity.m index 56bfd174..5dd05dec 100644 --- a/MasterPassword/MPElementEntity.m +++ b/MasterPassword/MPElementEntity.m @@ -2,7 +2,7 @@ // MPElementEntity.m // MasterPassword-iOS // -// Created by Maarten Billemont on 11/06/12. +// Created by Maarten Billemont on 10/07/12. // Copyright (c) 2012 Lyndir. All rights reserved. // @@ -17,6 +17,7 @@ @dynamic name; @dynamic type_; @dynamic uses_; +@dynamic version_; @dynamic user; @end diff --git a/MasterPassword/MasterPassword.xcdatamodeld/.xccurrentversion b/MasterPassword/MasterPassword.xcdatamodeld/.xccurrentversion index 2e7699f4..d9f27547 100644 --- a/MasterPassword/MasterPassword.xcdatamodeld/.xccurrentversion +++ b/MasterPassword/MasterPassword.xcdatamodeld/.xccurrentversion @@ -3,6 +3,6 @@ _XCCurrentVersionName - MasterPassword.xcdatamodel + MasterPassword 2.xcdatamodel diff --git a/MasterPassword/MasterPassword.xcdatamodeld/MasterPassword.xcdatamodel/contents b/MasterPassword/MasterPassword.xcdatamodeld/MasterPassword 1.xcdatamodel/contents similarity index 100% rename from MasterPassword/MasterPassword.xcdatamodeld/MasterPassword.xcdatamodel/contents rename to MasterPassword/MasterPassword.xcdatamodeld/MasterPassword 1.xcdatamodel/contents diff --git a/MasterPassword/MasterPassword.xcdatamodeld/MasterPassword 2.xcdatamodel/contents b/MasterPassword/MasterPassword.xcdatamodeld/MasterPassword 2.xcdatamodel/contents new file mode 100644 index 00000000..6ef02c4a --- /dev/null +++ b/MasterPassword/MasterPassword.xcdatamodeld/MasterPassword 2.xcdatamodel/contents @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MasterPassword/iOS/MPMainViewController.h b/MasterPassword/iOS/MPMainViewController.h index d2345a71..d4c60faf 100644 --- a/MasterPassword/iOS/MPMainViewController.h +++ b/MasterPassword/iOS/MPMainViewController.h @@ -30,12 +30,15 @@ @property (weak, nonatomic) IBOutlet UILabel *alertTitle; @property (weak, nonatomic) IBOutlet UITextView *alertBody; @property (weak, nonatomic) IBOutlet UILabel *contentTipBody; -@property (weak, nonatomic) IBOutlet UIImageView *contentTipEditIcon; +@property (weak, nonatomic) IBOutlet UIImageView *toolTipEditIcon; @property (weak, nonatomic) IBOutlet UIView *searchTipContainer; @property (weak, nonatomic) IBOutlet UIView *actionsTipContainer; @property (weak, nonatomic) IBOutlet UIView *typeTipContainer; +@property (weak, nonatomic) IBOutlet UIView *toolTipContainer; +@property (weak, nonatomic) IBOutlet UILabel *toolTipBody; @property (copy) void (^contentTipCleanup)(BOOL finished); +@property (copy) void (^toolTipCleanup)(BOOL finished); - (IBAction)copyContent; - (IBAction)incrementPasswordCounter; diff --git a/MasterPassword/iOS/MPMainViewController.m b/MasterPassword/iOS/MPMainViewController.m index 27909fec..370de71a 100644 --- a/MasterPassword/iOS/MPMainViewController.m +++ b/MasterPassword/iOS/MPMainViewController.m @@ -17,6 +17,7 @@ - (void)updateAnimated:(BOOL)animated; - (void)showContentTip:(NSString *)message withIcon:(UIImageView *)icon; +- (void)showToolTip:(NSString *)message withIcon:(UIImageView *)icon; - (void)showAlertWithTitle:(NSString *)title message:(NSString *)message; - (void)changeElementWithWarning:(NSString *)warning do:(void (^)(void))task; - (void)changeElementWithoutWarningDo:(void (^)(void))task; @@ -39,13 +40,15 @@ @synthesize alertTitle = _alertTitle; @synthesize alertBody = _alertBody; @synthesize contentTipBody = _contentTipBody; -@synthesize contentTipEditIcon = _contentTipEditIcon; +@synthesize toolTipEditIcon = _contentTipEditIcon; @synthesize searchTipContainer = _searchTipContainer; @synthesize actionsTipContainer = _actionsTipContainer; @synthesize typeTipContainer = _typeTipContainer; +@synthesize toolTipContainer = _toolTipContainer; +@synthesize toolTipBody = _toolTipBody; @synthesize resetPasswordCounterGesture = _resetPasswordCounterGesture; @synthesize contentField = _contentField; -@synthesize contentTipCleanup; +@synthesize contentTipCleanup = _contentTipCleanup, toolTipCleanup = _toolTipCleanup; #pragma mark - View lifecycle @@ -85,7 +88,7 @@ self.contentField.font = [UIFont fontWithName:@"Exo-Black" size:self.contentField.font.pointSize]; self.alertBody.text = nil; - self.contentTipEditIcon.hidden = YES; + self.toolTipEditIcon.hidden = YES; [super viewDidLoad]; } @@ -157,12 +160,14 @@ [self setAlertTitle:nil]; [self setAlertBody:nil]; [self setContentTipBody:nil]; - [self setContentTipEditIcon:nil]; + [self setToolTipEditIcon:nil]; [self setSearchTipContainer:nil]; [self setActionsTipContainer:nil]; [self setTypeTipContainer:nil]; [self setSearchDelegate:nil]; [self setResetPasswordCounterGesture:nil]; + [self setToolTipContainer:nil]; + [self setToolTipBody:nil]; [super viewDidUnload]; } @@ -249,17 +254,17 @@ } - (void)showContentTip:(NSString *)message withIcon:(UIImageView *)icon { - + dispatch_async(dispatch_get_main_queue(), ^{ if (self.contentTipCleanup) self.contentTipCleanup(NO); - + self.contentTipBody.text = message; self.contentTipCleanup = ^(BOOL finished) { icon.hidden = YES; self.contentTipCleanup = nil; }; - + icon.hidden = NO; [UIView animateWithDuration:0.3f animations:^{ self.contentTipContainer.alpha = 1; @@ -276,6 +281,34 @@ }); } +- (void)showToolTip:(NSString *)message withIcon:(UIImageView *)icon { + + dispatch_async(dispatch_get_main_queue(), ^{ + if (self.toolTipCleanup) + self.toolTipCleanup(NO); + + self.toolTipBody.text = message; + self.toolTipCleanup = ^(BOOL finished) { + icon.hidden = YES; + self.toolTipCleanup = nil; + }; + + icon.hidden = NO; + [UIView animateWithDuration:0.3f animations:^{ + self.toolTipContainer.alpha = 1; + } completion:^(BOOL finished) { + if (finished) { + dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC); + dispatch_after(popTime, dispatch_get_main_queue(), ^(void) { + [UIView animateWithDuration:0.2f animations:^{ + self.toolTipContainer.alpha = 0; + } completion:self.toolTipCleanup]; + }); + } + }]; + }); +} + - (void)showAlertWithTitle:(NSString *)title message:(NSString *)message { dispatch_async(dispatch_get_main_queue(), ^{ @@ -565,13 +598,13 @@ self.activeElement.type = type; if (type & MPElementTypeClassStored && ![[self.activeElement.content description] length]) - [self showContentTip:@"Tap to set a password." withIcon:self.contentTipEditIcon]; + [self showToolTip:@"Tap to set a password." withIcon:self.toolTipEditIcon]; }]; } - (void)didSelectElement:(MPElementEntity *)element { - inf(@"Selected: %@", element.name); + inf(@"Selected: %@, version: %@", element.name, element.version_); [self closeAlert]; diff --git a/MasterPassword/iOS/MainStoryboard_iPhone.storyboard b/MasterPassword/iOS/MainStoryboard_iPhone.storyboard index c89884d1..34b2bf58 100644 --- a/MasterPassword/iOS/MainStoryboard_iPhone.storyboard +++ b/MasterPassword/iOS/MainStoryboard_iPhone.storyboard @@ -431,7 +431,7 @@ Your passwords will be AES-encrypted with your master password. - + @@ -445,7 +445,7 @@ Your passwords will be AES-encrypted with your master password. - - - - +