Prefix change: OP -> MP
This commit is contained in:
parent
ad9d124a32
commit
6ce6f6b9ec
@ -7,27 +7,25 @@
|
|||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
DA007F5214B24DCD00251337 /* OPConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = DA007F5114B24DCD00251337 /* OPConfig.m */; };
|
|
||||||
DA007F5514B25EE100251337 /* ciphers.plist in Resources */ = {isa = PBXBuildFile; fileRef = DA007F5414B25EE100251337 /* ciphers.plist */; };
|
DA007F5514B25EE100251337 /* ciphers.plist in Resources */ = {isa = PBXBuildFile; fileRef = DA007F5414B25EE100251337 /* ciphers.plist */; };
|
||||||
DA04E33E14B1E70400ECA4F3 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA04E33D14B1E70400ECA4F3 /* MobileCoreServices.framework */; };
|
DA04E33E14B1E70400ECA4F3 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA04E33D14B1E70400ECA4F3 /* MobileCoreServices.framework */; };
|
||||||
DA0A848C14C4DFCB0090EA8E /* OPElementGeneratedEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = DA0A848B14C4DFCB0090EA8E /* OPElementGeneratedEntity.m */; };
|
DA0A848C14C4DFCB0090EA8E /* MPElementGeneratedEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = DA0A848B14C4DFCB0090EA8E /* MPElementGeneratedEntity.m */; };
|
||||||
DA0B951114C2D69E001D4EB1 /* help.html in Resources */ = {isa = PBXBuildFile; fileRef = DA0B951014C2D69E001D4EB1 /* help.html */; };
|
DA0B951114C2D69E001D4EB1 /* help.html in Resources */ = {isa = PBXBuildFile; fileRef = DA0B951014C2D69E001D4EB1 /* help.html */; };
|
||||||
DA34DA0D14B1BC7D00F721C1 /* OPElementStoredEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = DA34DA0C14B1BC7D00F721C1 /* OPElementStoredEntity.m */; };
|
DA34DA0D14B1BC7D00F721C1 /* MPElementStoredEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = DA34DA0C14B1BC7D00F721C1 /* MPElementStoredEntity.m */; };
|
||||||
DA34DA1114B1BC7E00F721C1 /* OPElementEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = DA34DA1014B1BC7E00F721C1 /* OPElementEntity.m */; };
|
DA34DA1114B1BC7E00F721C1 /* MPElementEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = DA34DA1014B1BC7E00F721C1 /* MPElementEntity.m */; };
|
||||||
DA34DA1614B1BEA100F721C1 /* OPTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = DA34DA1514B1BEA100F721C1 /* OPTypes.m */; };
|
|
||||||
DA41A40B14DB3BF100638533 /* guide_page_0.png in Resources */ = {isa = PBXBuildFile; fileRef = DA41A40914DB3BF100638533 /* guide_page_0.png */; };
|
DA41A40B14DB3BF100638533 /* guide_page_0.png in Resources */ = {isa = PBXBuildFile; fileRef = DA41A40914DB3BF100638533 /* guide_page_0.png */; };
|
||||||
DA41A40C14DB3BF100638533 /* guide_page_0@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA41A40A14DB3BF100638533 /* guide_page_0@2x.png */; };
|
DA41A40C14DB3BF100638533 /* guide_page_0@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA41A40A14DB3BF100638533 /* guide_page_0@2x.png */; };
|
||||||
DA55B29E14B38272001131B7 /* OPContentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA55B29D14B38272001131B7 /* OPContentViewController.m */; };
|
DA55B29E14B38272001131B7 /* MPContentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA55B29D14B38272001131B7 /* MPContentViewController.m */; };
|
||||||
DA55B2A214B4EB47001131B7 /* OPSearchDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DA55B2A114B4EB46001131B7 /* OPSearchDelegate.m */; };
|
DA55B2A214B4EB47001131B7 /* MPSearchDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DA55B2A114B4EB46001131B7 /* MPSearchDelegate.m */; };
|
||||||
DA5BFA49147E415C00F98B1E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA48147E415C00F98B1E /* UIKit.framework */; };
|
DA5BFA49147E415C00F98B1E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA48147E415C00F98B1E /* UIKit.framework */; };
|
||||||
DA5BFA4B147E415C00F98B1E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
|
DA5BFA4B147E415C00F98B1E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
|
||||||
DA5BFA4D147E415C00F98B1E /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4C147E415C00F98B1E /* CoreGraphics.framework */; };
|
DA5BFA4D147E415C00F98B1E /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4C147E415C00F98B1E /* CoreGraphics.framework */; };
|
||||||
DA5BFA4F147E415C00F98B1E /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4E147E415C00F98B1E /* CoreData.framework */; };
|
DA5BFA4F147E415C00F98B1E /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4E147E415C00F98B1E /* CoreData.framework */; };
|
||||||
DA5BFA55147E415C00F98B1E /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = DA5BFA53147E415C00F98B1E /* InfoPlist.strings */; };
|
DA5BFA55147E415C00F98B1E /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = DA5BFA53147E415C00F98B1E /* InfoPlist.strings */; };
|
||||||
DA5BFA57147E415C00F98B1E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5BFA56147E415C00F98B1E /* main.m */; };
|
DA5BFA57147E415C00F98B1E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5BFA56147E415C00F98B1E /* main.m */; };
|
||||||
DA5BFA5B147E415C00F98B1E /* OPAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5BFA5A147E415C00F98B1E /* OPAppDelegate.m */; };
|
DA5BFA5B147E415C00F98B1E /* MPAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5BFA5A147E415C00F98B1E /* MPAppDelegate.m */; };
|
||||||
DA5BFA64147E415C00F98B1E /* MasterPassword.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = DA5BFA62147E415C00F98B1E /* MasterPassword.xcdatamodeld */; };
|
DA5BFA64147E415C00F98B1E /* MasterPassword.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = DA5BFA62147E415C00F98B1E /* MasterPassword.xcdatamodeld */; };
|
||||||
DA5BFA67147E415C00F98B1E /* OPMainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5BFA66147E415C00F98B1E /* OPMainViewController.m */; };
|
DA5BFA67147E415C00F98B1E /* MPMainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5BFA66147E415C00F98B1E /* MPMainViewController.m */; };
|
||||||
DA5DB7A614BE4B19002DD256 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5DB7A514BE4B19002DD256 /* Default.png */; };
|
DA5DB7A614BE4B19002DD256 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5DB7A514BE4B19002DD256 /* Default.png */; };
|
||||||
DA5DB7A814BE4B4B002DD256 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5DB7A714BE4B4B002DD256 /* Default@2x.png */; };
|
DA5DB7A814BE4B4B002DD256 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5DB7A714BE4B4B002DD256 /* Default@2x.png */; };
|
||||||
DA6556FE14D730B700841C99 /* guide_page_1.png in Resources */ = {isa = PBXBuildFile; fileRef = DA6556F814D730B700841C99 /* guide_page_1.png */; };
|
DA6556FE14D730B700841C99 /* guide_page_1.png in Resources */ = {isa = PBXBuildFile; fileRef = DA6556F814D730B700841C99 /* guide_page_1.png */; };
|
||||||
@ -36,7 +34,7 @@
|
|||||||
DA65570114D730B700841C99 /* guide_page_4.png in Resources */ = {isa = PBXBuildFile; fileRef = DA6556FB14D730B700841C99 /* guide_page_4.png */; };
|
DA65570114D730B700841C99 /* guide_page_4.png in Resources */ = {isa = PBXBuildFile; fileRef = DA6556FB14D730B700841C99 /* guide_page_4.png */; };
|
||||||
DA65570214D730B700841C99 /* guide_page_5.png in Resources */ = {isa = PBXBuildFile; fileRef = DA6556FC14D730B700841C99 /* guide_page_5.png */; };
|
DA65570214D730B700841C99 /* guide_page_5.png in Resources */ = {isa = PBXBuildFile; fileRef = DA6556FC14D730B700841C99 /* guide_page_5.png */; };
|
||||||
DA65570314D730B700841C99 /* guide_page_6.png in Resources */ = {isa = PBXBuildFile; fileRef = DA6556FD14D730B700841C99 /* guide_page_6.png */; };
|
DA65570314D730B700841C99 /* guide_page_6.png in Resources */ = {isa = PBXBuildFile; fileRef = DA6556FD14D730B700841C99 /* guide_page_6.png */; };
|
||||||
DA65570614D731F000841C99 /* OPGuideViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA65570514D731F000841C99 /* OPGuideViewController.m */; };
|
DA65570614D731F000841C99 /* MPGuideViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA65570514D731F000841C99 /* MPGuideViewController.m */; };
|
||||||
DA65570D14D760BD00841C99 /* guide_page_1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA65570714D760BD00841C99 /* guide_page_1@2x.png */; };
|
DA65570D14D760BD00841C99 /* guide_page_1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA65570714D760BD00841C99 /* guide_page_1@2x.png */; };
|
||||||
DA65570E14D760BD00841C99 /* guide_page_2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA65570814D760BD00841C99 /* guide_page_2@2x.png */; };
|
DA65570E14D760BD00841C99 /* guide_page_2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA65570814D760BD00841C99 /* guide_page_2@2x.png */; };
|
||||||
DA65570F14D760BD00841C99 /* guide_page_3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA65570914D760BD00841C99 /* guide_page_3@2x.png */; };
|
DA65570F14D760BD00841C99 /* guide_page_3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA65570914D760BD00841C99 /* guide_page_3@2x.png */; };
|
||||||
@ -123,7 +121,6 @@
|
|||||||
DA7659AF14C5E22E00769249 /* Square-bottom.png in Resources */ = {isa = PBXBuildFile; fileRef = DA7659AD14C5E22E00769249 /* Square-bottom.png */; };
|
DA7659AF14C5E22E00769249 /* Square-bottom.png in Resources */ = {isa = PBXBuildFile; fileRef = DA7659AD14C5E22E00769249 /* Square-bottom.png */; };
|
||||||
DA7659B014C5E22E00769249 /* Square-top.png in Resources */ = {isa = PBXBuildFile; fileRef = DA7659AE14C5E22E00769249 /* Square-top.png */; };
|
DA7659B014C5E22E00769249 /* Square-top.png in Resources */ = {isa = PBXBuildFile; fileRef = DA7659AE14C5E22E00769249 /* Square-top.png */; };
|
||||||
DA7974C214C8C98500A71457 /* MainStoryboard_iPhone.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DA7974C314C8C98500A71457 /* MainStoryboard_iPhone.storyboard */; };
|
DA7974C214C8C98500A71457 /* MainStoryboard_iPhone.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DA7974C314C8C98500A71457 /* MainStoryboard_iPhone.storyboard */; };
|
||||||
DA7974C414C8C98C00A71457 /* MainStoryboard_iPad.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DA7974C514C8C98C00A71457 /* MainStoryboard_iPad.storyboard */; };
|
|
||||||
DA7974C814C8CA5000A71457 /* Pearl.strings in Resources */ = {isa = PBXBuildFile; fileRef = DA7974C614C8CA5000A71457 /* Pearl.strings */; };
|
DA7974C814C8CA5000A71457 /* Pearl.strings in Resources */ = {isa = PBXBuildFile; fileRef = DA7974C614C8CA5000A71457 /* Pearl.strings */; };
|
||||||
DA84808414CB3DBA00A2FA22 /* MessageView.h in Headers */ = {isa = PBXBuildFile; fileRef = DA84808214CB3DBA00A2FA22 /* MessageView.h */; };
|
DA84808414CB3DBA00A2FA22 /* MessageView.h in Headers */ = {isa = PBXBuildFile; fileRef = DA84808214CB3DBA00A2FA22 /* MessageView.h */; };
|
||||||
DA84808514CB3DBA00A2FA22 /* MessageView.m in Sources */ = {isa = PBXBuildFile; fileRef = DA84808314CB3DBA00A2FA22 /* MessageView.m */; };
|
DA84808514CB3DBA00A2FA22 /* MessageView.m in Sources */ = {isa = PBXBuildFile; fileRef = DA84808314CB3DBA00A2FA22 /* MessageView.m */; };
|
||||||
@ -245,6 +242,8 @@
|
|||||||
DA95D5F614DF0B9F008D1B94 /* IASKPSTextFieldSpecifierViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = DA95D5CC14DF0691008D1B94 /* IASKPSTextFieldSpecifierViewCell.xib */; };
|
DA95D5F614DF0B9F008D1B94 /* IASKPSTextFieldSpecifierViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = DA95D5CC14DF0691008D1B94 /* IASKPSTextFieldSpecifierViewCell.xib */; };
|
||||||
DA95D5F714DF0B9F008D1B94 /* IASKPSToggleSwitchSpecifierViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = DA95D5CD14DF0691008D1B94 /* IASKPSToggleSwitchSpecifierViewCell.xib */; };
|
DA95D5F714DF0B9F008D1B94 /* IASKPSToggleSwitchSpecifierViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = DA95D5CD14DF0691008D1B94 /* IASKPSToggleSwitchSpecifierViewCell.xib */; };
|
||||||
DA95D5F814DF0B9F008D1B94 /* IASKSpecifierValuesView.xib in Resources */ = {isa = PBXBuildFile; fileRef = DA95D5CE14DF0691008D1B94 /* IASKSpecifierValuesView.xib */; };
|
DA95D5F814DF0B9F008D1B94 /* IASKSpecifierValuesView.xib in Resources */ = {isa = PBXBuildFile; fileRef = DA95D5CE14DF0691008D1B94 /* IASKSpecifierValuesView.xib */; };
|
||||||
|
DA95D5FD14DF295F008D1B94 /* MPConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = DA95D5F914DF295E008D1B94 /* MPConfig.m */; };
|
||||||
|
DA95D5FE14DF295F008D1B94 /* MPTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = DA95D5FB14DF295F008D1B94 /* MPTypes.m */; };
|
||||||
DAA3B68E14CCCEE700F35AF6 /* icon_addressbook-person@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DAA3B53814CCCEE700F35AF6 /* icon_addressbook-person@2x.png */; };
|
DAA3B68E14CCCEE700F35AF6 /* icon_addressbook-person@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DAA3B53814CCCEE700F35AF6 /* icon_addressbook-person@2x.png */; };
|
||||||
DAA3B68F14CCCEE700F35AF6 /* icon_addressbook.png in Resources */ = {isa = PBXBuildFile; fileRef = DAA3B53914CCCEE700F35AF6 /* icon_addressbook.png */; };
|
DAA3B68F14CCCEE700F35AF6 /* icon_addressbook.png in Resources */ = {isa = PBXBuildFile; fileRef = DAA3B53914CCCEE700F35AF6 /* icon_addressbook.png */; };
|
||||||
DAA3B69014CCCEE700F35AF6 /* icon_addressbook@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DAA3B53A14CCCEE700F35AF6 /* icon_addressbook@2x.png */; };
|
DAA3B69014CCCEE700F35AF6 /* icon_addressbook@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DAA3B53A14CCCEE700F35AF6 /* icon_addressbook@2x.png */; };
|
||||||
@ -667,9 +666,9 @@
|
|||||||
DAC781311482AAD800BCF976 /* ValidatingTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = DAC780EE1482AAD700BCF976 /* ValidatingTextField.m */; };
|
DAC781311482AAD800BCF976 /* ValidatingTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = DAC780EE1482AAD700BCF976 /* ValidatingTextField.m */; };
|
||||||
DAC781321482AAD800BCF976 /* WebViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = DAC780EF1482AAD700BCF976 /* WebViewController.h */; };
|
DAC781321482AAD800BCF976 /* WebViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = DAC780EF1482AAD700BCF976 /* WebViewController.h */; };
|
||||||
DAC781331482AAD800BCF976 /* WebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DAC780F01482AAD700BCF976 /* WebViewController.m */; };
|
DAC781331482AAD800BCF976 /* WebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DAC780F01482AAD700BCF976 /* WebViewController.m */; };
|
||||||
DAC781361482E67300BCF976 /* OPRecentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DAC781351482E67300BCF976 /* OPRecentViewController.m */; };
|
DAC781361482E67300BCF976 /* MPRecentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DAC781351482E67300BCF976 /* MPRecentViewController.m */; };
|
||||||
DADC3C4D14C62B350091CB4D /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = DADC3C4C14C62B350091CB4D /* Settings.bundle */; };
|
DADC3C4D14C62B350091CB4D /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = DADC3C4C14C62B350091CB4D /* Settings.bundle */; };
|
||||||
DAE2C648148247E500BA6B10 /* OPTypeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE2C646148247E500BA6B10 /* OPTypeViewController.m */; };
|
DAE2C648148247E500BA6B10 /* MPTypeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE2C646148247E500BA6B10 /* MPTypeViewController.m */; };
|
||||||
DAE998D214C1D2A0002D7C22 /* Content-Backdrop.png in Resources */ = {isa = PBXBuildFile; fileRef = DAE9987914C1D2A0002D7C22 /* Content-Backdrop.png */; };
|
DAE998D214C1D2A0002D7C22 /* Content-Backdrop.png in Resources */ = {isa = PBXBuildFile; fileRef = DAE9987914C1D2A0002D7C22 /* Content-Backdrop.png */; };
|
||||||
DAE998D314C1D2A0002D7C22 /* Content-Backdrop@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DAE9987A14C1D2A0002D7C22 /* Content-Backdrop@2x.png */; };
|
DAE998D314C1D2A0002D7C22 /* Content-Backdrop@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DAE9987A14C1D2A0002D7C22 /* Content-Backdrop@2x.png */; };
|
||||||
DAE998D414C1D2A0002D7C22 /* Bold_Lines.png in Resources */ = {isa = PBXBuildFile; fileRef = DAE9987C14C1D2A0002D7C22 /* Bold_Lines.png */; };
|
DAE998D414C1D2A0002D7C22 /* Bold_Lines.png in Resources */ = {isa = PBXBuildFile; fileRef = DAE9987C14C1D2A0002D7C22 /* Bold_Lines.png */; };
|
||||||
@ -744,25 +743,22 @@
|
|||||||
/* End PBXContainerItemProxy section */
|
/* End PBXContainerItemProxy section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
DA007F5014B24DCC00251337 /* OPConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OPConfig.h; sourceTree = "<group>"; };
|
DA007F5014B24DCC00251337 /* MPConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPConfig.h; sourceTree = "<group>"; };
|
||||||
DA007F5114B24DCD00251337 /* OPConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OPConfig.m; sourceTree = "<group>"; };
|
|
||||||
DA007F5414B25EE100251337 /* ciphers.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ciphers.plist; sourceTree = "<group>"; };
|
DA007F5414B25EE100251337 /* ciphers.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ciphers.plist; sourceTree = "<group>"; };
|
||||||
DA04E33D14B1E70400ECA4F3 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; };
|
DA04E33D14B1E70400ECA4F3 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; };
|
||||||
DA0A848A14C4DFCB0090EA8E /* OPElementGeneratedEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OPElementGeneratedEntity.h; sourceTree = "<group>"; };
|
DA0A848A14C4DFCB0090EA8E /* MPElementGeneratedEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPElementGeneratedEntity.h; sourceTree = "<group>"; };
|
||||||
DA0A848B14C4DFCB0090EA8E /* OPElementGeneratedEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OPElementGeneratedEntity.m; sourceTree = "<group>"; };
|
DA0A848B14C4DFCB0090EA8E /* MPElementGeneratedEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPElementGeneratedEntity.m; sourceTree = "<group>"; };
|
||||||
DA0B951014C2D69E001D4EB1 /* help.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = help.html; path = Resources/help.html; sourceTree = "<group>"; };
|
DA0B951014C2D69E001D4EB1 /* help.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = help.html; path = Resources/help.html; sourceTree = "<group>"; };
|
||||||
DA34DA0B14B1BC7D00F721C1 /* OPElementStoredEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OPElementStoredEntity.h; sourceTree = "<group>"; };
|
DA34DA0B14B1BC7D00F721C1 /* MPElementStoredEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPElementStoredEntity.h; sourceTree = "<group>"; };
|
||||||
DA34DA0C14B1BC7D00F721C1 /* OPElementStoredEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OPElementStoredEntity.m; sourceTree = "<group>"; };
|
DA34DA0C14B1BC7D00F721C1 /* MPElementStoredEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPElementStoredEntity.m; sourceTree = "<group>"; };
|
||||||
DA34DA0F14B1BC7E00F721C1 /* OPElementEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OPElementEntity.h; sourceTree = "<group>"; };
|
DA34DA0F14B1BC7E00F721C1 /* MPElementEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPElementEntity.h; sourceTree = "<group>"; };
|
||||||
DA34DA1014B1BC7E00F721C1 /* OPElementEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OPElementEntity.m; sourceTree = "<group>"; };
|
DA34DA1014B1BC7E00F721C1 /* MPElementEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPElementEntity.m; sourceTree = "<group>"; };
|
||||||
DA34DA1414B1BEA100F721C1 /* OPTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OPTypes.h; sourceTree = "<group>"; };
|
|
||||||
DA34DA1514B1BEA100F721C1 /* OPTypes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OPTypes.m; sourceTree = "<group>"; };
|
|
||||||
DA41A40914DB3BF100638533 /* guide_page_0.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = guide_page_0.png; sourceTree = "<group>"; };
|
DA41A40914DB3BF100638533 /* guide_page_0.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = guide_page_0.png; sourceTree = "<group>"; };
|
||||||
DA41A40A14DB3BF100638533 /* guide_page_0@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "guide_page_0@2x.png"; sourceTree = "<group>"; };
|
DA41A40A14DB3BF100638533 /* guide_page_0@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "guide_page_0@2x.png"; sourceTree = "<group>"; };
|
||||||
DA55B29C14B38272001131B7 /* OPContentViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OPContentViewController.h; sourceTree = "<group>"; };
|
DA55B29C14B38272001131B7 /* MPContentViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPContentViewController.h; sourceTree = "<group>"; };
|
||||||
DA55B29D14B38272001131B7 /* OPContentViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OPContentViewController.m; sourceTree = "<group>"; };
|
DA55B29D14B38272001131B7 /* MPContentViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPContentViewController.m; sourceTree = "<group>"; };
|
||||||
DA55B2A014B4EB46001131B7 /* OPSearchDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OPSearchDelegate.h; sourceTree = "<group>"; };
|
DA55B2A014B4EB46001131B7 /* MPSearchDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPSearchDelegate.h; sourceTree = "<group>"; };
|
||||||
DA55B2A114B4EB46001131B7 /* OPSearchDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OPSearchDelegate.m; sourceTree = "<group>"; };
|
DA55B2A114B4EB46001131B7 /* MPSearchDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPSearchDelegate.m; sourceTree = "<group>"; };
|
||||||
DA5BFA44147E415C00F98B1E /* MasterPassword.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MasterPassword.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
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; };
|
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; };
|
DA5BFA4A147E415C00F98B1E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||||
@ -772,11 +768,11 @@
|
|||||||
DA5BFA54147E415C00F98B1E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
DA5BFA54147E415C00F98B1E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
DA5BFA56147E415C00F98B1E /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
DA5BFA56147E415C00F98B1E /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
||||||
DA5BFA58147E415C00F98B1E /* MasterPassword-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MasterPassword-Prefix.pch"; sourceTree = "<group>"; };
|
DA5BFA58147E415C00F98B1E /* MasterPassword-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MasterPassword-Prefix.pch"; sourceTree = "<group>"; };
|
||||||
DA5BFA59147E415C00F98B1E /* OPAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OPAppDelegate.h; sourceTree = "<group>"; };
|
DA5BFA59147E415C00F98B1E /* MPAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPAppDelegate.h; sourceTree = "<group>"; };
|
||||||
DA5BFA5A147E415C00F98B1E /* OPAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OPAppDelegate.m; sourceTree = "<group>"; };
|
DA5BFA5A147E415C00F98B1E /* MPAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPAppDelegate.m; sourceTree = "<group>"; };
|
||||||
DA5BFA63147E415C00F98B1E /* MasterPassword.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = MasterPassword.xcdatamodel; sourceTree = "<group>"; };
|
DA5BFA63147E415C00F98B1E /* MasterPassword.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = MasterPassword.xcdatamodel; sourceTree = "<group>"; };
|
||||||
DA5BFA65147E415C00F98B1E /* OPMainViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OPMainViewController.h; sourceTree = "<group>"; };
|
DA5BFA65147E415C00F98B1E /* MPMainViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPMainViewController.h; sourceTree = "<group>"; };
|
||||||
DA5BFA66147E415C00F98B1E /* OPMainViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OPMainViewController.m; sourceTree = "<group>"; };
|
DA5BFA66147E415C00F98B1E /* MPMainViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPMainViewController.m; sourceTree = "<group>"; };
|
||||||
DA5DB7A514BE4B19002DD256 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = ../Default.png; sourceTree = "<group>"; };
|
DA5DB7A514BE4B19002DD256 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = ../Default.png; sourceTree = "<group>"; };
|
||||||
DA5DB7A714BE4B4B002DD256 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x.png"; path = "../Default@2x.png"; sourceTree = "<group>"; };
|
DA5DB7A714BE4B4B002DD256 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x.png"; path = "../Default@2x.png"; sourceTree = "<group>"; };
|
||||||
DA6556F814D730B700841C99 /* guide_page_1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = guide_page_1.png; sourceTree = "<group>"; };
|
DA6556F814D730B700841C99 /* guide_page_1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = guide_page_1.png; sourceTree = "<group>"; };
|
||||||
@ -785,8 +781,8 @@
|
|||||||
DA6556FB14D730B700841C99 /* guide_page_4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = guide_page_4.png; sourceTree = "<group>"; };
|
DA6556FB14D730B700841C99 /* guide_page_4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = guide_page_4.png; sourceTree = "<group>"; };
|
||||||
DA6556FC14D730B700841C99 /* guide_page_5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = guide_page_5.png; sourceTree = "<group>"; };
|
DA6556FC14D730B700841C99 /* guide_page_5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = guide_page_5.png; sourceTree = "<group>"; };
|
||||||
DA6556FD14D730B700841C99 /* guide_page_6.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = guide_page_6.png; sourceTree = "<group>"; };
|
DA6556FD14D730B700841C99 /* guide_page_6.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = guide_page_6.png; sourceTree = "<group>"; };
|
||||||
DA65570414D731F000841C99 /* OPGuideViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OPGuideViewController.h; sourceTree = "<group>"; };
|
DA65570414D731F000841C99 /* MPGuideViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPGuideViewController.h; sourceTree = "<group>"; };
|
||||||
DA65570514D731F000841C99 /* OPGuideViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OPGuideViewController.m; sourceTree = "<group>"; };
|
DA65570514D731F000841C99 /* MPGuideViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPGuideViewController.m; sourceTree = "<group>"; };
|
||||||
DA65570714D760BD00841C99 /* guide_page_1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "guide_page_1@2x.png"; sourceTree = "<group>"; };
|
DA65570714D760BD00841C99 /* guide_page_1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "guide_page_1@2x.png"; sourceTree = "<group>"; };
|
||||||
DA65570814D760BD00841C99 /* guide_page_2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "guide_page_2@2x.png"; sourceTree = "<group>"; };
|
DA65570814D760BD00841C99 /* guide_page_2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "guide_page_2@2x.png"; sourceTree = "<group>"; };
|
||||||
DA65570914D760BD00841C99 /* guide_page_3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "guide_page_3@2x.png"; sourceTree = "<group>"; };
|
DA65570914D760BD00841C99 /* guide_page_3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "guide_page_3@2x.png"; sourceTree = "<group>"; };
|
||||||
@ -873,7 +869,6 @@
|
|||||||
DA7659AD14C5E22E00769249 /* Square-bottom.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Square-bottom.png"; sourceTree = "<group>"; };
|
DA7659AD14C5E22E00769249 /* Square-bottom.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Square-bottom.png"; sourceTree = "<group>"; };
|
||||||
DA7659AE14C5E22E00769249 /* Square-top.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Square-top.png"; sourceTree = "<group>"; };
|
DA7659AE14C5E22E00769249 /* Square-top.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Square-top.png"; sourceTree = "<group>"; };
|
||||||
DA7974C314C8C98500A71457 /* MainStoryboard_iPhone.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = MainStoryboard_iPhone.storyboard; sourceTree = "<group>"; };
|
DA7974C314C8C98500A71457 /* MainStoryboard_iPhone.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = MainStoryboard_iPhone.storyboard; sourceTree = "<group>"; };
|
||||||
DA7974C514C8C98C00A71457 /* MainStoryboard_iPad.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = MainStoryboard_iPad.storyboard; sourceTree = "<group>"; };
|
|
||||||
DA7974C714C8CA5000A71457 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Pearl.strings; sourceTree = "<group>"; };
|
DA7974C714C8CA5000A71457 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Pearl.strings; sourceTree = "<group>"; };
|
||||||
DA84808214CB3DBA00A2FA22 /* MessageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MessageView.h; sourceTree = "<group>"; };
|
DA84808214CB3DBA00A2FA22 /* MessageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MessageView.h; sourceTree = "<group>"; };
|
||||||
DA84808314CB3DBA00A2FA22 /* MessageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MessageView.m; sourceTree = "<group>"; };
|
DA84808314CB3DBA00A2FA22 /* MessageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MessageView.m; sourceTree = "<group>"; };
|
||||||
@ -995,6 +990,10 @@
|
|||||||
DA95D5CD14DF0691008D1B94 /* IASKPSToggleSwitchSpecifierViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IASKPSToggleSwitchSpecifierViewCell.xib; sourceTree = "<group>"; };
|
DA95D5CD14DF0691008D1B94 /* IASKPSToggleSwitchSpecifierViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IASKPSToggleSwitchSpecifierViewCell.xib; sourceTree = "<group>"; };
|
||||||
DA95D5CE14DF0691008D1B94 /* IASKSpecifierValuesView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IASKSpecifierValuesView.xib; sourceTree = "<group>"; };
|
DA95D5CE14DF0691008D1B94 /* IASKSpecifierValuesView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IASKSpecifierValuesView.xib; sourceTree = "<group>"; };
|
||||||
DA95D5F014DF0B1E008D1B94 /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; };
|
DA95D5F014DF0B1E008D1B94 /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; };
|
||||||
|
DA95D5F914DF295E008D1B94 /* MPConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPConfig.m; sourceTree = "<group>"; };
|
||||||
|
DA95D5FA14DF295E008D1B94 /* MPTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPTypes.h; sourceTree = "<group>"; };
|
||||||
|
DA95D5FB14DF295F008D1B94 /* MPTypes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPTypes.m; sourceTree = "<group>"; };
|
||||||
|
DA95D5FC14DF295F008D1B94 /* MPTypeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPTypeViewController.h; sourceTree = "<group>"; };
|
||||||
DAA3B53814CCCEE700F35AF6 /* icon_addressbook-person@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_addressbook-person@2x.png"; sourceTree = "<group>"; };
|
DAA3B53814CCCEE700F35AF6 /* icon_addressbook-person@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_addressbook-person@2x.png"; sourceTree = "<group>"; };
|
||||||
DAA3B53914CCCEE700F35AF6 /* icon_addressbook.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_addressbook.png; sourceTree = "<group>"; };
|
DAA3B53914CCCEE700F35AF6 /* icon_addressbook.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_addressbook.png; sourceTree = "<group>"; };
|
||||||
DAA3B53A14CCCEE700F35AF6 /* icon_addressbook@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_addressbook@2x.png"; sourceTree = "<group>"; };
|
DAA3B53A14CCCEE700F35AF6 /* icon_addressbook@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_addressbook@2x.png"; sourceTree = "<group>"; };
|
||||||
@ -1416,11 +1415,10 @@
|
|||||||
DAC780EE1482AAD700BCF976 /* ValidatingTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ValidatingTextField.m; sourceTree = "<group>"; };
|
DAC780EE1482AAD700BCF976 /* ValidatingTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ValidatingTextField.m; sourceTree = "<group>"; };
|
||||||
DAC780EF1482AAD700BCF976 /* WebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebViewController.h; sourceTree = "<group>"; };
|
DAC780EF1482AAD700BCF976 /* WebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebViewController.h; sourceTree = "<group>"; };
|
||||||
DAC780F01482AAD700BCF976 /* WebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebViewController.m; sourceTree = "<group>"; };
|
DAC780F01482AAD700BCF976 /* WebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebViewController.m; sourceTree = "<group>"; };
|
||||||
DAC781341482E67300BCF976 /* OPRecentViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OPRecentViewController.h; sourceTree = "<group>"; };
|
DAC781341482E67300BCF976 /* MPRecentViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPRecentViewController.h; sourceTree = "<group>"; };
|
||||||
DAC781351482E67300BCF976 /* OPRecentViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OPRecentViewController.m; sourceTree = "<group>"; };
|
DAC781351482E67300BCF976 /* MPRecentViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPRecentViewController.m; sourceTree = "<group>"; };
|
||||||
DADC3C4C14C62B350091CB4D /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = "<group>"; };
|
DADC3C4C14C62B350091CB4D /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = "<group>"; };
|
||||||
DAE2C645148247E500BA6B10 /* OPTypeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OPTypeViewController.h; sourceTree = "<group>"; };
|
DAE2C646148247E500BA6B10 /* MPTypeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPTypeViewController.m; sourceTree = "<group>"; };
|
||||||
DAE2C646148247E500BA6B10 /* OPTypeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OPTypeViewController.m; sourceTree = "<group>"; };
|
|
||||||
DAE9987914C1D2A0002D7C22 /* Content-Backdrop.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Content-Backdrop.png"; path = "Resources/Content-Backdrop.png"; sourceTree = "<group>"; };
|
DAE9987914C1D2A0002D7C22 /* Content-Backdrop.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Content-Backdrop.png"; path = "Resources/Content-Backdrop.png"; sourceTree = "<group>"; };
|
||||||
DAE9987A14C1D2A0002D7C22 /* Content-Backdrop@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Content-Backdrop@2x.png"; path = "Resources/Content-Backdrop@2x.png"; sourceTree = "<group>"; };
|
DAE9987A14C1D2A0002D7C22 /* Content-Backdrop@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Content-Backdrop@2x.png"; path = "Resources/Content-Backdrop@2x.png"; sourceTree = "<group>"; };
|
||||||
DAE9987C14C1D2A0002D7C22 /* Bold_Lines.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Bold_Lines.png; sourceTree = "<group>"; };
|
DAE9987C14C1D2A0002D7C22 /* Bold_Lines.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Bold_Lines.png; sourceTree = "<group>"; };
|
||||||
@ -1912,24 +1910,24 @@
|
|||||||
DA8E8E4714DDA62D0044257E /* MasterPassword.entitlements */,
|
DA8E8E4714DDA62D0044257E /* MasterPassword.entitlements */,
|
||||||
DA7C28A214AF02A000491972 /* Models */,
|
DA7C28A214AF02A000491972 /* Models */,
|
||||||
DA7C28A314AF02B100491972 /* Data */,
|
DA7C28A314AF02B100491972 /* Data */,
|
||||||
DA5BFA59147E415C00F98B1E /* OPAppDelegate.h */,
|
DA5BFA59147E415C00F98B1E /* MPAppDelegate.h */,
|
||||||
DA5BFA5A147E415C00F98B1E /* OPAppDelegate.m */,
|
DA5BFA5A147E415C00F98B1E /* MPAppDelegate.m */,
|
||||||
DA5BFA65147E415C00F98B1E /* OPMainViewController.h */,
|
DA5BFA65147E415C00F98B1E /* MPMainViewController.h */,
|
||||||
DA5BFA66147E415C00F98B1E /* OPMainViewController.m */,
|
DA5BFA66147E415C00F98B1E /* MPMainViewController.m */,
|
||||||
DA65570414D731F000841C99 /* OPGuideViewController.h */,
|
DA65570414D731F000841C99 /* MPGuideViewController.h */,
|
||||||
DA65570514D731F000841C99 /* OPGuideViewController.m */,
|
DA65570514D731F000841C99 /* MPGuideViewController.m */,
|
||||||
DA55B2A014B4EB46001131B7 /* OPSearchDelegate.h */,
|
DA55B2A014B4EB46001131B7 /* MPSearchDelegate.h */,
|
||||||
DA55B2A114B4EB46001131B7 /* OPSearchDelegate.m */,
|
DA55B2A114B4EB46001131B7 /* MPSearchDelegate.m */,
|
||||||
DAC781341482E67300BCF976 /* OPRecentViewController.h */,
|
DAC781341482E67300BCF976 /* MPRecentViewController.h */,
|
||||||
DAC781351482E67300BCF976 /* OPRecentViewController.m */,
|
DAC781351482E67300BCF976 /* MPRecentViewController.m */,
|
||||||
DAE2C645148247E500BA6B10 /* OPTypeViewController.h */,
|
DA95D5FC14DF295F008D1B94 /* MPTypeViewController.h */,
|
||||||
DAE2C646148247E500BA6B10 /* OPTypeViewController.m */,
|
DAE2C646148247E500BA6B10 /* MPTypeViewController.m */,
|
||||||
DA55B29C14B38272001131B7 /* OPContentViewController.h */,
|
DA55B29C14B38272001131B7 /* MPContentViewController.h */,
|
||||||
DA55B29D14B38272001131B7 /* OPContentViewController.m */,
|
DA55B29D14B38272001131B7 /* MPContentViewController.m */,
|
||||||
DA34DA1414B1BEA100F721C1 /* OPTypes.h */,
|
DA007F5014B24DCC00251337 /* MPConfig.h */,
|
||||||
DA34DA1514B1BEA100F721C1 /* OPTypes.m */,
|
DA95D5F914DF295E008D1B94 /* MPConfig.m */,
|
||||||
DA007F5014B24DCC00251337 /* OPConfig.h */,
|
DA95D5FA14DF295E008D1B94 /* MPTypes.h */,
|
||||||
DA007F5114B24DCD00251337 /* OPConfig.m */,
|
DA95D5FB14DF295F008D1B94 /* MPTypes.m */,
|
||||||
DADC3C4C14C62B350091CB4D /* Settings.bundle */,
|
DADC3C4C14C62B350091CB4D /* Settings.bundle */,
|
||||||
DA5BFA51147E415C00F98B1E /* Supporting Files */,
|
DA5BFA51147E415C00F98B1E /* Supporting Files */,
|
||||||
);
|
);
|
||||||
@ -1993,7 +1991,6 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
DA7974C314C8C98500A71457 /* MainStoryboard_iPhone.storyboard */,
|
DA7974C314C8C98500A71457 /* MainStoryboard_iPhone.storyboard */,
|
||||||
DA7974C514C8C98C00A71457 /* MainStoryboard_iPad.storyboard */,
|
|
||||||
DA5BFA62147E415C00F98B1E /* MasterPassword.xcdatamodeld */,
|
DA5BFA62147E415C00F98B1E /* MasterPassword.xcdatamodeld */,
|
||||||
);
|
);
|
||||||
name = Models;
|
name = Models;
|
||||||
@ -2002,12 +1999,12 @@
|
|||||||
DA7C28A314AF02B100491972 /* Data */ = {
|
DA7C28A314AF02B100491972 /* Data */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
DA34DA0F14B1BC7E00F721C1 /* OPElementEntity.h */,
|
DA34DA0F14B1BC7E00F721C1 /* MPElementEntity.h */,
|
||||||
DA34DA1014B1BC7E00F721C1 /* OPElementEntity.m */,
|
DA34DA1014B1BC7E00F721C1 /* MPElementEntity.m */,
|
||||||
DA0A848A14C4DFCB0090EA8E /* OPElementGeneratedEntity.h */,
|
DA0A848A14C4DFCB0090EA8E /* MPElementGeneratedEntity.h */,
|
||||||
DA0A848B14C4DFCB0090EA8E /* OPElementGeneratedEntity.m */,
|
DA0A848B14C4DFCB0090EA8E /* MPElementGeneratedEntity.m */,
|
||||||
DA34DA0B14B1BC7D00F721C1 /* OPElementStoredEntity.h */,
|
DA34DA0B14B1BC7D00F721C1 /* MPElementStoredEntity.h */,
|
||||||
DA34DA0C14B1BC7D00F721C1 /* OPElementStoredEntity.m */,
|
DA34DA0C14B1BC7D00F721C1 /* MPElementStoredEntity.m */,
|
||||||
);
|
);
|
||||||
name = Data;
|
name = Data;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -2663,7 +2660,6 @@
|
|||||||
DAA3B81514CDD0C100F35AF6 /* jquery-1.6.1.min.js in Resources */,
|
DAA3B81514CDD0C100F35AF6 /* jquery-1.6.1.min.js in Resources */,
|
||||||
DA5BFA55147E415C00F98B1E /* InfoPlist.strings in Resources */,
|
DA5BFA55147E415C00F98B1E /* InfoPlist.strings in Resources */,
|
||||||
DA7974C214C8C98500A71457 /* MainStoryboard_iPhone.storyboard in Resources */,
|
DA7974C214C8C98500A71457 /* MainStoryboard_iPhone.storyboard in Resources */,
|
||||||
DA7974C414C8C98C00A71457 /* MainStoryboard_iPad.storyboard in Resources */,
|
|
||||||
DA007F5514B25EE100251337 /* ciphers.plist in Resources */,
|
DA007F5514B25EE100251337 /* ciphers.plist in Resources */,
|
||||||
DA5DB7A614BE4B19002DD256 /* Default.png in Resources */,
|
DA5DB7A614BE4B19002DD256 /* Default.png in Resources */,
|
||||||
DA5DB7A814BE4B4B002DD256 /* Default@2x.png in Resources */,
|
DA5DB7A814BE4B4B002DD256 /* Default@2x.png in Resources */,
|
||||||
@ -3256,20 +3252,20 @@
|
|||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
DA5BFA57147E415C00F98B1E /* main.m in Sources */,
|
DA5BFA57147E415C00F98B1E /* main.m in Sources */,
|
||||||
DA5BFA5B147E415C00F98B1E /* OPAppDelegate.m in Sources */,
|
DA5BFA5B147E415C00F98B1E /* MPAppDelegate.m in Sources */,
|
||||||
DA5BFA64147E415C00F98B1E /* MasterPassword.xcdatamodeld in Sources */,
|
DA5BFA64147E415C00F98B1E /* MasterPassword.xcdatamodeld in Sources */,
|
||||||
DA5BFA67147E415C00F98B1E /* OPMainViewController.m in Sources */,
|
DA5BFA67147E415C00F98B1E /* MPMainViewController.m in Sources */,
|
||||||
DAE2C648148247E500BA6B10 /* OPTypeViewController.m in Sources */,
|
DAE2C648148247E500BA6B10 /* MPTypeViewController.m in Sources */,
|
||||||
DAC781361482E67300BCF976 /* OPRecentViewController.m in Sources */,
|
DAC781361482E67300BCF976 /* MPRecentViewController.m in Sources */,
|
||||||
DA34DA0D14B1BC7D00F721C1 /* OPElementStoredEntity.m in Sources */,
|
DA34DA0D14B1BC7D00F721C1 /* MPElementStoredEntity.m in Sources */,
|
||||||
DA34DA1114B1BC7E00F721C1 /* OPElementEntity.m in Sources */,
|
DA34DA1114B1BC7E00F721C1 /* MPElementEntity.m in Sources */,
|
||||||
DA34DA1614B1BEA100F721C1 /* OPTypes.m in Sources */,
|
DA55B29E14B38272001131B7 /* MPContentViewController.m in Sources */,
|
||||||
DA007F5214B24DCD00251337 /* OPConfig.m in Sources */,
|
DA55B2A214B4EB47001131B7 /* MPSearchDelegate.m in Sources */,
|
||||||
DA55B29E14B38272001131B7 /* OPContentViewController.m in Sources */,
|
DA0A848C14C4DFCB0090EA8E /* MPElementGeneratedEntity.m in Sources */,
|
||||||
DA55B2A214B4EB47001131B7 /* OPSearchDelegate.m in Sources */,
|
|
||||||
DA0A848C14C4DFCB0090EA8E /* OPElementGeneratedEntity.m in Sources */,
|
|
||||||
DAA3B81414CDC77100F35AF6 /* jquery-1.6.1.min.js in Sources */,
|
DAA3B81414CDC77100F35AF6 /* jquery-1.6.1.min.js in Sources */,
|
||||||
DA65570614D731F000841C99 /* OPGuideViewController.m in Sources */,
|
DA65570614D731F000841C99 /* MPGuideViewController.m in Sources */,
|
||||||
|
DA95D5FD14DF295F008D1B94 /* MPConfig.m in Sources */,
|
||||||
|
DA95D5FE14DF295F008D1B94 /* MPTypes.m in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// OPAppDelegate.h
|
// MPAppDelegate.h
|
||||||
// MasterPassword
|
// MasterPassword
|
||||||
//
|
//
|
||||||
// Created by Maarten Billemont on 24/11/11.
|
// Created by Maarten Billemont on 24/11/11.
|
||||||
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
@interface OPAppDelegate : AbstractAppDelegate
|
@interface MPAppDelegate : AbstractAppDelegate
|
||||||
|
|
||||||
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
|
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
|
||||||
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
|
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
|
||||||
@ -17,7 +17,7 @@
|
|||||||
@property (strong, nonatomic) NSData *keyPhraseHash;
|
@property (strong, nonatomic) NSData *keyPhraseHash;
|
||||||
@property (strong, nonatomic) NSString *keyPhraseHashHex;
|
@property (strong, nonatomic) NSString *keyPhraseHashHex;
|
||||||
|
|
||||||
+ (OPAppDelegate *)get;
|
+ (MPAppDelegate *)get;
|
||||||
+ (NSManagedObjectModel *)managedObjectModel;
|
+ (NSManagedObjectModel *)managedObjectModel;
|
||||||
+ (NSManagedObjectContext *)managedObjectContext;
|
+ (NSManagedObjectContext *)managedObjectContext;
|
||||||
|
|
@ -1,17 +1,17 @@
|
|||||||
//
|
//
|
||||||
// OPAppDelegate.m
|
// MPAppDelegate.m
|
||||||
// MasterPassword
|
// MasterPassword
|
||||||
//
|
//
|
||||||
// Created by Maarten Billemont on 24/11/11.
|
// Created by Maarten Billemont on 24/11/11.
|
||||||
// Copyright (c) 2011 Lyndir. All rights reserved.
|
// Copyright (c) 2011 Lyndir. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OPAppDelegate.h"
|
#import "MPAppDelegate.h"
|
||||||
|
|
||||||
#import "OPMainViewController.h"
|
#import "MPMainViewController.h"
|
||||||
#import "IASKSettingsReader.h"
|
#import "IASKSettingsReader.h"
|
||||||
|
|
||||||
@interface OPAppDelegate ()
|
@interface MPAppDelegate ()
|
||||||
|
|
||||||
+ (NSDictionary *)keyPhraseQuery;
|
+ (NSDictionary *)keyPhraseQuery;
|
||||||
+ (NSDictionary *)keyPhraseHashQuery;
|
+ (NSDictionary *)keyPhraseHashQuery;
|
||||||
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation OPAppDelegate
|
@implementation MPAppDelegate
|
||||||
|
|
||||||
@synthesize managedObjectModel = __managedObjectModel;
|
@synthesize managedObjectModel = __managedObjectModel;
|
||||||
@synthesize managedObjectContext = __managedObjectContext;
|
@synthesize managedObjectContext = __managedObjectContext;
|
||||||
@ -42,26 +42,26 @@
|
|||||||
|
|
||||||
+ (NSDictionary *)keyPhraseQuery {
|
+ (NSDictionary *)keyPhraseQuery {
|
||||||
|
|
||||||
static NSDictionary *OPKeyPhraseQuery = nil;
|
static NSDictionary *MPKeyPhraseQuery = nil;
|
||||||
if (!OPKeyPhraseQuery)
|
if (!MPKeyPhraseQuery)
|
||||||
OPKeyPhraseQuery = [KeyChain createQueryForClass:kSecClassGenericPassword
|
MPKeyPhraseQuery = [KeyChain createQueryForClass:kSecClassGenericPassword
|
||||||
attributes:[NSDictionary dictionaryWithObject:@"MasterPassword"
|
attributes:[NSDictionary dictionaryWithObject:@"MasterPassword"
|
||||||
forKey:(__bridge id)kSecAttrService]
|
forKey:(__bridge id)kSecAttrService]
|
||||||
matches:nil];
|
matches:nil];
|
||||||
|
|
||||||
return OPKeyPhraseQuery;
|
return MPKeyPhraseQuery;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (NSDictionary *)keyPhraseHashQuery {
|
+ (NSDictionary *)keyPhraseHashQuery {
|
||||||
|
|
||||||
static NSDictionary *OPKeyPhraseHashQuery = nil;
|
static NSDictionary *MPKeyPhraseHashQuery = nil;
|
||||||
if (!OPKeyPhraseHashQuery)
|
if (!MPKeyPhraseHashQuery)
|
||||||
OPKeyPhraseHashQuery = [KeyChain createQueryForClass:kSecClassGenericPassword
|
MPKeyPhraseHashQuery = [KeyChain createQueryForClass:kSecClassGenericPassword
|
||||||
attributes:[NSDictionary dictionaryWithObject:@"MasterPasswordHash"
|
attributes:[NSDictionary dictionaryWithObject:@"MasterPasswordHash"
|
||||||
forKey:(__bridge id)kSecAttrService]
|
forKey:(__bridge id)kSecAttrService]
|
||||||
matches:nil];
|
matches:nil];
|
||||||
|
|
||||||
return OPKeyPhraseHashQuery;
|
return MPKeyPhraseHashQuery;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
|
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
|
||||||
@ -134,7 +134,7 @@
|
|||||||
}
|
}
|
||||||
- (void)applicationDidBecomeActive:(UIApplication *)application {
|
- (void)applicationDidBecomeActive:(UIApplication *)application {
|
||||||
|
|
||||||
if ([[OPConfig get].showQuickStart boolValue])
|
if ([[MPConfig get].showQuickStart boolValue])
|
||||||
[self showGuide];
|
[self showGuide];
|
||||||
else
|
else
|
||||||
[self loadKeyPhrase];
|
[self loadKeyPhrase];
|
||||||
@ -142,12 +142,12 @@
|
|||||||
|
|
||||||
- (void)showGuide {
|
- (void)showGuide {
|
||||||
|
|
||||||
[self.navigationController performSegueWithIdentifier:@"OP_Guide" sender:self];
|
[self.navigationController performSegueWithIdentifier:@"MP_Guide" sender:self];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)loadKeyPhrase {
|
- (void)loadKeyPhrase {
|
||||||
|
|
||||||
if ([[OPConfig get].forgetKeyPhrase boolValue]) {
|
if ([[MPConfig get].forgetKeyPhrase boolValue]) {
|
||||||
[self forgetKeyPhrase];
|
[self forgetKeyPhrase];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -175,23 +175,23 @@
|
|||||||
if (buttonIndex == [alert firstOtherButtonIndex]) {
|
if (buttonIndex == [alert firstOtherButtonIndex]) {
|
||||||
// Key phrase reset. Delete it.
|
// Key phrase reset. Delete it.
|
||||||
dbg(@"Deleting master key phrase and hash from key chain.");
|
dbg(@"Deleting master key phrase and hash from key chain.");
|
||||||
[KeyChain deleteItemForQuery:[OPAppDelegate keyPhraseQuery]];
|
[KeyChain deleteItemForQuery:[MPAppDelegate keyPhraseQuery]];
|
||||||
[KeyChain deleteItemForQuery:[OPAppDelegate keyPhraseHashQuery]];
|
[KeyChain deleteItemForQuery:[MPAppDelegate keyPhraseHashQuery]];
|
||||||
}
|
}
|
||||||
|
|
||||||
[self loadKeyPhrase];
|
[self loadKeyPhrase];
|
||||||
}
|
}
|
||||||
cancelTitle:[PearlStrings get].commonButtonAbort
|
cancelTitle:[PearlStrings get].commonButtonAbort
|
||||||
otherTitles:[PearlStrings get].commonButtonContinue, nil];
|
otherTitles:[PearlStrings get].commonButtonContinue, nil];
|
||||||
[OPConfig get].forgetKeyPhrase = [NSNumber numberWithBool:NO];
|
[MPConfig get].forgetKeyPhrase = [NSNumber numberWithBool:NO];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)loadStoredKeyPhrase {
|
- (void)loadStoredKeyPhrase {
|
||||||
|
|
||||||
if ([[OPConfig get].storeKeyPhrase boolValue]) {
|
if ([[MPConfig get].storeKeyPhrase boolValue]) {
|
||||||
// Key phrase is stored in keychain. Load it.
|
// Key phrase is stored in keychain. Load it.
|
||||||
dbg(@"Loading master key phrase from key chain.");
|
dbg(@"Loading master key phrase from key chain.");
|
||||||
NSData *keyPhraseData = [KeyChain dataOfItemForQuery:[OPAppDelegate keyPhraseQuery]];
|
NSData *keyPhraseData = [KeyChain dataOfItemForQuery:[MPAppDelegate keyPhraseQuery]];
|
||||||
dbg(@" -> Master key phrase %@.", keyPhraseData? @"found": @"NOT found");
|
dbg(@" -> Master key phrase %@.", keyPhraseData? @"found": @"NOT found");
|
||||||
|
|
||||||
self.keyPhrase = keyPhraseData? [[NSString alloc] initWithBytes:keyPhraseData.bytes length:keyPhraseData.length
|
self.keyPhrase = keyPhraseData? [[NSString alloc] initWithBytes:keyPhraseData.bytes length:keyPhraseData.length
|
||||||
@ -199,14 +199,14 @@
|
|||||||
} else {
|
} else {
|
||||||
// Key phrase should not be stored in keychain. Delete it.
|
// Key phrase should not be stored in keychain. Delete it.
|
||||||
dbg(@"Deleting master key phrase from key chain.");
|
dbg(@"Deleting master key phrase from key chain.");
|
||||||
[KeyChain deleteItemForQuery:[OPAppDelegate keyPhraseQuery]];
|
[KeyChain deleteItemForQuery:[MPAppDelegate keyPhraseQuery]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)askKeyPhrase {
|
- (void)askKeyPhrase {
|
||||||
|
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
NSData *keyPhraseHash = [KeyChain dataOfItemForQuery:[OPAppDelegate keyPhraseHashQuery]];
|
NSData *keyPhraseHash = [KeyChain dataOfItemForQuery:[MPAppDelegate keyPhraseHashQuery]];
|
||||||
dbg(@"Key phrase hash %@.", keyPhraseHash? @"known": @"NOT known");
|
dbg(@"Key phrase hash %@.", keyPhraseHash? @"known": @"NOT known");
|
||||||
|
|
||||||
[AlertViewController showAlertWithTitle:@"Master Password"
|
[AlertViewController showAlertWithTitle:@"Master Password"
|
||||||
@ -259,7 +259,7 @@
|
|||||||
|
|
||||||
[self saveContext];
|
[self saveContext];
|
||||||
|
|
||||||
if (![[OPConfig get].rememberKeyPhrase boolValue])
|
if (![[MPConfig get].rememberKeyPhrase boolValue])
|
||||||
self.keyPhrase = nil;
|
self.keyPhrase = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -268,19 +268,19 @@
|
|||||||
[self saveContext];
|
[self saveContext];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (OPAppDelegate *)get {
|
+ (MPAppDelegate *)get {
|
||||||
|
|
||||||
return (OPAppDelegate *)[super get];
|
return (MPAppDelegate *)[super get];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (NSManagedObjectContext *)managedObjectContext {
|
+ (NSManagedObjectContext *)managedObjectContext {
|
||||||
|
|
||||||
return [(OPAppDelegate *)[UIApplication sharedApplication].delegate managedObjectContext];
|
return [(MPAppDelegate *)[UIApplication sharedApplication].delegate managedObjectContext];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (NSManagedObjectModel *)managedObjectModel {
|
+ (NSManagedObjectModel *)managedObjectModel {
|
||||||
|
|
||||||
return [(OPAppDelegate *)[UIApplication sharedApplication].delegate managedObjectModel];
|
return [(MPAppDelegate *)[UIApplication sharedApplication].delegate managedObjectModel];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)saveContext {
|
- (void)saveContext {
|
||||||
@ -301,14 +301,14 @@
|
|||||||
self.keyPhraseHashHex = [self.keyPhraseHash encodeHex];
|
self.keyPhraseHashHex = [self.keyPhraseHash encodeHex];
|
||||||
|
|
||||||
dbg(@"Updating master key phrase hash to: %@.", self.keyPhraseHashHex);
|
dbg(@"Updating master key phrase hash to: %@.", self.keyPhraseHashHex);
|
||||||
[KeyChain addOrUpdateItemForQuery:[OPAppDelegate keyPhraseHashQuery]
|
[KeyChain addOrUpdateItemForQuery:[MPAppDelegate keyPhraseHashQuery]
|
||||||
withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
|
withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
|
||||||
self.keyPhraseHash, (__bridge id)kSecValueData,
|
self.keyPhraseHash, (__bridge id)kSecValueData,
|
||||||
kSecAttrAccessibleWhenUnlocked, (__bridge id)kSecAttrAccessible,
|
kSecAttrAccessibleWhenUnlocked, (__bridge id)kSecAttrAccessible,
|
||||||
nil]];
|
nil]];
|
||||||
if ([[OPConfig get].storeKeyPhrase boolValue]) {
|
if ([[MPConfig get].storeKeyPhrase boolValue]) {
|
||||||
dbg(@"Storing master key phrase in key chain.");
|
dbg(@"Storing master key phrase in key chain.");
|
||||||
[KeyChain addOrUpdateItemForQuery:[OPAppDelegate keyPhraseQuery]
|
[KeyChain addOrUpdateItemForQuery:[MPAppDelegate keyPhraseQuery]
|
||||||
withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
|
withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
|
||||||
[keyPhrase dataUsingEncoding:NSUTF8StringEncoding], (__bridge id)kSecValueData,
|
[keyPhrase dataUsingEncoding:NSUTF8StringEncoding], (__bridge id)kSecValueData,
|
||||||
kSecAttrAccessibleWhenUnlocked, (__bridge id)kSecAttrAccessible,
|
kSecAttrAccessibleWhenUnlocked, (__bridge id)kSecAttrAccessible,
|
||||||
@ -343,7 +343,7 @@
|
|||||||
[__managedObjectContext mergeChangesFromContextDidSaveNotification:note];
|
[__managedObjectContext mergeChangesFromContextDidSaveNotification:note];
|
||||||
|
|
||||||
[[NSNotificationCenter defaultCenter] postNotification:
|
[[NSNotificationCenter defaultCenter] postNotification:
|
||||||
[NSNotification notificationWithName:OPPersistentStoreDidChangeNotification
|
[NSNotification notificationWithName:UIScreenModeDidChangeNotification
|
||||||
object:self userInfo:[note userInfo]]];
|
object:self userInfo:[note userInfo]]];
|
||||||
}];
|
}];
|
||||||
}];
|
}];
|
@ -1,12 +1,12 @@
|
|||||||
//
|
//
|
||||||
// OPConfig.h
|
// MPConfig.h
|
||||||
// MasterPassword
|
// MasterPassword
|
||||||
//
|
//
|
||||||
// Created by Maarten Billemont on 02/01/12.
|
// Created by Maarten Billemont on 02/01/12.
|
||||||
// Copyright (c) 2012 Lyndir. All rights reserved.
|
// Copyright (c) 2012 Lyndir. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
@interface OPConfig : Config
|
@interface MPConfig : Config
|
||||||
|
|
||||||
@property (nonatomic, retain) NSNumber *dataStoreError;
|
@property (nonatomic, retain) NSNumber *dataStoreError;
|
||||||
@property (nonatomic, retain) NSNumber *storeKeyPhrase;
|
@property (nonatomic, retain) NSNumber *storeKeyPhrase;
|
||||||
@ -15,6 +15,6 @@
|
|||||||
@property (nonatomic, retain) NSNumber *helpHidden;
|
@property (nonatomic, retain) NSNumber *helpHidden;
|
||||||
@property (nonatomic, retain) NSNumber *showQuickStart;
|
@property (nonatomic, retain) NSNumber *showQuickStart;
|
||||||
|
|
||||||
+ (OPConfig *)get;
|
+ (MPConfig *)get;
|
||||||
|
|
||||||
@end
|
@end
|
@ -1,14 +1,14 @@
|
|||||||
//
|
//
|
||||||
// OPConfig.m
|
// MPConfig.m
|
||||||
// MasterPassword
|
// MasterPassword
|
||||||
//
|
//
|
||||||
// Created by Maarten Billemont on 02/01/12.
|
// Created by Maarten Billemont on 02/01/12.
|
||||||
// Copyright (c) 2012 Lyndir. All rights reserved.
|
// Copyright (c) 2012 Lyndir. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OPConfig.h"
|
#import "MPConfig.h"
|
||||||
|
|
||||||
@implementation OPConfig
|
@implementation MPConfig
|
||||||
|
|
||||||
@dynamic dataStoreError, storeKeyPhrase, rememberKeyPhrase, forgetKeyPhrase, helpHidden, showQuickStart;
|
@dynamic dataStoreError, storeKeyPhrase, rememberKeyPhrase, forgetKeyPhrase, helpHidden, showQuickStart;
|
||||||
|
|
||||||
@ -30,9 +30,9 @@
|
|||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (OPConfig *)get {
|
+ (MPConfig *)get {
|
||||||
|
|
||||||
return (OPConfig *)[super get];
|
return (MPConfig *)[super get];
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
16
MasterPassword/MPContentViewController.h
Normal file
16
MasterPassword/MPContentViewController.h
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// MPContentViewController.h
|
||||||
|
// MasterPassword
|
||||||
|
//
|
||||||
|
// Created by Maarten Billemont on 03/01/12.
|
||||||
|
// Copyright (c) 2012 Lyndir. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import "MPElementEntity.h"
|
||||||
|
|
||||||
|
@interface MPContentViewController : UIViewController
|
||||||
|
|
||||||
|
@property (nonatomic, weak) MPElementEntity *activeElement;
|
||||||
|
|
||||||
|
@end
|
@ -1,14 +1,14 @@
|
|||||||
//
|
//
|
||||||
// OPContentViewController.m
|
// MPContentViewController.m
|
||||||
// MasterPassword
|
// MasterPassword
|
||||||
//
|
//
|
||||||
// Created by Maarten Billemont on 03/01/12.
|
// Created by Maarten Billemont on 03/01/12.
|
||||||
// Copyright (c) 2012 Lyndir. All rights reserved.
|
// Copyright (c) 2012 Lyndir. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OPContentViewController.h"
|
#import "MPContentViewController.h"
|
||||||
|
|
||||||
@implementation OPContentViewController
|
@implementation MPContentViewController
|
||||||
@synthesize activeElement = _activeElement;
|
@synthesize activeElement = _activeElement;
|
||||||
|
|
||||||
#pragma mark - View lifecycle
|
#pragma mark - View lifecycle
|
@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// OPElementEntity.h
|
// MPElementEntity.h
|
||||||
// MasterPassword
|
// MasterPassword
|
||||||
//
|
//
|
||||||
// Created by Maarten Billemont on 02/01/12.
|
// Created by Maarten Billemont on 02/01/12.
|
||||||
@ -10,7 +10,7 @@
|
|||||||
#import <CoreData/CoreData.h>
|
#import <CoreData/CoreData.h>
|
||||||
|
|
||||||
|
|
||||||
@interface OPElementEntity : NSManagedObject
|
@interface MPElementEntity : NSManagedObject
|
||||||
|
|
||||||
@property (nonatomic, retain) NSString *name;
|
@property (nonatomic, retain) NSString *name;
|
||||||
@property (nonatomic, retain) NSString *mpHashHex;
|
@property (nonatomic, retain) NSString *mpHashHex;
|
@ -1,15 +1,15 @@
|
|||||||
//
|
//
|
||||||
// OPElementEntity.m
|
// MPElementEntity.m
|
||||||
// MasterPassword
|
// MasterPassword
|
||||||
//
|
//
|
||||||
// Created by Maarten Billemont on 02/01/12.
|
// Created by Maarten Billemont on 02/01/12.
|
||||||
// Copyright (c) 2012 Lyndir. All rights reserved.
|
// Copyright (c) 2012 Lyndir. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OPElementEntity.h"
|
#import "MPElementEntity.h"
|
||||||
|
|
||||||
|
|
||||||
@implementation OPElementEntity
|
@implementation MPElementEntity
|
||||||
|
|
||||||
@dynamic name;
|
@dynamic name;
|
||||||
@dynamic mpHashHex;
|
@dynamic mpHashHex;
|
@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// OPElementGeneratedEntity.h
|
// MPElementGeneratedEntity.h
|
||||||
// MasterPassword
|
// MasterPassword
|
||||||
//
|
//
|
||||||
// Created by Maarten Billemont on 16/01/12.
|
// Created by Maarten Billemont on 16/01/12.
|
||||||
@ -8,10 +8,10 @@
|
|||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <CoreData/CoreData.h>
|
#import <CoreData/CoreData.h>
|
||||||
#import "OPElementEntity.h"
|
#import "MPElementEntity.h"
|
||||||
|
|
||||||
|
|
||||||
@interface OPElementGeneratedEntity : OPElementEntity
|
@interface MPElementGeneratedEntity : MPElementEntity
|
||||||
|
|
||||||
@property (nonatomic, assign) int16_t counter;
|
@property (nonatomic, assign) int16_t counter;
|
||||||
|
|
@ -1,28 +1,28 @@
|
|||||||
//
|
//
|
||||||
// OPElementGeneratedEntity.m
|
// MPElementGeneratedEntity.m
|
||||||
// MasterPassword
|
// MasterPassword
|
||||||
//
|
//
|
||||||
// Created by Maarten Billemont on 16/01/12.
|
// Created by Maarten Billemont on 16/01/12.
|
||||||
// Copyright (c) 2012 Lyndir. All rights reserved.
|
// Copyright (c) 2012 Lyndir. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OPElementGeneratedEntity.h"
|
#import "MPElementGeneratedEntity.h"
|
||||||
#import "OPAppDelegate.h"
|
#import "MPAppDelegate.h"
|
||||||
|
|
||||||
|
|
||||||
@implementation OPElementGeneratedEntity
|
@implementation MPElementGeneratedEntity
|
||||||
|
|
||||||
@dynamic counter;
|
@dynamic counter;
|
||||||
|
|
||||||
- (id)content {
|
- (id)content {
|
||||||
|
|
||||||
assert(self.type & OPElementTypeClassCalculated);
|
assert(self.type & MPElementTypeClassCalculated);
|
||||||
|
|
||||||
if (![self.name length])
|
if (![self.name length])
|
||||||
return nil;
|
return nil;
|
||||||
|
|
||||||
if (self.type & OPElementTypeClassCalculated)
|
if (self.type & MPElementTypeClassCalculated)
|
||||||
return OPCalculateContent(self.type, self.name, [OPAppDelegate get].keyPhrase, self.counter);
|
return MPCalculateContent(self.type, self.name, [MPAppDelegate get].keyPhrase, self.counter);
|
||||||
|
|
||||||
@throw [NSException exceptionWithName:NSInternalInconsistencyException
|
@throw [NSException exceptionWithName:NSInternalInconsistencyException
|
||||||
reason:[NSString stringWithFormat:@"Unsupported type: %d", self.type] userInfo:nil];
|
reason:[NSString stringWithFormat:@"Unsupported type: %d", self.type] userInfo:nil];
|
@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// OPElementStoredEntity.h
|
// MPElementStoredEntity.h
|
||||||
// MasterPassword
|
// MasterPassword
|
||||||
//
|
//
|
||||||
// Created by Maarten Billemont on 02/01/12.
|
// Created by Maarten Billemont on 02/01/12.
|
||||||
@ -8,10 +8,10 @@
|
|||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <CoreData/CoreData.h>
|
#import <CoreData/CoreData.h>
|
||||||
#import "OPElementEntity.h"
|
#import "MPElementEntity.h"
|
||||||
|
|
||||||
|
|
||||||
@interface OPElementStoredEntity : OPElementEntity
|
@interface MPElementStoredEntity : MPElementEntity
|
||||||
|
|
||||||
@property (nonatomic, retain, readwrite) id content;
|
@property (nonatomic, retain, readwrite) id content;
|
||||||
|
|
@ -1,21 +1,21 @@
|
|||||||
//
|
//
|
||||||
// OPElementStoredEntity.m
|
// MPElementStoredEntity.m
|
||||||
// MasterPassword
|
// MasterPassword
|
||||||
//
|
//
|
||||||
// Created by Maarten Billemont on 02/01/12.
|
// Created by Maarten Billemont on 02/01/12.
|
||||||
// Copyright (c) 2012 Lyndir. All rights reserved.
|
// Copyright (c) 2012 Lyndir. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OPElementStoredEntity.h"
|
#import "MPElementStoredEntity.h"
|
||||||
#import "OPAppDelegate.h"
|
#import "MPAppDelegate.h"
|
||||||
|
|
||||||
@interface OPElementStoredEntity ()
|
@interface MPElementStoredEntity ()
|
||||||
|
|
||||||
@property (nonatomic, retain, readwrite) id contentObject;
|
@property (nonatomic, retain, readwrite) id contentObject;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation OPElementStoredEntity
|
@implementation MPElementStoredEntity
|
||||||
|
|
||||||
@dynamic contentObject;
|
@dynamic contentObject;
|
||||||
|
|
||||||
@ -31,15 +31,15 @@
|
|||||||
|
|
||||||
- (id)content {
|
- (id)content {
|
||||||
|
|
||||||
assert(self.type & OPElementTypeClassStored);
|
assert(self.type & MPElementTypeClassStored);
|
||||||
|
|
||||||
NSData *encryptedContent;
|
NSData *encryptedContent;
|
||||||
if (self.type == OPElementTypeStoredDevicePrivate)
|
if (self.type == MPElementTypeStoredDevicePrivate)
|
||||||
encryptedContent = [KeyChain dataOfItemForQuery:[OPElementStoredEntity queryForDevicePrivateElementNamed:self.name]];
|
encryptedContent = [KeyChain dataOfItemForQuery:[MPElementStoredEntity queryForDevicePrivateElementNamed:self.name]];
|
||||||
else
|
else
|
||||||
encryptedContent = self.contentObject;
|
encryptedContent = self.contentObject;
|
||||||
|
|
||||||
NSData *decryptedContent = [encryptedContent decryptWithSymmetricKey:[[OPAppDelegate get].keyPhrase
|
NSData *decryptedContent = [encryptedContent decryptWithSymmetricKey:[[MPAppDelegate get].keyPhrase
|
||||||
dataUsingEncoding:NSUTF8StringEncoding]
|
dataUsingEncoding:NSUTF8StringEncoding]
|
||||||
usePadding:YES];
|
usePadding:YES];
|
||||||
return [[NSString alloc] initWithBytes:decryptedContent.bytes length:decryptedContent.length encoding:NSUTF8StringEncoding];
|
return [[NSString alloc] initWithBytes:decryptedContent.bytes length:decryptedContent.length encoding:NSUTF8StringEncoding];
|
||||||
@ -47,12 +47,12 @@
|
|||||||
|
|
||||||
- (void)setContent:(id)content {
|
- (void)setContent:(id)content {
|
||||||
|
|
||||||
NSData *encryptedContent = [[content description] encryptWithSymmetricKey:[[OPAppDelegate get].keyPhrase
|
NSData *encryptedContent = [[content description] encryptWithSymmetricKey:[[MPAppDelegate get].keyPhrase
|
||||||
dataUsingEncoding:NSUTF8StringEncoding]
|
dataUsingEncoding:NSUTF8StringEncoding]
|
||||||
usePadding:YES];
|
usePadding:YES];
|
||||||
|
|
||||||
if (self.type == OPElementTypeStoredDevicePrivate) {
|
if (self.type == MPElementTypeStoredDevicePrivate) {
|
||||||
[KeyChain addOrUpdateItemForQuery:[OPElementStoredEntity queryForDevicePrivateElementNamed:self.name]
|
[KeyChain addOrUpdateItemForQuery:[MPElementStoredEntity queryForDevicePrivateElementNamed:self.name]
|
||||||
withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
|
withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
|
||||||
encryptedContent, (__bridge id)kSecValueData,
|
encryptedContent, (__bridge id)kSecValueData,
|
||||||
kSecAttrAccessibleWhenUnlockedThisDeviceOnly, (__bridge id)kSecAttrAccessible,
|
kSecAttrAccessibleWhenUnlockedThisDeviceOnly, (__bridge id)kSecAttrAccessible,
|
@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// OPGuideViewController.h
|
// MPGuideViewController.h
|
||||||
// MasterPassword
|
// MasterPassword
|
||||||
//
|
//
|
||||||
// Created by Maarten Billemont on 30/01/12.
|
// Created by Maarten Billemont on 30/01/12.
|
||||||
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
@interface OPGuideViewController : UIViewController
|
@interface MPGuideViewController : UIViewController
|
||||||
|
|
||||||
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
|
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
|
||||||
|
|
@ -1,15 +1,15 @@
|
|||||||
//
|
//
|
||||||
// OPGuideViewController.m
|
// MPGuideViewController.m
|
||||||
// MasterPassword
|
// MasterPassword
|
||||||
//
|
//
|
||||||
// Created by Maarten Billemont on 30/01/12.
|
// Created by Maarten Billemont on 30/01/12.
|
||||||
// Copyright (c) 2012 Lyndir. All rights reserved.
|
// Copyright (c) 2012 Lyndir. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OPGuideViewController.h"
|
#import "MPGuideViewController.h"
|
||||||
#import "OPAppDelegate.h"
|
#import "MPAppDelegate.h"
|
||||||
|
|
||||||
@implementation OPGuideViewController
|
@implementation MPGuideViewController
|
||||||
@synthesize scrollView;
|
@synthesize scrollView;
|
||||||
|
|
||||||
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
|
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
|
||||||
@ -28,8 +28,8 @@
|
|||||||
|
|
||||||
[super viewWillDisappear:animated];
|
[super viewWillDisappear:animated];
|
||||||
|
|
||||||
[OPConfig get].showQuickStart = [NSNumber numberWithBool:NO];
|
[MPConfig get].showQuickStart = [NSNumber numberWithBool:NO];
|
||||||
[[OPAppDelegate get] loadKeyPhrase];
|
[[MPAppDelegate get] loadKeyPhrase];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)viewDidUnload {
|
- (void)viewDidUnload {
|
@ -1,20 +1,20 @@
|
|||||||
//
|
//
|
||||||
// OPMainViewController.h
|
// MPMainViewController.h
|
||||||
// MasterPassword
|
// MasterPassword
|
||||||
//
|
//
|
||||||
// Created by Maarten Billemont on 24/11/11.
|
// Created by Maarten Billemont on 24/11/11.
|
||||||
// Copyright (c) 2011 Lyndir. All rights reserved.
|
// Copyright (c) 2011 Lyndir. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OPTypeViewController.h"
|
#import "MPTypeViewController.h"
|
||||||
#import "OPElementEntity.h"
|
#import "MPElementEntity.h"
|
||||||
#import "OPSearchDelegate.h"
|
#import "MPSearchDelegate.h"
|
||||||
#import "IASKAppSettingsViewController.h"
|
#import "IASKAppSettingsViewController.h"
|
||||||
|
|
||||||
@interface OPMainViewController : UIViewController <OPTypeDelegate, UITextFieldDelegate, UISearchBarDelegate, OPSearchResultsDelegate, UIWebViewDelegate, IASKSettingsDelegate>
|
@interface MPMainViewController : UIViewController <MPTypeDelegate, UITextFieldDelegate, UISearchBarDelegate, MPSearchResultsDelegate, UIWebViewDelegate, IASKSettingsDelegate>
|
||||||
|
|
||||||
@property (strong, nonatomic) OPElementEntity *activeElement;
|
@property (strong, nonatomic) MPElementEntity *activeElement;
|
||||||
@property (strong, nonatomic) IBOutlet OPSearchDelegate *searchResultsController;
|
@property (strong, nonatomic) IBOutlet MPSearchDelegate *searchResultsController;
|
||||||
@property (weak, nonatomic) IBOutlet UITextField *contentField;
|
@property (weak, nonatomic) IBOutlet UITextField *contentField;
|
||||||
@property (weak, nonatomic) IBOutlet UIButton *typeButton;
|
@property (weak, nonatomic) IBOutlet UIButton *typeButton;
|
||||||
@property (weak, nonatomic) IBOutlet UIWebView *helpView;
|
@property (weak, nonatomic) IBOutlet UIWebView *helpView;
|
@ -1,22 +1,22 @@
|
|||||||
//
|
//
|
||||||
// OPMainViewController.m
|
// MPMainViewController.m
|
||||||
// MasterPassword
|
// MasterPassword
|
||||||
//
|
//
|
||||||
// Created by Maarten Billemont on 24/11/11.
|
// Created by Maarten Billemont on 24/11/11.
|
||||||
// Copyright (c) 2011 Lyndir. All rights reserved.
|
// Copyright (c) 2011 Lyndir. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OPMainViewController.h"
|
#import "MPMainViewController.h"
|
||||||
#import "OPAppDelegate.h"
|
#import "MPAppDelegate.h"
|
||||||
#import "OPContentViewController.h"
|
#import "MPContentViewController.h"
|
||||||
#import "OPElementGeneratedEntity.h"
|
#import "MPElementGeneratedEntity.h"
|
||||||
#import "OPElementStoredEntity.h"
|
#import "MPElementStoredEntity.h"
|
||||||
#import "IASKAppSettingsViewController.h"
|
#import "IASKAppSettingsViewController.h"
|
||||||
|
|
||||||
#import <MobileCoreServices/MobileCoreServices.h>
|
#import <MobileCoreServices/MobileCoreServices.h>
|
||||||
|
|
||||||
|
|
||||||
@interface OPMainViewController (Private)
|
@interface MPMainViewController (Private)
|
||||||
|
|
||||||
- (void)updateAnimated:(BOOL)animated;
|
- (void)updateAnimated:(BOOL)animated;
|
||||||
- (void)updateWasAnimated:(BOOL)animated;
|
- (void)updateWasAnimated:(BOOL)animated;
|
||||||
@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation OPMainViewController
|
@implementation MPMainViewController
|
||||||
@synthesize activeElement = _activeElement;
|
@synthesize activeElement = _activeElement;
|
||||||
@synthesize searchResultsController = _searchResultsController;
|
@synthesize searchResultsController = _searchResultsController;
|
||||||
@synthesize typeButton = _typeButton;
|
@synthesize typeButton = _typeButton;
|
||||||
@ -55,10 +55,10 @@
|
|||||||
|
|
||||||
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
|
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
|
||||||
|
|
||||||
if ([[segue identifier] isEqualToString:@"OP_Main_ChooseType"])
|
if ([[segue identifier] isEqualToString:@"MP_Main_ChooseType"])
|
||||||
[[segue destinationViewController] setDelegate:self];
|
[[segue destinationViewController] setDelegate:self];
|
||||||
if ([[segue identifier] isEqualToString:@"OP_Main_Content"])
|
if ([[segue identifier] isEqualToString:@"MP_Main_Content"])
|
||||||
((OPContentViewController *)[segue destinationViewController]).activeElement = self.activeElement;
|
((MPContentViewController *)[segue destinationViewController]).activeElement = self.activeElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)viewWillAppear:(BOOL)animated {
|
- (void)viewWillAppear:(BOOL)animated {
|
||||||
@ -72,7 +72,7 @@
|
|||||||
self.searchTipContainer.alpha = 1;
|
self.searchTipContainer.alpha = 1;
|
||||||
}];
|
}];
|
||||||
|
|
||||||
[self setHelpHidden:[[OPConfig get].helpHidden boolValue] animated:animated];
|
[self setHelpHidden:[[MPConfig get].helpHidden boolValue] animated:animated];
|
||||||
[self updateAnimated:animated];
|
[self updateAnimated:animated];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,14 +104,14 @@
|
|||||||
|
|
||||||
[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationWillResignActiveNotification object:nil queue:[NSOperationQueue mainQueue]
|
[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationWillResignActiveNotification object:nil queue:[NSOperationQueue mainQueue]
|
||||||
usingBlock:^(NSNotification *note) {
|
usingBlock:^(NSNotification *note) {
|
||||||
if (![OPAppDelegate get].keyPhrase) {
|
if (![MPAppDelegate get].keyPhrase) {
|
||||||
self.activeElement = nil;
|
self.activeElement = nil;
|
||||||
[self updateAnimated:NO];
|
[self updateAnimated:NO];
|
||||||
}
|
}
|
||||||
}];
|
}];
|
||||||
[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidBecomeActiveNotification object:nil queue:[NSOperationQueue mainQueue]
|
[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidBecomeActiveNotification object:nil queue:[NSOperationQueue mainQueue]
|
||||||
usingBlock:^(NSNotification *note) {
|
usingBlock:^(NSNotification *note) {
|
||||||
if (![OPAppDelegate get].keyPhrase) {
|
if (![MPAppDelegate get].keyPhrase) {
|
||||||
self.activeElement = nil;
|
self.activeElement = nil;
|
||||||
[self updateAnimated:NO];
|
[self updateAnimated:NO];
|
||||||
}
|
}
|
||||||
@ -153,7 +153,7 @@
|
|||||||
|
|
||||||
- (void)updateAnimated:(BOOL)animated {
|
- (void)updateAnimated:(BOOL)animated {
|
||||||
|
|
||||||
[[OPAppDelegate get] saveContext];
|
[[MPAppDelegate get] saveContext];
|
||||||
|
|
||||||
if (animated)
|
if (animated)
|
||||||
[UIView animateWithDuration:0.2 animations:^{
|
[UIView animateWithDuration:0.2 animations:^{
|
||||||
@ -168,18 +168,18 @@
|
|||||||
[self setHelpChapter:self.activeElement? @"2": @"1"];
|
[self setHelpChapter:self.activeElement? @"2": @"1"];
|
||||||
self.siteName.text = self.activeElement.name;
|
self.siteName.text = self.activeElement.name;
|
||||||
|
|
||||||
self.passwordCounter.alpha = self.activeElement.type & OPElementTypeClassCalculated? 0.5f: 0;
|
self.passwordCounter.alpha = self.activeElement.type & MPElementTypeClassCalculated? 0.5f: 0;
|
||||||
self.passwordIncrementer.alpha = self.activeElement.type & OPElementTypeClassCalculated? 0.5f: 0;
|
self.passwordIncrementer.alpha = self.activeElement.type & MPElementTypeClassCalculated? 0.5f: 0;
|
||||||
self.passwordEdit.alpha = self.activeElement.type & OPElementTypeClassStored? 0.5f: 0;
|
self.passwordEdit.alpha = self.activeElement.type & MPElementTypeClassStored? 0.5f: 0;
|
||||||
|
|
||||||
[self.typeButton setTitle:NSStringFromOPElementType(self.activeElement.type)
|
[self.typeButton setTitle:NSStringFromMPElementType(self.activeElement.type)
|
||||||
forState:UIControlStateNormal];
|
forState:UIControlStateNormal];
|
||||||
self.typeButton.alpha = NSStringFromOPElementType(self.activeElement.type).length? 1: 0;
|
self.typeButton.alpha = NSStringFromMPElementType(self.activeElement.type).length? 1: 0;
|
||||||
|
|
||||||
self.contentField.enabled = NO;
|
self.contentField.enabled = NO;
|
||||||
|
|
||||||
if ([self.activeElement isKindOfClass:[OPElementGeneratedEntity class]])
|
if ([self.activeElement isKindOfClass:[MPElementGeneratedEntity class]])
|
||||||
self.passwordCounter.text = [NSString stringWithFormat:@"%d", ((OPElementGeneratedEntity *) self.activeElement).counter];
|
self.passwordCounter.text = [NSString stringWithFormat:@"%d", ((MPElementGeneratedEntity *) self.activeElement).counter];
|
||||||
|
|
||||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
|
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
|
||||||
NSString *description = self.activeElement.description;
|
NSString *description = self.activeElement.description;
|
||||||
@ -207,11 +207,11 @@
|
|||||||
if (hidden) {
|
if (hidden) {
|
||||||
self.contentContainer.frame = CGRectSetHeight(self.contentContainer.frame, 373);
|
self.contentContainer.frame = CGRectSetHeight(self.contentContainer.frame, 373);
|
||||||
self.helpContainer.frame = CGRectSetY(self.helpContainer.frame, 415);
|
self.helpContainer.frame = CGRectSetY(self.helpContainer.frame, 415);
|
||||||
[OPConfig get].helpHidden = [NSNumber numberWithBool:YES];
|
[MPConfig get].helpHidden = [NSNumber numberWithBool:YES];
|
||||||
} else {
|
} else {
|
||||||
self.contentContainer.frame = CGRectSetHeight(self.contentContainer.frame, 175);
|
self.contentContainer.frame = CGRectSetHeight(self.contentContainer.frame, 175);
|
||||||
self.helpContainer.frame = CGRectSetY(self.helpContainer.frame, 216);
|
self.helpContainer.frame = CGRectSetY(self.helpContainer.frame, 216);
|
||||||
[OPConfig get].helpHidden = [NSNumber numberWithBool:NO];
|
[MPConfig get].helpHidden = [NSNumber numberWithBool:NO];
|
||||||
}
|
}
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
@ -223,7 +223,7 @@
|
|||||||
[NSURL URLWithString:[NSString stringWithFormat:@"#%@", chapter] relativeToURL:
|
[NSURL URLWithString:[NSString stringWithFormat:@"#%@", chapter] relativeToURL:
|
||||||
[[NSBundle mainBundle] URLForResource:@"help" withExtension:@"html"]]]];
|
[[NSBundle mainBundle] URLForResource:@"help" withExtension:@"html"]]]];
|
||||||
[self.helpView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"setClass('%@');",
|
[self.helpView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"setClass('%@');",
|
||||||
ClassNameFromOPElementType(self.activeElement.type)]];
|
ClassNameFromMPElementType(self.activeElement.type)]];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)showContentTip:(NSString *)message withIcon:(UIImageView *)icon {
|
- (void)showContentTip:(NSString *)message withIcon:(UIImageView *)icon {
|
||||||
@ -280,12 +280,12 @@
|
|||||||
|
|
||||||
- (IBAction)incrementPasswordCounter {
|
- (IBAction)incrementPasswordCounter {
|
||||||
|
|
||||||
if (![self.activeElement isKindOfClass:[OPElementGeneratedEntity class]])
|
if (![self.activeElement isKindOfClass:[MPElementGeneratedEntity class]])
|
||||||
// Not of a type that supports a password counter;
|
// Not of a type that supports a password counter;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
[self updateElement:^{
|
[self updateElement:^{
|
||||||
++((OPElementGeneratedEntity *) self.activeElement).counter;
|
++((MPElementGeneratedEntity *) self.activeElement).counter;
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -307,7 +307,7 @@
|
|||||||
|
|
||||||
- (IBAction)editPassword {
|
- (IBAction)editPassword {
|
||||||
|
|
||||||
if (self.activeElement.type & OPElementTypeClassStored) {
|
if (self.activeElement.type & MPElementTypeClassStored) {
|
||||||
self.contentField.enabled = YES;
|
self.contentField.enabled = YES;
|
||||||
[self.contentField becomeFirstResponder];
|
[self.contentField becomeFirstResponder];
|
||||||
}
|
}
|
||||||
@ -338,7 +338,7 @@
|
|||||||
[self setHelpHidden:NO animated:YES];
|
[self setHelpHidden:NO animated:YES];
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
[[OPAppDelegate get] showGuide];
|
[[MPAppDelegate get] showGuide];
|
||||||
break;
|
break;
|
||||||
case 3: {
|
case 3: {
|
||||||
IASKAppSettingsViewController *settingsVC = [IASKAppSettingsViewController new];
|
IASKAppSettingsViewController *settingsVC = [IASKAppSettingsViewController new];
|
||||||
@ -351,32 +351,32 @@
|
|||||||
otherTitles:[self isHelpVisible]? @"Hide Help": @"Show Help", @"FAQ", @"Tutorial", @"Settings", nil];
|
otherTitles:[self isHelpVisible]? @"Hide Help": @"Show Help", @"FAQ", @"Tutorial", @"Settings", nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)didSelectType:(OPElementType)type {
|
- (void)didSelectType:(MPElementType)type {
|
||||||
|
|
||||||
[self updateElement:^{
|
[self updateElement:^{
|
||||||
// Update password type.
|
// Update password type.
|
||||||
if (ClassFromOPElementType(type) != ClassFromOPElementType(self.activeElement.type))
|
if (ClassFromMPElementType(type) != ClassFromMPElementType(self.activeElement.type))
|
||||||
// Type requires a different class of element. Recreate the element.
|
// Type requires a different class of element. Recreate the element.
|
||||||
[[OPAppDelegate managedObjectContext] performBlockAndWait:^{
|
[[MPAppDelegate managedObjectContext] performBlockAndWait:^{
|
||||||
OPElementEntity *newElement = [NSEntityDescription insertNewObjectForEntityForName:ClassNameFromOPElementType(type)
|
MPElementEntity *newElement = [NSEntityDescription insertNewObjectForEntityForName:ClassNameFromMPElementType(type)
|
||||||
inManagedObjectContext:[OPAppDelegate managedObjectContext]];
|
inManagedObjectContext:[MPAppDelegate managedObjectContext]];
|
||||||
newElement.name = self.activeElement.name;
|
newElement.name = self.activeElement.name;
|
||||||
newElement.mpHashHex = self.activeElement.mpHashHex;
|
newElement.mpHashHex = self.activeElement.mpHashHex;
|
||||||
newElement.uses = self.activeElement.uses;
|
newElement.uses = self.activeElement.uses;
|
||||||
newElement.lastUsed = self.activeElement.lastUsed;
|
newElement.lastUsed = self.activeElement.lastUsed;
|
||||||
|
|
||||||
[[OPAppDelegate managedObjectContext] deleteObject:self.activeElement];
|
[[MPAppDelegate managedObjectContext] deleteObject:self.activeElement];
|
||||||
self.activeElement = newElement;
|
self.activeElement = newElement;
|
||||||
}];
|
}];
|
||||||
|
|
||||||
self.activeElement.type = type;
|
self.activeElement.type = type;
|
||||||
|
|
||||||
if (type & OPElementTypeClassStored && ![self.activeElement.description length])
|
if (type & MPElementTypeClassStored && ![self.activeElement.description length])
|
||||||
[self showContentTip:@"Tap to set a password." withIcon:self.contentTipEditIcon];
|
[self showContentTip:@"Tap to set a password." withIcon:self.contentTipEditIcon];
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)didSelectElement:(OPElementEntity *)element {
|
- (void)didSelectElement:(MPElementEntity *)element {
|
||||||
|
|
||||||
self.activeElement = element;
|
self.activeElement = element;
|
||||||
[self.activeElement use];
|
[self.activeElement use];
|
||||||
@ -404,16 +404,16 @@
|
|||||||
|
|
||||||
if (textField == self.contentField) {
|
if (textField == self.contentField) {
|
||||||
self.contentField.enabled = NO;
|
self.contentField.enabled = NO;
|
||||||
if (![self.activeElement isKindOfClass:[OPElementStoredEntity class]])
|
if (![self.activeElement isKindOfClass:[MPElementStoredEntity class]])
|
||||||
// Not of a type whose content can be edited.
|
// Not of a type whose content can be edited.
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ([((OPElementStoredEntity *) self.activeElement).content isEqual:self.contentField.text])
|
if ([((MPElementStoredEntity *) self.activeElement).content isEqual:self.contentField.text])
|
||||||
// Content hasn't changed.
|
// Content hasn't changed.
|
||||||
return;
|
return;
|
||||||
|
|
||||||
[self updateElement:^{
|
[self updateElement:^{
|
||||||
((OPElementStoredEntity *) self.activeElement).content = self.contentField.text;
|
((MPElementStoredEntity *) self.activeElement).content = self.contentField.text;
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// OPRecentViewController.h
|
// MPRecentViewController.h
|
||||||
// MasterPassword
|
// MasterPassword
|
||||||
//
|
//
|
||||||
// Created by Maarten Billemont on 27/11/11.
|
// Created by Maarten Billemont on 27/11/11.
|
||||||
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
@interface OPRecentViewController : UITableViewController
|
@interface MPRecentViewController : UITableViewController
|
||||||
|
|
||||||
@property(nonatomic,retain) IBOutlet UITableView *tableView;
|
@property(nonatomic,retain) IBOutlet UITableView *tableView;
|
||||||
|
|
@ -1,14 +1,14 @@
|
|||||||
//
|
//
|
||||||
// OPRecentViewController.m
|
// MPRecentViewController.m
|
||||||
// MasterPassword
|
// MasterPassword
|
||||||
//
|
//
|
||||||
// Created by Maarten Billemont on 27/11/11.
|
// Created by Maarten Billemont on 27/11/11.
|
||||||
// Copyright (c) 2011 Lyndir. All rights reserved.
|
// Copyright (c) 2011 Lyndir. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OPRecentViewController.h"
|
#import "MPRecentViewController.h"
|
||||||
|
|
||||||
@implementation OPRecentViewController
|
@implementation MPRecentViewController
|
||||||
@dynamic tableView;
|
@dynamic tableView;
|
||||||
|
|
||||||
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
|
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
|
@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// OPSearchDelegate.h
|
// MPSearchDelegate.h
|
||||||
// MasterPassword
|
// MasterPassword
|
||||||
//
|
//
|
||||||
// Created by Maarten Billemont on 04/01/12.
|
// Created by Maarten Billemont on 04/01/12.
|
||||||
@ -7,19 +7,19 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import "OPElementEntity.h"
|
#import "MPElementEntity.h"
|
||||||
|
|
||||||
@protocol OPSearchResultsDelegate <NSObject>
|
@protocol MPSearchResultsDelegate <NSObject>
|
||||||
|
|
||||||
- (void)didSelectElement:(OPElementEntity *)element;
|
- (void)didSelectElement:(MPElementEntity *)element;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface OPSearchDelegate : NSObject <UITableViewDelegate, UITableViewDataSource, UISearchDisplayDelegate, NSFetchedResultsControllerDelegate>
|
@interface MPSearchDelegate : NSObject <UITableViewDelegate, UITableViewDataSource, UISearchDisplayDelegate, NSFetchedResultsControllerDelegate>
|
||||||
|
|
||||||
@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController;
|
@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController;
|
||||||
|
|
||||||
@property (weak, nonatomic) IBOutlet id<OPSearchResultsDelegate> delegate;
|
@property (weak, nonatomic) IBOutlet id<MPSearchResultsDelegate> delegate;
|
||||||
@property (weak, nonatomic) IBOutlet UISearchDisplayController *searchDisplayController;
|
@property (weak, nonatomic) IBOutlet UISearchDisplayController *searchDisplayController;
|
||||||
@property (weak, nonatomic) IBOutlet UIView *searchTipContainer;
|
@property (weak, nonatomic) IBOutlet UIView *searchTipContainer;
|
||||||
|
|
@ -1,23 +1,23 @@
|
|||||||
//
|
//
|
||||||
// OPSearchDelegate.m
|
// MPSearchDelegate.m
|
||||||
// MasterPassword
|
// MasterPassword
|
||||||
//
|
//
|
||||||
// Created by Maarten Billemont on 04/01/12.
|
// Created by Maarten Billemont on 04/01/12.
|
||||||
// Copyright (c) 2012 Lyndir. All rights reserved.
|
// Copyright (c) 2012 Lyndir. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OPSearchDelegate.h"
|
#import "MPSearchDelegate.h"
|
||||||
#import "OPAppDelegate.h"
|
#import "MPAppDelegate.h"
|
||||||
#import "OPElementGeneratedEntity.h"
|
#import "MPElementGeneratedEntity.h"
|
||||||
|
|
||||||
@interface OPSearchDelegate (Private)
|
@interface MPSearchDelegate (Private)
|
||||||
|
|
||||||
- (void)configureCell:(UITableViewCell *)cell inTableView:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath;
|
- (void)configureCell:(UITableViewCell *)cell inTableView:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath;
|
||||||
- (void)update;
|
- (void)update;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation OPSearchDelegate
|
@implementation MPSearchDelegate
|
||||||
@synthesize fetchedResultsController;
|
@synthesize fetchedResultsController;
|
||||||
@synthesize delegate;
|
@synthesize delegate;
|
||||||
@synthesize searchDisplayController;
|
@synthesize searchDisplayController;
|
||||||
@ -42,7 +42,7 @@
|
|||||||
|
|
||||||
- (void)searchDisplayController:(UISearchDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableView {
|
- (void)searchDisplayController:(UISearchDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableView {
|
||||||
|
|
||||||
[[NSNotificationCenter defaultCenter] addObserverForName:OPPersistentStoreDidChangeNotification
|
[[NSNotificationCenter defaultCenter] addObserverForName:UIScreenModeDidChangeNotification
|
||||||
object:nil queue:nil usingBlock:^(NSNotification *note) {
|
object:nil queue:nil usingBlock:^(NSNotification *note) {
|
||||||
NSError *error;
|
NSError *error;
|
||||||
if (![self.fetchedResultsController performFetch:&error])
|
if (![self.fetchedResultsController performFetch:&error])
|
||||||
@ -67,17 +67,17 @@
|
|||||||
if (!query)
|
if (!query)
|
||||||
query = @"";
|
query = @"";
|
||||||
|
|
||||||
NSFetchRequest *fetchRequest = [[OPAppDelegate get].managedObjectModel
|
NSFetchRequest *fetchRequest = [[MPAppDelegate get].managedObjectModel
|
||||||
fetchRequestFromTemplateWithName:@"OPSearchElement"
|
fetchRequestFromTemplateWithName:@"MPSearchElement"
|
||||||
substitutionVariables:[NSDictionary dictionaryWithObjectsAndKeys:
|
substitutionVariables:[NSDictionary dictionaryWithObjectsAndKeys:
|
||||||
query, @"query",
|
query, @"query",
|
||||||
[OPAppDelegate get].keyPhraseHashHex, @"mpHashHex",
|
[MPAppDelegate get].keyPhraseHashHex, @"mpHashHex",
|
||||||
nil]];
|
nil]];
|
||||||
[fetchRequest setSortDescriptors:
|
[fetchRequest setSortDescriptors:
|
||||||
[NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"uses" ascending:NO]]];
|
[NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"uses" ascending:NO]]];
|
||||||
|
|
||||||
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
|
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
|
||||||
managedObjectContext:[OPAppDelegate managedObjectContext]
|
managedObjectContext:[MPAppDelegate managedObjectContext]
|
||||||
sectionNameKeyPath:nil cacheName:nil];
|
sectionNameKeyPath:nil cacheName:nil];
|
||||||
self.fetchedResultsController.delegate = self;
|
self.fetchedResultsController.delegate = self;
|
||||||
|
|
||||||
@ -159,9 +159,9 @@
|
|||||||
|
|
||||||
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||||
|
|
||||||
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"OPElementSearch"];
|
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MPElementSearch"];
|
||||||
if (!cell) {
|
if (!cell) {
|
||||||
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"OPElementSearch"];
|
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"MPElementSearch"];
|
||||||
UIImageView *backgroundImageView = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"ui_list_middle"] resizableImageWithCapInsets:UIEdgeInsetsMake(5, 5, 5, 5)]];
|
UIImageView *backgroundImageView = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"ui_list_middle"] resizableImageWithCapInsets:UIEdgeInsetsMake(5, 5, 5, 5)]];
|
||||||
backgroundImageView.frame = CGRectMake(-5, 0, 330, 34);
|
backgroundImageView.frame = CGRectMake(-5, 0, 330, 34);
|
||||||
UIView *backgroundView = [[UIView alloc] initWithFrame:cell.frame];
|
UIView *backgroundView = [[UIView alloc] initWithFrame:cell.frame];
|
||||||
@ -182,7 +182,7 @@
|
|||||||
- (void)configureCell:(UITableViewCell *)cell inTableView:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath {
|
- (void)configureCell:(UITableViewCell *)cell inTableView:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath {
|
||||||
|
|
||||||
if (indexPath.section < [[self.fetchedResultsController sections] count]) {
|
if (indexPath.section < [[self.fetchedResultsController sections] count]) {
|
||||||
OPElementEntity *element = [self.fetchedResultsController objectAtIndexPath:indexPath];
|
MPElementEntity *element = [self.fetchedResultsController objectAtIndexPath:indexPath];
|
||||||
|
|
||||||
cell.textLabel.text = element.name;
|
cell.textLabel.text = element.name;
|
||||||
cell.detailTextLabel.text = [NSString stringWithFormat:@"%d", element.uses];
|
cell.detailTextLabel.text = [NSString stringWithFormat:@"%d", element.uses];
|
||||||
@ -209,12 +209,12 @@
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
[self.fetchedResultsController.managedObjectContext performBlock:^{
|
[self.fetchedResultsController.managedObjectContext performBlock:^{
|
||||||
OPElementEntity *element = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([OPElementGeneratedEntity class])
|
MPElementEntity *element = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([MPElementGeneratedEntity class])
|
||||||
inManagedObjectContext:self.fetchedResultsController.managedObjectContext];
|
inManagedObjectContext:self.fetchedResultsController.managedObjectContext];
|
||||||
assert([element isKindOfClass:ClassFromOPElementType(element.type)]);
|
assert([element isKindOfClass:ClassFromMPElementType(element.type)]);
|
||||||
|
|
||||||
element.name = siteName;
|
element.name = siteName;
|
||||||
element.mpHashHex = [OPAppDelegate get].keyPhraseHashHex;
|
element.mpHashHex = [MPAppDelegate get].keyPhraseHashHex;
|
||||||
|
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
[self.delegate didSelectElement:element];
|
[self.delegate didSelectElement:element];
|
||||||
@ -250,7 +250,7 @@
|
|||||||
|
|
||||||
if (editingStyle == UITableViewCellEditingStyleDelete)
|
if (editingStyle == UITableViewCellEditingStyleDelete)
|
||||||
[self.fetchedResultsController.managedObjectContext performBlock:^{
|
[self.fetchedResultsController.managedObjectContext performBlock:^{
|
||||||
OPElementEntity *element = [self.fetchedResultsController objectAtIndexPath:indexPath];
|
MPElementEntity *element = [self.fetchedResultsController objectAtIndexPath:indexPath];
|
||||||
[self.fetchedResultsController.managedObjectContext deleteObject:element];
|
[self.fetchedResultsController.managedObjectContext deleteObject:element];
|
||||||
}];
|
}];
|
||||||
}
|
}
|
21
MasterPassword/MPTypeViewController.h
Normal file
21
MasterPassword/MPTypeViewController.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
//
|
||||||
|
// MPTypeViewController.h
|
||||||
|
// MasterPassword
|
||||||
|
//
|
||||||
|
// Created by Maarten Billemont on 27/11/11.
|
||||||
|
// Copyright (c) 2011 Lyndir. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
@protocol MPTypeDelegate <NSObject>
|
||||||
|
|
||||||
|
- (void)didSelectType:(MPElementType)type;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface MPTypeViewController : UITableViewController
|
||||||
|
|
||||||
|
@property (nonatomic, weak) id<MPTypeDelegate> delegate;
|
||||||
|
|
||||||
|
@end
|
@ -1,14 +1,14 @@
|
|||||||
//
|
//
|
||||||
// OPTypeViewController.m
|
// MPTypeViewController.m
|
||||||
// MasterPassword
|
// MasterPassword
|
||||||
//
|
//
|
||||||
// Created by Maarten Billemont on 27/11/11.
|
// Created by Maarten Billemont on 27/11/11.
|
||||||
// Copyright (c) 2011 Lyndir. All rights reserved.
|
// Copyright (c) 2011 Lyndir. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OPTypeViewController.h"
|
#import "MPTypeViewController.h"
|
||||||
|
|
||||||
@implementation OPTypeViewController
|
@implementation MPTypeViewController
|
||||||
@synthesize delegate;
|
@synthesize delegate;
|
||||||
|
|
||||||
#pragma mark - View lifecycle
|
#pragma mark - View lifecycle
|
||||||
@ -29,25 +29,25 @@
|
|||||||
|
|
||||||
assert(self.navigationController.topViewController == self);
|
assert(self.navigationController.topViewController == self);
|
||||||
|
|
||||||
OPElementType type;
|
MPElementType type;
|
||||||
switch (indexPath.section) {
|
switch (indexPath.section) {
|
||||||
case 0: {
|
case 0: {
|
||||||
// Calculated
|
// Calculated
|
||||||
switch (indexPath.row) {
|
switch (indexPath.row) {
|
||||||
case 0:
|
case 0:
|
||||||
type = OPElementTypeCalculatedLong;
|
type = MPElementTypeCalculatedLong;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
type = OPElementTypeCalculatedMedium;
|
type = MPElementTypeCalculatedMedium;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
type = OPElementTypeCalculatedShort;
|
type = MPElementTypeCalculatedShort;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
type = OPElementTypeCalculatedBasic;
|
type = MPElementTypeCalculatedBasic;
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
type = OPElementTypeCalculatedPIN;
|
type = MPElementTypeCalculatedPIN;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -61,10 +61,10 @@
|
|||||||
// Stored
|
// Stored
|
||||||
switch (indexPath.row) {
|
switch (indexPath.row) {
|
||||||
case 0:
|
case 0:
|
||||||
type = OPElementTypeStoredPersonal;
|
type = MPElementTypeStoredPersonal;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
type = OPElementTypeStoredDevicePrivate;
|
type = MPElementTypeStoredDevicePrivate;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
38
MasterPassword/MPTypes.h
Normal file
38
MasterPassword/MPTypes.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
//
|
||||||
|
// MPTypes.h
|
||||||
|
// MasterPassword
|
||||||
|
//
|
||||||
|
// Created by Maarten Billemont on 02/01/12.
|
||||||
|
// Copyright (c) 2012 Lyndir. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
#define MPPersistentStoreDidChangeNotification @"MPPersistentStoreDidChange"
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
MPElementContentTypePassword,
|
||||||
|
MPElementContentTypeNote,
|
||||||
|
MPElementContentTypePicture,
|
||||||
|
} MPElementContentType;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
MPElementTypeClassCalculated = 2 << 7,
|
||||||
|
MPElementTypeClassStored = 2 << 8,
|
||||||
|
} MPElementTypeClass;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
MPElementTypeCalculatedLong = MPElementTypeClassCalculated | 0x01,
|
||||||
|
MPElementTypeCalculatedMedium = MPElementTypeClassCalculated | 0x02,
|
||||||
|
MPElementTypeCalculatedShort = MPElementTypeClassCalculated | 0x03,
|
||||||
|
MPElementTypeCalculatedBasic = MPElementTypeClassCalculated | 0x04,
|
||||||
|
MPElementTypeCalculatedPIN = MPElementTypeClassCalculated | 0x05,
|
||||||
|
|
||||||
|
MPElementTypeStoredPersonal = MPElementTypeClassStored | 0x01,
|
||||||
|
MPElementTypeStoredDevicePrivate = MPElementTypeClassStored | 0x02,
|
||||||
|
} MPElementType;
|
||||||
|
|
||||||
|
NSString *NSStringFromMPElementType(MPElementType type);
|
||||||
|
NSString *ClassNameFromMPElementType(MPElementType type);
|
||||||
|
Class ClassFromMPElementType(MPElementType type);
|
||||||
|
NSString *MPCalculateContent(MPElementType type, NSString *name, NSString *keyPhrase, int counter);
|
@ -1,41 +1,41 @@
|
|||||||
//
|
//
|
||||||
// OPTypes.m
|
// MPTypes.m
|
||||||
// MasterPassword
|
// MasterPassword
|
||||||
//
|
//
|
||||||
// Created by Maarten Billemont on 02/01/12.
|
// Created by Maarten Billemont on 02/01/12.
|
||||||
// Copyright (c) 2012 Lyndir. All rights reserved.
|
// Copyright (c) 2012 Lyndir. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OPTypes.h"
|
#import "MPTypes.h"
|
||||||
#import "OPElementGeneratedEntity.h"
|
#import "MPElementGeneratedEntity.h"
|
||||||
#import "OPElementStoredEntity.h"
|
#import "MPElementStoredEntity.h"
|
||||||
|
|
||||||
|
|
||||||
NSString *NSStringFromOPElementType(OPElementType type) {
|
NSString *NSStringFromMPElementType(MPElementType type) {
|
||||||
|
|
||||||
if (!type)
|
if (!type)
|
||||||
return nil;
|
return nil;
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case OPElementTypeCalculatedLong:
|
case MPElementTypeCalculatedLong:
|
||||||
return @"Long Password";
|
return @"Long Password";
|
||||||
|
|
||||||
case OPElementTypeCalculatedMedium:
|
case MPElementTypeCalculatedMedium:
|
||||||
return @"Medium Password";
|
return @"Medium Password";
|
||||||
|
|
||||||
case OPElementTypeCalculatedShort:
|
case MPElementTypeCalculatedShort:
|
||||||
return @"Short Password";
|
return @"Short Password";
|
||||||
|
|
||||||
case OPElementTypeCalculatedBasic:
|
case MPElementTypeCalculatedBasic:
|
||||||
return @"Basic Password";
|
return @"Basic Password";
|
||||||
|
|
||||||
case OPElementTypeCalculatedPIN:
|
case MPElementTypeCalculatedPIN:
|
||||||
return @"PIN";
|
return @"PIN";
|
||||||
|
|
||||||
case OPElementTypeStoredPersonal:
|
case MPElementTypeStoredPersonal:
|
||||||
return @"Personal Password";
|
return @"Personal Password";
|
||||||
|
|
||||||
case OPElementTypeStoredDevicePrivate:
|
case MPElementTypeStoredDevicePrivate:
|
||||||
return @"Device Private Password";
|
return @"Device Private Password";
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -43,50 +43,50 @@ NSString *NSStringFromOPElementType(OPElementType type) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Class ClassFromOPElementType(OPElementType type) {
|
Class ClassFromMPElementType(MPElementType type) {
|
||||||
|
|
||||||
if (!type)
|
if (!type)
|
||||||
return nil;
|
return nil;
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case OPElementTypeCalculatedLong:
|
case MPElementTypeCalculatedLong:
|
||||||
return [OPElementGeneratedEntity class];
|
return [MPElementGeneratedEntity class];
|
||||||
|
|
||||||
case OPElementTypeCalculatedMedium:
|
case MPElementTypeCalculatedMedium:
|
||||||
return [OPElementGeneratedEntity class];
|
return [MPElementGeneratedEntity class];
|
||||||
|
|
||||||
case OPElementTypeCalculatedShort:
|
case MPElementTypeCalculatedShort:
|
||||||
return [OPElementGeneratedEntity class];
|
return [MPElementGeneratedEntity class];
|
||||||
|
|
||||||
case OPElementTypeCalculatedBasic:
|
case MPElementTypeCalculatedBasic:
|
||||||
return [OPElementGeneratedEntity class];
|
return [MPElementGeneratedEntity class];
|
||||||
|
|
||||||
case OPElementTypeCalculatedPIN:
|
case MPElementTypeCalculatedPIN:
|
||||||
return [OPElementGeneratedEntity class];
|
return [MPElementGeneratedEntity class];
|
||||||
|
|
||||||
case OPElementTypeStoredPersonal:
|
case MPElementTypeStoredPersonal:
|
||||||
return [OPElementStoredEntity class];
|
return [MPElementStoredEntity class];
|
||||||
|
|
||||||
case OPElementTypeStoredDevicePrivate:
|
case MPElementTypeStoredDevicePrivate:
|
||||||
return [OPElementStoredEntity class];
|
return [MPElementStoredEntity class];
|
||||||
|
|
||||||
default:
|
default:
|
||||||
[NSException raise:NSInternalInconsistencyException format:@"Type not supported: %d", type];
|
[NSException raise:NSInternalInconsistencyException format:@"Type not supported: %d", type];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NSString *ClassNameFromOPElementType(OPElementType type) {
|
NSString *ClassNameFromMPElementType(MPElementType type) {
|
||||||
|
|
||||||
return NSStringFromClass(ClassFromOPElementType(type));
|
return NSStringFromClass(ClassFromMPElementType(type));
|
||||||
}
|
}
|
||||||
|
|
||||||
static NSDictionary *OPTypes_ciphers = nil;
|
static NSDictionary *MPTypes_ciphers = nil;
|
||||||
NSString *OPCalculateContent(OPElementType type, NSString *name, NSString *keyPhrase, int counter) {
|
NSString *MPCalculateContent(MPElementType type, NSString *name, NSString *keyPhrase, int counter) {
|
||||||
|
|
||||||
assert(type & OPElementTypeClassCalculated);
|
assert(type & MPElementTypeClassCalculated);
|
||||||
|
|
||||||
if (OPTypes_ciphers == nil)
|
if (MPTypes_ciphers == nil)
|
||||||
OPTypes_ciphers = [NSDictionary dictionaryWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"ciphers"
|
MPTypes_ciphers = [NSDictionary dictionaryWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"ciphers"
|
||||||
withExtension:@"plist"]];
|
withExtension:@"plist"]];
|
||||||
|
|
||||||
// Determine the hash whose bytes will be used for calculating a password: md4(name-keyPhrase)
|
// Determine the hash whose bytes will be used for calculating a password: md4(name-keyPhrase)
|
||||||
@ -96,8 +96,8 @@ NSString *OPCalculateContent(OPElementType type, NSString *name, NSString *keyPh
|
|||||||
|
|
||||||
// Determine the cipher from the first hash byte.
|
// Determine the cipher from the first hash byte.
|
||||||
assert([keyHash length]);
|
assert([keyHash length]);
|
||||||
NSArray *typeCiphers = [[OPTypes_ciphers valueForKey:ClassNameFromOPElementType(type)]
|
NSArray *typeCiphers = [[MPTypes_ciphers valueForKey:ClassNameFromMPElementType(type)]
|
||||||
valueForKey:NSStringFromOPElementType(type)];
|
valueForKey:NSStringFromMPElementType(type)];
|
||||||
NSString *cipher = [typeCiphers objectAtIndex:keyBytes[0] % [typeCiphers count]];
|
NSString *cipher = [typeCiphers objectAtIndex:keyBytes[0] % [typeCiphers count]];
|
||||||
|
|
||||||
// Encode the content, character by character, using subsequent hash bytes and the cipher.
|
// Encode the content, character by character, using subsequent hash bytes and the cipher.
|
||||||
@ -106,7 +106,7 @@ NSString *OPCalculateContent(OPElementType type, NSString *name, NSString *keyPh
|
|||||||
for (NSUInteger c = 0; c < [cipher length]; ++c) {
|
for (NSUInteger c = 0; c < [cipher length]; ++c) {
|
||||||
const char keyByte = keyBytes[c + 1];
|
const char keyByte = keyBytes[c + 1];
|
||||||
NSString *cipherClass = [cipher substringWithRange:NSMakeRange(c, 1)];
|
NSString *cipherClass = [cipher substringWithRange:NSMakeRange(c, 1)];
|
||||||
NSString *cipherClassCharacters = [[OPTypes_ciphers valueForKey:@"OPCharacterClasses"] valueForKey:cipherClass];
|
NSString *cipherClassCharacters = [[MPTypes_ciphers valueForKey:@"MPCharacterClasses"] valueForKey:cipherClass];
|
||||||
|
|
||||||
[content appendString:[cipherClassCharacters substringWithRange:NSMakeRange(keyByte % [cipherClassCharacters length], 1)]];
|
[content appendString:[cipherClassCharacters substringWithRange:NSMakeRange(keyByte % [cipherClassCharacters length], 1)]];
|
||||||
}
|
}
|
@ -1,89 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="1.0" toolsVersion="1906" systemVersion="11A511" targetRuntime="iOS.CocoaTouch.iPad" nextObjectID="24" propertyAccessControl="none" initialViewController="2">
|
|
||||||
<dependencies>
|
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="902"/>
|
|
||||||
</dependencies>
|
|
||||||
<scenes>
|
|
||||||
<scene sceneID="4">
|
|
||||||
<objects>
|
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="3" sceneMemberID="firstResponder"/>
|
|
||||||
<viewController id="2" customClass="OPMainViewController" sceneMemberID="viewController">
|
|
||||||
<view key="view" contentMode="scaleToFill" id="8">
|
|
||||||
<rect key="frame" x="0.0" y="20" width="768" height="1004"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<navigationBar opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" barStyle="blackOpaque" id="13">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="768" height="44"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
|
||||||
<items>
|
|
||||||
<navigationItem title="Title" id="14">
|
|
||||||
<barButtonItem key="rightBarButtonItem" title="Info" id="15">
|
|
||||||
<connections>
|
|
||||||
<action selector="togglePopover:" destination="2" id="23"/>
|
|
||||||
</connections>
|
|
||||||
</barButtonItem>
|
|
||||||
</navigationItem>
|
|
||||||
</items>
|
|
||||||
</navigationBar>
|
|
||||||
</subviews>
|
|
||||||
<color key="backgroundColor" white="0.25" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
|
||||||
</view>
|
|
||||||
<connections>
|
|
||||||
<segue destination="5" kind="popover" identifier="showAlternate" popoverAnchorBarButtonItem="15" id="22">
|
|
||||||
<popoverArrowDirection key="popoverArrowDirection" up="YES" down="YES" left="YES" right="YES"/>
|
|
||||||
<popoverPassthroughViews/>
|
|
||||||
</segue>
|
|
||||||
</connections>
|
|
||||||
</viewController>
|
|
||||||
</objects>
|
|
||||||
<point key="canvasLocation" x="-286" y="15"/>
|
|
||||||
</scene>
|
|
||||||
<scene sceneID="7">
|
|
||||||
<objects>
|
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="6" sceneMemberID="firstResponder"/>
|
|
||||||
<viewController id="5" customClass="OPFlipsideViewController" sceneMemberID="viewController">
|
|
||||||
<view key="view" contentMode="scaleToFill" id="9">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="852"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<navigationBar opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" barStyle="blackOpaque" id="17">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
|
||||||
<items>
|
|
||||||
<navigationItem title="Title" id="18">
|
|
||||||
<barButtonItem key="leftBarButtonItem" systemItem="done" id="19">
|
|
||||||
<connections>
|
|
||||||
<action selector="done:" destination="5" id="21"/>
|
|
||||||
</connections>
|
|
||||||
</barButtonItem>
|
|
||||||
</navigationItem>
|
|
||||||
</items>
|
|
||||||
</navigationBar>
|
|
||||||
</subviews>
|
|
||||||
<color key="backgroundColor" white="0.25" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
|
||||||
</view>
|
|
||||||
<splitViewMasterSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
|
|
||||||
</viewController>
|
|
||||||
</objects>
|
|
||||||
<point key="canvasLocation" x="836" y="101"/>
|
|
||||||
</scene>
|
|
||||||
</scenes>
|
|
||||||
<classes>
|
|
||||||
<class className="OPFlipsideViewController" superclassName="UIViewController">
|
|
||||||
<source key="sourceIdentifier" type="project" relativePath="./Classes/OPFlipsideViewController.h"/>
|
|
||||||
<relationships>
|
|
||||||
<relationship kind="action" name="done:"/>
|
|
||||||
<relationship kind="outlet" name="delegate"/>
|
|
||||||
</relationships>
|
|
||||||
</class>
|
|
||||||
<class className="OPMainViewController" superclassName="UIViewController">
|
|
||||||
<source key="sourceIdentifier" type="project" relativePath="./Classes/OPMainViewController.h"/>
|
|
||||||
<relationships/>
|
|
||||||
</class>
|
|
||||||
</classes>
|
|
||||||
<simulatedMetricsContainer key="defaultSimulatedMetrics">
|
|
||||||
<simulatedStatusBarMetrics key="statusBar" statusBarStyle="blackTranslucent"/>
|
|
||||||
<simulatedOrientationMetrics key="orientation"/>
|
|
||||||
<simulatedScreenMetrics key="destination"/>
|
|
||||||
</simulatedMetricsContainer>
|
|
||||||
</document>
|
|
@ -8,7 +8,7 @@
|
|||||||
<scene sceneID="WkW-SR-cr2">
|
<scene sceneID="WkW-SR-cr2">
|
||||||
<objects>
|
<objects>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="jZj-N1-rhF" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="jZj-N1-rhF" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
<tableViewController id="NKe-nv-566" customClass="OPTypeViewController" sceneMemberID="viewController">
|
<tableViewController id="NKe-nv-566" customClass="MPTypeViewController" sceneMemberID="viewController">
|
||||||
<tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="plain" separatorStyle="none" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="btl-G4-V0S">
|
<tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="plain" separatorStyle="none" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="btl-G4-V0S">
|
||||||
<rect key="frame" x="0.0" y="64" width="320" height="416"/>
|
<rect key="frame" x="0.0" y="64" width="320" height="416"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
@ -311,7 +311,7 @@ The passwords aren't saved anywhere. This is a major advantage: if you loose yo
|
|||||||
<scene sceneID="U26-Zf-euQ">
|
<scene sceneID="U26-Zf-euQ">
|
||||||
<objects>
|
<objects>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="mK2-p1-3zC" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="mK2-p1-3zC" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
<customObject id="0QO-2P-OhD" customClass="OPSearchDelegate">
|
<customObject id="0QO-2P-OhD" customClass="MPSearchDelegate">
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="delegate" destination="PQa-Xl-A3x" id="O2f-mW-ab8"/>
|
<outlet property="delegate" destination="PQa-Xl-A3x" id="O2f-mW-ab8"/>
|
||||||
<outlet property="searchDisplayController" destination="P8c-gf-nN3" id="exk-dS-Ui3"/>
|
<outlet property="searchDisplayController" destination="P8c-gf-nN3" id="exk-dS-Ui3"/>
|
||||||
@ -327,7 +327,7 @@ The passwords aren't saved anywhere. This is a major advantage: if you loose yo
|
|||||||
<outlet property="searchResultsDelegate" destination="0QO-2P-OhD" id="Bm8-Q3-lLA"/>
|
<outlet property="searchResultsDelegate" destination="0QO-2P-OhD" id="Bm8-Q3-lLA"/>
|
||||||
</connections>
|
</connections>
|
||||||
</searchDisplayController>
|
</searchDisplayController>
|
||||||
<viewController id="PQa-Xl-A3x" customClass="OPMainViewController" sceneMemberID="viewController">
|
<viewController id="PQa-Xl-A3x" customClass="MPMainViewController" sceneMemberID="viewController">
|
||||||
<view key="view" contentMode="scaleToFill" id="Ep0-Hn-5TR">
|
<view key="view" contentMode="scaleToFill" id="Ep0-Hn-5TR">
|
||||||
<rect key="frame" x="0.0" y="64" width="320" height="416"/>
|
<rect key="frame" x="0.0" y="64" width="320" height="416"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
@ -443,7 +443,7 @@ The passwords aren't saved anywhere. This is a major advantage: if you loose yo
|
|||||||
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</state>
|
</state>
|
||||||
<connections>
|
<connections>
|
||||||
<segue destination="NKe-nv-566" kind="push" identifier="OP_Main_ChooseType" id="vw4-Vd-O6q"/>
|
<segue destination="NKe-nv-566" kind="push" identifier="MP_Main_ChooseType" id="vw4-Vd-O6q"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<view userInteractionEnabled="NO" alpha="0.0" contentMode="scaleToFill" id="v2m-Gf-pEV">
|
<view userInteractionEnabled="NO" alpha="0.0" contentMode="scaleToFill" id="v2m-Gf-pEV">
|
||||||
@ -604,7 +604,7 @@ L4m3P4sSw0rD</string>
|
|||||||
<scene sceneID="Rt1-b4-sUB">
|
<scene sceneID="Rt1-b4-sUB">
|
||||||
<objects>
|
<objects>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="7yf-G7-kVy" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="7yf-G7-kVy" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
<viewController id="qz3-eG-aEi" customClass="OPGuideViewController" sceneMemberID="viewController">
|
<viewController id="qz3-eG-aEi" customClass="MPGuideViewController" sceneMemberID="viewController">
|
||||||
<view key="view" contentMode="scaleToFill" id="cwa-ct-2DY">
|
<view key="view" contentMode="scaleToFill" id="cwa-ct-2DY">
|
||||||
<rect key="frame" x="0.0" y="20" width="320" height="460"/>
|
<rect key="frame" x="0.0" y="20" width="320" height="460"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
@ -682,7 +682,7 @@ L4m3P4sSw0rD</string>
|
|||||||
<nil name="viewControllers"/>
|
<nil name="viewControllers"/>
|
||||||
<connections>
|
<connections>
|
||||||
<segue destination="PQa-Xl-A3x" kind="relationship" relationship="rootViewController" id="LUg-eF-JQd"/>
|
<segue destination="PQa-Xl-A3x" kind="relationship" relationship="rootViewController" id="LUg-eF-JQd"/>
|
||||||
<segue destination="qz3-eG-aEi" kind="modal" identifier="OP_Guide" id="vyG-wN-8hU"/>
|
<segue destination="qz3-eG-aEi" kind="modal" identifier="MP_Guide" id="vyG-wN-8hU"/>
|
||||||
</connections>
|
</connections>
|
||||||
</navigationController>
|
</navigationController>
|
||||||
</objects>
|
</objects>
|
||||||
|
@ -22,5 +22,5 @@
|
|||||||
#import "Pearl-Crypto.h"
|
#import "Pearl-Crypto.h"
|
||||||
#import "Pearl-UIKit.h"
|
#import "Pearl-UIKit.h"
|
||||||
|
|
||||||
#import "OPTypes.h"
|
#import "MPTypes.h"
|
||||||
#import "OPConfig.h"
|
#import "MPConfig.h"
|
||||||
|
@ -1,22 +1,22 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<model name="" userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="872" systemVersion="11C74" minimumToolsVersion="Automatic" macOSVersion="Automatic" iOSVersion="Automatic">
|
<model name="" userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="872" systemVersion="11C74" minimumToolsVersion="Automatic" macOSVersion="Automatic" iOSVersion="Automatic">
|
||||||
<entity name="OPElementEntity" representedClassName="OPElementEntity" isAbstract="YES" syncable="YES">
|
<entity name="MPElementEntity" representedClassName="MPElementEntity" isAbstract="YES" syncable="YES">
|
||||||
<attribute name="lastUsed" attributeType="Date" syncable="YES"/>
|
<attribute name="lastUsed" attributeType="Date" syncable="YES"/>
|
||||||
<attribute name="mpHashHex" optional="YES" attributeType="String" syncable="YES"/>
|
<attribute name="mpHashHex" optional="YES" attributeType="String" syncable="YES"/>
|
||||||
<attribute name="name" attributeType="String" indexed="YES" syncable="YES"/>
|
<attribute name="name" attributeType="String" indexed="YES" syncable="YES"/>
|
||||||
<attribute name="type" attributeType="Integer 16" defaultValueString="257" syncable="YES"/>
|
<attribute name="type" attributeType="Integer 16" defaultValueString="257" syncable="YES"/>
|
||||||
<attribute name="uses" attributeType="Integer 16" defaultValueString="0" syncable="YES"/>
|
<attribute name="uses" attributeType="Integer 16" defaultValueString="0" syncable="YES"/>
|
||||||
</entity>
|
</entity>
|
||||||
<entity name="OPElementGeneratedEntity" representedClassName="OPElementGeneratedEntity" parentEntity="OPElementEntity" syncable="YES">
|
<entity name="MPElementGeneratedEntity" representedClassName="MPElementGeneratedEntity" parentEntity="MPElementEntity" syncable="YES">
|
||||||
<attribute name="counter" optional="YES" attributeType="Integer 16" defaultValueString="1" syncable="YES"/>
|
<attribute name="counter" optional="YES" attributeType="Integer 16" defaultValueString="1" syncable="YES"/>
|
||||||
</entity>
|
</entity>
|
||||||
<entity name="OPElementStoredEntity" representedClassName="OPElementStoredEntity" parentEntity="OPElementEntity" syncable="YES">
|
<entity name="MPElementStoredEntity" representedClassName="MPElementStoredEntity" parentEntity="MPElementEntity" syncable="YES">
|
||||||
<attribute name="contentObject" optional="YES" attributeType="Transformable" storedInTruthFile="YES" syncable="YES"/>
|
<attribute name="contentObject" optional="YES" attributeType="Transformable" storedInTruthFile="YES" syncable="YES"/>
|
||||||
</entity>
|
</entity>
|
||||||
<fetchRequest name="OPSearchElement" entity="OPElementEntity" predicateString="name BEGINSWITH[cd] $query AND mpHashHex == $mpHashHex"/>
|
<fetchRequest name="MPSearchElement" entity="MPElementEntity" predicateString="name BEGINSWITH[cd] $query AND mpHashHex == $mpHashHex"/>
|
||||||
<elements>
|
<elements>
|
||||||
<element name="OPElementEntity" positionX="160" positionY="192" width="128" height="135"/>
|
<element name="MPElementEntity" positionX="160" positionY="192" width="128" height="135"/>
|
||||||
<element name="OPElementGeneratedEntity" positionX="160" positionY="192" width="128" height="60"/>
|
<element name="MPElementGeneratedEntity" positionX="160" positionY="192" width="128" height="60"/>
|
||||||
<element name="OPElementStoredEntity" positionX="160" positionY="192" width="128" height="60"/>
|
<element name="MPElementStoredEntity" positionX="160" positionY="192" width="128" height="60"/>
|
||||||
</elements>
|
</elements>
|
||||||
</model>
|
</model>
|
@ -1,16 +0,0 @@
|
|||||||
//
|
|
||||||
// OPContentViewController.h
|
|
||||||
// MasterPassword
|
|
||||||
//
|
|
||||||
// Created by Maarten Billemont on 03/01/12.
|
|
||||||
// Copyright (c) 2012 Lyndir. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
|
||||||
#import "OPElementEntity.h"
|
|
||||||
|
|
||||||
@interface OPContentViewController : UIViewController
|
|
||||||
|
|
||||||
@property (nonatomic, weak) OPElementEntity *activeElement;
|
|
||||||
|
|
||||||
@end
|
|
@ -1,21 +0,0 @@
|
|||||||
//
|
|
||||||
// OPTypeViewController.h
|
|
||||||
// MasterPassword
|
|
||||||
//
|
|
||||||
// Created by Maarten Billemont on 27/11/11.
|
|
||||||
// Copyright (c) 2011 Lyndir. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
|
||||||
|
|
||||||
@protocol OPTypeDelegate <NSObject>
|
|
||||||
|
|
||||||
- (void)didSelectType:(OPElementType)type;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
@interface OPTypeViewController : UITableViewController
|
|
||||||
|
|
||||||
@property (nonatomic, weak) id<OPTypeDelegate> delegate;
|
|
||||||
|
|
||||||
@end
|
|
@ -1,38 +0,0 @@
|
|||||||
//
|
|
||||||
// OPTypes.h
|
|
||||||
// MasterPassword
|
|
||||||
//
|
|
||||||
// Created by Maarten Billemont on 02/01/12.
|
|
||||||
// Copyright (c) 2012 Lyndir. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
|
|
||||||
#define OPPersistentStoreDidChangeNotification @"OPPersistentStoreDidChange"
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
OPElementContentTypePassword,
|
|
||||||
OPElementContentTypeNote,
|
|
||||||
OPElementContentTypePicture,
|
|
||||||
} OPElementContentType;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
OPElementTypeClassCalculated = 2 << 7,
|
|
||||||
OPElementTypeClassStored = 2 << 8,
|
|
||||||
} OPElementTypeClass;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
OPElementTypeCalculatedLong = OPElementTypeClassCalculated | 0x01,
|
|
||||||
OPElementTypeCalculatedMedium = OPElementTypeClassCalculated | 0x02,
|
|
||||||
OPElementTypeCalculatedShort = OPElementTypeClassCalculated | 0x03,
|
|
||||||
OPElementTypeCalculatedBasic = OPElementTypeClassCalculated | 0x04,
|
|
||||||
OPElementTypeCalculatedPIN = OPElementTypeClassCalculated | 0x05,
|
|
||||||
|
|
||||||
OPElementTypeStoredPersonal = OPElementTypeClassStored | 0x01,
|
|
||||||
OPElementTypeStoredDevicePrivate = OPElementTypeClassStored | 0x02,
|
|
||||||
} OPElementType;
|
|
||||||
|
|
||||||
NSString *NSStringFromOPElementType(OPElementType type);
|
|
||||||
NSString *ClassNameFromOPElementType(OPElementType type);
|
|
||||||
Class ClassFromOPElementType(OPElementType type);
|
|
||||||
NSString *OPCalculateContent(OPElementType type, NSString *name, NSString *keyPhrase, int counter);
|
|
@ -78,18 +78,18 @@
|
|||||||
Tap it to <i>copy the password</i>. Once copied, you can switch to another application and paste it into a password field.
|
Tap it to <i>copy the password</i>. Once copied, you can switch to another application and paste it into a password field.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p class="Class OPElementStoredEntity">
|
<p class="Class MPElementStoredEntity">
|
||||||
<b>To change</b> the password for this site, tap the <i>edit icon</i> <img src="icon_edit.png" />.
|
<b>To change</b> the password for this site, tap the <i>edit icon</i> <img src="icon_edit.png" />.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<b>Below the password</b> you can set the <i>password type</i>. Some types <i>create a password for you</i>,
|
<b>Below the password</b> you can set the <i>password type</i>. Some types <i>create a password for you</i>,
|
||||||
others let you <i>choose your own</i>.
|
others let you <i>choose your own</i>.
|
||||||
</p>
|
</p>
|
||||||
<p class="Class OPElementGeneratedEntity">
|
<p class="Class MPElementGeneratedEntity">
|
||||||
<b>If the site complains</b> when you try to set or update the password, try changing the password type.
|
<b>If the site complains</b> when you try to set or update the password, try changing the password type.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p class="Class OPElementGeneratedEntity">
|
<p class="Class MPElementGeneratedEntity">
|
||||||
<b>To create another</b> password for this site, you can increment the <i>password counter</i> <img src="icon_plus.png" />.
|
<b>To create another</b> password for this site, you can increment the <i>password counter</i> <img src="icon_plus.png" />.
|
||||||
This is useful, for example, when you've had to share the password with somebody else.
|
This is useful, for example, when you've had to share the password with somebody else.
|
||||||
</p>
|
</p>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>OPElementGeneratedEntity</key>
|
<key>MPElementGeneratedEntity</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>Long Password</key>
|
<key>Long Password</key>
|
||||||
<array>
|
<array>
|
||||||
@ -30,7 +30,7 @@
|
|||||||
<string>nnnn</string>
|
<string>nnnn</string>
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
<key>OPCharacterClasses</key>
|
<key>MPCharacterClasses</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>V</key>
|
<key>V</key>
|
||||||
<string>AEIOU</string>
|
<string>AEIOU</string>
|
||||||
|
@ -8,11 +8,11 @@
|
|||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
#import "OPAppDelegate.h"
|
#import "MPAppDelegate.h"
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@autoreleasepool {
|
@autoreleasepool {
|
||||||
return UIApplicationMain(argc, argv, nil, NSStringFromClass([OPAppDelegate class]));
|
return UIApplicationMain(argc, argv, nil, NSStringFromClass([MPAppDelegate class]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,9 +0,0 @@
|
|||||||
//
|
|
||||||
// types.c
|
|
||||||
// MasterPassword
|
|
||||||
//
|
|
||||||
// Created by Maarten Billemont on 02/01/12.
|
|
||||||
// Copyright (c) 2012 Lyndir. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
Loading…
Reference in New Issue
Block a user