iCloud fixes.
[UPDATED]   Moved shared MPAppDelegate code into separate files
            depending on the code's responsibility.
[UPDATED]   iCloud implementation removed in favor of
            iCloudStoreManager's managed implementation.
[FIXED]     iCloud configuration made AppStore friendly.
			
			
This commit is contained in:
		
							
								
								
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							@@ -4,3 +4,6 @@
 | 
			
		||||
[submodule "External/InAppSettingsKit"]
 | 
			
		||||
	path = External/InAppSettingsKit
 | 
			
		||||
	url = git://github.com/futuretap/InAppSettingsKit.git
 | 
			
		||||
[submodule "External/iCloudStoreManager"]
 | 
			
		||||
	path = External/iCloudStoreManager
 | 
			
		||||
	url = git://github.com/alekseyn/iCloudStoreManager.git
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								External/Pearl
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								External/Pearl
									
									
									
									
										vendored
									
									
								
							 Submodule External/Pearl updated: 9336e50d3b...a78cd7daf1
									
								
							
							
								
								
									
										1
									
								
								External/iCloudStoreManager
									
									
									
									
										vendored
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								External/iCloudStoreManager
									
									
									
									
										vendored
									
									
										Submodule
									
								
							 Submodule External/iCloudStoreManager added at 303b3a3e5c
									
								
							@@ -654,6 +654,12 @@
 | 
			
		||||
		DA60116515057F10008E9AB6 /* tip_location_wood@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA600EE315057F10008E9AB6 /* tip_location_wood@2x.png */; };
 | 
			
		||||
		DA60116715057FDD008E9AB6 /* iTunesArtwork-Rounded.png in Resources */ = {isa = PBXBuildFile; fileRef = DA60116615057FDD008E9AB6 /* iTunesArtwork-Rounded.png */; };
 | 
			
		||||
		DA60116C15060F28008E9AB6 /* Pearl.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = DAB8D9D81503940100CED3BC /* Pearl.dylib */; };
 | 
			
		||||
		DA79A9E3155821BB00BAA07A /* MPAppDelegate_Shared.m in Sources */ = {isa = PBXBuildFile; fileRef = DA79A9E0155821BB00BAA07A /* MPAppDelegate_Shared.m */; };
 | 
			
		||||
		DA79A9E4155821BB00BAA07A /* MPAppDelegate_Store.m in Sources */ = {isa = PBXBuildFile; fileRef = DA79A9E2155821BB00BAA07A /* MPAppDelegate_Store.m */; };
 | 
			
		||||
		DA79A9EC155821E500BAA07A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA79A9EB155821E500BAA07A /* Foundation.framework */; };
 | 
			
		||||
		DA79AA201558221200BAA07A /* UbiquityStoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DA79AA111558221200BAA07A /* UbiquityStoreManager.h */; };
 | 
			
		||||
		DA79AA211558221200BAA07A /* UbiquityStoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DA79AA121558221200BAA07A /* UbiquityStoreManager.m */; };
 | 
			
		||||
		DA79AA2415582F3900BAA07A /* libiCloudStoreManager.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA79A9EA155821E500BAA07A /* libiCloudStoreManager.a */; };
 | 
			
		||||
		DAB8D98D150374AD00CED3BC /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAB8D98C150374AD00CED3BC /* Cocoa.framework */; };
 | 
			
		||||
		DAB8D9C8150375C800CED3BC /* MasterPassword.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = DAB8D9B2150375C800CED3BC /* MasterPassword.xcdatamodeld */; };
 | 
			
		||||
		DAB8D9C9150375C800CED3BC /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = DAB8D9B5150375C800CED3BC /* Credits.rtf */; };
 | 
			
		||||
@@ -694,8 +700,6 @@
 | 
			
		||||
		DAB8DA2E1503972100CED3BC /* PearlStrings.m in Sources */ = {isa = PBXBuildFile; fileRef = DAB8D9FF1503972100CED3BC /* PearlStrings.m */; };
 | 
			
		||||
		DAB8DA2F1503972100CED3BC /* PearlStringUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = DAB8DA001503972100CED3BC /* PearlStringUtils.h */; };
 | 
			
		||||
		DAB8DA301503972100CED3BC /* PearlStringUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = DAB8DA011503972100CED3BC /* PearlStringUtils.m */; };
 | 
			
		||||
		DAB8DA311503972100CED3BC /* PearlWebUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = DAB8DA021503972100CED3BC /* PearlWebUtils.h */; };
 | 
			
		||||
		DAB8DA321503972100CED3BC /* PearlWebUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = DAB8DA031503972100CED3BC /* PearlWebUtils.m */; };
 | 
			
		||||
		DAB8DA331503972100CED3BC /* Pearl-Crypto.h in Headers */ = {isa = PBXBuildFile; fileRef = DAB8DA091503972100CED3BC /* Pearl-Crypto.h */; };
 | 
			
		||||
		DAB8DA341503972100CED3BC /* PearlCryptUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = DAB8DA0A1503972100CED3BC /* PearlCryptUtils.h */; };
 | 
			
		||||
		DAB8DA351503972100CED3BC /* PearlCryptUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = DAB8DA0B1503972100CED3BC /* PearlCryptUtils.m */; };
 | 
			
		||||
@@ -1374,6 +1378,14 @@
 | 
			
		||||
		DA600EE215057F10008E9AB6 /* tip_location_wood.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tip_location_wood.png; sourceTree = "<group>"; };
 | 
			
		||||
		DA600EE315057F10008E9AB6 /* tip_location_wood@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tip_location_wood@2x.png"; sourceTree = "<group>"; };
 | 
			
		||||
		DA60116615057FDD008E9AB6 /* iTunesArtwork-Rounded.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iTunesArtwork-Rounded.png"; sourceTree = "<group>"; };
 | 
			
		||||
		DA79A9DF155821BB00BAA07A /* MPAppDelegate_Shared.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAppDelegate_Shared.h; sourceTree = "<group>"; };
 | 
			
		||||
		DA79A9E0155821BB00BAA07A /* MPAppDelegate_Shared.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAppDelegate_Shared.m; sourceTree = "<group>"; };
 | 
			
		||||
		DA79A9E1155821BB00BAA07A /* MPAppDelegate_Store.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAppDelegate_Store.h; sourceTree = "<group>"; };
 | 
			
		||||
		DA79A9E2155821BB00BAA07A /* MPAppDelegate_Store.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAppDelegate_Store.m; sourceTree = "<group>"; };
 | 
			
		||||
		DA79A9EA155821E500BAA07A /* libiCloudStoreManager.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libiCloudStoreManager.a; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
			
		||||
		DA79A9EB155821E500BAA07A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
 | 
			
		||||
		DA79AA111558221200BAA07A /* UbiquityStoreManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UbiquityStoreManager.h; sourceTree = "<group>"; };
 | 
			
		||||
		DA79AA121558221200BAA07A /* UbiquityStoreManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UbiquityStoreManager.m; sourceTree = "<group>"; };
 | 
			
		||||
		DAB8D988150374AD00CED3BC /* MasterPassword.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MasterPassword.app; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
			
		||||
		DAB8D98C150374AD00CED3BC /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
 | 
			
		||||
		DAB8D98F150374AD00CED3BC /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
 | 
			
		||||
@@ -1426,8 +1438,6 @@
 | 
			
		||||
		DAB8D9FF1503972100CED3BC /* PearlStrings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlStrings.m; sourceTree = "<group>"; };
 | 
			
		||||
		DAB8DA001503972100CED3BC /* PearlStringUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlStringUtils.h; sourceTree = "<group>"; };
 | 
			
		||||
		DAB8DA011503972100CED3BC /* PearlStringUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlStringUtils.m; sourceTree = "<group>"; };
 | 
			
		||||
		DAB8DA021503972100CED3BC /* PearlWebUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlWebUtils.h; sourceTree = "<group>"; };
 | 
			
		||||
		DAB8DA031503972100CED3BC /* PearlWebUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlWebUtils.m; sourceTree = "<group>"; };
 | 
			
		||||
		DAB8DA041503972100CED3BC /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; };
 | 
			
		||||
		DAB8DA071503972100CED3BC /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Pearl.strings; sourceTree = "<group>"; };
 | 
			
		||||
		DAB8DA091503972100CED3BC /* Pearl-Crypto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Pearl-Crypto.h"; sourceTree = "<group>"; };
 | 
			
		||||
@@ -2219,8 +2229,8 @@
 | 
			
		||||
		DAF56D4A1503C74200996D85 /* info.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = info.pem; sourceTree = "<group>"; };
 | 
			
		||||
		DAF56D4B1503C74200996D85 /* infokey.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = infokey.pem; sourceTree = "<group>"; };
 | 
			
		||||
		DAF56D4C1503C74200996D85 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = "<group>"; };
 | 
			
		||||
		DAF56D4E1503C74200996D85 /* a1 */ = {isa = PBXFileReference; lastKnownFileType = file; path = a1; sourceTree = "<group>"; };
 | 
			
		||||
		DAF56D4F1503C74200996D85 /* a2 */ = {isa = PBXFileReference; lastKnownFileType = file; path = a2; sourceTree = "<group>"; };
 | 
			
		||||
		DAF56D4E1503C74200996D85 /* a1 */ = {isa = PBXFileReference; lastKnownFileType = text; path = a1; sourceTree = "<group>"; };
 | 
			
		||||
		DAF56D4F1503C74200996D85 /* a2 */ = {isa = PBXFileReference; lastKnownFileType = text; path = a2; sourceTree = "<group>"; };
 | 
			
		||||
		DAF56D501503C74200996D85 /* cert.p7c */ = {isa = PBXFileReference; lastKnownFileType = file; path = cert.p7c; sourceTree = "<group>"; };
 | 
			
		||||
		DAF56D511503C74200996D85 /* smime.p7m */ = {isa = PBXFileReference; lastKnownFileType = file; path = smime.p7m; sourceTree = "<group>"; };
 | 
			
		||||
		DAF56D521503C74200996D85 /* smime.p7s */ = {isa = PBXFileReference; lastKnownFileType = file; path = smime.p7s; sourceTree = "<group>"; };
 | 
			
		||||
@@ -2525,10 +2535,19 @@
 | 
			
		||||
/* End PBXFileReference section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXFrameworksBuildPhase section */
 | 
			
		||||
		DA79A9E7155821E500BAA07A /* Frameworks */ = {
 | 
			
		||||
			isa = PBXFrameworksBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
			files = (
 | 
			
		||||
				DA79A9EC155821E500BAA07A /* Foundation.framework in Frameworks */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
		DAB8D985150374AD00CED3BC /* Frameworks */ = {
 | 
			
		||||
			isa = PBXFrameworksBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
			files = (
 | 
			
		||||
				DA79AA2415582F3900BAA07A /* libiCloudStoreManager.a in Frameworks */,
 | 
			
		||||
				DA44255715546C580052177D /* Carbon.framework in Frameworks */,
 | 
			
		||||
				DADEA5D51503EEDF00FD084E /* Security.framework in Frameworks */,
 | 
			
		||||
				DAFE4A6415039CDC003ABA7C /* Pearl.dylib in Frameworks */,
 | 
			
		||||
@@ -3260,6 +3279,16 @@
 | 
			
		||||
			path = Tooltips;
 | 
			
		||||
			sourceTree = "<group>";
 | 
			
		||||
		};
 | 
			
		||||
		DA79A9F61558221200BAA07A /* iCloudStoreManager */ = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
				DA79AA111558221200BAA07A /* UbiquityStoreManager.h */,
 | 
			
		||||
				DA79AA121558221200BAA07A /* UbiquityStoreManager.m */,
 | 
			
		||||
			);
 | 
			
		||||
			name = iCloudStoreManager;
 | 
			
		||||
			path = External/iCloudStoreManager/iCloudStoreManager;
 | 
			
		||||
			sourceTree = "<group>";
 | 
			
		||||
		};
 | 
			
		||||
		DAB8D97D150374AC00CED3BC = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
@@ -3268,6 +3297,7 @@
 | 
			
		||||
				DAB8D9DA1503940100CED3BC /* Pearl */,
 | 
			
		||||
				DAF56A071503C64400996D85 /* scrypt */,
 | 
			
		||||
				DAF571EE1503C75C00996D85 /* openssl */,
 | 
			
		||||
				DA79A9F61558221200BAA07A /* iCloudStoreManager */,
 | 
			
		||||
				DAB8D98B150374AD00CED3BC /* Frameworks */,
 | 
			
		||||
				DAB8D989150374AD00CED3BC /* Products */,
 | 
			
		||||
			);
 | 
			
		||||
