Artwork + copying of password.
							
								
								
									
										
											BIN
										
									
								
								Default.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 63 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Default@2x.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 133 KiB  | 
@@ -27,6 +27,8 @@
 | 
			
		||||
		DA5BFA61147E415C00F98B1E /* MainStoryboard_iPad.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DA5BFA5F147E415C00F98B1E /* MainStoryboard_iPad.storyboard */; };
 | 
			
		||||
		DA5BFA64147E415C00F98B1E /* OnePassword.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = DA5BFA62147E415C00F98B1E /* OnePassword.xcdatamodeld */; };
 | 
			
		||||
		DA5BFA67147E415C00F98B1E /* OPMainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5BFA66147E415C00F98B1E /* OPMainViewController.m */; };
 | 
			
		||||
		DA5DB7A614BE4B19002DD256 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5DB7A514BE4B19002DD256 /* Default.png */; };
 | 
			
		||||
		DA5DB7A814BE4B4B002DD256 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5DB7A714BE4B4B002DD256 /* Default@2x.png */; };
 | 
			
		||||
		DA7C28C414AF078900491972 /* Bold_Lines.png in Resources */ = {isa = PBXBuildFile; fileRef = DA7C28A514AF078900491972 /* Bold_Lines.png */; };
 | 
			
		||||
		DA7C28C514AF078900491972 /* Box.png in Resources */ = {isa = PBXBuildFile; fileRef = DA7C28A614AF078900491972 /* Box.png */; };
 | 
			
		||||
		DA7C28C614AF078900491972 /* Dashed_Divider.png in Resources */ = {isa = PBXBuildFile; fileRef = DA7C28A714AF078900491972 /* Dashed_Divider.png */; };
 | 
			
		||||
@@ -58,6 +60,12 @@
 | 
			
		||||
		DA7C28E014AF078900491972 /* Smooth_Divider.png in Resources */ = {isa = PBXBuildFile; fileRef = DA7C28C114AF078900491972 /* Smooth_Divider.png */; };
 | 
			
		||||
		DA7C28E114AF078900491972 /* Square.png in Resources */ = {isa = PBXBuildFile; fileRef = DA7C28C214AF078900491972 /* Square.png */; };
 | 
			
		||||
		DA7C28E214AF078900491972 /* White_Rectangular.png in Resources */ = {isa = PBXBuildFile; fileRef = DA7C28C314AF078900491972 /* White_Rectangular.png */; };
 | 
			
		||||
		DAAF5C2214BF308400A0F1F0 /* Background.png in Resources */ = {isa = PBXBuildFile; fileRef = DAAF5C2014BF308400A0F1F0 /* Background.png */; };
 | 
			
		||||
		DAAF5C2314BF308400A0F1F0 /* Background@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DAAF5C2114BF308400A0F1F0 /* Background@2x.png */; };
 | 
			
		||||
		DABF7DA514BE54E4007F3557 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = DABF7DA414BE54E4007F3557 /* Default.png */; };
 | 
			
		||||
		DABF7DAA14BE561C007F3557 /* Icon-72.png in Resources */ = {isa = PBXBuildFile; fileRef = DABF7DA714BE561C007F3557 /* Icon-72.png */; };
 | 
			
		||||
		DABF7DAB14BE561C007F3557 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = DABF7DA814BE561C007F3557 /* Icon.png */; };
 | 
			
		||||
		DABF7DAC14BE561C007F3557 /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABF7DA914BE561C007F3557 /* Icon@2x.png */; };
 | 
			
		||||
		DAC6325E1486805C0075AEA5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
 | 
			
		||||
		DAC6326D148680650075AEA5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
 | 
			
		||||
		DAC63277148680700075AEA5 /* libuicolor-utilities.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC6325D1486805C0075AEA5 /* libuicolor-utilities.a */; };
 | 
			
		||||
