2
0

Prefix change: OP -> MP

This commit is contained in:
Maarten Billemont 2012-02-05 22:18:38 +01:00
parent ad9d124a32
commit 6ce6f6b9ec
36 changed files with 379 additions and 481 deletions

View File

@ -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;
}; };

View File

@ -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;

View File

@ -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]]];
}]; }];
}]; }];

View File

@ -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

View File

@ -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

View 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

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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];

View File

@ -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;

View File

@ -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,

View File

@ -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;

View File

@ -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 {

View File

@ -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;

View File

@ -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;
}]; }];
} }
} }

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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];
}]; }];
} }

View 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

View File

@ -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
View 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);

View File

@ -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)]];
} }

View File

@ -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>

View File

@ -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>
@ -717,4 +717,4 @@ L4m3P4sSw0rD</string>
<simulatedOrientationMetrics key="orientation"/> <simulatedOrientationMetrics key="orientation"/>
<simulatedScreenMetrics key="destination"/> <simulatedScreenMetrics key="destination"/>
</simulatedMetricsContainer> </simulatedMetricsContainer>
</document> </document>

View File

@ -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"

View File

@ -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>

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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>

View File

@ -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>

View File

@ -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]));
} }
} }

View File

@ -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>