@@ -3278,6 +3308,7 @@
 | 
			
		||||
			children = (
 | 
			
		||||
				DAB8D988150374AD00CED3BC /* MasterPassword.app */,
 | 
			
		||||
				DAB8D9D81503940100CED3BC /* Pearl.dylib */,
 | 
			
		||||
				DA79A9EA155821E500BAA07A /* libiCloudStoreManager.a */,
 | 
			
		||||
			);
 | 
			
		||||
			name = Products;
 | 
			
		||||
			sourceTree = "<group>";
 | 
			
		||||
@@ -3289,6 +3320,7 @@
 | 
			
		||||
				DA44255615546C570052177D /* Carbon.framework */,
 | 
			
		||||
				DADEA5D31503EEA700FD084E /* Security.framework */,
 | 
			
		||||
				DAB8D98C150374AD00CED3BC /* Cocoa.framework */,
 | 
			
		||||
				DA79A9EB155821E500BAA07A /* Foundation.framework */,
 | 
			
		||||
				DAB8D98E150374AD00CED3BC /* Other Frameworks */,
 | 
			
		||||
			);
 | 
			
		||||
			name = Frameworks;
 | 
			
		||||
@@ -3312,6 +3344,10 @@
 | 
			
		||||
				DAB8D9B4150375C800CED3BC /* Mac */,
 | 
			
		||||
				DA600C2C150565FC008E9AB6 /* MPAppDelegate_Key.h */,
 | 
			
		||||
				DA600C2B150565FC008E9AB6 /* MPAppDelegate_Key.m */,
 | 
			
		||||
				DA79A9DF155821BB00BAA07A /* MPAppDelegate_Shared.h */,
 | 
			
		||||
				DA79A9E0155821BB00BAA07A /* MPAppDelegate_Shared.m */,
 | 
			
		||||
				DA79A9E1155821BB00BAA07A /* MPAppDelegate_Store.h */,
 | 
			
		||||
				DA79A9E2155821BB00BAA07A /* MPAppDelegate_Store.m */,
 | 
			
		||||
				DA600C29150565FC008E9AB6 /* MPConfig.h */,
 | 
			
		||||
				DA600C2A150565FC008E9AB6 /* MPConfig.m */,
 | 
			
		||||
				DAB8D9C0150375C800CED3BC /* MPElementStoredEntity.m */,
 | 
			
		||||
@@ -3401,8 +3437,6 @@
 | 
			
		||||
				DAB8D9FF1503972100CED3BC /* PearlStrings.m */,
 | 
			
		||||
				DAB8DA001503972100CED3BC /* PearlStringUtils.h */,
 | 
			
		||||
				DAB8DA011503972100CED3BC /* PearlStringUtils.m */,
 | 
			
		||||
				DAB8DA021503972100CED3BC /* PearlWebUtils.h */,
 | 
			
		||||
				DAB8DA031503972100CED3BC /* PearlWebUtils.m */,
 | 
			
		||||
				DAB8DA041503972100CED3BC /* README */,
 | 
			
		||||
				DAB8DA051503972100CED3BC /* Resources */,
 | 
			
		||||
			);
 | 
			
		||||
@@ -5159,6 +5193,14 @@
 | 
			
		||||
/* End PBXGroup section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXHeadersBuildPhase section */
 | 
			
		||||
		DA79A9E8155821E500BAA07A /* Headers */ = {
 | 
			
		||||
			isa = PBXHeadersBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
			files = (
 | 
			
		||||
				DA79AA201558221200BAA07A /* UbiquityStoreManager.h in Headers */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
		DAB8D9D61503940100CED3BC /* Headers */ = {
 | 
			
		||||
			isa = PBXHeadersBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
@@ -5178,7 +5220,6 @@
 | 
			
		||||
				DAB8DA2C1503972100CED3BC /* PearlResettable.h in Headers */,
 | 
			
		||||
				DAB8DA2D1503972100CED3BC /* PearlStrings.h in Headers */,
 | 
			
		||||
				DAB8DA2F1503972100CED3BC /* PearlStringUtils.h in Headers */,
 | 
			
		||||
				DAB8DA311503972100CED3BC /* PearlWebUtils.h in Headers */,
 | 
			
		||||
				DAB8DA331503972100CED3BC /* Pearl-Crypto.h in Headers */,
 | 
			
		||||
				DAB8DA341503972100CED3BC /* PearlCryptUtils.h in Headers */,
 | 
			
		||||
				DAB8DA361503972100CED3BC /* PearlKeyChain.h in Headers */,
 | 
			
		||||
@@ -5190,6 +5231,23 @@
 | 
			
		||||
/* End PBXHeadersBuildPhase section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXNativeTarget section */
 | 
			
		||||
		DA79A9E9155821E500BAA07A /* iCloudStoreManager */ = {
 | 
			
		||||
			isa = PBXNativeTarget;
 | 
			
		||||
			buildConfigurationList = DA79A9F3155821E500BAA07A /* Build configuration list for PBXNativeTarget "iCloudStoreManager" */;
 | 
			
		||||
			buildPhases = (
 | 
			
		||||
				DA79A9E6155821E500BAA07A /* Sources */,
 | 
			
		||||
				DA79A9E7155821E500BAA07A /* Frameworks */,
 | 
			
		||||
				DA79A9E8155821E500BAA07A /* Headers */,
 | 
			
		||||
			);
 | 
			
		||||
			buildRules = (
 | 
			
		||||
			);
 | 
			
		||||
			dependencies = (
 | 
			
		||||
			);
 | 
			
		||||
			name = iCloudStoreManager;
 | 
			
		||||
			productName = iCloudStoreManager;
 | 
			
		||||
			productReference = DA79A9EA155821E500BAA07A /* libiCloudStoreManager.a */;
 | 
			
		||||
			productType = "com.apple.product-type.library.static";
 | 
			
		||||
		};
 | 
			
		||||
		DAB8D987150374AD00CED3BC /* MasterPassword */ = {
 | 
			
		||||
			isa = PBXNativeTarget;
 | 
			
		||||
			buildConfigurationList = DAB8D9A9150374AD00CED3BC /* Build configuration list for PBXNativeTarget "MasterPassword" */;
 | 
			
		||||
@@ -5250,6 +5308,7 @@
 | 
			
		||||
			targets = (
 | 
			
		||||
				DAB8D987150374AD00CED3BC /* MasterPassword */,
 | 
			
		||||
				DAB8D9D71503940100CED3BC /* Pearl */,
 | 
			
		||||
				DA79A9E9155821E500BAA07A /* iCloudStoreManager */,
 | 
			
		||||
			);
 | 
			
		||||
		};
 | 
			
		||||
/* End PBXProject section */
 | 
			
		||||
@@ -5927,6 +5986,14 @@
 | 
			
		||||
/* End PBXShellScriptBuildPhase section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXSourcesBuildPhase section */
 | 
			
		||||
		DA79A9E6155821E500BAA07A /* Sources */ = {
 | 
			
		||||
			isa = PBXSourcesBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
			files = (
 | 
			
		||||
				DA79AA211558221200BAA07A /* UbiquityStoreManager.m in Sources */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
		DAB8D984150374AD00CED3BC /* Sources */ = {
 | 
			
		||||
			isa = PBXSourcesBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
@@ -5941,6 +6008,8 @@
 | 
			
		||||
				DA600BEB150420AC008E9AB6 /* MPPasswordWindowController.m in Sources */,
 | 
			
		||||
				DA600C2D150565FC008E9AB6 /* MPConfig.m in Sources */,
 | 
			
		||||
				DA600C2E150565FC008E9AB6 /* MPAppDelegate_Key.m in Sources */,
 | 
			
		||||
				DA79A9E3155821BB00BAA07A /* MPAppDelegate_Shared.m in Sources */,
 | 
			
		||||
				DA79A9E4155821BB00BAA07A /* MPAppDelegate_Store.m in Sources */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
@@ -5961,7 +6030,6 @@
 | 
			
		||||
				DAB8DA2B1503972100CED3BC /* PearlObjectUtils.m in Sources */,
 | 
			
		||||
				DAB8DA2E1503972100CED3BC /* PearlStrings.m in Sources */,
 | 
			
		||||
				DAB8DA301503972100CED3BC /* PearlStringUtils.m in Sources */,
 | 
			
		||||
				DAB8DA321503972100CED3BC /* PearlWebUtils.m in Sources */,
 | 
			
		||||
				DAB8DA351503972100CED3BC /* PearlCryptUtils.m in Sources */,
 | 
			
		||||
				DAB8DA371503972100CED3BC /* PearlKeyChain.m in Sources */,
 | 
			
		||||
				DAB8DA391503972100CED3BC /* PearlRSAKey.m in Sources */,
 | 
			
		||||
@@ -6007,12 +6075,25 @@
 | 
			
		||||
/* End PBXVariantGroup section */
 | 
			
		||||
 | 
			
		||||
/* Begin XCBuildConfiguration section */
 | 
			
		||||
		DA79A9F4155821E500BAA07A /* Debug */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			buildSettings = {
 | 
			
		||||
			};
 | 
			
		||||
			name = Debug;
 | 
			
		||||
		};
 | 
			
		||||
		DA79A9F5155821E500BAA07A /* Release */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			buildSettings = {
 | 
			
		||||
			};
 | 
			
		||||
			name = Release;
 | 
			
		||||
		};
 | 
			
		||||
		DAB8D9A7150374AD00CED3BC /* Debug */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			buildSettings = {
 | 
			
		||||
				ALWAYS_SEARCH_USER_PATHS = NO;
 | 
			
		||||
				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
 | 
			
		||||
				CLANG_ENABLE_OBJC_ARC = YES;
 | 
			
		||||
				CLANG_WARN_OBJCPP_ARC_ABI = YES;
 | 
			
		||||
				COPY_PHASE_STRIP = NO;
 | 
			
		||||
				GCC_C_LANGUAGE_STANDARD = gnu99;
 | 
			
		||||
				GCC_DYNAMIC_NO_PIC = NO;
 | 
			
		||||
@@ -6044,6 +6125,7 @@
 | 
			
		||||
				ALWAYS_SEARCH_USER_PATHS = NO;
 | 
			
		||||
				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
 | 
			
		||||
				CLANG_ENABLE_OBJC_ARC = YES;
 | 
			
		||||
				CLANG_WARN_OBJCPP_ARC_ABI = YES;
 | 
			
		||||
				COPY_PHASE_STRIP = YES;
 | 
			
		||||
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 | 
			
		||||
				GCC_C_LANGUAGE_STANDARD = gnu99;
 | 
			
		||||
@@ -6090,7 +6172,6 @@
 | 
			
		||||
		DAB8D9E11503940100CED3BC /* Debug */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			buildSettings = {
 | 
			
		||||
				CLANG_ENABLE_OBJC_ARC = NO;
 | 
			
		||||
				DYLIB_COMPATIBILITY_VERSION = 1;
 | 
			
		||||
				DYLIB_CURRENT_VERSION = 1;
 | 
			
		||||
				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 | 
			
		||||
@@ -6106,7 +6187,6 @@
 | 
			
		||||
		DAB8D9E21503940100CED3BC /* Release */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			buildSettings = {
 | 
			
		||||
				CLANG_ENABLE_OBJC_ARC = NO;
 | 
			
		||||
				DYLIB_COMPATIBILITY_VERSION = 1;
 | 
			
		||||
				DYLIB_CURRENT_VERSION = 1;
 | 
			
		||||
				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 | 
			
		||||
@@ -6122,6 +6202,14 @@
 | 
			
		||||
/* End XCBuildConfiguration section */
 | 
			
		||||
 | 
			
		||||
/* Begin XCConfigurationList section */
 | 
			
		||||
		DA79A9F3155821E500BAA07A /* Build configuration list for PBXNativeTarget "iCloudStoreManager" */ = {
 | 
			
		||||
			isa = XCConfigurationList;
 | 
			
		||||
			buildConfigurations = (
 | 
			
		||||
				DA79A9F4155821E500BAA07A /* Debug */,
 | 
			
		||||
				DA79A9F5155821E500BAA07A /* Release */,
 | 
			
		||||
			);
 | 
			
		||||
			defaultConfigurationIsVisible = 0;
 | 
			
		||||
		};
 | 
			
		||||
		DAB8D982150374AC00CED3BC /* Build configuration list for PBXProject "MasterPassword-Mac" */ = {
 | 
			
		||||
			isa = XCConfigurationList;
 | 
			
		||||
			buildConfigurations = (
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,12 @@
 | 
			
		||||
 | 
			
		||||
/* Begin PBXBuildFile section */
 | 
			
		||||
		DA04E33E14B1E70400ECA4F3 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA04E33D14B1E70400ECA4F3 /* MobileCoreServices.framework */; };
 | 
			
		||||
		DA1A144414E4950C00BCFFBE /* libscryptenc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA1A143814E494DE00BCFFBE /* libscryptenc.a */; };
 | 
			
		||||
		DA4425CC1557BED40052177D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
 | 
			
		||||
		DA4426001557BF260052177D /* UbiquityStoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DA4425F11557BF260052177D /* UbiquityStoreManager.h */; };
 | 
			
		||||
		DA4426011557BF260052177D /* UbiquityStoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DA4425F21557BF260052177D /* UbiquityStoreManager.m */; };
 | 
			
		||||
		DA4426081557C1990052177D /* MPAppDelegate_Shared.m in Sources */ = {isa = PBXBuildFile; fileRef = DA4426051557C1990052177D /* MPAppDelegate_Shared.m */; };
 | 
			
		||||
		DA4426091557C1990052177D /* MPAppDelegate_Store.m in Sources */ = {isa = PBXBuildFile; fileRef = DA4426071557C1990052177D /* MPAppDelegate_Store.m */; };
 | 
			
		||||
		DA44260A1557D9E40052177D /* libiCloudStoreManager.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA4425CB1557BED40052177D /* libiCloudStoreManager.a */; };
 | 
			
		||||
		DA5BFA49147E415C00F98B1E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA48147E415C00F98B1E /* UIKit.framework */; };
 | 
			
		||||
		DA5BFA4B147E415C00F98B1E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
 | 
			
		||||
		DA5BFA4D147E415C00F98B1E /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4C147E415C00F98B1E /* CoreGraphics.framework */; };
 | 
			
		||||
@@ -17,6 +22,9 @@
 | 
			
		||||
		DA600C2815056428008E9AB6 /* MPConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = DA600C2715056427008E9AB6 /* MPConfig.m */; };
 | 
			
		||||
		DA672D2F14F92C6B004A189C /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = DA672D2E14F92C6B004A189C /* libz.dylib */; };
 | 
			
		||||
		DA672D3014F9413D004A189C /* libPearl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC77CAD148291A600BCF976 /* libPearl.a */; };
 | 
			
		||||
		DA79A9B91557DB4C00BAA07A /* libjrswizzle.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC6326C148680650075AEA5 /* libjrswizzle.a */; };
 | 
			
		||||
		DA79A9BA1557DB4C00BAA07A /* libuicolor-utilities.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC6325D1486805C0075AEA5 /* libuicolor-utilities.a */; };
 | 
			
		||||
		DA79A9BC1557DB6F00BAA07A /* libscryptenc-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA79A9BB1557DB6F00BAA07A /* libscryptenc-ios.a */; };
 | 
			
		||||
		DA95D59D14DF063C008D1B94 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
 | 
			
		||||
		DA95D5CF14DF0691008D1B94 /* IASKAppSettingsViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = DA95D5A814DF0691008D1B94 /* IASKAppSettingsViewController.h */; };
 | 
			
		||||
		DA95D5D014DF0691008D1B94 /* IASKAppSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA95D5A914DF0691008D1B94 /* IASKAppSettingsViewController.m */; };
 | 
			
		||||