@@ -195,6 +203,8 @@
 | 
			
		||||
		DA5BFA63147E415C00F98B1E /* OnePassword.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = OnePassword.xcdatamodel; sourceTree = "<group>"; };
 | 
			
		||||
		DA5BFA65147E415C00F98B1E /* OPMainViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OPMainViewController.h; sourceTree = "<group>"; };
 | 
			
		||||
		DA5BFA66147E415C00F98B1E /* OPMainViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OPMainViewController.m; sourceTree = "<group>"; };
 | 
			
		||||
		DA5DB7A514BE4B19002DD256 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = ../Default.png; sourceTree = "<group>"; };
 | 
			
		||||
		DA5DB7A714BE4B4B002DD256 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x.png"; path = "../Default@2x.png"; sourceTree = "<group>"; };
 | 
			
		||||
		DA7C28A514AF078900491972 /* Bold_Lines.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Bold_Lines.png; sourceTree = "<group>"; };
 | 
			
		||||
		DA7C28A614AF078900491972 /* Box.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Box.png; sourceTree = "<group>"; };
 | 
			
		||||
		DA7C28A714AF078900491972 /* Dashed_Divider.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Dashed_Divider.png; sourceTree = "<group>"; };
 | 
			
		||||
@@ -226,6 +236,12 @@
 | 
			
		||||
		DA7C28C114AF078900491972 /* Smooth_Divider.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Smooth_Divider.png; sourceTree = "<group>"; };
 | 
			
		||||
		DA7C28C214AF078900491972 /* Square.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Square.png; sourceTree = "<group>"; };
 | 
			
		||||
		DA7C28C314AF078900491972 /* White_Rectangular.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = White_Rectangular.png; sourceTree = "<group>"; };
 | 
			
		||||
		DAAF5C2014BF308400A0F1F0 /* Background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Background.png; sourceTree = "<group>"; };
 | 
			
		||||
		DAAF5C2114BF308400A0F1F0 /* Background@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Background@2x.png"; sourceTree = "<group>"; };
 | 
			
		||||
		DABF7DA414BE54E4007F3557 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = SOURCE_ROOT; };
 | 
			
		||||
		DABF7DA714BE561C007F3557 /* Icon-72.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-72.png"; sourceTree = "<group>"; };
 | 
			
		||||
		DABF7DA814BE561C007F3557 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = "<group>"; };
 | 
			
		||||
		DABF7DA914BE561C007F3557 /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon@2x.png"; sourceTree = "<group>"; };
 | 
			
		||||
		DAC6325D1486805C0075AEA5 /* libuicolor-utilities.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libuicolor-utilities.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
			
		||||
		DAC6326C148680650075AEA5 /* libjrswizzle.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjrswizzle.a; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
			
		||||
		DAC632791486809A0075AEA5 /* JRSwizzle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JRSwizzle.h; path = External/Pearl/External/jrswizzle/JRSwizzle.h; sourceTree = SOURCE_ROOT; };
 | 
			
		||||
@@ -1421,6 +1437,13 @@
 | 
			
		||||
		DA5BFA51147E415C00F98B1E /* Supporting Files */ = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
				DAAF5C2014BF308400A0F1F0 /* Background.png */,
 | 
			
		||||
				DAAF5C2114BF308400A0F1F0 /* Background@2x.png */,
 | 
			
		||||
				DABF7DA714BE561C007F3557 /* Icon-72.png */,
 | 
			
		||||
				DABF7DA814BE561C007F3557 /* Icon.png */,
 | 
			
		||||
				DABF7DA914BE561C007F3557 /* Icon@2x.png */,
 | 
			
		||||
				DA5DB7A714BE4B4B002DD256 /* Default@2x.png */,
 | 
			
		||||
				DA5DB7A514BE4B19002DD256 /* Default.png */,
 | 
			
		||||
				DA7C28A414AF078900491972 /* divider */,
 | 
			
		||||
				DA5BFA52147E415C00F98B1E /* OnePassword-Info.plist */,
 | 
			
		||||
				DA5BFA53147E415C00F98B1E /* InfoPlist.strings */,
 | 
			
		||||
@@ -1569,6 +1592,7 @@
 | 
			
		||||
		DAC77CD31482AAD600BCF976 /* Resources */ = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
				DABF7DA414BE54E4007F3557 /* Default.png */,
 | 
			
		||||
				DAC77CD41482AAD600BCF976 /* Pearl.strings */,
 | 
			
		||||
			);
 | 
			
		||||
			path = Resources;
 | 
			
		||||
