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