@@ -714,8 +722,6 @@
 | 
			
		||||
		DABB981615100B4000B05417 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DABB981515100B4000B05417 /* SystemConfiguration.framework */; };
 | 
			
		||||
		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 */; };
 | 
			
		||||
		DAC63278148680740075AEA5 /* libjrswizzle.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC6326C148680650075AEA5 /* libjrswizzle.a */; };
 | 
			
		||||
		DAC6327B1486809A0075AEA5 /* JRSwizzle.h in Headers */ = {isa = PBXBuildFile; fileRef = DAC632791486809A0075AEA5 /* JRSwizzle.h */; };
 | 
			
		||||
		DAC6327C1486809A0075AEA5 /* JRSwizzle.m in Sources */ = {isa = PBXBuildFile; fileRef = DAC6327A1486809A0075AEA5 /* JRSwizzle.m */; };
 | 
			
		||||
		DAC632891486D9690075AEA5 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC632871486D95D0075AEA5 /* Security.framework */; };
 | 
			
		||||
@@ -815,27 +821,34 @@
 | 
			
		||||
/* End PBXBuildFile section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXContainerItemProxy section */
 | 
			
		||||
		DA1A143714E494DE00BCFFBE /* PBXContainerItemProxy */ = {
 | 
			
		||||
		DA79A9CD1557DDC800BAA07A /* PBXContainerItemProxy */ = {
 | 
			
		||||
			isa = PBXContainerItemProxy;
 | 
			
		||||
			containerPortal = DA1A142714E494DA00BCFFBE /* scrypt.xcodeproj */;
 | 
			
		||||
			containerPortal = DA79A9BD1557DDC700BAA07A /* scrypt.xcodeproj */;
 | 
			
		||||
			proxyType = 2;
 | 
			
		||||
			remoteGlobalIDString = D2AAC07E0554694100DB518D;
 | 
			
		||||
			remoteInfo = scryptenc;
 | 
			
		||||
		};
 | 
			
		||||
		DA1A143914E494DE00BCFFBE /* PBXContainerItemProxy */ = {
 | 
			
		||||
		DA79A9CF1557DDC800BAA07A /* PBXContainerItemProxy */ = {
 | 
			
		||||
			isa = PBXContainerItemProxy;
 | 
			
		||||
			containerPortal = DA1A142714E494DA00BCFFBE /* scrypt.xcodeproj */;
 | 
			
		||||
			containerPortal = DA79A9BD1557DDC700BAA07A /* scrypt.xcodeproj */;
 | 
			
		||||
			proxyType = 2;
 | 
			
		||||
			remoteGlobalIDString = A0511C5A127770FD00DE46C4;
 | 
			
		||||
			remoteInfo = scryptcrypto;
 | 
			
		||||
		};
 | 
			
		||||
		DA1A143B14E494DE00BCFFBE /* PBXContainerItemProxy */ = {
 | 
			
		||||
		DA79A9D11557DDC800BAA07A /* PBXContainerItemProxy */ = {
 | 
			
		||||
			isa = PBXContainerItemProxy;
 | 
			
		||||
			containerPortal = DA1A142714E494DA00BCFFBE /* scrypt.xcodeproj */;
 | 
			
		||||
			containerPortal = DA79A9BD1557DDC700BAA07A /* scrypt.xcodeproj */;
 | 
			
		||||
			proxyType = 2;
 | 
			
		||||
			remoteGlobalIDString = DA67FE5D14E4834300DB7CC9;
 | 
			
		||||
			remoteInfo = util;
 | 
			
		||||
		};
 | 
			
		||||
		DA79A9D91557DDEB00BAA07A /* PBXContainerItemProxy */ = {
 | 
			
		||||
			isa = PBXContainerItemProxy;
 | 
			
		||||
			containerPortal = DA79A9BD1557DDC700BAA07A /* scrypt.xcodeproj */;
 | 
			
		||||
			proxyType = 1;
 | 
			
		||||
			remoteGlobalIDString = A0511DED127788EC00DE46C4;
 | 
			
		||||
			remoteInfo = "Makefile-scrypt";
 | 
			
		||||
		};
 | 
			
		||||
		DAC63283148681200075AEA5 /* PBXContainerItemProxy */ = {
 | 
			
		||||
			isa = PBXContainerItemProxy;
 | 
			
		||||
			containerPortal = DA5BFA3B147E415C00F98B1E /* Project object */;
 | 
			
		||||
@@ -854,7 +867,13 @@
 | 
			
		||||
 | 
			
		||||
/* Begin PBXFileReference section */
 | 
			
		||||
		DA04E33D14B1E70400ECA4F3 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; };
 | 
			
		||||
		DA1A142714E494DA00BCFFBE /* scrypt.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = scrypt.xcodeproj; path = External/Pearl/External/iOSPorts/ports/security/scrypt/scrypt.xcodeproj; sourceTree = "<group>"; };
 | 
			
		||||
		DA4425CB1557BED40052177D /* libiCloudStoreManager.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libiCloudStoreManager.a; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
			
		||||
		DA4425F11557BF260052177D /* UbiquityStoreManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UbiquityStoreManager.h; sourceTree = "<group>"; };
 | 
			
		||||
		DA4425F21557BF260052177D /* UbiquityStoreManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UbiquityStoreManager.m; sourceTree = "<group>"; };
 | 
			
		||||
		DA4426041557C1990052177D /* MPAppDelegate_Shared.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAppDelegate_Shared.h; sourceTree = "<group>"; };
 | 
			
		||||
		DA4426051557C1990052177D /* MPAppDelegate_Shared.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAppDelegate_Shared.m; sourceTree = "<group>"; };
 | 
			
		||||
		DA4426061557C1990052177D /* MPAppDelegate_Store.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAppDelegate_Store.h; sourceTree = "<group>"; };
 | 
			
		||||
		DA4426071557C1990052177D /* MPAppDelegate_Store.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAppDelegate_Store.m; sourceTree = "<group>"; };
 | 
			
		||||
		DA5BFA44147E415C00F98B1E /* MasterPassword.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MasterPassword.app; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
			
		||||
		DA5BFA48147E415C00F98B1E /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
 | 
			
		||||
		DA5BFA4A147E415C00F98B1E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
 | 
			
		||||
@@ -865,6 +884,8 @@
 | 
			
		||||
		DA600C2615056427008E9AB6 /* MPConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MPConfig.h; path = MasterPassword/MPConfig.h; sourceTree = SOURCE_ROOT; };
 | 
			
		||||
		DA600C2715056427008E9AB6 /* MPConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MPConfig.m; path = MasterPassword/MPConfig.m; sourceTree = SOURCE_ROOT; };
 | 
			
		||||
		DA672D2E14F92C6B004A189C /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
 | 
			
		||||
		DA79A9BB1557DB6F00BAA07A /* libscryptenc-ios.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libscryptenc-ios.a"; sourceTree = "<group>"; };
 | 
			
		||||
		DA79A9BD1557DDC700BAA07A /* scrypt.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = scrypt.xcodeproj; path = External/Pearl/External/iOSPorts/ports/security/scrypt/scrypt.xcodeproj; sourceTree = "<group>"; };
 | 
			
		||||
		DA95D59C14DF063C008D1B94 /* libInAppSettingsKit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libInAppSettingsKit.a; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
			
		||||
		DA95D5A814DF0691008D1B94 /* IASKAppSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKAppSettingsViewController.h; sourceTree = "<group>"; };
 | 
			
		||||
		DA95D5A914DF0691008D1B94 /* IASKAppSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKAppSettingsViewController.m; sourceTree = "<group>"; };
 | 
			
		||||
@@ -1680,10 +1701,21 @@
 | 
			
		||||
/* End PBXFileReference section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXFrameworksBuildPhase section */
 | 
			
		||||
		DA4425C81557BED40052177D /* Frameworks */ = {
 | 
			
		||||
			isa = PBXFrameworksBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
			files = (
 | 
			
		||||
				DA4425CC1557BED40052177D /* Foundation.framework in Frameworks */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
		DA5BFA41147E415C00F98B1E /* Frameworks */ = {
 | 
			
		||||
			isa = PBXFrameworksBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
			files = (
 | 
			
		||||
				DA79A9B91557DB4C00BAA07A /* libjrswizzle.a in Frameworks */,
 | 
			
		||||
				DA79A9BA1557DB4C00BAA07A /* libuicolor-utilities.a in Frameworks */,
 | 
			
		||||
				DA44260A1557D9E40052177D /* libiCloudStoreManager.a in Frameworks */,
 | 
			
		||||
				DAD312C21552A22700A3F9ED /* libsqlite3.dylib in Frameworks */,
 | 
			
		||||
				DAD312BF1552A1BD00A3F9ED /* libLocalytics.a in Frameworks */,
 | 
			
		||||
				DABB981615100B4000B05417 /* SystemConfiguration.framework in Frameworks */,
 | 
			
		||||
@@ -1700,6 +1732,7 @@
 | 
			
		||||
				DA5BFA4F147E415C00F98B1E /* CoreData.framework in Frameworks */,
 | 
			
		||||
				DAD3126715528C9C00A3F9ED /* Crashlytics.framework in Frameworks */,
 | 
			
		||||
				DAD3126915528C9C00A3F9ED /* libTestFlight.a in Frameworks */,
 | 
			
		||||
				DA79A9BC1557DB6F00BAA07A /* libscryptenc-ios.a in Frameworks */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
@@ -1731,9 +1764,6 @@
 | 
			
		||||
			isa = PBXFrameworksBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
			files = (
 | 
			
		||||
				DA1A144414E4950C00BCFFBE /* libscryptenc.a in Frameworks */,
 | 
			
		||||
				DAC63278148680740075AEA5 /* libjrswizzle.a in Frameworks */,
 | 
			
		||||
				DAC63277148680700075AEA5 /* libuicolor-utilities.a in Frameworks */,
 | 
			
		||||
				DAC77CAE148291A600BCF976 /* Foundation.framework in Frameworks */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
@@ -1749,20 +1779,20 @@
 | 
			
		||||
/* End PBXFrameworksBuildPhase section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXGroup section */
 | 
			
		||||
		DA1A142814E494DA00BCFFBE /* Products */ = {
 | 
			
		||||
		DA4425D71557BF260052177D /* iCloudStoreManager */ = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
				DA1A143814E494DE00BCFFBE /* libscryptenc.a */,
 | 
			
		||||
				DA1A143A14E494DE00BCFFBE /* libscryptcrypto.a */,
 | 
			
		||||
				DA1A143C14E494DE00BCFFBE /* libutil.a */,
 | 
			
		||||
				DA4425F11557BF260052177D /* UbiquityStoreManager.h */,
 | 
			
		||||
				DA4425F21557BF260052177D /* UbiquityStoreManager.m */,
 | 
			
		||||
			);
 | 
			
		||||
			name = Products;
 | 
			
		||||
			name = iCloudStoreManager;
 | 
			
		||||
			path = External/iCloudStoreManager/iCloudStoreManager;
 | 
			
		||||
			sourceTree = "<group>";
 | 
			
		||||
		};
 | 
			
		||||
		DA5BFA39147E415C00F98B1E = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
				DA1A142714E494DA00BCFFBE /* scrypt.xcodeproj */,
 | 
			
		||||
				DA79A9BD1557DDC700BAA07A /* scrypt.xcodeproj */,
 | 
			
		||||
				DA5BFA50147E415C00F98B1E /* MasterPassword */,
 | 
			
		||||
				DAB8D46F15036BF600CED3BC /* Resources */,
 | 
			
		||||
				DABB980A150FF40100B05417 /* SendToMac */,
 | 
			
		||||
@@ -1773,6 +1803,7 @@
 | 
			
		||||
				DAD3125E15528C9C00A3F9ED /* Crashlytics */,
 | 
			
		||||
				DAD3126115528C9C00A3F9ED /* TestFlight */,
 | 
			
		||||
				DAD3127315528CD200A3F9ED /* Localytics */,
 | 
			
		||||
				DA4425D71557BF260052177D /* iCloudStoreManager */,
 | 
			
		||||
				DA5BFA47147E415C00F98B1E /* Frameworks */,
 | 
			
		||||
				DA5BFA45147E415C00F98B1E /* Products */,
 | 
			
		||||
			);
 | 
			
		||||
@@ -1787,6 +1818,7 @@
 | 
			
		||||
				DAC6326C148680650075AEA5 /* libjrswizzle.a */,
 | 
			
		||||
				DA95D59C14DF063C008D1B94 /* libInAppSettingsKit.a */,
 | 
			
		||||
				DAD3127115528CD200A3F9ED /* libLocalytics.a */,
 | 
			
		||||
				DA4425CB1557BED40052177D /* libiCloudStoreManager.a */,
 | 
			
		||||
			);
 | 
			
		||||
			name = Products;
 | 
			
		||||
			sourceTree = "<group>";
 | 
			
		||||
@@ -1816,6 +1848,10 @@
 | 
			
		||||
				DAB8D43E15036BCF00CED3BC /* iOS */,
 | 
			
		||||
				DA600C2415054F3A008E9AB6 /* MPAppDelegate_Key.h */,
 | 
			
		||||
				DA600C2315054F3A008E9AB6 /* MPAppDelegate_Key.m */,
 | 
			
		||||
				DA4426041557C1990052177D /* MPAppDelegate_Shared.h */,
 | 
			
		||||
				DA4426051557C1990052177D /* MPAppDelegate_Shared.m */,
 | 
			
		||||
				DA4426061557C1990052177D /* MPAppDelegate_Store.h */,
 | 
			
		||||
				DA4426071557C1990052177D /* MPAppDelegate_Store.m */,
 | 
			
		||||
				DA600C2615056427008E9AB6 /* MPConfig.h */,
 | 
			
		||||
				DA600C2715056427008E9AB6 /* MPConfig.m */,
 | 
			
		||||
				DAB8D45515036BCF00CED3BC /* MPElementStoredEntity.m */,
 | 
			
		||||
@@ -1830,6 +1866,16 @@
 | 
			
		||||
			path = MasterPassword;
 | 
			
		||||
			sourceTree = "<group>";
 | 
			
		||||
		};
 | 
			
		||||
		DA79A9BE1557DDC700BAA07A /* Products */ = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
				DA79A9CE1557DDC800BAA07A /* libscryptenc.a */,
 | 
			
		||||
				DA79A9D01557DDC800BAA07A /* libscryptcrypto.a */,
 | 
			
		||||
				DA79A9D21557DDC800BAA07A /* libutil.a */,
 | 
			
		||||
			);
 | 
			
		||||
			name = Products;
 | 
			
		||||
			sourceTree = "<group>";
 | 
			
		||||
		};
 | 
			
		||||
		DA95D59E14DF063C008D1B94 /* InAppSettingsKit */ = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
@@ -2796,6 +2842,7 @@
 | 
			
		||||
		DAFE45FC15039823003ABA7C /* Pearl-Crypto */ = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
				DA79A9BB1557DB6F00BAA07A /* libscryptenc-ios.a */,
 | 
			
		||||
				DAFE45FD15039823003ABA7C /* Pearl-Crypto.h */,
 | 
			
		||||
				DAFE45FE15039823003ABA7C /* PearlCryptUtils.h */,
 | 
			
		||||
				DAFE45FF15039823003ABA7C /* PearlCryptUtils.m */,
 | 
			
		||||
@@ -2863,6 +2910,14 @@
 | 
			
		||||
/* End PBXGroup section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXHeadersBuildPhase section */
 | 
			
		||||
		DA4425C91557BED40052177D /* Headers */ = {
 | 
			
		||||
			isa = PBXHeadersBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
			files = (
 | 
			
		||||
				DA4426001557BF260052177D /* UbiquityStoreManager.h in Headers */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
		DA95D59A14DF063C008D1B94 /* Headers */ = {
 | 
			
		||||
			isa = PBXHeadersBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
@@ -2961,6 +3016,23 @@
 | 
			
		||||
/* End PBXHeadersBuildPhase section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXNativeTarget section */
 | 
			
		||||
		DA4425CA1557BED40052177D /* iCloudStoreManager */ = {
 | 
			
		||||
			isa = PBXNativeTarget;
 | 
			
		||||
			buildConfigurationList = DA4425D31557BED40052177D /* Build configuration list for PBXNativeTarget "iCloudStoreManager" */;
 | 
			
		||||
			buildPhases = (
 | 
			
		||||
				DA4425C71557BED40052177D /* Sources */,
 | 
			
		||||
				DA4425C81557BED40052177D /* Frameworks */,
 | 
			
		||||
				DA4425C91557BED40052177D /* Headers */,
 | 
			
		||||
			);
 | 
			
		||||
			buildRules = (
 | 
			
		||||
			);
 | 
			
		||||
			dependencies = (
 | 
			
		||||
			);
 | 
			
		||||
			name = iCloudStoreManager;
 | 
			
		||||
			productName = iCloudStoreManager;
 | 
			
		||||
			productReference = DA4425CB1557BED40052177D /* libiCloudStoreManager.a */;
 | 
			
		||||
			productType = "com.apple.product-type.library.static";
 | 
			
		||||
		};
 | 
			
		||||
		DA5BFA43147E415C00F98B1E /* MasterPassword */ = {
 | 
			
		||||
			isa = PBXNativeTarget;
 | 
			
		||||
			buildConfigurationList = DA5BFA6D147E415C00F98B1E /* Build configuration list for PBXNativeTarget "MasterPassword" */;
 | 
			
		||||
@@ -2974,6 +3046,7 @@
 | 
			
		||||
			buildRules = (
 | 
			
		||||
			);
 | 
			
		||||
			dependencies = (
 | 
			
		||||
				DA79A9DA1557DDEB00BAA07A /* PBXTargetDependency */,
 | 
			
		||||
			);
 | 
			
		||||
			name = MasterPassword;
 | 
			
		||||
			productName = MasterPassword;
 | 
			
		||||
@@ -3090,8 +3163,8 @@
 | 
			
		||||
			projectDirPath = "";
 | 
			
		||||
			projectReferences = (
 | 
			
		||||
				{
 | 
			
		||||
					ProductGroup = DA1A142814E494DA00BCFFBE /* Products */;
 | 
			
		||||
					ProjectRef = DA1A142714E494DA00BCFFBE /* scrypt.xcodeproj */;
 | 
			
		||||
					ProductGroup = DA79A9BE1557DDC700BAA07A /* Products */;
 | 
			
		||||
					ProjectRef = DA79A9BD1557DDC700BAA07A /* scrypt.xcodeproj */;
 | 
			
		||||
				},
 | 
			
		||||
			);
 | 
			
		||||
			projectRoot = "";
 | 
			
		||||
@@ -3102,30 +3175,31 @@
 | 
			
		||||
				DAC6326B148680650075AEA5 /* jrswizzle */,
 | 
			
		||||
				DA95D59B14DF063C008D1B94 /* InAppSettingsKit */,
 | 
			
		||||
				DAD3127015528CD200A3F9ED /* Localytics */,
 | 
			
		||||
				DA4425CA1557BED40052177D /* iCloudStoreManager */,
 | 
			
		||||
			);
 | 
			
		||||
		};
 | 
			
		||||
/* End PBXProject section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXReferenceProxy section */
 | 
			
		||||
		DA1A143814E494DE00BCFFBE /* libscryptenc.a */ = {
 | 
			
		||||
		DA79A9CE1557DDC800BAA07A /* libscryptenc.a */ = {
 | 
			
		||||
			isa = PBXReferenceProxy;
 | 
			
		||||
			fileType = archive.ar;
 | 
			
		||||
			path = libscryptenc.a;
 | 
			
		||||
			remoteRef = DA1A143714E494DE00BCFFBE /* PBXContainerItemProxy */;
 | 
			
		||||
			remoteRef = DA79A9CD1557DDC800BAA07A /* PBXContainerItemProxy */;
 | 
			
		||||
			sourceTree = BUILT_PRODUCTS_DIR;
 | 
			
		||||
		};
 | 
			
		||||
		DA1A143A14E494DE00BCFFBE /* libscryptcrypto.a */ = {
 | 
			
		||||
		DA79A9D01557DDC800BAA07A /* libscryptcrypto.a */ = {
 | 
			
		||||
			isa = PBXReferenceProxy;
 | 
			
		||||
			fileType = archive.ar;
 | 
			
		||||
			path = libscryptcrypto.a;
 | 
			
		||||
			remoteRef = DA1A143914E494DE00BCFFBE /* PBXContainerItemProxy */;
 | 
			
		||||
			remoteRef = DA79A9CF1557DDC800BAA07A /* PBXContainerItemProxy */;
 | 
			
		||||
			sourceTree = BUILT_PRODUCTS_DIR;
 | 
			
		||||
		};
 | 
			
		||||
		DA1A143C14E494DE00BCFFBE /* libutil.a */ = {
 | 
			
		||||
		DA79A9D21557DDC800BAA07A /* libutil.a */ = {
 | 
			
		||||
			isa = PBXReferenceProxy;
 | 
			
		||||
			fileType = archive.ar;
 | 
			
		||||
			path = libutil.a;
 | 
			
		||||
			remoteRef = DA1A143B14E494DE00BCFFBE /* PBXContainerItemProxy */;
 | 
			
		||||
			remoteRef = DA79A9D11557DDC800BAA07A /* PBXContainerItemProxy */;
 | 
			
		||||
			sourceTree = BUILT_PRODUCTS_DIR;
 | 
			
		||||
		};
 | 
			
		||||
/* End PBXReferenceProxy section */
 | 
			
		||||
@@ -3825,6 +3899,14 @@
 | 
			
		||||
/* End PBXShellScriptBuildPhase section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXSourcesBuildPhase section */
 | 
			
		||||
		DA4425C71557BED40052177D /* Sources */ = {
 | 
			
		||||
			isa = PBXSourcesBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
			files = (
 | 
			
		||||
				DA4426011557BF260052177D /* UbiquityStoreManager.m in Sources */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
		DA5BFA40147E415C00F98B1E /* Sources */ = {
 | 
			
		||||
			isa = PBXSourcesBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
@@ -3844,6 +3926,8 @@
 | 
			
		||||
				DAB8D46E15036BCF00CED3BC /* MPElementGeneratedEntity.m in Sources */,
 | 
			
		||||
				DA600C2515054F3A008E9AB6 /* MPAppDelegate_Key.m in Sources */,
 | 
			
		||||
				DA600C2815056428008E9AB6 /* MPConfig.m in Sources */,
 | 
			
		||||
				DA4426081557C1990052177D /* MPAppDelegate_Shared.m in Sources */,
 | 
			
		||||
				DA4426091557C1990052177D /* MPAppDelegate_Store.m in Sources */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
@@ -3939,6 +4023,11 @@
 | 
			
		||||
/* End PBXSourcesBuildPhase section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXTargetDependency section */
 | 
			
		||||
		DA79A9DA1557DDEB00BAA07A /* PBXTargetDependency */ = {
 | 
			
		||||
			isa = PBXTargetDependency;
 | 
			
		||||
			name = "Makefile-scrypt";
 | 
			
		||||
			targetProxy = DA79A9D91557DDEB00BAA07A /* PBXContainerItemProxy */;
 | 
			
		||||
		};
 | 
			
		||||
		DAC63284148681200075AEA5 /* PBXTargetDependency */ = {
 | 
			
		||||
			isa = PBXTargetDependency;
 | 
			
		||||
			target = DAC6325C1486805C0075AEA5 /* uicolor-utilities */;
 | 
			
		||||
@@ -3971,6 +4060,27 @@
 | 
			
		||||
/* End PBXVariantGroup section */
 | 
			
		||||
 | 
			
		||||
/* Begin XCBuildConfiguration section */
 | 
			
		||||
		DA4425D41557BED40052177D /* Debug */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			buildSettings = {
 | 
			
		||||
				CLANG_ENABLE_OBJC_ARC = YES;
 | 
			
		||||
			};
 | 
			
		||||
			name = Debug;
 | 
			
		||||
		};
 | 
			
		||||
		DA4425D51557BED40052177D /* AdHoc */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			buildSettings = {
 | 
			
		||||
				CLANG_ENABLE_OBJC_ARC = YES;
 | 
			
		||||
			};
 | 
			
		||||
			name = AdHoc;
 | 
			
		||||
		};
 | 
			
		||||
		DA4425D61557BED40052177D /* AppStore */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			buildSettings = {
 | 
			
		||||
				CLANG_ENABLE_OBJC_ARC = YES;
 | 
			
		||||
			};
 | 
			
		||||
			name = AppStore;
 | 
			
		||||
		};
 | 
			
		||||
		DA5BFA6B147E415C00F98B1E /* Debug */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			buildSettings = {
 | 
			
		||||
@@ -4100,6 +4210,7 @@
 | 
			
		||||
				LIBRARY_SEARCH_PATHS = (
 | 
			
		||||
					"$(inherited)",
 | 
			
		||||
					"\"$(SRCROOT)/TestFlight\"",
 | 
			
		||||
					"\"$(SRCROOT)/External/Pearl/Pearl-Crypto\"",
 | 
			
		||||
				);
 | 
			
		||||
			};
 | 
			
		||||
			name = Debug;
 | 
			
		||||
@@ -4118,6 +4229,7 @@
 | 
			
		||||
				LIBRARY_SEARCH_PATHS = (
 | 
			
		||||
					"$(inherited)",
 | 
			
		||||
					"\"$(SRCROOT)/TestFlight\"",
 | 
			
		||||
					"\"$(SRCROOT)/External/Pearl/Pearl-Crypto\"",
 | 
			
		||||
				);
 | 
			
		||||
			};
 | 
			
		||||
			name = AdHoc;
 | 
			
		||||
@@ -4216,6 +4328,7 @@
 | 
			
		||||
				LIBRARY_SEARCH_PATHS = (
 | 
			
		||||
					"$(inherited)",
 | 
			
		||||
					"\"$(SRCROOT)/TestFlight\"",
 | 
			
		||||
					"\"$(SRCROOT)/External/Pearl/Pearl-Crypto\"",
 | 
			
		||||
				);
 | 
			
		||||
			};
 | 
			
		||||
			name = AppStore;
 | 
			
		||||
@@ -4369,6 +4482,16 @@
 | 
			
		||||
/* End XCBuildConfiguration section */
 | 
			
		||||
 | 
			
		||||
/* Begin XCConfigurationList section */
 | 
			
		||||
		DA4425D31557BED40052177D /* Build configuration list for PBXNativeTarget "iCloudStoreManager" */ = {
 | 
			
		||||
			isa = XCConfigurationList;
 | 
			
		||||
			buildConfigurations = (
 | 
			
		||||
				DA4425D41557BED40052177D /* Debug */,
 | 
			
		||||
				DA4425D51557BED40052177D /* AdHoc */,
 | 
			
		||||
				DA4425D61557BED40052177D /* AppStore */,
 | 
			
		||||
			);
 | 
			
		||||
			defaultConfigurationIsVisible = 0;
 | 
			
		||||
			defaultConfigurationName = AdHoc;
 | 
			
		||||
		};
 | 
			
		||||
		DA5BFA3E147E415C00F98B1E /* Build configuration list for PBXProject "MasterPassword-iOS" */ = {
 | 
			
		||||
			isa = XCConfigurationList;
 | 
			
		||||
			buildConfigurations = (
 | 
			
		||||
 
 | 
			
		||||
@@ -8,34 +8,8 @@
 | 
			
		||||
 | 
			
		||||
#import "MPAppDelegate.h"
 | 
			
		||||
 | 
			
		||||
@interface MPAppDelegate () {
 | 
			
		||||
    
 | 
			
		||||
    NSPersistentStoreCoordinator                                        *_persistentStoreCoordinator;
 | 
			
		||||
    NSManagedObjectModel                                                *_managedObjectModel;
 | 
			
		||||
    NSManagedObjectContext                                              *_managedObjectContext;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator    *persistentStoreCoordinator;
 | 
			
		||||
@property (readonly, strong, nonatomic) NSManagedObjectModel            *managedObjectModel;
 | 
			
		||||
@property (readonly, strong, nonatomic) NSManagedObjectContext          *managedObjectContext;
 | 
			
		||||
 | 
			
		||||
@property (strong, nonatomic) NSData                                    *key;
 | 
			
		||||
@property (strong, nonatomic) NSData                                    *keyHash;
 | 
			
		||||
@property (strong, nonatomic) NSString                                  *keyHashHex;
 | 
			
		||||
 | 
			
		||||
@end
 | 
			
		||||
 | 
			
		||||
@interface MPAppDelegate (Key)
 | 
			
		||||
 | 
			
		||||
+ (MPAppDelegate *)get;
 | 
			
		||||
 | 
			
		||||
- (NSURL *)applicationFilesDirectory;
 | 
			
		||||
 | 
			
		||||
+ (NSManagedObjectModel *)managedObjectModel;
 | 
			
		||||
+ (NSManagedObjectContext *)managedObjectContext;
 | 
			
		||||
- (void)saveContext;
 | 
			
		||||
- (void)printStore;
 | 
			
		||||
 | 
			
		||||
- (void)loadStoredKey;
 | 
			
		||||
- (IBAction)signOut:(id)sender;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#import "MPConfig.h"
 | 
			
		||||
#import "MPAppDelegate_Key.h"
 | 
			
		||||
#import "MPAppDelegate_Shared.h"
 | 
			
		||||
#import "MPElementEntity.h"
 | 
			
		||||
 | 
			
		||||
@implementation MPAppDelegate (Key)
 | 
			
		||||
@@ -36,181 +36,6 @@ static NSDictionary *keyHashQuery() {
 | 
			
		||||
    return MPKeyHashQuery;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (NSURL *)applicationFilesDirectory {
 | 
			
		||||
 | 
			
		||||
#if __IPHONE_OS_VERSION_MIN_REQUIRED
 | 
			
		||||
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
 | 
			
		||||
#else
 | 
			
		||||
    NSURL *appSupportURL = [[[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory inDomains:NSUserDomainMask] lastObject];
 | 
			
		||||
    NSURL *applicationFilesDirectory = [appSupportURL URLByAppendingPathComponent:@"com.lyndir.lhunath.MasterPassword"];
 | 
			
		||||
    
 | 
			
		||||
    NSError *error = nil;
 | 
			
		||||
    [[NSFileManager defaultManager] createDirectoryAtURL:applicationFilesDirectory withIntermediateDirectories:YES attributes:nil error:&error];
 | 
			
		||||
    if (error)
 | 
			
		||||
        err(@"Couldn't create application directory: %@, error occurred: %@", applicationFilesDirectory, error);
 | 
			
		||||
    
 | 
			
		||||
    return applicationFilesDirectory;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#pragma mark - Core Data stack
 | 
			
		||||
 | 
			
		||||
+ (NSManagedObjectContext *)managedObjectContext {
 | 
			
		||||
    
 | 
			
		||||
    return [[self get] managedObjectContext];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
+ (NSManagedObjectModel *)managedObjectModel {
 | 
			
		||||
    
 | 
			
		||||
    return [[self get] managedObjectModel];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (NSManagedObjectModel *)managedObjectModel {
 | 
			
		||||
    
 | 
			
		||||
    if (_managedObjectModel)
 | 
			
		||||
        return _managedObjectModel;
 | 
			
		||||
	
 | 
			
		||||
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"MasterPassword" withExtension:@"momd"];
 | 
			
		||||
    return _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (NSManagedObjectContext *)managedObjectContext {
 | 
			
		||||
    
 | 
			
		||||
    if (_managedObjectContext)
 | 
			
		||||
        return _managedObjectContext;
 | 
			
		||||
    
 | 
			
		||||
    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
 | 
			
		||||
    if (coordinator) {
 | 
			
		||||
        // Put concurrency type on main queue, because otherwise updates break updating the search table UI.
 | 
			
		||||
        _managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType/*NSPrivateQueueConcurrencyType*/];
 | 
			
		||||
        _managedObjectContext.persistentStoreCoordinator = coordinator;
 | 
			
		||||
        
 | 
			
		||||
        [[NSNotificationCenter defaultCenter] addObserverForName:NSPersistentStoreDidImportUbiquitousContentChangesNotification
 | 
			
		||||
                                                          object:coordinator
 | 
			
		||||
                                                           queue:nil
 | 
			
		||||
                                                      usingBlock:^(NSNotification *note) {
 | 
			
		||||
                                                          dbg(@"Ubiquitous content change: %@", note);
 | 
			
		||||
                                                          
 | 
			
		||||
                                                          [_managedObjectContext performBlock:^{
 | 
			
		||||
                                                              [_managedObjectContext mergeChangesFromContextDidSaveNotification:note];
 | 
			
		||||
                                                              [self printStore];
 | 
			
		||||
                                                              
 | 
			
		||||
                                                              [[NSNotificationCenter defaultCenter] postNotification:
 | 
			
		||||
                                                               [NSNotification notificationWithName:MPNotificationStoreUpdated
 | 
			
		||||
                                                                                             object:self userInfo:[note userInfo]]];
 | 
			
		||||
                                                          }];
 | 
			
		||||
                                                      }];
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    return _managedObjectContext;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
 | 
			
		||||
    
 | 
			
		||||
    if (_persistentStoreCoordinator)
 | 
			
		||||
        return _persistentStoreCoordinator;
 | 
			
		||||
    
 | 
			
		||||
    NSString *contentName = @"store";
 | 
			
		||||
    NSURL *storeURL = [[self applicationFilesDirectory] URLByAppendingPathComponent:@"MasterPassword.sqlite"];
 | 
			
		||||
    NSURL *contentURL = [[[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]
 | 
			
		||||
                         URLByAppendingPathComponent:@"logs" isDirectory:YES];
 | 
			
		||||
    
 | 
			
		||||
//#if DEBUG
 | 
			
		||||
//    dbg(@"Deleting store and content.");
 | 
			
		||||
//    NSError *storeRemovalError = nil, *contentRemovalError = nil;
 | 
			
		||||
//    [[NSFileManager defaultManager] removeItemAtURL:storeURL error:&storeRemovalError];
 | 
			
		||||
//    if (storeRemovalError)
 | 
			
		||||
//        err(@"Store removal error: %@", storeRemovalError);
 | 
			
		||||
//    else
 | 
			
		||||
//        [[NSFileManager defaultManager] removeItemAtURL:contentURL error:&contentRemovalError];
 | 
			
		||||
//    if (contentRemovalError)
 | 
			
		||||
//        err(@"Content removal error: %@", contentRemovalError);
 | 
			
		||||
//#endif
 | 
			
		||||
    
 | 
			
		||||
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
 | 
			
		||||
    [_persistentStoreCoordinator lock];
 | 
			
		||||
    @try {
 | 
			
		||||
        NSError *error = nil;
 | 
			
		||||
        if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL
 | 
			
		||||
                                                             options:[NSDictionary dictionaryWithObjectsAndKeys:
 | 
			
		||||
                                                                      [NSNumber numberWithBool:YES],   NSInferMappingModelAutomaticallyOption,
 | 
			
		||||
                                                                      [NSNumber numberWithBool:YES],   NSMigratePersistentStoresAutomaticallyOption,
 | 
			
		||||
#if __IPHONE_OS_VERSION_MIN_REQUIRED
 | 
			
		||||
                                                                      NSFileProtectionComplete,        NSPersistentStoreFileProtectionKey,
 | 
			
		||||
#endif
 | 
			
		||||
                                                                      contentURL,                      NSPersistentStoreUbiquitousContentURLKey,
 | 
			
		||||
                                                                      contentName,                     NSPersistentStoreUbiquitousContentNameKey,
 | 
			
		||||
                                                                      nil]
 | 
			
		||||
                                                               error:&error]) {
 | 
			
		||||
            ftl(@"Unresolved error %@, %@", error, [error userInfo]);
 | 
			
		||||
#if DEBUG
 | 
			
		||||
            [[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil];        
 | 
			
		||||
            wrn(@"Deleted datastore: %@", storeURL);
 | 
			
		||||
#endif
 | 
			
		||||
            @throw error;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    @finally {
 | 
			
		||||
        [_persistentStoreCoordinator unlock];
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    return _persistentStoreCoordinator;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)saveContext {
 | 
			
		||||
    
 | 
			
		||||
    [self.managedObjectContext performBlock:^{
 | 
			
		||||
        NSError *error = nil;
 | 
			
		||||
        if ([self.managedObjectContext hasChanges] && ![self.managedObjectContext save:&error])
 | 
			
		||||
            err(@"Unresolved error %@", error);
 | 
			
		||||
    }];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)printStore {
 | 
			
		||||
    
 | 
			
		||||
    if (!_managedObjectModel || !_managedObjectContext) {
 | 
			
		||||
        trc(@"Not printing store: store not initialized.");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    [self.managedObjectContext performBlock:^{
 | 
			
		||||
        trc(@"=== All entities ===");
 | 
			
		||||
        for(NSEntityDescription *entity in [_managedObjectModel entities]) {
 | 
			
		||||
            NSFetchRequest *request = [NSFetchRequest new];
 | 
			
		||||
            [request setEntity:entity];
 | 
			
		||||
            NSError *error;
 | 
			
		||||
            NSArray *results = [_managedObjectContext executeFetchRequest:request error:&error];
 | 
			
		||||
            for(NSManagedObject *o in results) {
 | 
			
		||||
                if ([o isKindOfClass:[MPElementEntity class]]) {
 | 
			
		||||
                    MPElementEntity *e = (MPElementEntity *)o;
 | 
			
		||||
                    trc(@"For descriptor: %@, found: %@: %@ (%@)", entity.name, [o class], e.name, e.mpHashHex);
 | 
			
		||||
                } else {
 | 
			
		||||
                    trc(@"For descriptor: %@, found: %@", entity.name, [o class]);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        trc(@"---");
 | 
			
		||||
        if ([MPAppDelegate get].keyHashHex) {
 | 
			
		||||
            trc(@"=== Known sites ===");
 | 
			
		||||
            NSFetchRequest *fetchRequest = [_managedObjectModel
 | 
			
		||||
                                            fetchRequestFromTemplateWithName:@"MPElements"
 | 
			
		||||
                                            substitutionVariables:[NSDictionary dictionaryWithObjectsAndKeys:
 | 
			
		||||
                                                                   @"",                                     @"query",
 | 
			
		||||
                                                                   [MPAppDelegate get].keyHashHex,          @"mpHashHex",
 | 
			
		||||
                                                                   nil]];
 | 
			
		||||
            [fetchRequest setSortDescriptors:
 | 
			
		||||
             [NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"uses" ascending:NO]]];
 | 
			
		||||
            
 | 
			
		||||
            NSError *error = nil;
 | 
			
		||||
            for (MPElementEntity *e in [_managedObjectContext executeFetchRequest:fetchRequest error:&error]) {
 | 
			
		||||
                trc(@"Found site: %@ (%@): %@", e.name, e.mpHashHex, e);
 | 
			
		||||
            }
 | 
			
		||||
            trc(@"---");
 | 
			
		||||
        } else
 | 
			
		||||
            trc(@"Not printing sites: master password not set.");
 | 
			
		||||
    }];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)forgetKey {
 | 
			
		||||
    
 | 
			
		||||
    dbg(@"Deleting master key and hash from key chain.");
 | 
			
		||||
@@ -245,17 +70,6 @@ static NSDictionary *keyHashQuery() {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
+ (MPAppDelegate *)get {
 | 
			
		||||
    
 | 
			
		||||
#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
 | 
			
		||||
    return (MPAppDelegate *)[UIApplication sharedApplication].delegate;
 | 
			
		||||
#elif defined (__MAC_OS_X_VERSION_MIN_REQUIRED)
 | 
			
		||||
    return (MPAppDelegate *)[NSApplication sharedApplication].delegate;
 | 
			
		||||
#else
 | 
			
		||||
#error Unsupported OS.
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (BOOL)tryMasterPassword:(NSString *)tryPassword {
 | 
			
		||||
    
 | 
			
		||||
    NSData *keyHash = [PearlKeyChain dataOfItemForQuery:keyHashQuery()];
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										27
									
								
								MasterPassword/MPAppDelegate_Shared.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								MasterPassword/MPAppDelegate_Shared.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
//
 | 
			
		||||
//  MPAppDelegate_Shared.h
 | 
			
		||||
//  MasterPassword
 | 
			
		||||
//
 | 
			
		||||
//  Created by Maarten Billemont on 24/11/11.
 | 
			
		||||
//  Copyright (c) 2011 Lyndir. All rights reserved.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#import "MPAppDelegate.h"
 | 
			
		||||
#import "MPAppDelegate_Key.h"
 | 
			
		||||
#import "MPAppDelegate_Store.h"
 | 
			
		||||
 | 
			
		||||
@interface MPAppDelegate () {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@property (strong, nonatomic) NSData                *key;
 | 
			
		||||
@property (strong, nonatomic) NSData                *keyHash;
 | 
			
		||||
@property (strong, nonatomic) NSString              *keyHashHex;
 | 
			
		||||
 | 
			
		||||
@end
 | 
			
		||||
 | 
			
		||||
@interface MPAppDelegate (Shared)
 | 
			
		||||
 | 
			
		||||
+ (MPAppDelegate *)get;
 | 
			
		||||
- (NSURL *)applicationFilesDirectory;
 | 
			
		||||
 | 
			
		||||
@end
 | 
			
		||||
							
								
								
									
										41
									
								
								MasterPassword/MPAppDelegate_Shared.m
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								MasterPassword/MPAppDelegate_Shared.m
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
//
 | 
			
		||||
//  MPAppDelegate.m
 | 
			
		||||
//  MasterPassword
 | 
			
		||||
//
 | 
			
		||||
//  Created by Maarten Billemont on 24/11/11.
 | 
			
		||||
//  Copyright (c) 2011 Lyndir. All rights reserved.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#import "MPAppDelegate_Shared.h"
 | 
			
		||||
 | 
			
		||||
@implementation MPAppDelegate (Shared)
 | 
			
		||||
 | 
			
		||||
+ (MPAppDelegate *)get {
 | 
			
		||||
    
 | 
			
		||||
#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
 | 
			
		||||
    return (MPAppDelegate *)[UIApplication sharedApplication].delegate;
 | 
			
		||||
#elif defined (__MAC_OS_X_VERSION_MIN_REQUIRED)
 | 
			
		||||
    return (MPAppDelegate *)[NSApplication sharedApplication].delegate;
 | 
			
		||||
#else
 | 
			
		||||
#error Unsupported OS.
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (NSURL *)applicationFilesDirectory {
 | 
			
		||||
 | 
			
		||||
#if __IPHONE_OS_VERSION_MIN_REQUIRED
 | 
			
		||||
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
 | 
			
		||||
#else
 | 
			
		||||
    NSURL *appSupportURL = [[[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory inDomains:NSUserDomainMask] lastObject];
 | 
			
		||||
    NSURL *applicationFilesDirectory = [appSupportURL URLByAppendingPathComponent:@"com.lyndir.lhunath.MasterPassword"];
 | 
			
		||||
    
 | 
			
		||||
    NSError *error = nil;
 | 
			
		||||
    [[NSFileManager defaultManager] createDirectoryAtURL:applicationFilesDirectory withIntermediateDirectories:YES attributes:nil error:&error];
 | 
			
		||||
    if (error)
 | 
			
		||||
        err(@"Couldn't create application directory: %@, error occurred: %@", applicationFilesDirectory, error);
 | 
			
		||||
    
 | 
			
		||||
    return applicationFilesDirectory;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@end
 | 
			
		||||
							
								
								
									
										24
									
								
								MasterPassword/MPAppDelegate_Store.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								MasterPassword/MPAppDelegate_Store.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
//
 | 
			
		||||
//  MPAppDelegate_Key.h
 | 
			
		||||
//  MasterPassword
 | 
			
		||||
//
 | 
			
		||||
//  Created by Maarten Billemont on 24/11/11.
 | 
			
		||||
//  Copyright (c) 2011 Lyndir. All rights reserved.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#import "MPAppDelegate_Shared.h"
 | 
			
		||||
 | 
			
		||||
#import "UbiquityStoreManager.h"
 | 
			
		||||
 | 
			
		||||
@interface MPAppDelegate (Store) <UbiquityStoreManagerDelegate>
 | 
			
		||||
 | 
			
		||||
+ (NSManagedObjectContext *)managedObjectContext;
 | 
			
		||||
+ (NSManagedObjectModel *)managedObjectModel;
 | 
			
		||||
- (NSManagedObjectContext *)managedObjectContext;
 | 
			
		||||
- (NSManagedObjectModel *)managedObjectModel;
 | 
			
		||||
 | 
			
		||||
- (UbiquityStoreManager *)storeManager;
 | 
			
		||||
- (void)saveContext;
 | 
			
		||||
- (void)printStore;
 | 
			
		||||
 | 
			
		||||
@end
 | 
			
		||||
							
								
								
									
										173
									
								
								MasterPassword/MPAppDelegate_Store.m
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										173
									
								
								MasterPassword/MPAppDelegate_Store.m
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,173 @@
 | 
			
		||||
//
 | 
			
		||||
//  MPAppDelegate.m
 | 
			
		||||
//  MasterPassword
 | 
			
		||||
//
 | 
			
		||||
//  Created by Maarten Billemont on 24/11/11.
 | 
			
		||||
//  Copyright (c) 2011 Lyndir. All rights reserved.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#import "MPAppDelegate_Store.h"
 | 
			
		||||
#import "MPElementEntity.h"
 | 
			
		||||
 | 
			
		||||
@implementation MPAppDelegate (Store)
 | 
			
		||||
 | 
			
		||||
+ (NSManagedObjectContext *)managedObjectContext {
 | 
			
		||||
    
 | 
			
		||||
    return [[self get] managedObjectContext];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
+ (NSManagedObjectModel *)managedObjectModel {
 | 
			
		||||
    
 | 
			
		||||
    return [[self get] managedObjectModel];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (NSManagedObjectModel *)managedObjectModel {
 | 
			
		||||
    
 | 
			
		||||
    static NSManagedObjectModel *managedObjectModel = nil;
 | 
			
		||||
    if (managedObjectModel)
 | 
			
		||||
        return managedObjectModel;
 | 
			
		||||
	
 | 
			
		||||
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"MasterPassword" withExtension:@"momd"];
 | 
			
		||||
    return managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (NSManagedObjectContext *)managedObjectContext {
 | 
			
		||||
    
 | 
			
		||||
    static NSManagedObjectContext *managedObjectContext = nil;
 | 
			
		||||
    if (managedObjectContext)
 | 
			
		||||
        return managedObjectContext;
 | 
			
		||||
    
 | 
			
		||||
    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
 | 
			
		||||
    assert(coordinator);
 | 
			
		||||
    
 | 
			
		||||
    managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
 | 
			
		||||
    [managedObjectContext performBlockAndWait:^{
 | 
			
		||||
        managedObjectContext.persistentStoreCoordinator = coordinator;
 | 
			
		||||
        managedObjectContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy;
 | 
			
		||||
    }];
 | 
			
		||||
    
 | 
			
		||||
    return managedObjectContext;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
 | 
			
		||||
    
 | 
			
		||||
    // Wait until the storeManager is ready.
 | 
			
		||||
    for(__block BOOL isReady = [self storeManager].isReady; !isReady;)
 | 
			
		||||
        dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
 | 
			
		||||
            isReady = [self storeManager].isReady;
 | 
			
		||||
        });
 | 
			
		||||
    
 | 
			
		||||
    assert([self storeManager].isReady);
 | 
			
		||||
    return [self storeManager].persistentStoreCoordinator;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (UbiquityStoreManager *)storeManager {
 | 
			
		||||
    
 | 
			
		||||
    static UbiquityStoreManager *storeManager = nil;
 | 
			
		||||
    if (storeManager)
 | 
			
		||||
        return storeManager;
 | 
			
		||||
    
 | 
			
		||||
    storeManager = [[UbiquityStoreManager alloc] initWithManagedObjectModel:[self managedObjectModel]
 | 
			
		||||
                                                              localStoreURL:[[self applicationFilesDirectory] URLByAppendingPathComponent:@"MasterPassword.sqlite"]
 | 
			
		||||
                                                        containerIdentifier:@"HL3Q45LX9N.com.lyndir.lhunath.MasterPassword.shared"
 | 
			
		||||
#if TARGET_OS_IPHONE
 | 
			
		||||
                                                     additionalStoreOptions:[NSDictionary dictionaryWithObject:NSFileProtectionComplete forKey:NSPersistentStoreFileProtectionKey]
 | 
			
		||||
#else
 | 
			
		||||
                                                     additionalStoreOptions:nil
 | 
			
		||||
#endif
 | 
			
		||||
                    ];
 | 
			
		||||
    storeManager.delegate = self;
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
    storeManager.hardResetEnabled = YES;
 | 
			
		||||
#endif
 | 
			
		||||
#if TARGET_OS_IPHONE
 | 
			
		||||
    [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationWillEnterForegroundNotification
 | 
			
		||||
                                                      object:[UIApplication sharedApplication] queue:nil
 | 
			
		||||
#else
 | 
			
		||||
    [[NSNotificationCenter defaultCenter] addObserverForName:NSApplicationWillBecomeActiveNotification
 | 
			
		||||
                                                      object:[NSApplication sharedApplication] queue:nil
 | 
			
		||||
#endif
 | 
			
		||||
                                                  usingBlock:^(NSNotification *note) {
 | 
			
		||||
                                                      [storeManager checkiCloudStatus];
 | 
			
		||||
                                                  }];
 | 
			
		||||
#if TARGET_OS_IPHONE
 | 
			
		||||
    [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationWillTerminateNotification
 | 
			
		||||
                                                      object:[UIApplication sharedApplication] queue:nil
 | 
			
		||||
#else
 | 
			
		||||
     [[NSNotificationCenter defaultCenter] addObserverForName:NSApplicationWillTerminateNotification
 | 
			
		||||
                                                       object:[NSApplication sharedApplication] queue:nil
 | 
			
		||||
#endif
 | 
			
		||||
                                                  usingBlock:^(NSNotification *note) {
 | 
			
		||||
                                                      [self saveContext];
 | 
			
		||||
                                                  }];
 | 
			
		||||
    
 | 
			
		||||
    return storeManager;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (NSManagedObjectContext *)managedObjectContextForUbiquityStoreManager:(UbiquityStoreManager *)usm {
 | 
			
		||||
    
 | 
			
		||||
    return self.managedObjectContext;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)ubiquityStoreManager:(UbiquityStoreManager *)manager didSwitchToiCloud:(BOOL)didSwitch {
 | 
			
		||||
    
 | 
			
		||||
    dbg(@"didSwitchToiCloud:%@", [NSNumber numberWithBool:didSwitch]);
 | 
			
		||||
    //[masterViewController.iCloudSwitch setOn:didSwitch animated:YES];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)saveContext {
 | 
			
		||||
    
 | 
			
		||||
    [self.managedObjectContext performBlock:^{
 | 
			
		||||
        NSError *error = nil;
 | 
			
		||||
        if ([self.managedObjectContext hasChanges])
 | 
			
		||||
            if (![self.managedObjectContext save:&error])
 | 
			
		||||
                err(@"Unresolved error %@", error);
 | 
			
		||||
    }];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)printStore {
 | 
			
		||||
    
 | 
			
		||||
    if (![self managedObjectModel] || ![self managedObjectContext]) {
 | 
			
		||||
        trc(@"Not printing store: store not initialized.");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    [self.managedObjectContext performBlock:^{
 | 
			
		||||
        trc(@"=== All entities ===");
 | 
			
		||||
        for(NSEntityDescription *entity in [[self managedObjectModel] entities]) {
 | 
			
		||||
            NSFetchRequest *request = [NSFetchRequest new];
 | 
			
		||||
            [request setEntity:entity];
 | 
			
		||||
            NSError *error;
 | 
			
		||||
            NSArray *results = [[self managedObjectContext] executeFetchRequest:request error:&error];
 | 
			
		||||
            for(NSManagedObject *o in results) {
 | 
			
		||||
                if ([o isKindOfClass:[MPElementEntity class]]) {
 | 
			
		||||
                    MPElementEntity *e = (MPElementEntity *)o;
 | 
			
		||||
                    trc(@"For descriptor: %@, found: %@: %@ (%@)", entity.name, [o class], e.name, e.mpHashHex);
 | 
			
		||||
                } else {
 | 
			
		||||
                    trc(@"For descriptor: %@, found: %@", entity.name, [o class]);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        trc(@"---");
 | 
			
		||||
        if ([MPAppDelegate get].keyHashHex) {
 | 
			
		||||
            trc(@"=== Known sites ===");
 | 
			
		||||
            NSFetchRequest *fetchRequest = [[self managedObjectModel]
 | 
			
		||||
                                            fetchRequestFromTemplateWithName:@"MPElements"
 | 
			
		||||
                                            substitutionVariables:[NSDictionary dictionaryWithObjectsAndKeys:
 | 
			
		||||
                                                                   @"",                                     @"query",
 | 
			
		||||
                                                                   [MPAppDelegate get].keyHashHex,          @"mpHashHex",
 | 
			
		||||
                                                                   nil]];
 | 
			
		||||
            [fetchRequest setSortDescriptors:
 | 
			
		||||
             [NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"uses" ascending:NO]]];
 | 
			
		||||
            
 | 
			
		||||
            NSError *error = nil;
 | 
			
		||||
            for (MPElementEntity *e in [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error]) {
 | 
			
		||||
                trc(@"Found site: %@ (%@): %@", e.name, e.mpHashHex, e);
 | 
			
		||||
            }
 | 
			
		||||
            trc(@"---");
 | 
			
		||||
        } else
 | 
			
		||||
            trc(@"Not printing sites: master password not set.");
 | 
			
		||||
    }];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@end
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#import "MPElementGeneratedEntity.h"
 | 
			
		||||
#import "MPAppDelegate_Key.h"
 | 
			
		||||
#import "MPAppDelegate_Shared.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@implementation MPElementGeneratedEntity
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#import "MPElementStoredEntity.h"
 | 
			
		||||
#import "MPAppDelegate_Key.h"
 | 
			
		||||
#import "MPAppDelegate_Shared.h"
 | 
			
		||||
 | 
			
		||||
@interface MPElementStoredEntity ()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
//  Copyright (c) 2012 Lyndir. All rights reserved.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#import "MPAppDelegate_Key.h"
 | 
			
		||||
#import "MPAppDelegate_Shared.h"
 | 
			
		||||
#import "MPConfig.h"
 | 
			
		||||
#import "MPElementEntity.h"
 | 
			
		||||
#import <Carbon/Carbon.h>
 | 
			
		||||
@@ -26,7 +26,6 @@
 | 
			
		||||
@synthesize statusMenu;
 | 
			
		||||
@synthesize passwordWindow;
 | 
			
		||||
 | 
			
		||||
@dynamic persistentStoreCoordinator, managedObjectModel, managedObjectContext;
 | 
			
		||||
@synthesize key;
 | 
			
		||||
@synthesize keyHash;
 | 
			
		||||
@synthesize keyHashHex;
 | 
			
		||||
@@ -90,6 +89,8 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
 | 
			
		||||
	status = RegisterEventHotKey(35 /* p */, controlKey + cmdKey, MPShowHotKey, GetApplicationEventTarget(), 0, &hotKeyRef);
 | 
			
		||||
	if(status != noErr)
 | 
			
		||||
        err(@"Error registering hotkey: %d", status);
 | 
			
		||||
    
 | 
			
		||||
    [[self storeManager] useiCloudStore:YES];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)applicationDidBecomeActive:(NSNotification *)notification {
 | 
			
		||||
@@ -168,7 +169,7 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
 | 
			
		||||
{
 | 
			
		||||
    // Save changes in the application's managed object context before the application terminates.
 | 
			
		||||
    
 | 
			
		||||
    if (!_managedObjectContext) {
 | 
			
		||||
    if (![self managedObjectContext]) {
 | 
			
		||||
        return NSTerminateNow;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#import "MPPasswordWindowController.h"
 | 
			
		||||
#import "MPAppDelegate_Key.h"
 | 
			
		||||
#import "MPAppDelegate_Shared.h"
 | 
			
		||||
#import "MPElementEntity.h"
 | 
			
		||||
#import "MPElementGeneratedEntity.h"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -4,8 +4,11 @@
 | 
			
		||||
<dict>
 | 
			
		||||
	<key>com.apple.developer.ubiquity-container-identifiers</key>
 | 
			
		||||
	<array>
 | 
			
		||||
		<string>$(TeamIdentifierPrefix)com.lyndir.lhunath.MasterPassword</string>
 | 
			
		||||
		<string>$(TeamIdentifierPrefix)com.lyndir.lhunath.MasterPassword.Mac</string>
 | 
			
		||||
		<string>$(TeamIdentifierPrefix)com.lyndir.lhunath.MasterPassword.shared</string>
 | 
			
		||||
	</array>
 | 
			
		||||
	<key>com.apple.developer.ubiquity-kvstore-identifier</key>
 | 
			
		||||
	<string>$(TeamIdentifierPrefix)com.lyndir.lhunath.MasterPassword.shared</string>
 | 
			
		||||
	<key>com.apple.security.app-sandbox</key>
 | 
			
		||||
	<true/>
 | 
			
		||||
</dict>
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,7 @@
 | 
			
		||||
//  Copyright (c) 2011 Lyndir. All rights reserved.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#import "MPAppDelegate.h"
 | 
			
		||||
#import "MPAppDelegate_Key.h"
 | 
			
		||||
#import "MPAppDelegate_Shared.h"
 | 
			
		||||
 | 
			
		||||
#import "MPMainViewController.h"
 | 
			
		||||
#import "IASKSettingsReader.h"
 | 
			
		||||
@@ -31,10 +30,6 @@
 | 
			
		||||
 | 
			
		||||
@implementation MPAppDelegate
 | 
			
		||||
 | 
			
		||||
@synthesize managedObjectModel = __managedObjectModel;
 | 
			
		||||
@synthesize managedObjectContext = __managedObjectContext;
 | 
			
		||||
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator;
 | 
			
		||||
 | 
			
		||||
@synthesize key;
 | 
			
		||||
@synthesize keyHash;
 | 
			
		||||
@synthesize keyHashHex;
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#import "MPGuideViewController.h"
 | 
			
		||||
#import "MPAppDelegate_Key.h"
 | 
			
		||||
#import "MPAppDelegate_Shared.h"
 | 
			
		||||
 | 
			
		||||
@implementation MPGuideViewController
 | 
			
		||||
@synthesize scrollView;
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#import "MPMainViewController.h"
 | 
			
		||||
#import "MPAppDelegate_Key.h"
 | 
			
		||||
#import "MPAppDelegate_Shared.h"
 | 
			
		||||
#import "MPElementGeneratedEntity.h"
 | 
			
		||||
#import "MPElementStoredEntity.h"
 | 
			
		||||
#import "IASKAppSettingsViewController.h"
 | 
			
		||||
@@ -411,6 +411,22 @@
 | 
			
		||||
                         case 5:
 | 
			
		||||
#else
 | 
			
		||||
                         case 4:
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
                         {
 | 
			
		||||
                             [[MPAppDelegate get].storeManager hardResetCloudStorage];
 | 
			
		||||
                         }
 | 
			
		||||
#ifdef ADHOC
 | 
			
		||||
                         case 6: {
 | 
			
		||||
                             [[MPAppDelegate get].storeManager useiCloudStore:![MPAppDelegate get].storeManager.iCloudEnabled];
 | 
			
		||||
                         }
 | 
			
		||||
                         case 7:
 | 
			
		||||
#else
 | 
			
		||||
                         case 5: {
 | 
			
		||||
                             [[MPAppDelegate get].storeManager useiCloudStore:![MPAppDelegate get].storeManager.iCloudEnabled];
 | 
			
		||||
                         }
 | 
			
		||||
                         case 6:
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
                         {
 | 
			
		||||
                             [[MPAppDelegate get] signOut:self];
 | 
			
		||||
@@ -425,6 +441,10 @@
 | 
			
		||||
     [self isHelpVisible]? @"Hide Help": @"Show Help", @"FAQ", @"Tutorial", @"Settings",
 | 
			
		||||
#ifdef ADHOC
 | 
			
		||||
     @"Feedback",
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
     @"Reset iCloud",
 | 
			
		||||
     @"Toggle iCloud",
 | 
			
		||||
#endif
 | 
			
		||||
     @"Sign Out",
 | 
			
		||||
     nil]; 
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#import "MPSearchDelegate.h"
 | 
			
		||||
#import "MPAppDelegate_Key.h"
 | 
			
		||||
#import "MPAppDelegate_Shared.h"
 | 
			
		||||
#import "MPElementGeneratedEntity.h"
 | 
			
		||||
 | 
			
		||||
@interface MPSearchDelegate (Private)
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
#import <QuartzCore/QuartzCore.h>
 | 
			
		||||
 | 
			
		||||
#import "MPUnlockViewController.h"
 | 
			
		||||
#import "MPAppDelegate_Key.h"
 | 
			
		||||
#import "MPAppDelegate_Shared.h"
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
    MPLockscreenIdle,
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,10 @@
 | 
			
		||||
	<key>com.apple.developer.ubiquity-container-identifiers</key>
 | 
			
		||||
	<array>
 | 
			
		||||
		<string>$(TeamIdentifierPrefix)com.lyndir.lhunath.MasterPassword</string>
 | 
			
		||||
		<string>$(TeamIdentifierPrefix)com.lyndir.lhunath.MasterPassword.shared</string>
 | 
			
		||||
	</array>
 | 
			
		||||
	<key>com.apple.developer.ubiquity-kvstore-identifier</key>
 | 
			
		||||
	<string>$(TeamIdentifierPrefix)com.lyndir.lhunath.MasterPassword.shared</string>
 | 
			
		||||
	<key>keychain-access-groups</key>
 | 
			
		||||
	<array>
 | 
			
		||||
		<string>$(AppIdentifierPrefix)com.lyndir.lhunath.MasterPassword</string>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user