2
0

Deprecate iCloud and remove hardcoded absolute paths from lib dirs.

This commit is contained in:
Maarten Billemont 2014-08-21 00:30:38 -04:00
parent adc79d331b
commit cf52221175
15 changed files with 175 additions and 287 deletions

Binary file not shown.

View File

@ -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;

View File

@ -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),
}];

View File

@ -20,7 +20,6 @@
@interface MPSetupViewController : UIViewController
@property(weak, nonatomic) IBOutlet UISwitch *cloudSwitch;
@property(weak, nonatomic) IBOutlet UISwitch *rememberLoginSwitch;
- (IBAction)close:(UIBarButtonItem *)sender;

View File

@ -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);
}

View File

@ -367,7 +367,8 @@
if (buttonIndex_ == [alert_ firstOtherButtonIndex] + 1)
// Show Passwords
[self showExportRevealPasswords:YES forVC:viewController];
} cancelTitle:[PearlStrings get].commonButtonCancel otherTitles:@"Safe Export", @"Show Passwords", nil];
} cancelTitle:[PearlStrings get].commonButtonCancel otherTitles:@"Safe Export", @"Show Passwords",
nil];
} cancelTitle:@"Cancel" otherTitles:@"Export Sites", 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

View File

@ -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;

View File

@ -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>