Show guide only first time + improved guide docs.
							
								
								
									
										
											BIN
										
									
								
								Default@2x.png
									
									
									
									
									
								
							
							
						
						| 
		 Before Width: | Height: | Size: 133 KiB After Width: | Height: | Size: 502 KiB  | 
							
								
								
									
										2
									
								
								External/Pearl
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						@@ -15,6 +15,8 @@
 | 
			
		||||
		DA34DA0D14B1BC7D00F721C1 /* OPElementStoredEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = DA34DA0C14B1BC7D00F721C1 /* OPElementStoredEntity.m */; };
 | 
			
		||||
		DA34DA1114B1BC7E00F721C1 /* OPElementEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = DA34DA1014B1BC7E00F721C1 /* OPElementEntity.m */; };
 | 
			
		||||
		DA34DA1614B1BEA100F721C1 /* OPTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = DA34DA1514B1BEA100F721C1 /* OPTypes.m */; };
 | 
			
		||||
		DA41A40B14DB3BF100638533 /* guide_page_0.png in Resources */ = {isa = PBXBuildFile; fileRef = DA41A40914DB3BF100638533 /* guide_page_0.png */; };
 | 
			
		||||
		DA41A40C14DB3BF100638533 /* guide_page_0@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA41A40A14DB3BF100638533 /* guide_page_0@2x.png */; };
 | 
			
		||||
		DA55B29E14B38272001131B7 /* OPContentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA55B29D14B38272001131B7 /* OPContentViewController.m */; };
 | 
			
		||||
		DA55B2A214B4EB47001131B7 /* OPSearchDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DA55B2A114B4EB46001131B7 /* OPSearchDelegate.m */; };
 | 
			
		||||
		DA5BFA49147E415C00F98B1E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA48147E415C00F98B1E /* UIKit.framework */; };
 | 
			
		||||
@@ -706,6 +708,8 @@
 | 
			
		||||
		DA34DA1014B1BC7E00F721C1 /* OPElementEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OPElementEntity.m; sourceTree = "<group>"; };
 | 
			
		||||
		DA34DA1414B1BEA100F721C1 /* OPTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OPTypes.h; sourceTree = "<group>"; };
 | 
			
		||||
		DA34DA1514B1BEA100F721C1 /* OPTypes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OPTypes.m; sourceTree = "<group>"; };
 | 
			
		||||
		DA41A40914DB3BF100638533 /* guide_page_0.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = guide_page_0.png; sourceTree = "<group>"; };
 | 
			
		||||
		DA41A40A14DB3BF100638533 /* guide_page_0@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "guide_page_0@2x.png"; sourceTree = "<group>"; };
 | 
			
		||||
		DA55B29C14B38272001131B7 /* OPContentViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OPContentViewController.h; sourceTree = "<group>"; };
 | 
			
		||||
		DA55B29D14B38272001131B7 /* OPContentViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OPContentViewController.m; sourceTree = "<group>"; };
 | 
			
		||||
		DA55B2A014B4EB46001131B7 /* OPSearchDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OPSearchDelegate.h; sourceTree = "<group>"; };
 | 
			
		||||
@@ -1860,12 +1864,14 @@
 | 
			
		||||
		DA6556F714D730B700841C99 /* Guide */ = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
				DA41A40A14DB3BF100638533 /* guide_page_0@2x.png */,
 | 
			
		||||
				DA65570714D760BD00841C99 /* guide_page_1@2x.png */,
 | 
			
		||||
				DA65570814D760BD00841C99 /* guide_page_2@2x.png */,
 | 
			
		||||
				DA65570914D760BD00841C99 /* guide_page_3@2x.png */,
 | 
			
		||||
				DA65570A14D760BD00841C99 /* guide_page_4@2x.png */,
 | 
			
		||||
				DA65570B14D760BD00841C99 /* guide_page_5@2x.png */,
 | 
			
		||||
				DA65570C14D760BD00841C99 /* guide_page_6@2x.png */,
 | 
			
		||||
				DA41A40914DB3BF100638533 /* guide_page_0.png */,
 | 
			
		||||
				DA6556F814D730B700841C99 /* guide_page_1.png */,
 | 
			
		||||
				DA6556F914D730B700841C99 /* guide_page_2.png */,
 | 
			
		||||
				DA6556FA14D730B700841C99 /* guide_page_3.png */,
 | 
			
		||||
