diff --git a/.gitmodules b/.gitmodules index 17ccdb70..34a6177f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -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 diff --git a/External/Pearl b/External/Pearl index 9336e50d..a78cd7da 160000 --- a/External/Pearl +++ b/External/Pearl @@ -1 +1 @@ -Subproject commit 9336e50d3b896bac1478fe4ac8313387a85114c2 +Subproject commit a78cd7daf1fae0fc9e86702de9b9f6d5782ae352 diff --git a/External/iCloudStoreManager b/External/iCloudStoreManager new file mode 160000 index 00000000..303b3a3e --- /dev/null +++ b/External/iCloudStoreManager @@ -0,0 +1 @@ +Subproject commit 303b3a3e5c092c21d8e0c92cbe9145b6492b6c7b diff --git a/MasterPassword-Mac.xcodeproj/project.pbxproj b/MasterPassword-Mac.xcodeproj/project.pbxproj index fc913b8e..cc9f7dc0 100644 --- a/MasterPassword-Mac.xcodeproj/project.pbxproj +++ b/MasterPassword-Mac.xcodeproj/project.pbxproj @@ -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 = ""; }; DA600EE315057F10008E9AB6 /* tip_location_wood@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tip_location_wood@2x.png"; sourceTree = ""; }; DA60116615057FDD008E9AB6 /* iTunesArtwork-Rounded.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iTunesArtwork-Rounded.png"; sourceTree = ""; }; + DA79A9DF155821BB00BAA07A /* MPAppDelegate_Shared.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAppDelegate_Shared.h; sourceTree = ""; }; + DA79A9E0155821BB00BAA07A /* MPAppDelegate_Shared.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAppDelegate_Shared.m; sourceTree = ""; }; + DA79A9E1155821BB00BAA07A /* MPAppDelegate_Store.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAppDelegate_Store.h; sourceTree = ""; }; + DA79A9E2155821BB00BAA07A /* MPAppDelegate_Store.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAppDelegate_Store.m; sourceTree = ""; }; + 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 = ""; }; + DA79AA121558221200BAA07A /* UbiquityStoreManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UbiquityStoreManager.m; sourceTree = ""; }; 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 = ""; }; DAB8DA001503972100CED3BC /* PearlStringUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlStringUtils.h; sourceTree = ""; }; DAB8DA011503972100CED3BC /* PearlStringUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlStringUtils.m; sourceTree = ""; }; - DAB8DA021503972100CED3BC /* PearlWebUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlWebUtils.h; sourceTree = ""; }; - DAB8DA031503972100CED3BC /* PearlWebUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlWebUtils.m; sourceTree = ""; }; DAB8DA041503972100CED3BC /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; DAB8DA071503972100CED3BC /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Pearl.strings; sourceTree = ""; }; DAB8DA091503972100CED3BC /* Pearl-Crypto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Pearl-Crypto.h"; sourceTree = ""; }; @@ -2219,8 +2229,8 @@ DAF56D4A1503C74200996D85 /* info.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = info.pem; sourceTree = ""; }; DAF56D4B1503C74200996D85 /* infokey.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = infokey.pem; sourceTree = ""; }; DAF56D4C1503C74200996D85 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - DAF56D4E1503C74200996D85 /* a1 */ = {isa = PBXFileReference; lastKnownFileType = file; path = a1; sourceTree = ""; }; - DAF56D4F1503C74200996D85 /* a2 */ = {isa = PBXFileReference; lastKnownFileType = file; path = a2; sourceTree = ""; }; + DAF56D4E1503C74200996D85 /* a1 */ = {isa = PBXFileReference; lastKnownFileType = text; path = a1; sourceTree = ""; }; + DAF56D4F1503C74200996D85 /* a2 */ = {isa = PBXFileReference; lastKnownFileType = text; path = a2; sourceTree = ""; }; DAF56D501503C74200996D85 /* cert.p7c */ = {isa = PBXFileReference; lastKnownFileType = file; path = cert.p7c; sourceTree = ""; }; DAF56D511503C74200996D85 /* smime.p7m */ = {isa = PBXFileReference; lastKnownFileType = file; path = smime.p7m; sourceTree = ""; }; DAF56D521503C74200996D85 /* smime.p7s */ = {isa = PBXFileReference; lastKnownFileType = file; path = smime.p7s; sourceTree = ""; }; @@ -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 = ""; }; + DA79A9F61558221200BAA07A /* iCloudStoreManager */ = { + isa = PBXGroup; + children = ( + DA79AA111558221200BAA07A /* UbiquityStoreManager.h */, + DA79AA121558221200BAA07A /* UbiquityStoreManager.m */, + ); + name = iCloudStoreManager; + path = External/iCloudStoreManager/iCloudStoreManager; + sourceTree = ""; + }; 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 = ""; @@ -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 = ( diff --git a/MasterPassword-iOS.xcodeproj/project.pbxproj b/MasterPassword-iOS.xcodeproj/project.pbxproj index 1d636af4..cd984af5 100644 --- a/MasterPassword-iOS.xcodeproj/project.pbxproj +++ b/MasterPassword-iOS.xcodeproj/project.pbxproj @@ -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 = ""; }; + 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 = ""; }; + DA4425F21557BF260052177D /* UbiquityStoreManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UbiquityStoreManager.m; sourceTree = ""; }; + DA4426041557C1990052177D /* MPAppDelegate_Shared.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAppDelegate_Shared.h; sourceTree = ""; }; + DA4426051557C1990052177D /* MPAppDelegate_Shared.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAppDelegate_Shared.m; sourceTree = ""; }; + DA4426061557C1990052177D /* MPAppDelegate_Store.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAppDelegate_Store.h; sourceTree = ""; }; + DA4426071557C1990052177D /* MPAppDelegate_Store.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAppDelegate_Store.m; sourceTree = ""; }; 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 = ""; }; + DA79A9BD1557DDC700BAA07A /* scrypt.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = scrypt.xcodeproj; path = External/Pearl/External/iOSPorts/ports/security/scrypt/scrypt.xcodeproj; sourceTree = ""; }; 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 = ""; }; DA95D5A914DF0691008D1B94 /* IASKAppSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKAppSettingsViewController.m; sourceTree = ""; }; @@ -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 = ""; }; 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 = ""; @@ -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 = ""; }; + DA79A9BE1557DDC700BAA07A /* Products */ = { + isa = PBXGroup; + children = ( + DA79A9CE1557DDC800BAA07A /* libscryptenc.a */, + DA79A9D01557DDC800BAA07A /* libscryptcrypto.a */, + DA79A9D21557DDC800BAA07A /* libutil.a */, + ); + name = Products; + sourceTree = ""; + }; 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 = ( diff --git a/MasterPassword/MPAppDelegate_Key.h b/MasterPassword/MPAppDelegate_Key.h index f29a6895..458fdc38 100644 --- a/MasterPassword/MPAppDelegate_Key.h +++ b/MasterPassword/MPAppDelegate_Key.h @@ -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; diff --git a/MasterPassword/MPAppDelegate_Key.m b/MasterPassword/MPAppDelegate_Key.m index 76042b4d..88971fc0 100644 --- a/MasterPassword/MPAppDelegate_Key.m +++ b/MasterPassword/MPAppDelegate_Key.m @@ -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()]; diff --git a/MasterPassword/MPAppDelegate_Shared.h b/MasterPassword/MPAppDelegate_Shared.h new file mode 100644 index 00000000..ba95fc18 --- /dev/null +++ b/MasterPassword/MPAppDelegate_Shared.h @@ -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 diff --git a/MasterPassword/MPAppDelegate_Shared.m b/MasterPassword/MPAppDelegate_Shared.m new file mode 100644 index 00000000..b46aaf1d --- /dev/null +++ b/MasterPassword/MPAppDelegate_Shared.m @@ -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 diff --git a/MasterPassword/MPAppDelegate_Store.h b/MasterPassword/MPAppDelegate_Store.h new file mode 100644 index 00000000..e3bf777b --- /dev/null +++ b/MasterPassword/MPAppDelegate_Store.h @@ -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) + ++ (NSManagedObjectContext *)managedObjectContext; ++ (NSManagedObjectModel *)managedObjectModel; +- (NSManagedObjectContext *)managedObjectContext; +- (NSManagedObjectModel *)managedObjectModel; + +- (UbiquityStoreManager *)storeManager; +- (void)saveContext; +- (void)printStore; + +@end diff --git a/MasterPassword/MPAppDelegate_Store.m b/MasterPassword/MPAppDelegate_Store.m new file mode 100644 index 00000000..278c49a2 --- /dev/null +++ b/MasterPassword/MPAppDelegate_Store.m @@ -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 diff --git a/MasterPassword/MPElementGeneratedEntity.m b/MasterPassword/MPElementGeneratedEntity.m index 9c8d4a44..e00145d7 100644 --- a/MasterPassword/MPElementGeneratedEntity.m +++ b/MasterPassword/MPElementGeneratedEntity.m @@ -7,7 +7,7 @@ // #import "MPElementGeneratedEntity.h" -#import "MPAppDelegate_Key.h" +#import "MPAppDelegate_Shared.h" @implementation MPElementGeneratedEntity diff --git a/MasterPassword/MPElementStoredEntity.m b/MasterPassword/MPElementStoredEntity.m index 68565e3a..cb68cee5 100644 --- a/MasterPassword/MPElementStoredEntity.m +++ b/MasterPassword/MPElementStoredEntity.m @@ -7,7 +7,7 @@ // #import "MPElementStoredEntity.h" -#import "MPAppDelegate_Key.h" +#import "MPAppDelegate_Shared.h" @interface MPElementStoredEntity () diff --git a/MasterPassword/Mac/MPAppDelegate.m b/MasterPassword/Mac/MPAppDelegate.m index 0a943988..558f804f 100644 --- a/MasterPassword/Mac/MPAppDelegate.m +++ b/MasterPassword/Mac/MPAppDelegate.m @@ -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 @@ -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; } diff --git a/MasterPassword/Mac/MPPasswordWindowController.m b/MasterPassword/Mac/MPPasswordWindowController.m index f0e7f334..8d27aed4 100644 --- a/MasterPassword/Mac/MPPasswordWindowController.m +++ b/MasterPassword/Mac/MPPasswordWindowController.m @@ -7,7 +7,7 @@ // #import "MPPasswordWindowController.h" -#import "MPAppDelegate_Key.h" +#import "MPAppDelegate_Shared.h" #import "MPElementEntity.h" #import "MPElementGeneratedEntity.h" diff --git a/MasterPassword/MasterPassword.entitlements b/MasterPassword/MasterPassword.entitlements index b04a9cea..4475482e 100644 --- a/MasterPassword/MasterPassword.entitlements +++ b/MasterPassword/MasterPassword.entitlements @@ -4,8 +4,11 @@ com.apple.developer.ubiquity-container-identifiers - $(TeamIdentifierPrefix)com.lyndir.lhunath.MasterPassword + $(TeamIdentifierPrefix)com.lyndir.lhunath.MasterPassword.Mac + $(TeamIdentifierPrefix)com.lyndir.lhunath.MasterPassword.shared + com.apple.developer.ubiquity-kvstore-identifier + $(TeamIdentifierPrefix)com.lyndir.lhunath.MasterPassword.shared com.apple.security.app-sandbox diff --git a/MasterPassword/iOS/MPAppDelegate.m b/MasterPassword/iOS/MPAppDelegate.m index ec98c0c9..dc4bac71 100644 --- a/MasterPassword/iOS/MPAppDelegate.m +++ b/MasterPassword/iOS/MPAppDelegate.m @@ -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; diff --git a/MasterPassword/iOS/MPGuideViewController.m b/MasterPassword/iOS/MPGuideViewController.m index de3f55de..892d242d 100644 --- a/MasterPassword/iOS/MPGuideViewController.m +++ b/MasterPassword/iOS/MPGuideViewController.m @@ -7,7 +7,7 @@ // #import "MPGuideViewController.h" -#import "MPAppDelegate_Key.h" +#import "MPAppDelegate_Shared.h" @implementation MPGuideViewController @synthesize scrollView; diff --git a/MasterPassword/iOS/MPMainViewController.m b/MasterPassword/iOS/MPMainViewController.m index 7bb1d84e..e6a1ee53 100644 --- a/MasterPassword/iOS/MPMainViewController.m +++ b/MasterPassword/iOS/MPMainViewController.m @@ -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]; diff --git a/MasterPassword/iOS/MPSearchDelegate.m b/MasterPassword/iOS/MPSearchDelegate.m index 39446b77..116bb958 100644 --- a/MasterPassword/iOS/MPSearchDelegate.m +++ b/MasterPassword/iOS/MPSearchDelegate.m @@ -7,7 +7,7 @@ // #import "MPSearchDelegate.h" -#import "MPAppDelegate_Key.h" +#import "MPAppDelegate_Shared.h" #import "MPElementGeneratedEntity.h" @interface MPSearchDelegate (Private) diff --git a/MasterPassword/iOS/MPUnlockViewController.m b/MasterPassword/iOS/MPUnlockViewController.m index 37acc4b3..d3d9c325 100644 --- a/MasterPassword/iOS/MPUnlockViewController.m +++ b/MasterPassword/iOS/MPUnlockViewController.m @@ -9,7 +9,7 @@ #import #import "MPUnlockViewController.h" -#import "MPAppDelegate_Key.h" +#import "MPAppDelegate_Shared.h" typedef enum { MPLockscreenIdle, diff --git a/MasterPassword/iOS/MasterPassword.entitlements b/MasterPassword/iOS/MasterPassword.entitlements index 53a819c9..be82f27a 100644 --- a/MasterPassword/iOS/MasterPassword.entitlements +++ b/MasterPassword/iOS/MasterPassword.entitlements @@ -5,7 +5,10 @@ com.apple.developer.ubiquity-container-identifiers $(TeamIdentifierPrefix)com.lyndir.lhunath.MasterPassword + $(TeamIdentifierPrefix)com.lyndir.lhunath.MasterPassword.shared + com.apple.developer.ubiquity-kvstore-identifier + $(TeamIdentifierPrefix)com.lyndir.lhunath.MasterPassword.shared keychain-access-groups $(AppIdentifierPrefix)com.lyndir.lhunath.MasterPassword