diff --git a/External/Crashlytics.framework/run b/External/Crashlytics.framework/run deleted file mode 100755 index d2c28068..00000000 Binary files a/External/Crashlytics.framework/run and /dev/null differ diff --git a/External/Crashlytics.framework/Crashlytics b/External/Mac/Crashlytics.framework/Crashlytics similarity index 100% rename from External/Crashlytics.framework/Crashlytics rename to External/Mac/Crashlytics.framework/Crashlytics diff --git a/External/Crashlytics.framework/Headers b/External/Mac/Crashlytics.framework/Headers similarity index 100% rename from External/Crashlytics.framework/Headers rename to External/Mac/Crashlytics.framework/Headers diff --git a/External/Crashlytics.framework/Resources b/External/Mac/Crashlytics.framework/Resources similarity index 100% rename from External/Crashlytics.framework/Resources rename to External/Mac/Crashlytics.framework/Resources diff --git a/External/Mac/Crashlytics.framework/Versions/A/Crashlytics b/External/Mac/Crashlytics.framework/Versions/A/Crashlytics new file mode 100644 index 00000000..41884f03 Binary files /dev/null and b/External/Mac/Crashlytics.framework/Versions/A/Crashlytics differ diff --git a/External/Crashlytics.framework/Versions/A/Headers/Crashlytics.h b/External/Mac/Crashlytics.framework/Versions/A/Headers/Crashlytics.h similarity index 100% rename from External/Crashlytics.framework/Versions/A/Headers/Crashlytics.h rename to External/Mac/Crashlytics.framework/Versions/A/Headers/Crashlytics.h diff --git a/External/Mac/Crashlytics.framework/Versions/A/Resources/Info.plist b/External/Mac/Crashlytics.framework/Versions/A/Resources/Info.plist new file mode 100644 index 00000000..bf21197c --- /dev/null +++ b/External/Mac/Crashlytics.framework/Versions/A/Resources/Info.plist @@ -0,0 +1,30 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + Crashlytics + CFBundleIdentifier + com.crashlytics.sdk.mac + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Crashlytics + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.1.2 + CFBundleSupportedPlatforms + + macosx + + CFBundleVersion + 9 + DTPlatformName + macosx + MinimumOSVersion + 10.6 + + diff --git a/External/Crashlytics.framework/Versions/Current b/External/Mac/Crashlytics.framework/Versions/Current similarity index 100% rename from External/Crashlytics.framework/Versions/Current rename to External/Mac/Crashlytics.framework/Versions/Current diff --git a/External/Mac/Crashlytics.framework/run b/External/Mac/Crashlytics.framework/run new file mode 100755 index 00000000..a43a84fe Binary files /dev/null and b/External/Mac/Crashlytics.framework/run differ diff --git a/External/Reveal.framework/Versions/A/Reveal b/External/Reveal.framework/Versions/A/Reveal index 8ef14875..4ffdd56e 100644 Binary files a/External/Reveal.framework/Versions/A/Reveal and b/External/Reveal.framework/Versions/A/Reveal differ diff --git a/External/iOS/Crashlytics.framework/Crashlytics b/External/iOS/Crashlytics.framework/Crashlytics new file mode 120000 index 00000000..7074275f --- /dev/null +++ b/External/iOS/Crashlytics.framework/Crashlytics @@ -0,0 +1 @@ +Versions/Current/Crashlytics \ No newline at end of file diff --git a/External/iOS/Crashlytics.framework/Headers b/External/iOS/Crashlytics.framework/Headers new file mode 120000 index 00000000..a177d2a6 --- /dev/null +++ b/External/iOS/Crashlytics.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/External/iOS/Crashlytics.framework/Resources b/External/iOS/Crashlytics.framework/Resources new file mode 120000 index 00000000..953ee36f --- /dev/null +++ b/External/iOS/Crashlytics.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/External/Crashlytics.framework/Versions/A/Crashlytics b/External/iOS/Crashlytics.framework/Versions/A/Crashlytics similarity index 61% rename from External/Crashlytics.framework/Versions/A/Crashlytics rename to External/iOS/Crashlytics.framework/Versions/A/Crashlytics index 1230b7e0..f5c38d4f 100644 Binary files a/External/Crashlytics.framework/Versions/A/Crashlytics and b/External/iOS/Crashlytics.framework/Versions/A/Crashlytics differ diff --git a/External/iOS/Crashlytics.framework/Versions/A/Headers/Crashlytics.h b/External/iOS/Crashlytics.framework/Versions/A/Headers/Crashlytics.h new file mode 100644 index 00000000..59addeff --- /dev/null +++ b/External/iOS/Crashlytics.framework/Versions/A/Headers/Crashlytics.h @@ -0,0 +1,217 @@ +// +// Crashlytics.h +// Crashlytics +// +// Copyright 2013 Crashlytics, Inc. All rights reserved. +// + +#import + +/** + * + * The CLS_LOG macro provides as easy way to gather more information in your log messages that are + * sent with your crash data. CLS_LOG prepends your custom log message with the function name and + * line number where the macro was used. If your app was built with the DEBUG preprocessor macro + * defined CLS_LOG uses the CLSNSLog function which forwards your log message to NSLog and CLSLog. + * If the DEBUG preprocessor macro is not defined CLS_LOG uses CLSLog only. + * + * Example output: + * -[AppDelegate login:] line 134 $ login start + * + * If you would like to change this macro, create a new header file, unset our define and then define + * your own version. Make sure this new header file is imported after the Crashlytics header file. + * + * #undef CLS_LOG + * #define CLS_LOG(__FORMAT__, ...) CLSNSLog... + * + **/ +#ifdef DEBUG +#define CLS_LOG(__FORMAT__, ...) CLSNSLog((@"%s line %d $ " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__) +#else +#define CLS_LOG(__FORMAT__, ...) CLSLog((@"%s line %d $ " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__) +#endif + +/** + * + * Add logging that will be sent with your crash data. This logging will not show up in the system.log + * and will only be visible in your Crashlytics dashboard. + * + **/ +OBJC_EXTERN void CLSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2); + +/** + * + * Add logging that will be sent with your crash data. This logging will show up in the system.log + * and your Crashlytics dashboard. It is not recommended for Release builds. + * + **/ +OBJC_EXTERN void CLSNSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2); + +@protocol CrashlyticsDelegate; + +@interface Crashlytics : NSObject + +@property (nonatomic, readonly, copy) NSString *apiKey; +@property (nonatomic, readonly, copy) NSString *version; +@property (nonatomic, assign) BOOL debugMode; + +@property (nonatomic, assign) NSObject *delegate; + +/** + * + * The recommended way to install Crashlytics into your application is to place a call + * to +startWithAPIKey: in your -application:didFinishLaunchingWithOptions: method. + * + * This delay defaults to 1 second in order to generally give the application time to + * fully finish launching. + * + **/ ++ (Crashlytics *)startWithAPIKey:(NSString *)apiKey; ++ (Crashlytics *)startWithAPIKey:(NSString *)apiKey afterDelay:(NSTimeInterval)delay; + +/** + * + * If you need the functionality provided by the CrashlyticsDelegate protocol, you can use + * these convenience methods to activate the framework and set the delegate in one call. + * + **/ ++ (Crashlytics *)startWithAPIKey:(NSString *)apiKey delegate:(NSObject *)delegate; ++ (Crashlytics *)startWithAPIKey:(NSString *)apiKey delegate:(NSObject *)delegate afterDelay:(NSTimeInterval)delay; + +/** + * + * Access the singleton Crashlytics instance. + * + **/ ++ (Crashlytics *)sharedInstance; + +/** + * + * The easiest way to cause a crash - great for testing! + * + **/ +- (void)crash; + +/** + * + * Many of our customers have requested the ability to tie crashes to specific end-users of their + * application in order to facilitate responses to support requests or permit the ability to reach + * out for more information. We allow you to specify up to three separate values for display within + * the Crashlytics UI - but please be mindful of your end-user's privacy. + * + * We recommend specifying a user identifier - an arbitrary string that ties an end-user to a record + * in your system. This could be a database id, hash, or other value that is meaningless to a + * third-party observer but can be indexed and queried by you. + * + * Optionally, you may also specify the end-user's name or username, as well as email address if you + * do not have a system that works well with obscured identifiers. + * + * Pursuant to our EULA, this data is transferred securely throughout our system and we will not + * disseminate end-user data unless required to by law. That said, if you choose to provide end-user + * contact information, we strongly recommend that you disclose this in your application's privacy + * policy. Data privacy is of our utmost concern. + * + **/ +- (void)setUserIdentifier:(NSString *)identifier; +- (void)setUserName:(NSString *)name; +- (void)setUserEmail:(NSString *)email; + ++ (void)setUserIdentifier:(NSString *)identifier; ++ (void)setUserName:(NSString *)name; ++ (void)setUserEmail:(NSString *)email; + +/** + * + * Set a value for a key to be associated with your crash data. + * + **/ +- (void)setObjectValue:(id)value forKey:(NSString *)key; +- (void)setIntValue:(int)value forKey:(NSString *)key; +- (void)setBoolValue:(BOOL)value forKey:(NSString *)key; +- (void)setFloatValue:(float)value forKey:(NSString *)key; + ++ (void)setObjectValue:(id)value forKey:(NSString *)key; ++ (void)setIntValue:(int)value forKey:(NSString *)key; ++ (void)setBoolValue:(BOOL)value forKey:(NSString *)key; ++ (void)setFloatValue:(float)value forKey:(NSString *)key; + +@end + +/** + * The CLSCrashReport protocol exposes methods that you can call on crash report objects passed + * to delegate methods. If you want these values or the entire object to stay in memory retain + * them or copy them. + **/ +@protocol CLSCrashReport +@required + +/** + * Returns the session identifier for the crash report. + **/ +@property (nonatomic, readonly) NSString *identifier; + +/** + * Returns the custom key value data for the crash report. + **/ +@property (nonatomic, readonly) NSDictionary *customKeys; + +/** + * Returns the CFBundleVersion of the application that crashed. + **/ +@property (nonatomic, readonly) NSString *bundleVersion; + +/** + * Returns the CFBundleShortVersionString of the application that crashed. + **/ +@property (nonatomic, readonly) NSString *bundleShortVersionString; + +/** + * Returns the date that the application crashed at. + **/ +@property (nonatomic, readonly) NSDate *crashedOnDate; + +/** + * Returns the os version that the application crashed on. + **/ +@property (nonatomic, readonly) NSString *OSVersion; + +/** + * Returns the os build version that the application crashed on. + **/ +@property (nonatomic, readonly) NSString *OSBuildVersion; + +@end + +/** + * + * The CrashlyticsDelegate protocol provides a mechanism for your application to take + * action on events that occur in the Crashlytics crash reporting system. You can make + * use of these calls by assigning an object to the Crashlytics' delegate property directly, + * or through the convenience startWithAPIKey:delegate:... methods. + * + **/ +@protocol CrashlyticsDelegate +@optional + +/** + * + * Called once a Crashlytics instance has determined that the last execution of the + * application ended in a crash. This is called some time after the crash reporting + * process has begun. If you have specified a delay in one of the + * startWithAPIKey:... calls, this will take at least that long to be invoked. + * + **/ +- (void)crashlyticsDidDetectCrashDuringPreviousExecution:(Crashlytics *)crashlytics; + +/** + * + * Just like crashlyticsDidDetectCrashDuringPreviousExecution this delegate method is + * called once a Crashlytics instance has determined that the last execution of the + * application ended in a crash. A CLSCrashReport is passed back that contains data about + * the last crash report that was generated. See the CLSCrashReport protocol for method details. + * This method is called after crashlyticsDidDetectCrashDuringPreviousExecution. + * + **/ +- (void)crashlytics:(Crashlytics *)crashlytics didDetectCrashDuringPreviousExecution:(id )crash; + +@end diff --git a/External/Crashlytics.framework/Versions/A/Resources/Info.plist b/External/iOS/Crashlytics.framework/Versions/A/Resources/Info.plist similarity index 94% rename from External/Crashlytics.framework/Versions/A/Resources/Info.plist rename to External/iOS/Crashlytics.framework/Versions/A/Resources/Info.plist index 60ba0760..4971ea17 100644 --- a/External/Crashlytics.framework/Versions/A/Resources/Info.plist +++ b/External/iOS/Crashlytics.framework/Versions/A/Resources/Info.plist @@ -15,13 +15,13 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.1.7 + 2.1.9 CFBundleSupportedPlatforms iPhoneOS CFBundleVersion - 26 + 31 DTPlatformName iphoneos MinimumOSVersion diff --git a/External/iOS/Crashlytics.framework/Versions/Current b/External/iOS/Crashlytics.framework/Versions/Current new file mode 120000 index 00000000..8c7e5a66 --- /dev/null +++ b/External/iOS/Crashlytics.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/External/iOS/Crashlytics.framework/run b/External/iOS/Crashlytics.framework/run new file mode 100755 index 00000000..599d7616 Binary files /dev/null and b/External/iOS/Crashlytics.framework/run differ diff --git a/MasterPassword/ObjC/Mac/MasterPassword-Mac-LoginHelper/MasterPassword-Mac-LoginHelper.xcodeproj/project.pbxproj b/MasterPassword/ObjC/Mac/MasterPassword-Mac-LoginHelper/MasterPassword-Mac-LoginHelper.xcodeproj/project.pbxproj index ed27033b..7ff69c34 100644 --- a/MasterPassword/ObjC/Mac/MasterPassword-Mac-LoginHelper/MasterPassword-Mac-LoginHelper.xcodeproj/project.pbxproj +++ b/MasterPassword/ObjC/Mac/MasterPassword-Mac-LoginHelper/MasterPassword-Mac-LoginHelper.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + DA3B84581915577F00246EEA /* Crashlytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA3B84571915577F00246EEA /* Crashlytics.framework */; }; DAD9B5CF176299B9001835F9 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = DAD9B5CD176299B9001835F9 /* InfoPlist.strings */; }; DAD9B5D1176299B9001835F9 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = DAD9B5D0176299B9001835F9 /* main.m */; }; DAD9B5D8176299B9001835F9 /* MPLoginAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DAD9B5D7176299B9001835F9 /* MPLoginAppDelegate.m */; }; @@ -14,6 +15,7 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + DA3B84571915577F00246EEA /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Crashlytics.framework; path = ../../../../External/Mac/Crashlytics.framework; sourceTree = ""; }; DAD9B5C1176299B9001835F9 /* MasterPassword-Mac-LoginHelper.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "MasterPassword-Mac-LoginHelper.app"; sourceTree = BUILT_PRODUCTS_DIR; }; DAD9B5CC176299B9001835F9 /* MasterPassword-Mac-LoginHelper-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "MasterPassword-Mac-LoginHelper-Info.plist"; sourceTree = ""; }; DAD9B5CE176299B9001835F9 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -30,6 +32,7 @@ buildActionMask = 2147483647; files = ( DAD9B5EC1762AAA6001835F9 /* AppKit.framework in Frameworks */, + DA3B84581915577F00246EEA /* Crashlytics.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -56,6 +59,7 @@ DAD9B5C3176299B9001835F9 /* Frameworks */ = { isa = PBXGroup; children = ( + DA3B84571915577F00246EEA /* Crashlytics.framework */, DAD9B5EB1762AAA6001835F9 /* AppKit.framework */, ); name = Frameworks; @@ -164,7 +168,69 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - DAD9B5DC176299B9001835F9 /* Debug */ = { + DA3B845A1916AC5100246EEA /* AppStore-Mac */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES; + CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES; + CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_CXX0X_EXTENSIONS = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES; + CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CLANG_WARN__EXIT_TIME_DESTRUCTORS = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES; + GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_LABEL = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.8; + PRODUCT_NAME = "${TARGET_NAME}"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = "AppStore-Mac"; + }; + DA3B845B1916AC5100246EEA /* AppStore-Mac */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = "MasterPassword-Mac-LoginHelper/MasterPassword-Mac-LoginHelper.entitlements"; + CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application: Maarten Billemont (HL3Q45LX9N)"; + COMBINE_HIDPI_IMAGES = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + /Users/lhunath/Documents/workspace/lyndir/MasterPassword/External/Mac, + ); + INFOPLIST_FILE = "$(SRCROOT)/MasterPassword-Mac-LoginHelper/MasterPassword-Mac-LoginHelper-Info.plist"; + }; + name = "AppStore-Mac"; + }; + DAD9B5DC176299B9001835F9 /* Debug-Mac */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -185,7 +251,6 @@ CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CLANG_WARN__EXIT_TIME_DESTRUCTORS = YES; - CODE_SIGN_IDENTITY = "Developer ID Application: Maarten Billemont"; COPY_PHASE_STRIP = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; @@ -215,13 +280,12 @@ MACOSX_DEPLOYMENT_TARGET = 10.8; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "${TARGET_NAME}"; - PROVISIONING_PROFILE = ""; SDKROOT = macosx; SKIP_INSTALL = YES; }; - name = Debug; + name = "Debug-Mac"; }; - DAD9B5DD176299B9001835F9 /* Release */ = { + DAD9B5DD176299B9001835F9 /* AdHoc-Mac */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -242,7 +306,6 @@ CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CLANG_WARN__EXIT_TIME_DESTRUCTORS = YES; - CODE_SIGN_IDENTITY = "Developer ID Application: Maarten Billemont"; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -265,31 +328,38 @@ GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.8; PRODUCT_NAME = "${TARGET_NAME}"; - PROVISIONING_PROFILE = ""; SDKROOT = macosx; SKIP_INSTALL = YES; }; - name = Release; + name = "AdHoc-Mac"; }; - DAD9B5DF176299B9001835F9 /* Debug */ = { + DAD9B5DF176299B9001835F9 /* Debug-Mac */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_ENTITLEMENTS = "MasterPassword-Mac-LoginHelper/MasterPassword-Mac-LoginHelper.entitlements"; - CODE_SIGN_IDENTITY = "Developer ID Application: Maarten Billemont"; + CODE_SIGN_IDENTITY = "Mac Developer: Maarten Billemont (DWGU95U4ZD)"; COMBINE_HIDPI_IMAGES = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + /Users/lhunath/Documents/workspace/lyndir/MasterPassword/External/Mac, + ); INFOPLIST_FILE = "$(SRCROOT)/MasterPassword-Mac-LoginHelper/MasterPassword-Mac-LoginHelper-Info.plist"; - PROVISIONING_PROFILE = ""; }; - name = Debug; + name = "Debug-Mac"; }; - DAD9B5E0176299B9001835F9 /* Release */ = { + DAD9B5E0176299B9001835F9 /* AdHoc-Mac */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_ENTITLEMENTS = "MasterPassword-Mac-LoginHelper/MasterPassword-Mac-LoginHelper.entitlements"; + CODE_SIGN_IDENTITY = "Mac Developer: Maarten Billemont (DWGU95U4ZD)"; COMBINE_HIDPI_IMAGES = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + /Users/lhunath/Documents/workspace/lyndir/MasterPassword/External/Mac, + ); INFOPLIST_FILE = "$(SRCROOT)/MasterPassword-Mac-LoginHelper/MasterPassword-Mac-LoginHelper-Info.plist"; }; - name = Release; + name = "AdHoc-Mac"; }; /* End XCBuildConfiguration section */ @@ -297,20 +367,22 @@ DAD9B5BC176299B9001835F9 /* Build configuration list for PBXProject "MasterPassword-Mac-LoginHelper" */ = { isa = XCConfigurationList; buildConfigurations = ( - DAD9B5DC176299B9001835F9 /* Debug */, - DAD9B5DD176299B9001835F9 /* Release */, + DAD9B5DC176299B9001835F9 /* Debug-Mac */, + DAD9B5DD176299B9001835F9 /* AdHoc-Mac */, + DA3B845A1916AC5100246EEA /* AppStore-Mac */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = "AdHoc-Mac"; }; DAD9B5DE176299B9001835F9 /* Build configuration list for PBXNativeTarget "MasterPassword-Mac-LoginHelper" */ = { isa = XCConfigurationList; buildConfigurations = ( - DAD9B5DF176299B9001835F9 /* Debug */, - DAD9B5E0176299B9001835F9 /* Release */, + DAD9B5DF176299B9001835F9 /* Debug-Mac */, + DAD9B5E0176299B9001835F9 /* AdHoc-Mac */, + DA3B845B1916AC5100246EEA /* AppStore-Mac */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = "AdHoc-Mac"; }; /* End XCConfigurationList section */ }; diff --git a/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/project.pbxproj b/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/project.pbxproj index 53627138..be1a2a59 100644 --- a/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/project.pbxproj +++ b/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/project.pbxproj @@ -35,6 +35,10 @@ DA30E9D815723E6900A68B4C /* PearlLazy.m in Sources */ = {isa = PBXBuildFile; fileRef = DA30E9D615723E6900A68B4C /* PearlLazy.m */; }; DA3509FE15F101A500C14A8E /* PearlQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3509FC15F101A500C14A8E /* PearlQueue.h */; }; DA3509FF15F101A500C14A8E /* PearlQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3509FD15F101A500C14A8E /* PearlQueue.m */; }; + DA3B844F190FC60900246EEA /* Crashlytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA3B844A190FC5A900246EEA /* Crashlytics.framework */; }; + DA3B8452190FC86F00246EEA /* NSManagedObject+Pearl.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3B8450190FC86F00246EEA /* NSManagedObject+Pearl.m */; }; + DA3B8453190FC86F00246EEA /* NSManagedObject+Pearl.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3B8451190FC86F00246EEA /* NSManagedObject+Pearl.h */; }; + DA3B8456190FC89700246EEA /* MPFixable.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3B8454190FC89700246EEA /* MPFixable.m */; }; DA3EF17B15A47744003ABF4E /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA3EF17A15A47744003ABF4E /* SenTestingKit.framework */; }; DA3EF17D15A47744003ABF4E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; }; DA4425CC1557BED40052177D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; }; @@ -329,6 +333,12 @@ DA30E9D615723E6900A68B4C /* PearlLazy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlLazy.m; sourceTree = ""; }; DA3509FC15F101A500C14A8E /* PearlQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlQueue.h; sourceTree = ""; }; DA3509FD15F101A500C14A8E /* PearlQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlQueue.m; sourceTree = ""; }; + DA3B8448190FC5A900246EEA /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Crashlytics.framework; sourceTree = ""; }; + DA3B844A190FC5A900246EEA /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Crashlytics.framework; sourceTree = ""; }; + DA3B8450190FC86F00246EEA /* NSManagedObject+Pearl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSManagedObject+Pearl.m"; sourceTree = ""; }; + DA3B8451190FC86F00246EEA /* NSManagedObject+Pearl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSManagedObject+Pearl.h"; sourceTree = ""; }; + DA3B8454190FC89700246EEA /* MPFixable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPFixable.m; sourceTree = ""; }; + DA3B8455190FC89700246EEA /* MPFixable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPFixable.h; sourceTree = ""; }; DA3EF17915A47744003ABF4E /* Tests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Tests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; DA3EF17A15A47744003ABF4E /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; DA4425CB1557BED40052177D /* libUbiquityStoreManager.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libUbiquityStoreManager.a; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -394,7 +404,6 @@ DAC632871486D95D0075AEA5 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; DAC77CAD148291A600BCF976 /* libPearl.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPearl.a; sourceTree = BUILT_PRODUCTS_DIR; }; DAC77CB1148291A600BCF976 /* Pearl-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "Pearl-Prefix.pch"; path = "../../MasterPassword/ObjC/Pearl/Pearl-Prefix.pch"; sourceTree = ""; }; - DACA22181705DE28002C6C22 /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Crashlytics.framework; sourceTree = ""; }; DACA22B71705DE7D002C6C22 /* UbiquityStoreManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UbiquityStoreManager.m; sourceTree = ""; }; DACA22B81705DE7D002C6C22 /* NSError+UbiquityStoreManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSError+UbiquityStoreManager.h"; sourceTree = ""; }; DACA22B91705DE7D002C6C22 /* NSError+UbiquityStoreManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSError+UbiquityStoreManager.m"; sourceTree = ""; }; @@ -612,6 +621,7 @@ DA16B341170661DB000A0EAB /* Carbon.framework in Frameworks */, DA16B342170661E0000A0EAB /* Security.framework in Frameworks */, DA16B345170661F2000A0EAB /* libPearl.a in Frameworks */, + DA3B844F190FC60900246EEA /* Crashlytics.framework in Frameworks */, DA16B344170661EE000A0EAB /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -645,6 +655,22 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + DA3B8447190FC5A900246EEA /* iOS */ = { + isa = PBXGroup; + children = ( + DA3B8448190FC5A900246EEA /* Crashlytics.framework */, + ); + path = iOS; + sourceTree = ""; + }; + DA3B8449190FC5A900246EEA /* Mac */ = { + isa = PBXGroup; + children = ( + DA3B844A190FC5A900246EEA /* Crashlytics.framework */, + ); + path = Mac; + sourceTree = ""; + }; DA5BFA39147E415C00F98B1E = { isa = PBXGroup; children = ( @@ -703,6 +729,8 @@ DA5E5C961724A667003798D8 /* ObjC */ = { isa = PBXGroup; children = ( + DA3B8454190FC89700246EEA /* MPFixable.m */, + DA3B8455190FC89700246EEA /* MPFixable.h */, DA5E5CB21724A667003798D8 /* Mac */, DA5E5C971724A667003798D8 /* MPAlgorithm.h */, DA5E5C981724A667003798D8 /* MPAlgorithm.m */, @@ -787,9 +815,10 @@ DACA22121705DDC5002C6C22 /* External */ = { isa = PBXGroup; children = ( + DA3B8447190FC5A900246EEA /* iOS */, + DA3B8449190FC5A900246EEA /* Mac */, DABC6C0E175D8CE1000C15D4 /* RHStatusItemView */, DACA29751705E2BD002C6C22 /* jrswizzle */, - DACA22181705DE28002C6C22 /* Crashlytics.framework */, DAC77CAF148291A600BCF976 /* Pearl */, DACA22B61705DE7D002C6C22 /* UbiquityStoreManager */, ); @@ -1053,6 +1082,8 @@ DAFE45D715039823003ABA7C /* Pearl */ = { isa = PBXGroup; children = ( + DA3B8450190FC86F00246EEA /* NSManagedObject+Pearl.m */, + DA3B8451190FC86F00246EEA /* NSManagedObject+Pearl.h */, DA2CA4E718D323D3007798F8 /* NSError+PearlFullDescription.m */, DA2CA4E818D323D3007798F8 /* NSError+PearlFullDescription.h */, DA2CA4E918D323D3007798F8 /* NSArray+Pearl.m */, @@ -1176,6 +1207,7 @@ DAEB941018AB0FFD000490CC /* seed.h in Headers */, DAEB942618AB0FFD000490CC /* scryptenc_cpuperf.h in Headers */, DAFE4A1715039824003ABA7C /* NSString+PearlSEL.h in Headers */, + DA3B8453190FC86F00246EEA /* NSManagedObject+Pearl.h in Headers */, DAEB93F518AB0FFD000490CC /* evp.h in Headers */, DAEB941918AB0FFD000490CC /* ts.h in Headers */, DAEB93F818AB0FFD000490CC /* krb5_asn.h in Headers */, @@ -1319,9 +1351,9 @@ DA5BFA40147E415C00F98B1E /* Sources */, DA5BFA41147E415C00F98B1E /* Frameworks */, DA5BFA42147E415C00F98B1E /* Resources */, + DAD9B5EE1762CA3A001835F9 /* Copy LoginHelper */, DA6556E314D55F3000841C99 /* Run Script: GIT version -> Info.plist */, DAD3125D155288AA00A3F9ED /* Run Script: Crashlytics */, - DAD9B5EE1762CA3A001835F9 /* Copy LoginHelper */, ); buildRules = ( ); @@ -1560,7 +1592,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = "/bin/bash -e"; - shellScript = "../../../External/Crashlytics.framework/run \\\n \"$(/usr/libexec/PlistBuddy -c \"Print :'API Key'\" ../../Resources/Crashlytics/Crashlytics.plist)\""; + shellScript = "../../../External/Mac/Crashlytics.framework/run \\\n \"$(/usr/libexec/PlistBuddy -c \"Print :'API Key'\" ../../Resources/Crashlytics/Crashlytics.plist)\""; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -1596,6 +1628,7 @@ DA5E5CFD1724A667003798D8 /* MPElementEntity.m in Sources */, DA5E5CFE1724A667003798D8 /* MPElementGeneratedEntity.m in Sources */, DA5E5CFF1724A667003798D8 /* MPElementStoredEntity.m in Sources */, + DA3B8456190FC89700246EEA /* MPFixable.m in Sources */, DA5E5D001724A667003798D8 /* MPEntities.m in Sources */, DA5E5D011724A667003798D8 /* MPKey.m in Sources */, DA5E5D021724A667003798D8 /* MPUserEntity.m in Sources */, @@ -1649,6 +1682,7 @@ DAFE4A3B15039824003ABA7C /* PearlSCrypt.m in Sources */, DA30E9CF15722ECA00A68B4C /* NSBundle+PearlMutableInfo.m in Sources */, DA2CA4F118D323D3007798F8 /* NSTimer+PearlBlock.m in Sources */, + DA3B8452190FC86F00246EEA /* NSManagedObject+Pearl.m in Sources */, DA30E9D015722ECA00A68B4C /* Pearl.m in Sources */, DA30E9D215722EE500A68B4C /* Pearl-Crypto.m in Sources */, DA2CA4EF18D323D3007798F8 /* NSArray+Pearl.m in Sources */, @@ -1842,7 +1876,6 @@ CLANG_WARN__ARC_BRIDGE_CAST_NONARC = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CLANG_WARN__EXIT_TIME_DESTRUCTORS = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; FRAMEWORK_SEARCH_PATHS = ( @@ -1895,7 +1928,6 @@ ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "${TARGET_NAME}"; - PROVISIONING_PROFILE = ""; SDKROOT = macosx; SKIP_INSTALL = YES; }; @@ -1922,7 +1954,6 @@ CLANG_WARN__ARC_BRIDGE_CAST_NONARC = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CLANG_WARN__EXIT_TIME_DESTRUCTORS = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; FRAMEWORK_SEARCH_PATHS = ( @@ -1974,7 +2005,6 @@ MACOSX_DEPLOYMENT_TARGET = 10.8; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "${TARGET_NAME}"; - PROVISIONING_PROFILE = ""; RUN_CLANG_STATIC_ANALYZER = YES; SDKROOT = macosx; SKIP_INSTALL = YES; @@ -1988,12 +2018,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_ENTITLEMENTS = MasterPassword.entitlements; - CODE_SIGN_IDENTITY = "Mac Developer"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; + CODE_SIGN_IDENTITY = "Mac Developer: Maarten Billemont (DWGU95U4ZD)"; COMBINE_HIDPI_IMAGES = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + /Users/lhunath/Documents/workspace/lyndir/MasterPassword/External/Mac, + ); GCC_PREFIX_HEADER = "MasterPassword-Prefix.pch"; INFOPLIST_FILE = "MasterPassword-Info.plist"; - PROVISIONING_PROFILE = ""; SKIP_INSTALL = NO; WRAPPER_NAME = "Master Password.${WRAPPER_EXTENSION}"; }; @@ -2005,12 +2037,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_ENTITLEMENTS = MasterPassword.entitlements; - CODE_SIGN_IDENTITY = "Mac Developer"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; + CODE_SIGN_IDENTITY = "Developer ID Application: Maarten Billemont (HL3Q45LX9N)"; COMBINE_HIDPI_IMAGES = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + /Users/lhunath/Documents/workspace/lyndir/MasterPassword/External/Mac, + ); GCC_PREFIX_HEADER = "MasterPassword-Prefix.pch"; INFOPLIST_FILE = "MasterPassword-Info.plist"; - PROVISIONING_PROFILE = ""; SKIP_INSTALL = NO; WRAPPER_NAME = "Master Password.${WRAPPER_EXTENSION}"; }; @@ -2037,7 +2071,6 @@ CLANG_WARN__ARC_BRIDGE_CAST_NONARC = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CLANG_WARN__EXIT_TIME_DESTRUCTORS = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; FRAMEWORK_SEARCH_PATHS = ( @@ -2089,7 +2122,6 @@ MACOSX_DEPLOYMENT_TARGET = 10.8; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "${TARGET_NAME}"; - PROVISIONING_PROFILE = ""; RUN_CLANG_STATIC_ANALYZER = YES; SDKROOT = macosx; SKIP_INSTALL = YES; @@ -2103,12 +2135,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_ENTITLEMENTS = MasterPassword.entitlements; - CODE_SIGN_IDENTITY = "Mac Developer"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; + CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application: Maarten Billemont (HL3Q45LX9N)"; COMBINE_HIDPI_IMAGES = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + /Users/lhunath/Documents/workspace/lyndir/MasterPassword/External/Mac, + ); GCC_PREFIX_HEADER = "MasterPassword-Prefix.pch"; INFOPLIST_FILE = "MasterPassword-Info.plist"; - PROVISIONING_PROFILE = ""; SKIP_INSTALL = NO; WRAPPER_NAME = "Master Password.${WRAPPER_EXTENSION}"; }; diff --git a/MasterPassword/ObjC/iOS/MPPasswordTypesCell.m b/MasterPassword/ObjC/iOS/MPPasswordTypesCell.m index 692b2b4e..bc4931e6 100644 --- a/MasterPassword/ObjC/iOS/MPPasswordTypesCell.m +++ b/MasterPassword/ObjC/iOS/MPPasswordTypesCell.m @@ -62,6 +62,16 @@ [super prepareForReuse]; } +- (void)applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes { + + [super applyLayoutAttributes:layoutAttributes]; + + NSIndexPath *visibleIndexPath = [self.contentCollectionView.indexPathsForVisibleItems firstObject]; + [self.contentCollectionView.collectionViewLayout invalidateLayout]; + [self.contentCollectionView scrollToItemAtIndexPath:visibleIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally + animated:YES]; +} + - (void)reloadWithTransientSite:(NSString *)siteName { [super reloadWithTransientSite:siteName]; @@ -87,6 +97,12 @@ #pragma mark - UICollectionViewDataSource +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout + sizeForItemAtIndexPath:(NSIndexPath *)indexPath { + + return collectionView.bounds.size; +} + - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { if (!self.algorithm) diff --git a/MasterPassword/ObjC/iOS/MPPasswordsSegue.m b/MasterPassword/ObjC/iOS/MPPasswordsSegue.m index 5e3b0cb1..9da16166 100644 --- a/MasterPassword/ObjC/iOS/MPPasswordsSegue.m +++ b/MasterPassword/ObjC/iOS/MPPasswordsSegue.m @@ -1,12 +1,12 @@ /** - * Copyright Maarten Billemont (http://www.lhunath.com, lhunath@lyndir.com) - * - * See the enclosed file LICENSE for license information (LGPLv3). If you did - * not receive this file, see http://www.gnu.org/licenses/lgpl-3.0.txt - * - * @author Maarten Billemont - * @license http://www.gnu.org/licenses/lgpl-3.0.txt - */ +* Copyright Maarten Billemont (http://www.lhunath.com, lhunath@lyndir.com) +* +* See the enclosed file LICENSE for license information (LGPLv3). If you did +* not receive this file, see http://www.gnu.org/licenses/lgpl-3.0.txt +* +* @author Maarten Billemont +* @license http://www.gnu.org/licenses/lgpl-3.0.txt +*/ // // MPPasswordsSegue.h @@ -37,18 +37,25 @@ if ([self.destinationViewController isKindOfClass:[MPPasswordsViewController class]]) { __weak MPPasswordsViewController *passwordsVC = self.destinationViewController; - __weak MPCombinedViewController *combinedVC = self.sourceViewController; - + MPCombinedViewController *combinedVC = self.sourceViewController; [combinedVC addChildViewController:passwordsVC]; - [combinedVC.view insertSubview:passwordsVC.view belowSubview:combinedVC.usersView]; passwordsVC.active = NO; + + UIView *passwordsView = passwordsVC.view; + passwordsView.translatesAutoresizingMaskIntoConstraints = NO; + [combinedVC.view insertSubview:passwordsView belowSubview:combinedVC.usersView]; + [combinedVC.view addConstraintsWithVisualFormats:@[ @"H:|[passwordsView]|", @"V:|[passwordsView]|" ] + options:0 metrics:nil + views:NSDictionaryOfVariableBindings( passwordsView )]; + [passwordsVC setActive:YES animated:self.animated completion:^(BOOL finished) { if (!finished) return; [passwordsVC didMoveToParentViewController:combinedVC]; }]; - } else if ([self.sourceViewController isKindOfClass:[MPPasswordsViewController class]]) { + } + else if ([self.sourceViewController isKindOfClass:[MPPasswordsViewController class]]) { __weak MPPasswordsViewController *passwordsVC = self.sourceViewController; [passwordsVC willMoveToParentViewController:nil]; diff --git a/MasterPassword/ObjC/iOS/MPPasswordsViewController.h b/MasterPassword/ObjC/iOS/MPPasswordsViewController.h index 887af0a2..e6302c40 100644 --- a/MasterPassword/ObjC/iOS/MPPasswordsViewController.h +++ b/MasterPassword/ObjC/iOS/MPPasswordsViewController.h @@ -33,7 +33,6 @@ @property(assign, nonatomic) BOOL active; -@property(nonatomic, copy) NSString *originalQuery; @property(nonatomic, readonly) MPCoachmark *coachmark; - (void)setActive:(BOOL)active animated:(BOOL)animated completion:(void (^)(BOOL finished))completion; diff --git a/MasterPassword/ObjC/iOS/MPPasswordsViewController.m b/MasterPassword/ObjC/iOS/MPPasswordsViewController.m index e4325f1a..7826fa58 100644 --- a/MasterPassword/ObjC/iOS/MPPasswordsViewController.m +++ b/MasterPassword/ObjC/iOS/MPPasswordsViewController.m @@ -98,18 +98,26 @@ ((MPCoachmarkViewController *)segue.destinationViewController).coachmark = self.coachmark; } +- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { + + [self.passwordCollectionView.collectionViewLayout invalidateLayout]; + + [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration]; +} + #pragma mark - UICollectionViewDelegateFlowLayout - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { if (collectionView == self.passwordCollectionView) { - if (indexPath.item < 3 || - indexPath.item >= ((id)self.fetchedResultsController.sections[indexPath.section]).numberOfObjects) - return CGSizeMake( 300, 100 ); - UICollectionViewFlowLayout *layout = (UICollectionViewFlowLayout *)collectionViewLayout; - return CGSizeMake( (300 - layout.minimumInteritemSpacing) / 2, 44 ); + CGFloat itemWidth = UIEdgeInsetsInsetRect(self.passwordCollectionView.bounds, layout.sectionInset).size.width; + + if (indexPath.item < 3 || indexPath.item >= ((id)self.fetchedResultsController.sections[indexPath.section]).numberOfObjects) + return CGSizeMake( itemWidth, 100 ); + + return CGSizeMake( (itemWidth - layout.minimumInteritemSpacing) / 2, 44 ); } Throw(@"Unexpected collection view: %@", collectionView); @@ -385,9 +393,7 @@ - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { if (searchBar == self.passwordsSearchBar) { - self.originalQuery = self.query; - self.passwordsSearchBar.showsCancelButton = YES; - _passwordsDismissRecognizer = [self.view dismissKeyboardForField:self.passwordsSearchBar onTouchForced:NO]; +// _passwordsDismissRecognizer = [self.view dismissKeyboardForField:self.passwordsSearchBar onTouchForced:NO]; [UIView animateWithDuration:0.3f animations:^{ self.passwordCollectionView.backgroundColor = _darkenedBackgroundColor; @@ -413,16 +419,6 @@ [searchBar resignFirstResponder]; } -- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { - - [searchBar resignFirstResponder]; - - if (searchBar == self.passwordsSearchBar) { - self.passwordsSearchBar.text = self.originalQuery; - [self updatePasswords]; - } -} - - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { if (searchBar == self.passwordsSearchBar) diff --git a/MasterPassword/ObjC/iOS/MPUsersViewController.h b/MasterPassword/ObjC/iOS/MPUsersViewController.h index 66f19652..d3866669 100644 --- a/MasterPassword/ObjC/iOS/MPUsersViewController.h +++ b/MasterPassword/ObjC/iOS/MPUsersViewController.h @@ -22,7 +22,7 @@ @property (strong, nonatomic) IBOutlet UINavigationBar *navigationBar; @property(weak, nonatomic) IBOutlet UIView *userSelectionContainer; -@property(weak, nonatomic) IBOutlet UILabel *hintLabel; +@property(weak, nonatomic) IBOutlet UIButton *marqueeButton; @property(weak, nonatomic) IBOutlet UIView *gitTipTip; @property(weak, nonatomic) IBOutlet LLGitTip *gitTipButton; @property(weak, nonatomic) IBOutlet UITextField *entryField; diff --git a/MasterPassword/ObjC/iOS/MPUsersViewController.m b/MasterPassword/ObjC/iOS/MPUsersViewController.m index b96fc415..23cc8e71 100644 --- a/MasterPassword/ObjC/iOS/MPUsersViewController.m +++ b/MasterPassword/ObjC/iOS/MPUsersViewController.m @@ -22,6 +22,8 @@ #import "MPiOSAppDelegate.h" #import "MPAppDelegate_Store.h" #import "MPAppDelegate_Key.h" +#import "PearlSizedTextView.h" +#import "MPWebViewController.h" typedef NS_ENUM(NSUInteger, MPActiveUserState) { /** The users are all inactive */ @@ -62,7 +64,8 @@ typedef NS_ENUM(NSUInteger, MPActiveUserState) { _afterUpdates = [NSOperationQueue new]; self.marqueeTipTexts = @[ - strl( @"Press and hold to change password or delete." ), + strl( @"Thanks, lhunath ➚" ), + strl( @"Press and hold to delete or reset user." ), strl( @"Shake for emergency generator." ), ]; @@ -84,8 +87,9 @@ typedef NS_ENUM(NSUInteger, MPActiveUserState) { [self reloadUsers]; [self.marqueeTipTimer invalidate]; - self.marqueeTipTimer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(firedMarqueeTimer:) userInfo:nil - repeats:YES]; + self.marqueeTipTimer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(firedMarqueeTimer:) + userInfo:nil repeats:YES]; + [self firedMarqueeTimer:nil]; } - (void)viewWillDisappear:(BOOL)animated { @@ -105,6 +109,11 @@ typedef NS_ENUM(NSUInteger, MPActiveUserState) { [self.avatarCollectionView.collectionViewLayout invalidateLayout]; } +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + + if ([segue.identifier isEqualToString:@"web"]) + ((MPWebViewController *)segue.destinationViewController).initialURL = [NSURL URLWithString:@"http://thanks.lhunath.com"]; +} #pragma mark - UITextFieldDelegate @@ -418,15 +427,19 @@ typedef NS_ENUM(NSUInteger, MPActiveUserState) { - (void)firedMarqueeTimer:(NSTimer *)timer { - [UIView animateWithDuration:0.5 animations:^{ - self.hintLabel.alpha = 0; + NSString *nextMarqueeString = self.marqueeTipTexts[self.marqueeTipTextIndex++ % [self.marqueeTipTexts count]]; + if ([nextMarqueeString isEqualToString:[self.marqueeButton titleForState:UIControlStateNormal]]) + return; + + [UIView animateWithDuration:timer? 0.5: 0 animations:^{ + self.marqueeButton.alpha = 0; } completion:^(BOOL finished) { if (!finished) return; - self.hintLabel.text = self.marqueeTipTexts[++self.marqueeTipTextIndex % [self.marqueeTipTexts count]]; - [UIView animateWithDuration:0.5 animations:^{ - self.hintLabel.alpha = 1; + [self.marqueeButton setTitle:nextMarqueeString forState:UIControlStateNormal]; + [UIView animateWithDuration:timer? 0.5: 0 animations:^{ + self.marqueeButton.alpha = 0.5; }]; }]; } diff --git a/MasterPassword/ObjC/iOS/MPWebViewController.h b/MasterPassword/ObjC/iOS/MPWebViewController.h new file mode 100644 index 00000000..2bbf6286 --- /dev/null +++ b/MasterPassword/ObjC/iOS/MPWebViewController.h @@ -0,0 +1,29 @@ +/** + * Copyright Maarten Billemont (http://www.lhunath.com, lhunath@lyndir.com) + * + * See the enclosed file LICENSE for license information (LGPLv3). If you did + * not receive this file, see http://www.gnu.org/licenses/lgpl-3.0.txt + * + * @author Maarten Billemont + * @license http://www.gnu.org/licenses/lgpl-3.0.txt + */ + +// +// MPWebViewController.h +// MPWebViewController +// +// Created by lhunath on 2014-05-09. +// Copyright, lhunath (Maarten Billemont) 2014. All rights reserved. +// + +#import + + +@interface MPWebViewController : UIViewController + +@property(nonatomic) IBOutlet UIWebView *webView; +@property(nonatomic) IBOutlet UINavigationItem *webNavigationItem; + +@property(nonatomic) NSURL *initialURL; + +@end diff --git a/MasterPassword/ObjC/iOS/MPWebViewController.m b/MasterPassword/ObjC/iOS/MPWebViewController.m new file mode 100644 index 00000000..327244d0 --- /dev/null +++ b/MasterPassword/ObjC/iOS/MPWebViewController.m @@ -0,0 +1,85 @@ +/** +* Copyright Maarten Billemont (http://www.lhunath.com, lhunath@lyndir.com) +* +* See the enclosed file LICENSE for license information (LGPLv3). If you did +* not receive this file, see http://www.gnu.org/licenses/lgpl-3.0.txt +* +* @author Maarten Billemont +* @license http://www.gnu.org/licenses/lgpl-3.0.txt +*/ + +// +// MPWebViewController.h +// MPWebViewController +// +// Created by lhunath on 2014-05-09. +// Copyright, lhunath (Maarten Billemont) 2014. All rights reserved. +// + +#import "MPWebViewController.h" + +@implementation MPWebViewController + +- (void)viewDidLoad { + + [super viewDidLoad]; + + [self.view adjustContentInsets]; +} + +- (void)viewWillAppear:(BOOL)animated { + + [super viewWillAppear:animated]; + + if (!self.initialURL) + self.initialURL = [NSURL URLWithString:@"http://masterpasswordapp.com"]; + + self.webView.alpha = 0; + [self.webView loadRequest:[[NSURLRequest alloc] initWithURL:self.initialURL]]; +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + + return UIStatusBarStyleLightContent; +} + +#pragma mark - UIWebViewDelegate + +- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request + navigationType:(UIWebViewNavigationType)navigationType { + + if ([request.URL isEqual:request.mainDocumentURL]) { + self.webNavigationItem.title = request.URL.host; + self.webNavigationItem.prompt = strl( @"Loading" ); + } + + return YES; +} + +- (void)webViewDidStartLoad:(UIWebView *)webView { + + UIActivityIndicatorView *activityView = + [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; + [self.webNavigationItem setLeftBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:activityView]]; + [activityView startAnimating]; +} + +- (void)webViewDidFinishLoad:(UIWebView *)webView { + + [UIView animateWithDuration:0.3 animations:^{ + self.webView.alpha = 1; + }]; + + [self.webNavigationItem setLeftBarButtonItem:[webView canGoBack]? [[UIBarButtonItem alloc] + initWithTitle:@"⬅︎" style:UIBarButtonItemStylePlain target:webView action:@selector( goBack )]: nil]; + self.webNavigationItem.prompt = [webView stringByEvaluatingJavaScriptFromString:@"document.title"]; +} + +#pragma mark - Actions + +- (IBAction)done:(id)sender { + + [self dismissViewControllerAnimated:YES completion:nil]; +} + +@end diff --git a/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj b/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj index d2748e10..fe6bd77b 100644 --- a/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj +++ b/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj @@ -8,14 +8,18 @@ /* Begin PBXBuildFile section */ 93D391C07818F4C2DC1B6956 /* MPPasswordsCoachmarkViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D397E3650384498E7E53C4 /* MPPasswordsCoachmarkViewController.m */; }; + 93D391ECBD9BD2C64115B5DD /* PearlSizedTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39156E806BB78E04F78B9 /* PearlSizedTextView.m */; }; 93D391ED37C9F687FA51EAA1 /* MPEmergencySegue.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D3937712BF1B67623E5764 /* MPEmergencySegue.m */; }; 93D3922A53E41A54832E90D9 /* PearlOverlay.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D390FADEB325D8D54A957D /* PearlOverlay.m */; }; 93D39233C3EDD9A947ABA52D /* LLButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39BF6BCBDFFE844E7D34C /* LLButtonView.m */; }; 93D39262A8A97DB748213309 /* PearlEMail.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D393BB973253D4BAAC84AA /* PearlEMail.m */; }; + 93D392A8777DC30C11361647 /* UITextView+PearlAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D39AA10CD00D05937671B1 /* UITextView+PearlAttributes.h */; }; 93D392EC39DA43C46C692C12 /* NSDictionary+Indexing.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D393B97158D7BE9332EA53 /* NSDictionary+Indexing.h */; }; 93D3932889B6B4206E66A6D6 /* PearlEMail.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D39F7C9F47BF6387FBC5C3 /* PearlEMail.h */; }; 93D39392DEDA376F93C6C718 /* MPCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39BAA71DE51B4D8A1286C /* MPCell.m */; }; 93D393BA1B8402D08DB40231 /* MPPasswordElementCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39342E5F115EFCC90E976 /* MPPasswordElementCell.m */; }; + 93D393DB5325820241BA90A7 /* PearlSizedTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D39A4759186F6D2D34AA6B /* PearlSizedTextView.h */; }; + 93D394982CBD25D46692DD7C /* MPWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D3990E0CD1B5CF9FBB2C07 /* MPWebViewController.m */; }; 93D394B5036C882B33C71872 /* MPPasswordsSegue.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39E7A12CC352B2825AA66 /* MPPasswordsSegue.m */; }; 93D394F6D3F6E2553AA0D684 /* MPPasswordLargeStoredCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D3947F6BB69CA9A9124A5D /* MPPasswordLargeStoredCell.m */; }; 93D39536EB550E811CCD04BC /* UIResponder+PearlFirstResponder.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D394482BB07F90E8FD1314 /* UIResponder+PearlFirstResponder.h */; }; @@ -47,6 +51,7 @@ 93D39CB5E2EC1078E898F46A /* MPPasswordLargeCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D3937863061C3916AF7AD2 /* MPPasswordLargeCell.m */; }; 93D39D596A2E376D6F6F5DA1 /* MPCombinedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D393310223DDB35218467A /* MPCombinedViewController.m */; }; 93D39E281E3658B30550CB55 /* NSDictionary+Indexing.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39AA1EE2E1E7B81372240 /* NSDictionary+Indexing.m */; }; + 93D39E34FD28D24FE3442C48 /* UITextView+PearlAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D3977321EB249981821AB0 /* UITextView+PearlAttributes.m */; }; 93D39EAA4D064193074D3021 /* MPFixable.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39A813CA9D7E192261ED2 /* MPFixable.m */; }; 93D39EDD960C381D64E4DCDD /* MPPasswordSmallCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D3952CC60991B97D69F26A /* MPPasswordSmallCell.m */; }; 93D39F8A9254177891F38705 /* MPSetupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39A28369954D147E239BA /* MPSetupViewController.m */; }; @@ -71,6 +76,7 @@ DA3509FE15F101A500C14A8E /* PearlQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3509FC15F101A500C14A8E /* PearlQueue.h */; }; DA3509FF15F101A500C14A8E /* PearlQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3509FD15F101A500C14A8E /* PearlQueue.m */; }; DA38D6A318CCB5BF009AEB3E /* Storyboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DA38D6A218CCB5BF009AEB3E /* Storyboard.storyboard */; }; + DA3B844E190FC5DF00246EEA /* Crashlytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA3B844D190FC5DF00246EEA /* Crashlytics.framework */; }; DA4425CC1557BED40052177D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; }; DA44260A1557D9E40052177D /* libUbiquityStoreManager.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA4425CB1557BED40052177D /* libUbiquityStoreManager.a */; }; DA4522441902355C008F650A /* icon_book.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD370C1711E29500CF925C /* icon_book.png */; }; @@ -266,7 +272,6 @@ DAC6326D148680650075AEA5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; }; DAC632891486D9690075AEA5 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC632871486D95D0075AEA5 /* Security.framework */; }; DAC77CAE148291A600BCF976 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; }; - DACA22191705DE28002C6C22 /* Crashlytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DACA22181705DE28002C6C22 /* Crashlytics.framework */; }; DACA22BB1705DE7D002C6C22 /* UbiquityStoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DACA22B71705DE7D002C6C22 /* UbiquityStoreManager.m */; }; DACA22BC1705DE7D002C6C22 /* NSError+UbiquityStoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DACA22B81705DE7D002C6C22 /* NSError+UbiquityStoreManager.h */; }; DACA22BD1705DE7D002C6C22 /* NSError+UbiquityStoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DACA22B91705DE7D002C6C22 /* NSError+UbiquityStoreManager.m */; }; @@ -523,6 +528,7 @@ 93D390FD93EFCFECB5193DEF /* MPPasswordsCoachmarkViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordsCoachmarkViewController.h; sourceTree = ""; }; 93D391243F64A77798B4D6A4 /* MPPasswordTypesCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordTypesCell.h; sourceTree = ""; }; 93D3914D7597F9A28DB9D85E /* MPPasswordsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordsViewController.h; sourceTree = ""; }; + 93D39156E806BB78E04F78B9 /* PearlSizedTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlSizedTextView.m; sourceTree = ""; }; 93D3916C1D8F1427DFBDEBCA /* MPAppSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAppSettingsViewController.m; sourceTree = ""; }; 93D391943675426839501BB8 /* MPLogsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPLogsViewController.h; sourceTree = ""; }; 93D3923B42DA2DA18F287092 /* LLModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LLModel.m; sourceTree = ""; }; @@ -545,12 +551,14 @@ 93D396D04E57792A54D437AC /* NSArray+Indexing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+Indexing.h"; sourceTree = ""; }; 93D3971FE104BB4052484151 /* MPUsersViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPUsersViewController.h; sourceTree = ""; }; 93D39730673227EFF6DEFF19 /* MPSetupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPSetupViewController.h; sourceTree = ""; }; + 93D3977321EB249981821AB0 /* UITextView+PearlAttributes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITextView+PearlAttributes.m"; sourceTree = ""; }; 93D3979190DACEBD1F6AE9F4 /* MPLogsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPLogsViewController.m; sourceTree = ""; }; 93D397E3650384498E7E53C4 /* MPPasswordsCoachmarkViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordsCoachmarkViewController.m; sourceTree = ""; }; 93D3983278751A530262F64E /* LLConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LLConfig.h; sourceTree = ""; }; 93D398567FD02DB2647B8CF3 /* PearlNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlNavigationController.h; sourceTree = ""; }; 93D39888EE06F06264CC963B /* MPPasswordSmallCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordSmallCell.h; sourceTree = ""; }; 93D398C95847261903D781D3 /* NSError+PearlFullDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSError+PearlFullDescription.h"; sourceTree = ""; }; + 93D3990E0CD1B5CF9FBB2C07 /* MPWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPWebViewController.m; sourceTree = ""; }; 93D3993422E207BF0B21D089 /* MPPasswordLargeGeneratedCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordLargeGeneratedCell.m; sourceTree = ""; }; 93D3995B1D4DCE5A30D882BA /* MPCoachmarkViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPCoachmarkViewController.m; sourceTree = ""; }; 93D39961CD6A43648CC0B0DB /* MPPreferencesViewControllerOld.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPreferencesViewControllerOld.h; sourceTree = ""; }; @@ -562,7 +570,9 @@ 93D39A28369954D147E239BA /* MPSetupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPSetupViewController.m; sourceTree = ""; }; 93D39A3CC4D8330831FC8CB4 /* LLToggleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LLToggleViewController.h; sourceTree = ""; }; 93D39A41340CF778E00D0E6D /* MPEmergencySegue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPEmergencySegue.h; sourceTree = ""; }; + 93D39A4759186F6D2D34AA6B /* PearlSizedTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlSizedTextView.h; sourceTree = ""; }; 93D39A813CA9D7E192261ED2 /* MPFixable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPFixable.m; sourceTree = ""; }; + 93D39AA10CD00D05937671B1 /* UITextView+PearlAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITextView+PearlAttributes.h"; sourceTree = ""; }; 93D39AA1EE2E1E7B81372240 /* NSDictionary+Indexing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+Indexing.m"; sourceTree = ""; }; 93D39ACBA9F4878B6A1CC33B /* MPEmergencyViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPEmergencyViewController.m; sourceTree = ""; }; 93D39B050DD5F55E9794EFD4 /* MPPopdownSegue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPopdownSegue.m; sourceTree = ""; }; @@ -583,6 +593,7 @@ 93D39DEA995041A13DC9CAF7 /* MPPasswordCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordCell.m; sourceTree = ""; }; 93D39E02F69CACAB61C056F8 /* MPPasswordLargeCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordLargeCell.h; sourceTree = ""; }; 93D39E7A12CC352B2825AA66 /* MPPasswordsSegue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordsSegue.m; sourceTree = ""; }; + 93D39F556F2F142740A65E59 /* MPWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPWebViewController.h; sourceTree = ""; }; 93D39F7C9F47BF6387FBC5C3 /* PearlEMail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlEMail.h; sourceTree = ""; }; 93D39F9106F2CCFB94283188 /* NSError+PearlFullDescription.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSError+PearlFullDescription.m"; sourceTree = ""; }; DA04E33D14B1E70400ECA4F3 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; @@ -606,6 +617,7 @@ DA3509FC15F101A500C14A8E /* PearlQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlQueue.h; sourceTree = ""; }; DA3509FD15F101A500C14A8E /* PearlQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlQueue.m; sourceTree = ""; }; DA38D6A218CCB5BF009AEB3E /* Storyboard.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Storyboard.storyboard; sourceTree = ""; }; + DA3B844D190FC5DF00246EEA /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Crashlytics.framework; path = ../../../External/iOS/Crashlytics.framework; sourceTree = ""; }; DA3EF17A15A47744003ABF4E /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; DA4425CB1557BED40052177D /* libUbiquityStoreManager.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libUbiquityStoreManager.a; sourceTree = BUILT_PRODUCTS_DIR; }; DA5A09DD171A70E4005284AB /* play.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = play.png; sourceTree = ""; }; @@ -1628,7 +1640,7 @@ DA5BFA4D147E415C00F98B1E /* CoreGraphics.framework in Frameworks */, DA5BFA4F147E415C00F98B1E /* CoreData.framework in Frameworks */, 93D399433EA75E50656040CB /* Twitter.framework in Frameworks */, - DACA22191705DE28002C6C22 /* Crashlytics.framework in Frameworks */, + DA3B844E190FC5DF00246EEA /* Crashlytics.framework in Frameworks */, DACA22C61705DE9D002C6C22 /* libTestFlight.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1717,6 +1729,7 @@ DA5BFA47147E415C00F98B1E /* Frameworks */ = { isa = PBXGroup; children = ( + DA3B844D190FC5DF00246EEA /* Crashlytics.framework */, DA70EC7F1811B13C00F65DB2 /* StoreKit.framework */, DABD3FC617122ADD00CF925C /* libscrypt-bin-ios.a */, DA6701DF16406BB400B61001 /* AdSupport.framework */, @@ -2587,6 +2600,8 @@ 93D3999693660C89A7465F4E /* MPCoachmarkViewController.h */, 93D397E3650384498E7E53C4 /* MPPasswordsCoachmarkViewController.m */, 93D390FD93EFCFECB5193DEF /* MPPasswordsCoachmarkViewController.h */, + 93D3990E0CD1B5CF9FBB2C07 /* MPWebViewController.m */, + 93D39F556F2F142740A65E59 /* MPWebViewController.h */, ); path = iOS; sourceTree = ""; @@ -3079,6 +3094,10 @@ 93D39B1D8177A86C5B9EDDE3 /* PearlUICollectionView.h */, 93D39A1DDFA09AE2E14D26DC /* UIResponder+PearlFirstResponder.m */, 93D394482BB07F90E8FD1314 /* UIResponder+PearlFirstResponder.h */, + 93D39156E806BB78E04F78B9 /* PearlSizedTextView.m */, + 93D39A4759186F6D2D34AA6B /* PearlSizedTextView.h */, + 93D3977321EB249981821AB0 /* UITextView+PearlAttributes.m */, + 93D39AA10CD00D05937671B1 /* UITextView+PearlAttributes.h */, ); path = "Pearl-UIKit"; sourceTree = ""; @@ -3265,6 +3284,8 @@ 93D39B76DD5AB108BA8928E8 /* UIScrollView+PearlAdjustInsets.h in Headers */, 93D3980046016EFD05B35BC5 /* PearlUICollectionView.h in Headers */, 93D39536EB550E811CCD04BC /* UIResponder+PearlFirstResponder.h in Headers */, + 93D393DB5325820241BA90A7 /* PearlSizedTextView.h in Headers */, + 93D392A8777DC30C11361647 /* UITextView+PearlAttributes.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3306,8 +3327,8 @@ buildPhases = ( DA5BFA40147E415C00F98B1E /* Sources */, DA5BFA41147E415C00F98B1E /* Frameworks */, - DA5BFA42147E415C00F98B1E /* Resources */, DA67460818DE7B2C00DFE240 /* Run Script: Moarfonts */, + DA5BFA42147E415C00F98B1E /* Resources */, DA6556E314D55F3000841C99 /* Run Script: GIT version -> Info.plist */, DAD3125D155288AA00A3F9ED /* Run Script: Crashlytics */, ); @@ -3762,7 +3783,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = "/bin/bash -e"; - shellScript = "[[ -x /usr/local/bin/moarfonts ]] || {\n echo >&2 \"moarfonts not installed, embedded fonts will not show up in IB.\"\n exit\n}\n\n[[ -w \"$SDKROOT/System/Library/.lilid/.lilic\" ]] || {\n /usr/local/bin/moarfonts reset\n}\n\nfind \"${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME}\" -name '*.otf' -exec /usr/local/bin/moarfonts install {} +"; + shellScript = "[[ -x /usr/local/bin/moarfonts ]] || {\n echo >&2 \"moarfonts not installed, embedded fonts will not show up in IB.\"\n exit\n}\n\n[[ ! -w \"$SDKROOT/System/Library/.lilid/.lilic\" ]] && {\n printf 'run:\\nSDKROOT=%q /usr/local/bin/moarfonts reset\\n' \"$SDKROOT\"\n}\n\nfind \"${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME}\" -name '*.otf' -exec /usr/local/bin/moarfonts install {} +"; showEnvVarsInLog = 0; }; DAD3125D155288AA00A3F9ED /* Run Script: Crashlytics */ = { @@ -3777,7 +3798,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = "/bin/bash -e"; - shellScript = "../../../External/Crashlytics.framework/run \\\n \"$(/usr/libexec/PlistBuddy -c \"Print :'API Key'\" ../../Resources/Crashlytics/Crashlytics.plist)\" || [[ $DEPLOYMENT_LOCATION != YES ]]"; + shellScript = "../../../External/iOS/Crashlytics.framework/run \\\n \"$(/usr/libexec/PlistBuddy -c \"Print :'API Key'\" ../../Resources/Crashlytics/Crashlytics.plist)\" || [[ $DEPLOYMENT_LOCATION != YES ]]"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -3846,6 +3867,7 @@ 93D396D8B67DA6522CDBA142 /* MPCoachmarkViewController.m in Sources */, 93D391C07818F4C2DC1B6956 /* MPPasswordsCoachmarkViewController.m in Sources */, 93D39EAA4D064193074D3021 /* MPFixable.m in Sources */, + 93D394982CBD25D46692DD7C /* MPWebViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3928,6 +3950,8 @@ 93D3954E96236384AFA00453 /* UIScrollView+PearlAdjustInsets.m in Sources */, 93D39A8EA1C49CE43B63F47B /* PearlUICollectionView.m in Sources */, 93D399246DC90F50913A1287 /* UIResponder+PearlFirstResponder.m in Sources */, + 93D391ECBD9BD2C64115B5DD /* PearlSizedTextView.m in Sources */, + 93D39E34FD28D24FE3442C48 /* UITextView+PearlAttributes.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4210,6 +4234,10 @@ CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_ENTITLEMENTS = MasterPassword.entitlements; EXCLUDED_SOURCE_FILE_NAMES = libTestFlight.a; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + /Users/lhunath/Documents/workspace/lyndir/MasterPassword/External/iOS, + ); GCC_PREFIX_HEADER = "MasterPassword-Prefix.pch"; INFOPLIST_FILE = "MasterPassword-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 7.0; @@ -4234,6 +4262,10 @@ CODE_SIGN_ENTITLEMENTS = MasterPassword.entitlements; COPY_PHASE_STRIP = YES; EXCLUDED_SOURCE_FILE_NAMES = libDCIntrospect.a; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + /Users/lhunath/Documents/workspace/lyndir/MasterPassword/External/iOS, + ); GCC_PREFIX_HEADER = "MasterPassword-Prefix.pch"; INFOPLIST_FILE = "MasterPassword-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 7.0; @@ -4348,6 +4380,10 @@ libTestFlight.a, libDCIntrospect.a, ); + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + /Users/lhunath/Documents/workspace/lyndir/MasterPassword/External/iOS, + ); GCC_PREFIX_HEADER = "MasterPassword-Prefix.pch"; INFOPLIST_FILE = "MasterPassword-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 7.0; diff --git a/MasterPassword/ObjC/iOS/Storyboard.storyboard b/MasterPassword/ObjC/iOS/Storyboard.storyboard index ecf9baaf..dd37896a 100644 --- a/MasterPassword/ObjC/iOS/Storyboard.storyboard +++ b/MasterPassword/ObjC/iOS/Storyboard.storyboard @@ -19,16 +19,16 @@ - - + + - - + + @@ -136,8 +136,8 @@ - - - + + - -