@@ -2317,9 +2323,9 @@
 | 
			
		||||
/* End PBXHeadersBuildPhase section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXNativeTarget section */
 | 
			
		||||
		DA5BFA43147E415C00F98B1E /* OnePassword */ = {
 | 
			
		||||
		DA5BFA43147E415C00F98B1E /* MasterPassword */ = {
 | 
			
		||||
			isa = PBXNativeTarget;
 | 
			
		||||
			buildConfigurationList = DA5BFA6D147E415C00F98B1E /* Build configuration list for PBXNativeTarget "OnePassword" */;
 | 
			
		||||
			buildConfigurationList = DA5BFA6D147E415C00F98B1E /* Build configuration list for PBXNativeTarget "MasterPassword" */;
 | 
			
		||||
			buildPhases = (
 | 
			
		||||
				DA5BFA40147E415C00F98B1E /* Sources */,
 | 
			
		||||
				DA5BFA41147E415C00F98B1E /* Frameworks */,
 | 
			
		||||
@@ -2331,7 +2337,7 @@
 | 
			
		||||
			dependencies = (
 | 
			
		||||
				DAC63282148681190075AEA5 /* PBXTargetDependency */,
 | 
			
		||||
			);
 | 
			
		||||
			name = OnePassword;
 | 
			
		||||
			name = MasterPassword;
 | 
			
		||||
			productName = OnePassword;
 | 
			
		||||
			productReference = DA5BFA44147E415C00F98B1E /* OnePassword.app */;
 | 
			
		||||
			productType = "com.apple.product-type.application";
 | 
			
		||||
@@ -2412,7 +2418,7 @@
 | 
			
		||||
			projectDirPath = "";
 | 
			
		||||
			projectRoot = "";
 | 
			
		||||
			targets = (
 | 
			
		||||
				DA5BFA43147E415C00F98B1E /* OnePassword */,
 | 
			
		||||
				DA5BFA43147E415C00F98B1E /* MasterPassword */,
 | 
			
		||||
				DAC77CAC148291A600BCF976 /* Pearl */,
 | 
			
		||||
				DAC6325C1486805C0075AEA5 /* uicolor-utilities */,
 | 
			
		||||
				DAC6326B148680650075AEA5 /* jrswizzle */,
 | 
			
		||||
@@ -2984,6 +2990,8 @@
 | 
			
		||||
				DA65571014D760BD00841C99 /* guide_page_4@2x.png in Resources */,
 | 
			
		||||
				DA65571114D760BD00841C99 /* guide_page_5@2x.png in Resources */,
 | 
			
		||||
				DA65571214D760BD00841C99 /* guide_page_6@2x.png in Resources */,
 | 
			
		||||
				DA41A40B14DB3BF100638533 /* guide_page_0.png in Resources */,
 | 
			
		||||
				DA41A40C14DB3BF100638533 /* guide_page_0@2x.png in Resources */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
@@ -3281,7 +3289,7 @@
 | 
			
		||||
			defaultConfigurationIsVisible = 0;
 | 
			
		||||
			defaultConfigurationName = Release;
 | 
			
		||||
		};
 | 
			
		||||
		DA5BFA6D147E415C00F98B1E /* Build configuration list for PBXNativeTarget "OnePassword" */ = {
 | 
			
		||||
		DA5BFA6D147E415C00F98B1E /* Build configuration list for PBXNativeTarget "MasterPassword" */ = {
 | 
			
		||||
			isa = XCConfigurationList;
 | 
			
		||||
			buildConfigurations = (
 | 
			
		||||
				DA5BFA6E147E415C00F98B1E /* Debug */,
 | 
			
		||||
 
 | 
			
		||||
@@ -346,7 +346,7 @@ The passwords aren't saved anywhere.  This is a major advantage: if you loose yo
 | 
			
		||||
                                    </imageView>
 | 
			
		||||
                                    <imageView userInteractionEnabled="NO" alpha="0.80000000000000004" contentMode="scaleToFill" image="ui_panel_container.png" id="0Yh-Py-lB6">
 | 
			
		||||
                                        <rect key="frame" x="11" y="20" width="298" height="87"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                        <rect key="contentStretch" x="0.050000000000000003" y="0.10000000000000001" width="0.89999999999999991" height="0.79999999999999982"/>
 | 
			
		||||
                                    </imageView>
 | 
			
		||||
                                    <imageView userInteractionEnabled="NO" alpha="0.80000001192092896" contentMode="scaleToFill" image="ui_panel_display.png" id="cw7-HD-Wht">
 | 
			
		||||
@@ -625,32 +625,36 @@ L4m3P4sSw0rD</string>
 | 
			
		||||
                                <rect key="frame" x="0.0" y="0.0" width="320" height="460"/>
 | 
			
		||||
                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
			
		||||
                                <subviews>
 | 
			
		||||
                                    <imageView userInteractionEnabled="NO" contentMode="bottom" image="guide_page_1.png" id="eJP-cS-VRU">
 | 
			
		||||
                                    <imageView userInteractionEnabled="NO" contentMode="bottom" image="guide_page_0.png" id="eJP-cS-VRU">
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="0.0" width="320" height="460"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                    </imageView>
 | 
			
		||||
                                    <imageView userInteractionEnabled="NO" contentMode="bottom" image="guide_page_2.png" id="1J9-z9-h96">
 | 
			
		||||
                                    <imageView userInteractionEnabled="NO" contentMode="bottom" image="guide_page_1.png" id="1J9-z9-h96">
 | 
			
		||||
                                        <rect key="frame" x="320" y="0.0" width="320" height="460"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                    </imageView>
 | 
			
		||||
                                    <imageView userInteractionEnabled="NO" contentMode="bottom" image="guide_page_3.png" id="8kf-Wm-F3L">
 | 
			
		||||
                                    <imageView userInteractionEnabled="NO" contentMode="bottom" image="guide_page_2.png" id="8kf-Wm-F3L">
 | 
			
		||||
                                        <rect key="frame" x="640" y="0.0" width="320" height="460"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                    </imageView>
 | 
			
		||||
                                    <imageView userInteractionEnabled="NO" contentMode="bottom" image="guide_page_4.png" id="H5W-P4-o7O">
 | 
			
		||||
                                    <imageView userInteractionEnabled="NO" contentMode="bottom" image="guide_page_3.png" id="H5W-P4-o7O">
 | 
			
		||||
                                        <rect key="frame" x="960" y="0.0" width="320" height="460"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                    </imageView>
 | 
			
		||||
                                    <imageView userInteractionEnabled="NO" contentMode="bottom" image="guide_page_5.png" id="IXz-T9-Umi">
 | 
			
		||||
                                    <imageView userInteractionEnabled="NO" contentMode="bottom" image="guide_page_4.png" id="IXz-T9-Umi">
 | 
			
		||||
                                        <rect key="frame" x="1280" y="0.0" width="320" height="460"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                    </imageView>
 | 
			
		||||
                                    <imageView userInteractionEnabled="NO" contentMode="bottom" image="guide_page_6.png" id="Hd0-Or-naq">
 | 
			
		||||
                                    <imageView userInteractionEnabled="NO" contentMode="bottom" image="guide_page_5.png" id="Hd0-Or-naq">
 | 
			
		||||
                                        <rect key="frame" x="1280" y="0.0" width="320" height="460"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                    </imageView>
 | 
			
		||||
                                    <imageView userInteractionEnabled="NO" contentMode="bottom" image="guide_page_6.png" id="1jq-Ic-GVZ">
 | 
			
		||||
                                        <rect key="frame" x="1600" y="0.0" width="320" height="460"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                    </imageView>
 | 
			
		||||
                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" reversesTitleShadowWhenHighlighted="YES" lineBreakMode="middleTruncation" id="q93-J1-auj">
 | 
			
		||||
                                        <rect key="frame" x="1290" y="394" width="300" height="46"/>
 | 
			
		||||
                                        <rect key="frame" x="1610" y="394" width="300" height="46"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                        <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
 | 
			
		||||
                                        <size key="titleShadowOffset" width="0.0" height="1"/>
 | 
			
		||||
@@ -700,6 +704,7 @@ L4m3P4sSw0rD</string>
 | 
			
		||||
    <resources>
 | 
			
		||||
        <image name="Content-Backdrop.png" width="480" height="480"/>
 | 
			
		||||
        <image name="Square-bottom.png" width="551" height="58"/>
 | 
			
		||||
        <image name="guide_page_0.png" width="320" height="480"/>
 | 
			
		||||
        <image name="guide_page_1.png" width="320" height="480"/>
 | 
			
		||||
        <image name="guide_page_2.png" width="320" height="480"/>
 | 
			
		||||
        <image name="guide_page_3.png" width="320" height="480"/>
 | 
			
		||||
 
 | 
			
		||||
@@ -121,7 +121,7 @@
 | 
			
		||||
}
 | 
			
		||||
- (void)applicationDidBecomeActive:(UIApplication *)application {
 | 
			
		||||
    
 | 
			
		||||
    if ([[OPConfig get].firstRun boolValue])
 | 
			
		||||
    if ([[OPConfig get].showQuickstart boolValue])
 | 
			
		||||
        [self showGuide];
 | 
			
		||||
    else
 | 
			
		||||
        [self loadKeyPhrase];
 | 
			
		||||
 
 | 
			
		||||
@@ -13,6 +13,7 @@
 | 
			
		||||
@property (nonatomic, retain) NSNumber *rememberKeyPhrase;
 | 
			
		||||
@property (nonatomic, retain) NSNumber *forgetKeyPhrase;
 | 
			
		||||
@property (nonatomic, retain) NSNumber *helpHidden;
 | 
			
		||||
@property (nonatomic, retain) NSNumber *showQuickstart;
 | 
			
		||||
 | 
			
		||||
+ (OPConfig *)get;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@
 | 
			
		||||
 | 
			
		||||
@implementation OPConfig
 | 
			
		||||
 | 
			
		||||
@dynamic dataStoreError, storeKeyPhrase, rememberKeyPhrase, forgetKeyPhrase, helpHidden;
 | 
			
		||||
@dynamic dataStoreError, storeKeyPhrase, rememberKeyPhrase, forgetKeyPhrase, helpHidden, showQuickstart;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- (id)init {
 | 
			
		||||
@@ -24,6 +24,7 @@
 | 
			
		||||
                                     [NSNumber numberWithBool:YES],                                 NSStringFromSelector(@selector(rememberKeyPhrase)),
 | 
			
		||||
                                     [NSNumber numberWithBool:NO],                                  NSStringFromSelector(@selector(forgetKeyPhrase)),
 | 
			
		||||
                                     [NSNumber numberWithBool:NO],                                  NSStringFromSelector(@selector(helpHidden)),
 | 
			
		||||
                                     [NSNumber numberWithBool:YES],                                  NSStringFromSelector(@selector(showQuickstart)),
 | 
			
		||||
                                     nil]];
 | 
			
		||||
    
 | 
			
		||||
    return self;
 | 
			
		||||
 
 | 
			
		||||
@@ -28,6 +28,7 @@
 | 
			
		||||
    
 | 
			
		||||
    [super viewWillDisappear:animated];
 | 
			
		||||
    
 | 
			
		||||
    [OPConfig get].showQuickstart = [NSNumber numberWithBool:NO];
 | 
			
		||||
    [[OPAppDelegate get] loadKeyPhrase];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -76,7 +76,7 @@
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)viewWillDisappear:(BOOL)animated {
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    [super viewWillDisappear:animated];
 | 
			
		||||
    
 | 
			
		||||
    self.searchTipContainer.hidden = YES;
 | 
			
		||||
@@ -85,10 +85,11 @@
 | 
			
		||||
- (void)viewDidLoad {
 | 
			
		||||
    
 | 
			
		||||
    // Put the search tip on the window so it's above the nav bar.
 | 
			
		||||
//    [self.searchTipContainer removeFromSuperview];
 | 
			
		||||
//    [[UIApplication sharedApplication].keyWindow addSubview:self.searchTipContainer];
 | 
			
		||||
//    self.searchTipContainer.frame = CGRectSetY(self.searchTipContainer.frame, self.searchTipContainer.frame.origin.y
 | 
			
		||||
//                                               + self.navigationController.navigationBar.frame.size.height /* Nav */ + 20 /* Status */);
 | 
			
		||||
    CGRect newFrame = [self.navigationController.navigationBar convertRect:self.searchTipContainer.frame
 | 
			
		||||
                                                                  fromView:self.searchTipContainer.superview];
 | 
			
		||||
    [self.searchTipContainer removeFromSuperview];
 | 
			
		||||
    [self.navigationController.navigationBar addSubview:self.searchTipContainer];
 | 
			
		||||
    self.searchTipContainer.frame = newFrame;
 | 
			
		||||
    self.searchTipContainer.hidden = YES;
 | 
			
		||||
    
 | 
			
		||||
    // Because IB's edit button doesn't auto-toggle self.editable like editButtonItem does.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								OnePassword/Resources/Guide/guide_page_0.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 98 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								OnePassword/Resources/Guide/guide_page_0@2x.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 247 KiB  | 
| 
		 Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 130 KiB  | 
| 
		 Before Width: | Height: | Size: 254 KiB After Width: | Height: | Size: 331 KiB  | 
| 
		 Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 112 KiB  | 
| 
		 Before Width: | Height: | Size: 338 KiB After Width: | Height: | Size: 279 KiB  | 
| 
		 Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 105 KiB  | 
| 
		 Before Width: | Height: | Size: 184 KiB After Width: | Height: | Size: 262 KiB  | 
| 
		 Before Width: | Height: | Size: 147 KiB After Width: | Height: | Size: 145 KiB  | 
| 
		 Before Width: | Height: | Size: 399 KiB After Width: | Height: | Size: 412 KiB  | 
| 
		 Before Width: | Height: | Size: 141 KiB After Width: | Height: | Size: 128 KiB  | 
| 
		 Before Width: | Height: | Size: 400 KiB After Width: | Height: | Size: 354 KiB  | 
| 
		 Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 141 KiB  | 
| 
		 Before Width: | Height: | Size: 255 KiB After Width: | Height: | Size: 369 KiB  | 
@@ -96,6 +96,22 @@
 | 
			
		||||
			<key>Type</key>
 | 
			
		||||
			<string>PSToggleSwitchSpecifier</string>
 | 
			
		||||
		</dict>
 | 
			
		||||
		<dict>
 | 
			
		||||
			<key>Type</key>
 | 
			
		||||
			<string>PSGroupSpecifier</string>
 | 
			
		||||
			<key>Title</key>
 | 
			
		||||
			<string>Usability</string>
 | 
			
		||||
		</dict>
 | 
			
		||||
		<dict>
 | 
			
		||||
			<key>Type</key>
 | 
			
		||||
			<string>PSToggleSwitchSpecifier</string>
 | 
			
		||||
			<key>Title</key>
 | 
			
		||||
			<string>Show Quickstart</string>
 | 
			
		||||
			<key>Key</key>
 | 
			
		||||
			<string>showQuickstart</string>
 | 
			
		||||
			<key>DefaultValue</key>
 | 
			
		||||
			<true/>
 | 
			
		||||
		</dict>
 | 
			
		||||
	</array>
 | 
			
		||||
	<key>StringsTable</key>
 | 
			
		||||
	<string>Root</string>
 | 
			
		||||
 
 | 
			
		||||