Deprecate iCloud and remove hardcoded absolute paths from lib dirs.
This commit is contained in:
parent
adc79d331b
commit
cf52221175
BIN
External/iOS/Crashlytics.framework/submit
vendored
BIN
External/iOS/Crashlytics.framework/submit
vendored
Binary file not shown.
@ -14,7 +14,6 @@
|
||||
@property(nonatomic, retain) NSNumber *rememberLogin;
|
||||
@property(nonatomic, retain) NSNumber *hidePasswords;
|
||||
|
||||
@property(nonatomic, retain) NSNumber *iCloudDecided;
|
||||
@property(nonatomic, retain) NSNumber *checkInconsistency;
|
||||
|
||||
@property(nonatomic, strong) NSNumber *siteAttacker;
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
@implementation MPConfig
|
||||
|
||||
@dynamic sendInfo, rememberLogin, iCloudDecided, checkInconsistency, hidePasswords, siteAttacker;
|
||||
@dynamic sendInfo, rememberLogin, checkInconsistency, hidePasswords, siteAttacker;
|
||||
|
||||
- (id)init {
|
||||
|
||||
@ -23,7 +23,6 @@
|
||||
NSStringFromSelector( @selector( sendInfo ) ) : @NO,
|
||||
NSStringFromSelector( @selector( rememberLogin ) ) : @NO,
|
||||
NSStringFromSelector( @selector( hidePasswords ) ) : @NO,
|
||||
NSStringFromSelector( @selector( iCloudDecided ) ) : @NO,
|
||||
NSStringFromSelector( @selector( checkInconsistency ) ) : @NO,
|
||||
NSStringFromSelector( @selector( siteAttacker ) ) : @(MPAttacker1),
|
||||
}];
|
||||
|
@ -20,7 +20,6 @@
|
||||
|
||||
@interface MPSetupViewController : UIViewController
|
||||
|
||||
@property(weak, nonatomic) IBOutlet UISwitch *cloudSwitch;
|
||||
@property(weak, nonatomic) IBOutlet UISwitch *rememberLoginSwitch;
|
||||
|
||||
- (IBAction)close:(UIBarButtonItem *)sender;
|
||||
|
@ -26,10 +26,6 @@
|
||||
|
||||
[super viewDidAppear:animated];
|
||||
|
||||
self.cloudSwitch.enabled = [[MPAppDelegate_Shared get].storeManager cloudAvailable];
|
||||
|
||||
if (self.cloudSwitch && [[MPiOSConfig get].iCloudDecided boolValue])
|
||||
self.cloudSwitch.on = [[MPiOSConfig get].iCloudEnabled boolValue];
|
||||
if (self.rememberLoginSwitch)
|
||||
self.rememberLoginSwitch.on = [[MPiOSConfig get].rememberLogin boolValue];
|
||||
}
|
||||
@ -38,10 +34,6 @@
|
||||
|
||||
[super viewWillDisappear:animated];
|
||||
|
||||
if (self.cloudSwitch) {
|
||||
[MPiOSConfig get].iCloudDecided = @YES;
|
||||
[MPiOSConfig get].iCloudEnabled = @(self.cloudSwitch.on);
|
||||
}
|
||||
if (self.rememberLoginSwitch)
|
||||
[MPiOSConfig get].rememberLogin = @(self.rememberLoginSwitch.on);
|
||||
}
|
||||
|
@ -72,16 +72,16 @@
|
||||
@try {
|
||||
[[NSNotificationCenter defaultCenter] addObserverForName:MPCheckConfigNotification object:nil queue:[NSOperationQueue mainQueue]
|
||||
usingBlock:^(NSNotification *note) {
|
||||
[self updateConfigKey:note.object];
|
||||
}];
|
||||
[self updateConfigKey:note.object];
|
||||
}];
|
||||
[[NSNotificationCenter defaultCenter] addObserverForName:kIASKAppSettingChanged object:nil queue:nil usingBlock:
|
||||
^(NSNotification *note) {
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:MPCheckConfigNotification object:note.object];
|
||||
}];
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:MPCheckConfigNotification object:note.object];
|
||||
}];
|
||||
[[NSNotificationCenter defaultCenter] addObserverForName:NSUserDefaultsDidChangeNotification object:nil queue:nil usingBlock:
|
||||
^(NSNotification *note) {
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:MPCheckConfigNotification object:nil];
|
||||
}];
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:MPCheckConfigNotification object:nil];
|
||||
}];
|
||||
|
||||
#ifdef ADHOC
|
||||
[PearlAlert showAlertWithTitle:@"Welcome, tester!" message:
|
||||
@ -109,26 +109,26 @@
|
||||
|
||||
[[NSNotificationCenter defaultCenter] addObserverForName:MPFoundInconsistenciesNotification object:nil queue:nil usingBlock:
|
||||
^(NSNotification *note) {
|
||||
switch ((MPFixableResult)[note.userInfo[MPInconsistenciesFixResultUserKey] unsignedIntegerValue]) {
|
||||
switch ((MPFixableResult)[note.userInfo[MPInconsistenciesFixResultUserKey] unsignedIntegerValue]) {
|
||||
|
||||
case MPFixableResultNoProblems:
|
||||
break;
|
||||
case MPFixableResultProblemsFixed:
|
||||
[PearlAlert showAlertWithTitle:@"Inconsistencies Fixed" message:
|
||||
@"Some inconsistencies were detected in your sites.\n"
|
||||
@"All issues were fixed."
|
||||
viewStyle:UIAlertViewStyleDefault initAlert:nil
|
||||
tappedButtonBlock:nil cancelTitle:[PearlStrings get].commonButtonOkay otherTitles:nil];
|
||||
break;
|
||||
case MPFixableResultProblemsNotFixed:
|
||||
[PearlAlert showAlertWithTitle:@"Inconsistencies Found" message:
|
||||
@"Some inconsistencies were detected in your sites.\n"
|
||||
@"Not all issues could be fixed. Try signing in to each user or checking the logs."
|
||||
viewStyle:UIAlertViewStyleDefault initAlert:nil
|
||||
tappedButtonBlock:nil cancelTitle:[PearlStrings get].commonButtonOkay otherTitles:nil];
|
||||
break;
|
||||
}
|
||||
}];
|
||||
case MPFixableResultNoProblems:
|
||||
break;
|
||||
case MPFixableResultProblemsFixed:
|
||||
[PearlAlert showAlertWithTitle:@"Inconsistencies Fixed" message:
|
||||
@"Some inconsistencies were detected in your sites.\n"
|
||||
@"All issues were fixed."
|
||||
viewStyle:UIAlertViewStyleDefault initAlert:nil
|
||||
tappedButtonBlock:nil cancelTitle:[PearlStrings get].commonButtonOkay otherTitles:nil];
|
||||
break;
|
||||
case MPFixableResultProblemsNotFixed:
|
||||
[PearlAlert showAlertWithTitle:@"Inconsistencies Found" message:
|
||||
@"Some inconsistencies were detected in your sites.\n"
|
||||
@"Not all issues could be fixed. Try signing in to each user or checking the logs."
|
||||
viewStyle:UIAlertViewStyleDefault initAlert:nil
|
||||
tappedButtonBlock:nil cancelTitle:[PearlStrings get].commonButtonOkay otherTitles:nil];
|
||||
break;
|
||||
}
|
||||
}];
|
||||
|
||||
PearlMainQueue( ^{
|
||||
if ([[MPiOSConfig get].showSetup boolValue])
|
||||
@ -186,16 +186,16 @@
|
||||
@"Enter that master password to unlock the exported data.", userName )
|
||||
viewStyle:UIAlertViewStyleSecureTextInput
|
||||
initAlert:nil tappedButtonBlock:^(UIAlertView *alert_, NSInteger buttonIndex_) {
|
||||
@try {
|
||||
if (buttonIndex_ == [alert_ cancelButtonIndex])
|
||||
return;
|
||||
@try {
|
||||
if (buttonIndex_ == [alert_ cancelButtonIndex])
|
||||
return;
|
||||
|
||||
masterPassword = [alert_ textFieldAtIndex:0].text;
|
||||
}
|
||||
@finally {
|
||||
dispatch_group_leave( importPasswordGroup );
|
||||
}
|
||||
}
|
||||
masterPassword = [alert_ textFieldAtIndex:0].text;
|
||||
}
|
||||
@finally {
|
||||
dispatch_group_leave( importPasswordGroup );
|
||||
}
|
||||
}
|
||||
cancelTitle:[PearlStrings get].commonButtonCancel otherTitles:@"Unlock Import", nil];
|
||||
} );
|
||||
dispatch_group_wait( importPasswordGroup, DISPATCH_TIME_FOREVER );
|
||||
@ -209,19 +209,19 @@
|
||||
dispatch_async( dispatch_get_main_queue(), ^{
|
||||
[PearlAlert showAlertWithTitle:strf( @"Master Password for\n%@", userName )
|
||||
message:strf( @"Imports %lu sites, overwriting %lu.",
|
||||
(unsigned long)importCount, (unsigned long)deleteCount )
|
||||
(unsigned long)importCount, (unsigned long)deleteCount )
|
||||
viewStyle:UIAlertViewStyleSecureTextInput
|
||||
initAlert:nil tappedButtonBlock:^(UIAlertView *alert_, NSInteger buttonIndex_) {
|
||||
@try {
|
||||
if (buttonIndex_ == [alert_ cancelButtonIndex])
|
||||
return;
|
||||
@try {
|
||||
if (buttonIndex_ == [alert_ cancelButtonIndex])
|
||||
return;
|
||||
|
||||
masterPassword = [alert_ textFieldAtIndex:0].text;
|
||||
}
|
||||
@finally {
|
||||
dispatch_group_leave( userPasswordGroup );
|
||||
}
|
||||
}
|
||||
masterPassword = [alert_ textFieldAtIndex:0].text;
|
||||
}
|
||||
@finally {
|
||||
dispatch_group_leave( userPasswordGroup );
|
||||
}
|
||||
}
|
||||
cancelTitle:[PearlStrings get].commonButtonCancel otherTitles:@"Import", nil];
|
||||
} );
|
||||
dispatch_group_wait( userPasswordGroup, DISPATCH_TIME_FOREVER );
|
||||
@ -303,8 +303,8 @@
|
||||
@"and then include log files in your message."
|
||||
viewStyle:UIAlertViewStyleDefault
|
||||
initAlert:nil tappedButtonBlock:^(UIAlertView *alert_, NSInteger buttonIndex_) {
|
||||
[self openFeedbackWithLogs:(buttonIndex_ == [alert_ firstOtherButtonIndex]) forVC:viewController];
|
||||
} cancelTitle:nil otherTitles:@"Include Logs", @"No Logs", nil];
|
||||
[self openFeedbackWithLogs:(buttonIndex_ == [alert_ firstOtherButtonIndex]) forVC:viewController];
|
||||
} cancelTitle:nil otherTitles:@"Include Logs", @"No Logs", nil];
|
||||
else
|
||||
[self openFeedbackWithLogs:NO forVC:viewController];
|
||||
}
|
||||
@ -318,14 +318,14 @@
|
||||
|
||||
[[[PearlEMail alloc] initForEMailTo:@"Master Password Development <masterpassword@lyndir.com>"
|
||||
subject:strf( @"Feedback for Master Password [%@]",
|
||||
[[PearlKeyChain deviceIdentifier] stringByDeletingMatchesOf:@"-.*"] )
|
||||
[[PearlKeyChain deviceIdentifier] stringByDeletingMatchesOf:@"-.*"] )
|
||||
body:strf( @"\n\n\n"
|
||||
@"--\n"
|
||||
@"%@"
|
||||
@"Master Password %@, build %@",
|
||||
userName? ([userName stringByAppendingString:@"\n"]): @"",
|
||||
[PearlInfoPlist get].CFBundleShortVersionString,
|
||||
[PearlInfoPlist get].CFBundleVersion )
|
||||
@"--\n"
|
||||
@"%@"
|
||||
@"Master Password %@, build %@",
|
||||
userName? ([userName stringByAppendingString:@"\n"]): @"",
|
||||
[PearlInfoPlist get].CFBundleShortVersionString,
|
||||
[PearlInfoPlist get].CFBundleVersion )
|
||||
|
||||
attachments:(logs
|
||||
? [[PearlEMailAttachment alloc]
|
||||
@ -351,24 +351,25 @@
|
||||
@"restore your list of sites."
|
||||
viewStyle:UIAlertViewStyleDefault initAlert:nil
|
||||
tappedButtonBlock:^(UIAlertView *alert, NSInteger buttonIndex) {
|
||||
if (buttonIndex != [alert cancelButtonIndex])
|
||||
[PearlAlert showAlertWithTitle:@"Show Passwords?"
|
||||
message:@"Would you like to make all your passwords "
|
||||
@"visible in the export file?\n\n"
|
||||
@"A safe export will include all sites "
|
||||
@"but make their passwords invisible.\n"
|
||||
@"It is great as a backup and remains "
|
||||
@"safe when fallen in the wrong hands."
|
||||
viewStyle:UIAlertViewStyleDefault initAlert:nil
|
||||
tappedButtonBlock:^(UIAlertView *alert_, NSInteger buttonIndex_) {
|
||||
if (buttonIndex_ == [alert_ firstOtherButtonIndex] + 0)
|
||||
// Safe Export
|
||||
[self showExportRevealPasswords:NO forVC:viewController];
|
||||
if (buttonIndex_ == [alert_ firstOtherButtonIndex] + 1)
|
||||
// Show Passwords
|
||||
[self showExportRevealPasswords:YES forVC:viewController];
|
||||
} cancelTitle:[PearlStrings get].commonButtonCancel otherTitles:@"Safe Export", @"Show Passwords", nil];
|
||||
} cancelTitle:@"Cancel" otherTitles:@"Export Sites", nil];
|
||||
if (buttonIndex != [alert cancelButtonIndex])
|
||||
[PearlAlert showAlertWithTitle:@"Show Passwords?"
|
||||
message:@"Would you like to make all your passwords "
|
||||
@"visible in the export file?\n\n"
|
||||
@"A safe export will include all sites "
|
||||
@"but make their passwords invisible.\n"
|
||||
@"It is great as a backup and remains "
|
||||
@"safe when fallen in the wrong hands."
|
||||
viewStyle:UIAlertViewStyleDefault initAlert:nil
|
||||
tappedButtonBlock:^(UIAlertView *alert_, NSInteger buttonIndex_) {
|
||||
if (buttonIndex_ == [alert_ firstOtherButtonIndex] + 0)
|
||||
// Safe Export
|
||||
[self showExportRevealPasswords:NO forVC:viewController];
|
||||
if (buttonIndex_ == [alert_ firstOtherButtonIndex] + 1)
|
||||
// Show Passwords
|
||||
[self showExportRevealPasswords:YES forVC:viewController];
|
||||
} cancelTitle:[PearlStrings get].commonButtonCancel otherTitles:@"Safe Export", @"Show Passwords",
|
||||
nil];
|
||||
} cancelTitle:@"Cancel" otherTitles:@"Export Sites", nil];
|
||||
}
|
||||
|
||||
- (void)showExportRevealPasswords:(BOOL)revealPasswords forVC:(UIViewController *)viewController {
|
||||
@ -389,18 +390,18 @@
|
||||
|
||||
if (revealPasswords)
|
||||
message = strf( @"Export of Master Password sites with passwords included.\n\n"
|
||||
@"REMINDER: Make sure nobody else sees this file! Passwords are visible!\n\n\n"
|
||||
@"--\n"
|
||||
@"%@\n"
|
||||
@"Master Password %@, build %@",
|
||||
@"REMINDER: Make sure nobody else sees this file! Passwords are visible!\n\n\n"
|
||||
@"--\n"
|
||||
@"%@\n"
|
||||
@"Master Password %@, build %@",
|
||||
[self activeUserForMainThread].name,
|
||||
[PearlInfoPlist get].CFBundleShortVersionString,
|
||||
[PearlInfoPlist get].CFBundleVersion );
|
||||
else
|
||||
message = strf( @"Backup of Master Password sites.\n\n\n"
|
||||
@"--\n"
|
||||
@"%@\n"
|
||||
@"Master Password %@, build %@",
|
||||
@"--\n"
|
||||
@"%@\n"
|
||||
@"Master Password %@, build %@",
|
||||
[self activeUserForMainThread].name,
|
||||
[PearlInfoPlist get].CFBundleShortVersionString,
|
||||
[PearlInfoPlist get].CFBundleVersion );
|
||||
@ -425,22 +426,22 @@
|
||||
@"Changing the master password back to the old one will cause your passwords to revert as well."
|
||||
viewStyle:UIAlertViewStyleDefault
|
||||
initAlert:nil tappedButtonBlock:^(UIAlertView *alert, NSInteger buttonIndex) {
|
||||
if (buttonIndex == [alert cancelButtonIndex])
|
||||
return;
|
||||
if (buttonIndex == [alert cancelButtonIndex])
|
||||
return;
|
||||
|
||||
[moc performBlockAndWait:^{
|
||||
inf( @"Unsetting master password for: %@.", user.userID );
|
||||
user.keyID = nil;
|
||||
[self forgetSavedKeyFor:user];
|
||||
[moc saveToStore];
|
||||
}];
|
||||
[moc performBlockAndWait:^{
|
||||
inf( @"Unsetting master password for: %@.", user.userID );
|
||||
user.keyID = nil;
|
||||
[self forgetSavedKeyFor:user];
|
||||
[moc saveToStore];
|
||||
}];
|
||||
|
||||
[self signOutAnimated:YES];
|
||||
if (didReset)
|
||||
didReset();
|
||||
[self signOutAnimated:YES];
|
||||
if (didReset)
|
||||
didReset();
|
||||
|
||||
MPCheckpoint( MPCheckpointChangeMP, nil );
|
||||
}
|
||||
MPCheckpoint( MPCheckpointChangeMP, nil );
|
||||
}
|
||||
cancelTitle:[PearlStrings get].commonButtonAbort
|
||||
otherTitles:[PearlStrings get].commonButtonContinue, nil];
|
||||
}
|
||||
@ -482,11 +483,11 @@
|
||||
@"or overwrite them with your current sites."
|
||||
viewStyle:UIAlertViewStyleDefault initAlert:nil
|
||||
tappedButtonBlock:^(UIAlertView *alert, NSInteger buttonIndex) {
|
||||
if (buttonIndex == [alert cancelButtonIndex])
|
||||
setConfirmationAnswer( NO );
|
||||
if (buttonIndex == [alert firstOtherButtonIndex])
|
||||
setConfirmationAnswer( YES );
|
||||
}
|
||||
if (buttonIndex == [alert cancelButtonIndex])
|
||||
setConfirmationAnswer( NO );
|
||||
if (buttonIndex == [alert firstOtherButtonIndex])
|
||||
setConfirmationAnswer( YES );
|
||||
}
|
||||
cancelTitle:@"Use Old" otherTitles:@"Overwrite", nil];
|
||||
}];
|
||||
else
|
||||
@ -512,11 +513,11 @@
|
||||
@"or overwrite them with your current iCloud sites."
|
||||
viewStyle:UIAlertViewStyleDefault initAlert:nil
|
||||
tappedButtonBlock:^(UIAlertView *alert, NSInteger buttonIndex) {
|
||||
if (buttonIndex == [alert cancelButtonIndex])
|
||||
setConfirmationAnswer( NO );
|
||||
if (buttonIndex == [alert firstOtherButtonIndex])
|
||||
setConfirmationAnswer( YES );
|
||||
}
|
||||
if (buttonIndex == [alert cancelButtonIndex])
|
||||
setConfirmationAnswer( NO );
|
||||
if (buttonIndex == [alert firstOtherButtonIndex])
|
||||
setConfirmationAnswer( YES );
|
||||
}
|
||||
cancelTitle:@"Use Old" otherTitles:@"Overwrite", nil];
|
||||
}];
|
||||
}
|
||||
@ -547,7 +548,6 @@
|
||||
MPCheckpoint( MPCheckpointConfig, @{
|
||||
@"rememberLogin" : @([[MPConfig get].rememberLogin boolValue]),
|
||||
@"iCloudEnabled" : @([[MPiOSConfig get].iCloudEnabled boolValue]),
|
||||
@"iCloudDecided" : @([[MPConfig get].iCloudDecided boolValue]),
|
||||
@"sendInfo" : @([[MPiOSConfig get].sendInfo boolValue]),
|
||||
@"helpHidden" : @([[MPiOSConfig get].helpHidden boolValue]),
|
||||
@"showQuickStart" : @([[MPiOSConfig get].showSetup boolValue]),
|
||||
@ -583,6 +583,23 @@
|
||||
[self.fixCloudContentAlert cancelAlertAnimated:YES];
|
||||
[self.storeLoadingOverlay cancelOverlayAnimated:YES];
|
||||
[self.handleCloudDisabledAlert cancelAlertAnimated:YES];
|
||||
|
||||
if (isCloudStore)
|
||||
[PearlAlert showAlertWithTitle:@"iCloud Support Deprecated" message:
|
||||
@"Master Password is moving away from iCloud due to limited platform support and reliability issues. "
|
||||
@"\n\nMaster Password's generated passwords do not require syncing. "
|
||||
@"Your sites will always have the same passwords on all your devices, even without iCloud. "
|
||||
@"\n\niCloud continues to work for now but will be deactivated in a future update. "
|
||||
@"Disable iCloud now to copy your iCloud sites to your device and avoid having to recreate them "
|
||||
@"when iCloud becomes discontinued."
|
||||
viewStyle:UIAlertViewStyleDefault initAlert:nil
|
||||
tappedButtonBlock:^(UIAlertView *alert, NSInteger buttonIndex) {
|
||||
if (buttonIndex == [alert cancelButtonIndex])
|
||||
return;
|
||||
|
||||
[[self storeManager] migrateCloudToLocal];
|
||||
}
|
||||
cancelTitle:@"Ignore For Now" otherTitles:@"Disable iCloud", nil];
|
||||
}
|
||||
|
||||
- (void)ubiquityStoreManager:(UbiquityStoreManager *)manager failedLoadingStoreWithCause:(UbiquityStoreErrorCause)cause context:(id)context
|
||||
@ -607,17 +624,17 @@
|
||||
|
||||
if (!self.handleCloudDisabledAlert)
|
||||
self.handleCloudDisabledAlert = [PearlAlert showAlertWithTitle:@"iCloud Login" message:
|
||||
@"You haven't added an iCloud account to your device yet.\n"
|
||||
@"To add one, go into Apple's Settings -> iCloud."
|
||||
@"You haven't added an iCloud account to your device yet.\n"
|
||||
@"To add one, go into Apple's Settings -> iCloud."
|
||||
viewStyle:UIAlertViewStyleDefault initAlert:nil
|
||||
tappedButtonBlock:^(UIAlertView *alert, NSInteger buttonIndex) {
|
||||
if (buttonIndex == alert.firstOtherButtonIndex) {
|
||||
[MPiOSConfig get].iCloudEnabled = @NO;
|
||||
return;
|
||||
}
|
||||
if (buttonIndex == alert.firstOtherButtonIndex) {
|
||||
[MPiOSConfig get].iCloudEnabled = @NO;
|
||||
return;
|
||||
}
|
||||
|
||||
[self.storeManager reloadStore];
|
||||
} cancelTitle:@"Try Again" otherTitles:@"Disable iCloud", nil];
|
||||
[self.storeManager reloadStore];
|
||||
} cancelTitle:@"Try Again" otherTitles:@"Disable iCloud", nil];
|
||||
|
||||
return YES;
|
||||
}
|
||||
@ -631,27 +648,27 @@
|
||||
message:@"Waiting for your other device to auto‑correct the problem..."
|
||||
viewStyle:UIAlertViewStyleDefault initAlert:nil tappedButtonBlock:
|
||||
^(UIAlertView *alert, NSInteger buttonIndex) {
|
||||
if (buttonIndex == [alert firstOtherButtonIndex])
|
||||
wSelf.fixCloudContentAlert = [PearlAlert showAlertWithTitle:@"Fix iCloud Now" message:
|
||||
@"This problem can be auto‑corrected by opening the app on another device where you recently made changes.\n"
|
||||
@"You can fix the problem from this device anyway, but recent changes from another device might get lost.\n\n"
|
||||
@"You can also turn iCloud off for now."
|
||||
viewStyle:UIAlertViewStyleDefault
|
||||
initAlert:nil tappedButtonBlock:
|
||||
^(UIAlertView *alert_, NSInteger buttonIndex_) {
|
||||
if (buttonIndex_ == alert_.cancelButtonIndex)
|
||||
[wSelf showCloudContentAlert];
|
||||
if (buttonIndex_ == [alert_ firstOtherButtonIndex])
|
||||
[wSelf.storeManager rebuildCloudContentFromCloudStoreOrLocalStore:YES];
|
||||
if (buttonIndex_ == [alert_ firstOtherButtonIndex] + 1)
|
||||
[MPiOSConfig get].iCloudEnabled = @NO;
|
||||
}
|
||||
cancelTitle:[PearlStrings get].commonButtonBack
|
||||
otherTitles:@"Fix Anyway",
|
||||
@"Turn Off", nil];
|
||||
if (buttonIndex == [alert firstOtherButtonIndex] + 1)
|
||||
[MPiOSConfig get].iCloudEnabled = @NO;
|
||||
} cancelTitle:nil otherTitles:@"Fix Now", @"Turn Off", nil];
|
||||
if (buttonIndex == [alert firstOtherButtonIndex])
|
||||
wSelf.fixCloudContentAlert = [PearlAlert showAlertWithTitle:@"Fix iCloud Now" message:
|
||||
@"This problem can be auto‑corrected by opening the app on another device where you recently made changes.\n"
|
||||
@"You can fix the problem from this device anyway, but recent changes from another device might get lost.\n\n"
|
||||
@"You can also turn iCloud off for now."
|
||||
viewStyle:UIAlertViewStyleDefault
|
||||
initAlert:nil tappedButtonBlock:
|
||||
^(UIAlertView *alert_, NSInteger buttonIndex_) {
|
||||
if (buttonIndex_ == alert_.cancelButtonIndex)
|
||||
[wSelf showCloudContentAlert];
|
||||
if (buttonIndex_ == [alert_ firstOtherButtonIndex])
|
||||
[wSelf.storeManager rebuildCloudContentFromCloudStoreOrLocalStore:YES];
|
||||
if (buttonIndex_ == [alert_ firstOtherButtonIndex] + 1)
|
||||
[MPiOSConfig get].iCloudEnabled = @NO;
|
||||
}
|
||||
cancelTitle:[PearlStrings get].commonButtonBack
|
||||
otherTitles:@"Fix Anyway",
|
||||
@"Turn Off", nil];
|
||||
if (buttonIndex == [alert firstOtherButtonIndex] + 1)
|
||||
[MPiOSConfig get].iCloudEnabled = @NO;
|
||||
} cancelTitle:nil otherTitles:@"Fix Now", @"Turn Off", nil];
|
||||
}
|
||||
|
||||
#pragma mark - Crashlytics
|
||||
|
@ -107,7 +107,6 @@
|
||||
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 */; };
|
||||
DA3B844E190FC5DF00246EEA /* Crashlytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA3B844D190FC5DF00246EEA /* Crashlytics.framework */; };
|
||||
DA4425CC1557BED40052177D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
|
||||
DA44260A1557D9E40052177D /* libUbiquityStoreManager.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA4425CB1557BED40052177D /* libUbiquityStoreManager.a */; };
|
||||
DA4522441902355C008F650A /* icon_book.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD370C1711E29500CF925C /* icon_book.png */; };
|
||||
@ -118,6 +117,8 @@
|
||||
DA45224A190628A1008F650A /* icon_wrench@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD386B1711E29700CF925C /* icon_wrench@2x.png */; };
|
||||
DA45224B190628B2008F650A /* icon_gear.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD37821711E29500CF925C /* icon_gear.png */; };
|
||||
DA45224C190628B2008F650A /* icon_gear@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD37831711E29500CF925C /* icon_gear@2x.png */; };
|
||||
DA48856019A5A82E000C2D79 /* Crashlytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAA141191922FED80032B392 /* Crashlytics.framework */; };
|
||||
DA48856119A5AC1E000C2D79 /* libopensslcrypto-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAE8E65119867AB500416A0F /* libopensslcrypto-ios.a */; };
|
||||
DA4DA1D91564471A00F6F596 /* libjrswizzle.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC6326C148680650075AEA5 /* libjrswizzle.a */; };
|
||||
DA4DA1DA1564471F00F6F596 /* libuicolor-utilities.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC6325D1486805C0075AEA5 /* libuicolor-utilities.a */; };
|
||||
DA5A09DF171A70E4005284AB /* play.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5A09DD171A70E4005284AB /* play.png */; };
|
||||
@ -271,7 +272,6 @@
|
||||
DACA29BF1705E2DE002C6C22 /* UIColor+HSV.m in Sources */ = {isa = PBXBuildFile; fileRef = DACA29BB1705E2DE002C6C22 /* UIColor+HSV.m */; };
|
||||
DAD312C21552A22700A3F9ED /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = DAD312C01552A20800A3F9ED /* libsqlite3.dylib */; };
|
||||
DAE1EF2217E942DE00BC0086 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = DAE1EF2417E942DE00BC0086 /* Localizable.strings */; };
|
||||
DAE8E65219867AB500416A0F /* libopensslcrypto-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAE8E65119867AB500416A0F /* libopensslcrypto-ios.a */; };
|
||||
DAEBC45314F6364500987BF6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAEBC45214F6364500987BF6 /* QuartzCore.framework */; };
|
||||
DAEC85B518E3DD9A007FC0DF /* UIView+Touches.m in Sources */ = {isa = PBXBuildFile; fileRef = DAEC85B118E3DD9A007FC0DF /* UIView+Touches.m */; };
|
||||
DAEC85B618E3DD9A007FC0DF /* PearlUINavigationBar.m in Sources */ = {isa = PBXBuildFile; fileRef = DAEC85B218E3DD9A007FC0DF /* PearlUINavigationBar.m */; };
|
||||
@ -1349,6 +1349,7 @@
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
DA48856119A5AC1E000C2D79 /* libopensslcrypto-ios.a in Frameworks */,
|
||||
DAFC5691172C582A00CB5CC5 /* libInAppSettingsKit.a in Frameworks */,
|
||||
DA6701E016406BB400B61001 /* AdSupport.framework in Frameworks */,
|
||||
DA6701DE16406B7300B61001 /* Social.framework in Frameworks */,
|
||||
@ -1358,17 +1359,16 @@
|
||||
DABB981615100B4000B05417 /* SystemConfiguration.framework in Frameworks */,
|
||||
DA672D3014F9413D004A189C /* libPearl.a in Frameworks */,
|
||||
DA672D2F14F92C6B004A189C /* libz.dylib in Frameworks */,
|
||||
DAE8E65219867AB500416A0F /* libopensslcrypto-ios.a in Frameworks */,
|
||||
DAEBC45314F6364500987BF6 /* QuartzCore.framework in Frameworks */,
|
||||
DA95D5F214DF0B2C008D1B94 /* MessageUI.framework in Frameworks */,
|
||||
DA04E33E14B1E70400ECA4F3 /* MobileCoreServices.framework in Frameworks */,
|
||||
DA48856019A5A82E000C2D79 /* Crashlytics.framework in Frameworks */,
|
||||
DAC632891486D9690075AEA5 /* Security.framework in Frameworks */,
|
||||
DA5BFA49147E415C00F98B1E /* UIKit.framework in Frameworks */,
|
||||
DA5BFA4B147E415C00F98B1E /* Foundation.framework in Frameworks */,
|
||||
DA5BFA4D147E415C00F98B1E /* CoreGraphics.framework in Frameworks */,
|
||||
DA5BFA4F147E415C00F98B1E /* CoreData.framework in Frameworks */,
|
||||
93D399433EA75E50656040CB /* Twitter.framework in Frameworks */,
|
||||
DA3B844E190FC5DF00246EEA /* Crashlytics.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -3449,10 +3449,6 @@
|
||||
GCC_WARN_UNUSED_VALUE = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(inherit)",
|
||||
"\"$(SRCROOT)/../../../External\"/**",
|
||||
);
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
OTHER_LDFLAGS = "-ObjC";
|
||||
PRODUCT_NAME = "${TARGET_NAME}";
|
||||
@ -3532,10 +3528,6 @@
|
||||
GCC_WARN_UNUSED_VALUE = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(inherit)",
|
||||
"\"$(SRCROOT)/../../../External\"/**",
|
||||
);
|
||||
OTHER_LDFLAGS = "-ObjC";
|
||||
PRODUCT_NAME = "${TARGET_NAME}";
|
||||
RUN_CLANG_STATIC_ANALYZER = YES;
|
||||
@ -3556,12 +3548,13 @@
|
||||
CODE_SIGN_ENTITLEMENTS = MasterPassword.entitlements;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
/Users/lhunath/Documents/workspace/lyndir/MasterPassword/External/iOS,
|
||||
"\"$(SRCROOT)/../../../External/iOS\"",
|
||||
);
|
||||
GCC_PREFIX_HEADER = "MasterPassword-Prefix.pch";
|
||||
INFOPLIST_FILE = "MasterPassword-Info.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"\"$(SRCROOT)/../../../External/Pearl/Pearl-Crypto/lib\"",
|
||||
"$(inherited)",
|
||||
"/Users/lhunath/Documents/workspace/lyndir/MasterPassword/External/Pearl/Pearl-Crypto/lib",
|
||||
);
|
||||
@ -3588,12 +3581,13 @@
|
||||
EXCLUDED_SOURCE_FILE_NAMES = libDCIntrospect.a;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
/Users/lhunath/Documents/workspace/lyndir/MasterPassword/External/iOS,
|
||||
"\"$(SRCROOT)/../../../External/iOS\"",
|
||||
);
|
||||
GCC_PREFIX_HEADER = "MasterPassword-Prefix.pch";
|
||||
INFOPLIST_FILE = "MasterPassword-Info.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"\"$(SRCROOT)/../../../External/Pearl/Pearl-Crypto/lib\"",
|
||||
"$(inherited)",
|
||||
"/Users/lhunath/Documents/workspace/lyndir/MasterPassword/External/Pearl/Pearl-Crypto/lib",
|
||||
);
|
||||
@ -3674,10 +3668,6 @@
|
||||
GCC_WARN_UNUSED_VALUE = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(inherit)",
|
||||
"\"$(SRCROOT)/../../../External\"/**",
|
||||
);
|
||||
OTHER_LDFLAGS = "-ObjC";
|
||||
PRODUCT_NAME = "${TARGET_NAME}";
|
||||
RUN_CLANG_STATIC_ANALYZER = YES;
|
||||
@ -3700,12 +3690,13 @@
|
||||
EXCLUDED_SOURCE_FILE_NAMES = libDCIntrospect.a;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
/Users/lhunath/Documents/workspace/lyndir/MasterPassword/External/iOS,
|
||||
"\"$(SRCROOT)/../../../External/iOS\"",
|
||||
);
|
||||
GCC_PREFIX_HEADER = "MasterPassword-Prefix.pch";
|
||||
INFOPLIST_FILE = "MasterPassword-Info.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"\"$(SRCROOT)/../../../External/Pearl/Pearl-Crypto/lib\"",
|
||||
"$(inherited)",
|
||||
"/Users/lhunath/Documents/workspace/lyndir/MasterPassword/External/Pearl/Pearl-Crypto/lib",
|
||||
);
|
||||
@ -3723,7 +3714,10 @@
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
DSTROOT = /tmp/Pearl.dst;
|
||||
GCC_PREFIX_HEADER = "../Pearl/Pearl-Prefix.pch";
|
||||
OTHER_LDFLAGS = "-ObjC";
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"\"$(SRCROOT)/../../../External/Pearl/Pearl-Crypto/lib\"",
|
||||
"$(inherited)",
|
||||
);
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PUBLIC_HEADERS_FOLDER_PATH = "../../BuildProductsPath/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/include";
|
||||
SKIP_INSTALL = YES;
|
||||
@ -3808,7 +3802,10 @@
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
DSTROOT = /tmp/Pearl.dst;
|
||||
GCC_PREFIX_HEADER = "../Pearl/Pearl-Prefix.pch";
|
||||
OTHER_LDFLAGS = "-ObjC";
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"\"$(SRCROOT)/../../../External/Pearl/Pearl-Crypto/lib\"",
|
||||
"$(inherited)",
|
||||
);
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PUBLIC_HEADERS_FOLDER_PATH = include;
|
||||
SKIP_INSTALL = YES;
|
||||
@ -3821,7 +3818,10 @@
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
DSTROOT = /tmp/Pearl.dst;
|
||||
GCC_PREFIX_HEADER = "../Pearl/Pearl-Prefix.pch";
|
||||
OTHER_LDFLAGS = "-ObjC";
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"\"$(SRCROOT)/../../../External/Pearl/Pearl-Crypto/lib\"",
|
||||
"$(inherited)",
|
||||
);
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PUBLIC_HEADERS_FOLDER_PATH = "../../BuildProductsPath/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/include";
|
||||
SKIP_INSTALL = YES;
|
||||
|
@ -2108,130 +2108,13 @@ CgoKCgoKCgoKCgoKCg
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
<connections>
|
||||
<segue destination="qhJ-iI-EZA" kind="relationship" relationship="rootViewController" id="OAp-eP-WpD"/>
|
||||
<segue destination="7cx-iG-3ol" kind="relationship" relationship="rootViewController" id="6rw-Ba-P0D"/>
|
||||
</connections>
|
||||
</navigationController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="sCQ-j4-a2p" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="813" y="2672"/>
|
||||
</scene>
|
||||
<!--Setup View Controller - iCloud-->
|
||||
<scene sceneID="sB2-sT-bJO">
|
||||
<objects>
|
||||
<viewController id="qhJ-iI-EZA" customClass="MPSetupViewController" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="npQ-Xj-fxC"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="5KX-6p-eQz"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="CyM-rG-rOH">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="center" image="background.png" translatesAutoresizingMaskIntoConstraints="NO" id="ou1-MG-6If">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
</imageView>
|
||||
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hxU-3i-hPR">
|
||||
<rect key="frame" x="0.0" y="64" width="320" height="504"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="top" image="cloud.png" translatesAutoresizingMaskIntoConstraints="NO" id="ano-Dt-se5">
|
||||
<rect key="frame" x="108" y="20" width="105" height="80"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
</imageView>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Enable iCloud?" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eC1-NU-fVL">
|
||||
<rect key="frame" x="20" y="108" width="277" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" usesAttributedText="YES" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="277" translatesAutoresizingMaskIntoConstraints="NO" id="tco-oc-EfM">
|
||||
<rect key="frame" x="20" y="137" width="277" height="262"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<attributedString key="attributedText">
|
||||
<fragment>
|
||||
<string key="content">Enabling iCloud will keep all your iPhones, iPads and Macs nicely in-sync. Any site you add on this device will automatically appear on all your others as well.
|
||||
|
||||
</string>
|
||||
<attributes>
|
||||
<color key="NSBackgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="calibratedRGB"/>
|
||||
<color key="NSColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<font key="NSFont" size="14" name="HelveticaNeue"/>
|
||||
<paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural"/>
|
||||
</attributes>
|
||||
</fragment>
|
||||
<fragment content="Note: some people have reported iCloud can be unreliable">
|
||||
<attributes>
|
||||
<color key="NSBackgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="calibratedRGB"/>
|
||||
<color key="NSColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<font key="NSFont" size="14" name="HelveticaNeue-Bold"/>
|
||||
<paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural"/>
|
||||
</attributes>
|
||||
</fragment>
|
||||
<fragment>
|
||||
<string key="content">. Even without iCloud your generated passwords will be available from any device you add your user to. iCloud mainly serves to keep the list of sites you use updated across devices.
|
||||
|
||||
Only site names and personal passwords are sent to iCloud. Passwords are encrypted with your master password and unreadable by anyone else.</string>
|
||||
<attributes>
|
||||
<color key="NSBackgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="calibratedRGB"/>
|
||||
<color key="NSColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<font key="NSFont" size="14" name="HelveticaNeue"/>
|
||||
<paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural"/>
|
||||
</attributes>
|
||||
</fragment>
|
||||
</attributedString>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<switch opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="adu-Cl-cW3">
|
||||
<rect key="frame" x="136" y="433" width="51" height="31"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<color key="onTintColor" red="0.37254901959999998" green="0.3921568627" blue="0.42745098040000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||
</switch>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="centerX" secondItem="ano-Dt-se5" secondAttribute="centerX" id="0jx-hf-dBP"/>
|
||||
<constraint firstAttribute="centerX" secondItem="adu-Cl-cW3" secondAttribute="centerX" constant="-0.5" id="Ck0-pS-M1Q"/>
|
||||
<constraint firstAttribute="trailing" secondItem="eC1-NU-fVL" secondAttribute="trailing" constant="20" symbolic="YES" id="Czl-bU-uLI"/>
|
||||
<constraint firstItem="ano-Dt-se5" firstAttribute="top" secondItem="hxU-3i-hPR" secondAttribute="top" constant="20" symbolic="YES" id="FAQ-Uc-Xre"/>
|
||||
<constraint firstItem="tco-oc-EfM" firstAttribute="leading" secondItem="hxU-3i-hPR" secondAttribute="leading" constant="20" symbolic="YES" id="Fso-di-GK9"/>
|
||||
<constraint firstItem="adu-Cl-cW3" firstAttribute="top" relation="greaterThanOrEqual" secondItem="tco-oc-EfM" secondAttribute="bottom" constant="8" symbolic="YES" id="U0w-Ty-idK"/>
|
||||
<constraint firstItem="eC1-NU-fVL" firstAttribute="top" secondItem="ano-Dt-se5" secondAttribute="bottom" constant="8" symbolic="YES" id="aKA-EK-Gw6"/>
|
||||
<constraint firstItem="tco-oc-EfM" firstAttribute="top" secondItem="eC1-NU-fVL" secondAttribute="bottom" constant="8" symbolic="YES" id="ab4-pX-8S8"/>
|
||||
<constraint firstAttribute="bottom" secondItem="adu-Cl-cW3" secondAttribute="bottom" constant="20" symbolic="YES" id="cFW-t7-AXE"/>
|
||||
<constraint firstItem="eC1-NU-fVL" firstAttribute="leading" secondItem="hxU-3i-hPR" secondAttribute="leading" constant="20" symbolic="YES" id="gRb-lQ-VTq"/>
|
||||
<constraint firstAttribute="trailing" secondItem="tco-oc-EfM" secondAttribute="trailing" constant="20" symbolic="YES" id="h1K-gS-Tb2"/>
|
||||
</constraints>
|
||||
</scrollView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="5KX-6p-eQz" firstAttribute="top" secondItem="adu-Cl-cW3" secondAttribute="bottom" priority="250" constant="40" id="Jci-LV-6Wc"/>
|
||||
<constraint firstAttribute="trailing" secondItem="hxU-3i-hPR" secondAttribute="trailing" id="Pd0-9H-coF"/>
|
||||
<constraint firstItem="5KX-6p-eQz" firstAttribute="top" secondItem="hxU-3i-hPR" secondAttribute="bottom" id="SCA-yI-frG"/>
|
||||
<constraint firstAttribute="bottom" secondItem="ou1-MG-6If" secondAttribute="bottom" id="hc4-Ui-yJd"/>
|
||||
<constraint firstItem="ou1-MG-6If" firstAttribute="top" secondItem="CyM-rG-rOH" secondAttribute="top" id="i18-Ra-ta6"/>
|
||||
<constraint firstAttribute="trailing" secondItem="ou1-MG-6If" secondAttribute="trailing" id="mXl-1W-w9f"/>
|
||||
<constraint firstItem="hxU-3i-hPR" firstAttribute="top" secondItem="npQ-Xj-fxC" secondAttribute="bottom" id="n2N-CG-eG8"/>
|
||||
<constraint firstItem="hxU-3i-hPR" firstAttribute="leading" secondItem="CyM-rG-rOH" secondAttribute="leading" id="vUc-x5-mkA"/>
|
||||
<constraint firstItem="ou1-MG-6If" firstAttribute="leading" secondItem="CyM-rG-rOH" secondAttribute="leading" id="zzg-9R-bUr"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" title="iCloud" id="D4X-G1-wsv">
|
||||
<barButtonItem key="rightBarButtonItem" title="Next" id="RuR-JL-6Rb">
|
||||
<connections>
|
||||
<segue destination="7cx-iG-3ol" kind="push" id="Zri-0I-HDm"/>
|
||||
</connections>
|
||||
</barButtonItem>
|
||||
</navigationItem>
|
||||
<connections>
|
||||
<outlet property="cloudSwitch" destination="adu-Cl-cW3" id="rnS-TH-6Jp"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="wjk-3M-08S" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1350" y="2672"/>
|
||||
</scene>
|
||||
<!--Setup View Controller - Security-->
|
||||
<scene sceneID="GSG-87-pnH">
|
||||
<objects>
|
||||
@ -2324,7 +2207,7 @@ However, it means that anyone who finds your device unlocked can do the same.</s
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="HhJ-mB-A8g" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1887" y="2672"/>
|
||||
<point key="canvasLocation" x="1350" y="2672"/>
|
||||
</scene>
|
||||
<!--Setup View Controller - About-->
|
||||
<scene sceneID="p3O-pB-vAg">
|
||||
@ -2505,7 +2388,7 @@ See </string>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="xht-w2-261" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="2424" y="2672"/>
|
||||
<point key="canvasLocation" x="1887" y="2672"/>
|
||||
</scene>
|
||||
<!--View Controller-->
|
||||
<scene sceneID="D1h-xG-jy2">
|
||||
@ -2529,7 +2412,6 @@ See </string>
|
||||
<resources>
|
||||
<image name="avatar-0.png" width="110" height="110"/>
|
||||
<image name="background.png" width="568" height="568"/>
|
||||
<image name="cloud.png" width="105" height="80"/>
|
||||
<image name="icon_book.png" width="32" height="32"/>
|
||||
<image name="icon_cancel.png" width="32" height="32"/>
|
||||
<image name="icon_edit.png" width="32" height="32"/>
|
||||
@ -2557,6 +2439,6 @@ See </string>
|
||||
</simulatedMetricsContainer>
|
||||
<inferredMetricsTieBreakers>
|
||||
<segue reference="GZk-I4-JyH"/>
|
||||
<segue reference="Ql4-wf-T8u"/>
|
||||
<segue reference="k2G-nL-x3l"/>
|
||||
</inferredMetricsTieBreakers>
|
||||
</document>
|
||||
|
Loading…
Reference in New Issue
Block a user