@@ -2861,6 +2885,14 @@
 | 
			
		||||
				DA7C28E214AF078900491972 /* White_Rectangular.png in Resources */,
 | 
			
		||||
				DA007F5514B25EE100251337 /* ciphers.plist in Resources */,
 | 
			
		||||
				DA007F5614B26EFA00251337 /* Pearl.strings in Resources */,
 | 
			
		||||
				DA5DB7A614BE4B19002DD256 /* Default.png in Resources */,
 | 
			
		||||
				DA5DB7A814BE4B4B002DD256 /* Default@2x.png in Resources */,
 | 
			
		||||
				DABF7DA514BE54E4007F3557 /* Default.png in Resources */,
 | 
			
		||||
				DABF7DAA14BE561C007F3557 /* Icon-72.png in Resources */,
 | 
			
		||||
				DABF7DAB14BE561C007F3557 /* Icon.png in Resources */,
 | 
			
		||||
				DABF7DAC14BE561C007F3557 /* Icon@2x.png in Resources */,
 | 
			
		||||
				DAAF5C2214BF308400A0F1F0 /* Background.png in Resources */,
 | 
			
		||||
				DAAF5C2314BF308400A0F1F0 /* Background@2x.png in Resources */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								OnePassword/Background.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 84 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								OnePassword/Background@2x.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 361 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								OnePassword/Icon-72.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 6.4 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								OnePassword/Icon-Small-50.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 3.5 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								OnePassword/Icon-Small.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.7 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								OnePassword/Icon-Small@2x.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 4.4 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								OnePassword/Icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 4.4 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								OnePassword/Icon@2x.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 13 KiB  | 
@@ -20,5 +20,6 @@
 | 
			
		||||
@property (weak, nonatomic) IBOutlet UISegmentedControl *contentType;
 | 
			
		||||
 | 
			
		||||
- (IBAction)didChangeContentType:(UISegmentedControl *)sender;
 | 
			
		||||
- (IBAction)didTriggerContent:(id)sender;
 | 
			
		||||
 | 
			
		||||
@end
 | 
			
		||||
 
 | 
			
		||||
@@ -55,6 +55,7 @@
 | 
			
		||||
    
 | 
			
		||||
    // Because IB's edit button doesn't auto-toggle self.editable like editButtonItem does.
 | 
			
		||||
    self.navigationItem.rightBarButtonItem = self.editButtonItem;
 | 
			
		||||
    self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Background.png"]];
 | 
			
		||||
    
 | 
			
		||||
    [super viewDidLoad];
 | 
			
		||||
}
 | 
			
		||||
@@ -91,7 +92,9 @@
 | 
			
		||||
 | 
			
		||||
- (void)updateWasAnimated:(BOOL)animated {
 | 
			
		||||
 | 
			
		||||
    self.typeLabel.text = self.activeElement? NSStringFromOPElementType(self.activeElement.type): @"moo";
 | 
			
		||||
    self.searchDisplayController.searchBar.placeholder = self.activeElement.name;
 | 
			
		||||
 | 
			
		||||
    self.typeLabel.text = self.activeElement? NSStringFromOPElementType(self.activeElement.type): @"";
 | 
			
		||||
 | 
			
		||||
    self.contentTextView.alpha = self.contentType.selectedSegmentIndex == OPElementContentTypeNote? 1: 0;
 | 
			
		||||
    self.contentTextView.editable = self.editing && self.activeElement.type & OPElementTypeStored;
 | 
			
		||||
@@ -106,9 +109,6 @@
 | 
			
		||||
 | 
			
		||||
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
 | 
			
		||||
        NSString *contentDescription = self.activeElement.contentDescription;
 | 
			
		||||
        if (contentDescription)
 | 
			
		||||
            [self.activeElement use];
 | 
			
		||||
 | 
			
		||||
        dispatch_async(dispatch_get_main_queue(), ^{
 | 
			
		||||
            self.contentField.text = contentDescription;
 | 
			
		||||
        });
 | 
			
		||||
@@ -123,6 +123,12 @@
 | 
			
		||||
    [self updateAnimated:YES];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (IBAction)didTriggerContent:(id)sender {
 | 
			
		||||
    
 | 
			
		||||
    [[UIPasteboard generalPasteboard] setValue:self.activeElement.content
 | 
			
		||||
                             forPasteboardType:self.activeElement.contentUTI];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)didSelectType:(OPElementType)type {
 | 
			
		||||
    
 | 
			
		||||
    self.activeElement.type = type;
 | 
			
		||||
@@ -132,10 +138,11 @@
 | 
			
		||||
- (void)didSelectElement:(OPElementEntity *)element {
 | 
			
		||||
    
 | 
			
		||||
    self.activeElement = element;
 | 
			
		||||
    [self.activeElement use];
 | 
			
		||||
    [self updateAnimated:YES];
 | 
			
		||||
 | 
			
		||||
    self.searchDisplayController.searchBar.text = @"";
 | 
			
		||||
    [self.searchDisplayController setActive:NO animated:YES];
 | 
			
		||||
    self.searchDisplayController.searchBar.text = self.activeElement.name;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
 | 
			
		||||
@@ -143,4 +150,9 @@
 | 
			
		||||
    [self updateAnimated:YES];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
 | 
			
		||||
    
 | 
			
		||||
    return NO;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@end
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,25 @@
 | 
			
		||||
	<key>CFBundleExecutable</key>
 | 
			
		||||
	<string>${EXECUTABLE_NAME}</string>
 | 
			
		||||
	<key>CFBundleIconFiles</key>
 | 
			
		||||
	<array/>
 | 
			
		||||
	<array>
 | 
			
		||||
		<string>Icon.png</string>
 | 
			
		||||
		<string>Icon@2x.png</string>
 | 
			
		||||
		<string>Icon-72.png</string>
 | 
			
		||||
	</array>
 | 
			
		||||
	<key>CFBundleIcons</key>
 | 
			
		||||
	<dict>
 | 
			
		||||
		<key>CFBundlePrimaryIcon</key>
 | 
			
		||||
		<dict>
 | 
			
		||||
			<key>CFBundleIconFiles</key>
 | 
			
		||||
			<array>
 | 
			
		||||
				<string>Icon.png</string>
 | 
			
		||||
				<string>Icon@2x.png</string>
 | 
			
		||||
				<string>Icon-72.png</string>
 | 
			
		||||
			</array>
 | 
			
		||||
			<key>UIPrerenderedIcon</key>
 | 
			
		||||
			<true/>
 | 
			
		||||
		</dict>
 | 
			
		||||
	</dict>
 | 
			
		||||
	<key>CFBundleIdentifier</key>
 | 
			
		||||
	<string>com.lyndir.lhunath.${PRODUCT_NAME:rfc1034identifier}</string>
 | 
			
		||||
	<key>CFBundleInfoDictionaryVersion</key>
 | 
			
		||||
@@ -32,12 +50,12 @@
 | 
			
		||||
	<string>MainStoryboard_iPhone</string>
 | 
			
		||||
	<key>UIMainStoryboardFile~ipad</key>
 | 
			
		||||
	<string>MainStoryboard_iPad</string>
 | 
			
		||||
	<key>UIPrerenderedIcon</key>
 | 
			
		||||
	<true/>
 | 
			
		||||
	<key>UIRequiredDeviceCapabilities</key>
 | 
			
		||||
	<array>
 | 
			
		||||
		<string>armv7</string>
 | 
			
		||||
	</array>
 | 
			
		||||
	<key>UIStatusBarStyle</key>
 | 
			
		||||
	<string>UIStatusBarStyleBlackOpaque</string>
 | 
			
		||||
	<key>UISupportedInterfaceOrientations</key>
 | 
			
		||||
	<array>
 | 
			
		||||
		<string>UIInterfaceOrientationPortrait</string>
 | 
			
		||||
 
 | 
			
		||||
@@ -218,15 +218,6 @@
 | 
			
		||||
        </scene>
 | 
			
		||||
        <scene sceneID="Rm6-uL-WP4">
 | 
			
		||||
            <objects>
 | 
			
		||||
                <searchDisplayController id="P8c-gf-nN3">
 | 
			
		||||
                    <connections>
 | 
			
		||||
                        <outlet property="delegate" destination="0QO-2P-OhD" id="gst-Hm-5ja"/>
 | 
			
		||||
                        <outlet property="searchBar" destination="qeo-n2-WVh" id="bFO-FC-Xdj"/>
 | 
			
		||||
                        <outlet property="searchContentsController" destination="b9f-OB-AqY" id="xgo-Uj-wpm"/>
 | 
			
		||||
                        <outlet property="searchResultsDataSource" destination="0QO-2P-OhD" id="XJh-rC-kId"/>
 | 
			
		||||
                        <outlet property="searchResultsDelegate" destination="0QO-2P-OhD" id="Bm8-Q3-lLA"/>
 | 
			
		||||
                    </connections>
 | 
			
		||||
                </searchDisplayController>
 | 
			
		||||
                <placeholder placeholderIdentifier="IBFirstResponder" id="8LM-KK-u1f" userLabel="First Responder" sceneMemberID="firstResponder"/>
 | 
			
		||||
                <tableViewController id="b9f-OB-AqY" customClass="OPMainViewController" sceneMemberID="viewController">
 | 
			
		||||
                    <tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="singleLineEtched" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" id="y6z-21-Ptd">
 | 
			
		||||
@@ -252,6 +243,9 @@
 | 
			
		||||
                                            <state key="highlighted">
 | 
			
		||||
                                                <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                            </state>
 | 
			
		||||
                                            <connections>
 | 
			
		||||
                                                <action selector="didTriggerContent:" destination="b9f-OB-AqY" eventType="touchUpInside" id="Ost-qu-K2L"/>
 | 
			
		||||
                                            </connections>
 | 
			
		||||
                                        </button>
 | 
			
		||||
                                        <imageView userInteractionEnabled="NO" contentMode="center" image="Square.png" id="qWn-td-zdb">
 | 
			
		||||
                                            <rect key="frame" x="0.0" y="0.0" width="320" height="222"/>
 | 
			
		||||
@@ -269,7 +263,7 @@
 | 
			
		||||
                                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                            <color key="textColor" red="0.36470589040000001" green="0.40000003579999999" blue="0.47843140360000003" alpha="1" colorSpace="deviceRGB"/>
 | 
			
		||||
                                            <fontDescription key="fontDescription" name="AmericanTypewriter-Bold" family="American Typewriter" pointSize="20"/>
 | 
			
		||||
                                            <textInputTraits key="textInputTraits"/>
 | 
			
		||||
                                            <textInputTraits key="textInputTraits" autocorrectionType="no"/>
 | 
			
		||||
                                        </textField>
 | 
			
		||||
                                    </subviews>
 | 
			
		||||
                                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
 | 
			
		||||
@@ -292,7 +286,7 @@
 | 
			
		||||
                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                    <gestureRecognizers/>
 | 
			
		||||
                                    <color key="tintColor" red="0.36470589040000001" green="0.40000003579999999" blue="0.47843140360000003" alpha="1" colorSpace="deviceRGB"/>
 | 
			
		||||
                                    <textInputTraits key="textInputTraits"/>
 | 
			
		||||
                                    <textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="URL"/>
 | 
			
		||||
                                    <connections>
 | 
			
		||||
                                        <outlet property="delegate" destination="b9f-OB-AqY" id="8OW-dn-MdW"/>
 | 
			
		||||
                                    </connections>
 | 
			
		||||
@@ -352,6 +346,15 @@
 | 
			
		||||
                        <outlet property="typeLabel" destination="QgX-q3-JLG" id="tv1-jy-Qbu"/>
 | 
			
		||||
                    </connections>
 | 
			
		||||
                </tableViewController>
 | 
			
		||||
                <searchDisplayController id="P8c-gf-nN3">
 | 
			
		||||
                    <connections>
 | 
			
		||||
                        <outlet property="delegate" destination="0QO-2P-OhD" id="gst-Hm-5ja"/>
 | 
			
		||||
                        <outlet property="searchBar" destination="qeo-n2-WVh" id="bFO-FC-Xdj"/>
 | 
			
		||||
                        <outlet property="searchContentsController" destination="b9f-OB-AqY" id="xgo-Uj-wpm"/>
 | 
			
		||||
                        <outlet property="searchResultsDataSource" destination="0QO-2P-OhD" id="XJh-rC-kId"/>
 | 
			
		||||
                        <outlet property="searchResultsDelegate" destination="0QO-2P-OhD" id="Bm8-Q3-lLA"/>
 | 
			
		||||
                    </connections>
 | 
			
		||||
                </searchDisplayController>
 | 
			
		||||
                <customObject id="0QO-2P-OhD" customClass="OPSearchDelegate">
 | 
			
		||||
                    <connections>
 | 
			
		||||
                        <outlet property="delegate" destination="b9f-OB-AqY" id="y3b-no-DZQ"/>
 | 
			
		||||
@@ -389,6 +392,7 @@
 | 
			
		||||
            <source key="sourceIdentifier" type="project" relativePath="./Classes/OPMainViewController.h"/>
 | 
			
		||||
            <relationships>
 | 
			
		||||
                <relationship kind="action" name="didChangeContentType:" candidateClass="UISegmentedControl"/>
 | 
			
		||||
                <relationship kind="action" name="didTriggerContent:"/>
 | 
			
		||||
                <relationship kind="outlet" name="contentField" candidateClass="UITextField"/>
 | 
			
		||||
                <relationship kind="outlet" name="contentTextView" candidateClass="UITextView"/>
 | 
			
		||||
                <relationship kind="outlet" name="contentType" candidateClass="UISegmentedControl"/>
 | 
			
		||||
@@ -408,7 +412,7 @@
 | 
			
		||||
        </class>
 | 
			
		||||
    </classes>
 | 
			
		||||
    <simulatedMetricsContainer key="defaultSimulatedMetrics">
 | 
			
		||||
        <simulatedStatusBarMetrics key="statusBar" statusBarStyle="blackTranslucent"/>
 | 
			
		||||
        <simulatedStatusBarMetrics key="statusBar"/>
 | 
			
		||||
        <simulatedOrientationMetrics key="orientation"/>
 | 
			
		||||
        <simulatedScreenMetrics key="destination"/>
 | 
			
		||||
    </simulatedMetricsContainer>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								OnePassword/iTunesArtwork.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 153 KiB  | 
							
								
								
									
										1168
									
								
								Scripts/bashlib
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										60
									
								
								Scripts/checkLocalization
									
									
									
									
									
										Executable file
									
								
							
							
						
						@@ -0,0 +1,60 @@
 | 
			
		||||
#! /usr/bin/env bash
 | 
			
		||||
source bashlib
 | 
			
		||||
 | 
			
		||||
isIn() {
 | 
			
		||||
    local key=$1; shift
 | 
			
		||||
 | 
			
		||||
    for value
 | 
			
		||||
    do [[ $value = "$key" ]] && return; done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cd "${0%/*}/../../"
 | 
			
		||||
 | 
			
		||||
emit "Enumerating localization keys"
 | 
			
		||||
code=$(find Classes -type f -exec grep -o 'NSLocalizedString(@"[^"]*"' {} + | sed -n 's/.*\("[^"]*"\).*/\1/p' | sort -bu)
 | 
			
		||||
for l in Resources/*.lproj/Localizable.strings; do
 | 
			
		||||
    k=${l#*/}; k=${k%%/*}
 | 
			
		||||
    emit "   - Found language: ${k%.lproj}"
 | 
			
		||||
 | 
			
		||||
    lang+=( "$k" )
 | 
			
		||||
    lprojLocal+=( "$(sed -n '/\/\/[^"]*\[REMOTE\][^"]*$/!s/^\("[^"]*"\).*/\1/p' "$l" | sort -bu)" )
 | 
			
		||||
    lprojAll+=( "$(sed -n 's/^\("[^"]*"\).*/\1/p' "$l" | sort -u)" )
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
allhealthy=1
 | 
			
		||||
healthy=1
 | 
			
		||||
echo; emit "Looking for unused localization keys"
 | 
			
		||||
for l in "${!lang[@]}"; do
 | 
			
		||||
    while read; do
 | 
			
		||||
        (( healthy )) && emit -y "Not used in code or marked '// [REMOTE]':"
 | 
			
		||||
        allhealthy=0
 | 
			
		||||
        healthy=0
 | 
			
		||||
        emit -y "   ${lang[l]}: ${REPLY##*([[:space:]])} "
 | 
			
		||||
    done < <(comm -1 -3 <(printf '%s\n' "$code") <(printf '%s\n' "${lprojLocal[l]}"))
 | 
			
		||||
done
 | 
			
		||||
(( healthy )) && emit "No unused keys."
 | 
			
		||||
 | 
			
		||||
healthy=1
 | 
			
		||||
echo; emit "Looking for missing localization keys"
 | 
			
		||||
for l in "${!lang[@]}"; do
 | 
			
		||||
    chealthy=1
 | 
			
		||||
    while read; do
 | 
			
		||||
        (( chealthy )) && emit -y "Used by code:"
 | 
			
		||||
        allhealthy=0
 | 
			
		||||
        chealthy=0
 | 
			
		||||
        healthy=0
 | 
			
		||||
        emit -r "   ${lang[l]}: ${REPLY##*([[:space:]])} "
 | 
			
		||||
    done < <(comm -2 -3 <(printf '%s\n' "$code") <(printf '%s\n' "${lprojAll[l]}"))
 | 
			
		||||
    khealthy=1
 | 
			
		||||
    while read; do
 | 
			
		||||
        (( khealthy )) && emit -y "Present in other languages:"
 | 
			
		||||
        allhealthy=0
 | 
			
		||||
        khealthy=0
 | 
			
		||||
        healthy=0
 | 
			
		||||
        emit -r "   ${lang[l]}: ${REPLY##*([[:space:]])} "
 | 
			
		||||
    done < <(for ol in "${!lang[@]}"; do comm -1 -3 <(printf '%s\n' "${lprojAll[l]}") <(printf '%s\n' "${lprojAll[ol]}"); done | sort -bu)
 | 
			
		||||
done
 | 
			
		||||
(( healthy )) && emit "No missing keys."
 | 
			
		||||
 | 
			
		||||
echo
 | 
			
		||||
(( allhealthy )) && emit "All good." || emit -y "Some issues detected."
 | 
			
		||||
							
								
								
									
										32
									
								
								Scripts/convertImages
									
									
									
									
									
										Executable file
									
								
							
							
						
						@@ -0,0 +1,32 @@
 | 
			
		||||
#! /usr/bin/env bash
 | 
			
		||||
source bashlib
 | 
			
		||||
shopt -s nullglob
 | 
			
		||||
 | 
			
		||||
emit "Converting iTunesArtwork"
 | 
			
		||||
icons=(
 | 
			
		||||
    [29]="Icon-Small.png"
 | 
			
		||||
    [50]="Icon-Small-50.png"
 | 
			
		||||
    [58]="Icon-Small@2x.png"
 | 
			
		||||
    [57]="Icon.png"
 | 
			
		||||
    [72]="Icon-72.png"
 | 
			
		||||
    [114]="Icon@2x.png"
 | 
			
		||||
)
 | 
			
		||||
cd "${0%/*}/../OnePassword"
 | 
			
		||||
 | 
			
		||||
for size in "${!icons[@]}"; do
 | 
			
		||||
    file=${icons[size]}
 | 
			
		||||
 | 
			
		||||
    emit "$file ($size px)" --
 | 
			
		||||
        convert "iTunesArtwork.png" -resize "${size}x${size}" "$file"
 | 
			
		||||
    emit -$?
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
echo
 | 
			
		||||
emit "Converting @2x artwork"
 | 
			
		||||
for file in !(Icon*)@2x.png; do
 | 
			
		||||
    emit "${file/@2x}" --
 | 
			
		||||
        convert "$file" -resize 50% "${file/@2x}"
 | 
			
		||||
    emit -$?
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
@@ -4,13 +4,13 @@ cd "${BASH_SOURCE%/*}/.."
 | 
			
		||||
shopt -s extglob
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Pearl
 | 
			
		||||
## LisuUI
 | 
			
		||||
#
 | 
			
		||||
## Submodules that need to be checked out.
 | 
			
		||||
dependencies=( External/Pearl External/Pearl:External/{jrswizzle,uicolor-utilities} )
 | 
			
		||||
dependencies=( External/Pearl External/Pearl:External/jrswizzle External/Pearl:External/uicolor-utilities )
 | 
			
		||||
 | 
			
		||||
## Custom migration.
 | 
			
		||||
# Nothing yet.
 | 
			
		||||
# None yet.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
################################################################################
 | 
			
		||||
 
 | 
			
		||||