Compare commits
36 Commits
2.1-cli1
...
2.1-appsto
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1f173d7586 | ||
|
|
34be1eac70 | ||
|
|
e1a9c8194c | ||
|
|
e18dee2242 | ||
|
|
a38829c1e2 | ||
|
|
8615f6af5d | ||
|
|
d642cb1aee | ||
|
|
2be2a19fa0 | ||
|
|
0d5b51ed8d | ||
|
|
c781bcf10a | ||
|
|
1c45a0df4a | ||
|
|
6b16e4d606 | ||
|
|
e837752777 | ||
|
|
84c23fa7f6 | ||
|
|
2b0cc8ec7b | ||
|
|
6f77e1922b | ||
|
|
653f90c59c | ||
|
|
3076cc3de4 | ||
|
|
15c53c06c6 | ||
|
|
b3a886a6db | ||
|
|
41ae6a5de5 | ||
|
|
92bd2cd016 | ||
|
|
4b975b5b04 | ||
|
|
56f04a8924 | ||
|
|
3c2b5de4b8 | ||
|
|
33e1492b44 | ||
|
|
9384e27247 | ||
|
|
a95561dd50 | ||
|
|
9d809f34d9 | ||
|
|
fc21bd959f | ||
|
|
2de17384ff | ||
|
|
85dab50996 | ||
|
|
bb97e8f3e8 | ||
|
|
f3d0368a75 | ||
|
|
283d555d3b | ||
|
|
d909e64670 |
6
.gitmodules
vendored
@@ -4,9 +4,6 @@
|
|||||||
[submodule "External/InAppSettingsKit"]
|
[submodule "External/InAppSettingsKit"]
|
||||||
path = External/InAppSettingsKit
|
path = External/InAppSettingsKit
|
||||||
url = git://github.com/lhunath/InAppSettingsKit.git
|
url = git://github.com/lhunath/InAppSettingsKit.git
|
||||||
[submodule "External/RHStatusItemView"]
|
|
||||||
path = External/RHStatusItemView
|
|
||||||
url = git://github.com/lhunath/RHStatusItemView.git
|
|
||||||
[submodule "External/KCOrderedAccessorFix"]
|
[submodule "External/KCOrderedAccessorFix"]
|
||||||
path = External/KCOrderedAccessorFix
|
path = External/KCOrderedAccessorFix
|
||||||
url = https://github.com/CFKevinRef/KCOrderedAccessorFix.git
|
url = https://github.com/CFKevinRef/KCOrderedAccessorFix.git
|
||||||
@@ -19,3 +16,6 @@
|
|||||||
[submodule "External/jrswizzle"]
|
[submodule "External/jrswizzle"]
|
||||||
path = External/jrswizzle
|
path = External/jrswizzle
|
||||||
url = git://github.com/jonmarimba/jrswizzle.git
|
url = git://github.com/jonmarimba/jrswizzle.git
|
||||||
|
[submodule "Site/2013-05/mpw-js/js/mpw-js"]
|
||||||
|
path = Site/2013-05/mpw-js/js/mpw-js
|
||||||
|
url = https://github.com/Lyndir/mpw-js.git
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
language: objective-c
|
language: objective-c
|
||||||
xcode_workspace: MasterPassword.xcworkspace
|
xcode_project: MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj
|
||||||
xcode_scheme: MasterPassword iOS (Development)
|
xcode_scheme: MasterPassword iOS (Development)
|
||||||
xcode_sdk: iphonesimulator
|
xcode_sdk: iphonesimulator
|
||||||
git:
|
git:
|
||||||
submodules: false
|
submodules: true
|
||||||
before_install: ./Scripts/updateDependencies
|
|
||||||
|
|||||||
2
External/KCOrderedAccessorFix
vendored
1
External/Mac/Crashlytics.framework/Modules
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
Versions/Current/Modules
|
||||||
@@ -38,6 +38,7 @@
|
|||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
OBJC_EXTERN void CLSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
|
OBJC_EXTERN void CLSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
|
||||||
|
OBJC_EXTERN void CLSLogv(NSString *format, va_list args) NS_FORMAT_FUNCTION(1,0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -46,6 +47,8 @@ OBJC_EXTERN void CLSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
|
|||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
OBJC_EXTERN void CLSNSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
|
OBJC_EXTERN void CLSNSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
|
||||||
|
OBJC_EXTERN void CLSNSLogv(NSString *format, va_list args) NS_FORMAT_FUNCTION(1,0);
|
||||||
|
|
||||||
|
|
||||||
@protocol CrashlyticsDelegate;
|
@protocol CrashlyticsDelegate;
|
||||||
|
|
||||||
|
|||||||
6
External/Mac/Crashlytics.framework/Versions/A/Modules/module.modulemap
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
framework module Crashlytics {
|
||||||
|
umbrella header "Crashlytics.h"
|
||||||
|
|
||||||
|
export *
|
||||||
|
module * { export * }
|
||||||
|
}
|
||||||
@@ -15,13 +15,13 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>FMWK</string>
|
<string>FMWK</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>2.1.2</string>
|
<string>2.2.5</string>
|
||||||
<key>CFBundleSupportedPlatforms</key>
|
<key>CFBundleSupportedPlatforms</key>
|
||||||
<array>
|
<array>
|
||||||
<string>macosx</string>
|
<string>macosx</string>
|
||||||
</array>
|
</array>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>9</string>
|
<string>39</string>
|
||||||
<key>DTPlatformName</key>
|
<key>DTPlatformName</key>
|
||||||
<string>macosx</string>
|
<string>macosx</string>
|
||||||
<key>MinimumOSVersion</key>
|
<key>MinimumOSVersion</key>
|
||||||
|
|||||||
BIN
External/Mac/Crashlytics.framework/run
vendored
2
External/Pearl
vendored
1
External/RHStatusItemView
vendored
@@ -38,6 +38,7 @@
|
|||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
OBJC_EXTERN void CLSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
|
OBJC_EXTERN void CLSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
|
||||||
|
OBJC_EXTERN void CLSLogv(NSString *format, va_list args) NS_FORMAT_FUNCTION(1,0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -46,6 +47,8 @@ OBJC_EXTERN void CLSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
|
|||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
OBJC_EXTERN void CLSNSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
|
OBJC_EXTERN void CLSNSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
|
||||||
|
OBJC_EXTERN void CLSNSLogv(NSString *format, va_list args) NS_FORMAT_FUNCTION(1,0);
|
||||||
|
|
||||||
|
|
||||||
@protocol CrashlyticsDelegate;
|
@protocol CrashlyticsDelegate;
|
||||||
|
|
||||||
|
|||||||
@@ -15,13 +15,13 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>FMWK</string>
|
<string>FMWK</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>2.2.4</string>
|
<string>2.2.5</string>
|
||||||
<key>CFBundleSupportedPlatforms</key>
|
<key>CFBundleSupportedPlatforms</key>
|
||||||
<array>
|
<array>
|
||||||
<string>iPhoneOS</string>
|
<string>iPhoneOS</string>
|
||||||
</array>
|
</array>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>38</string>
|
<string>40</string>
|
||||||
<key>DTPlatformName</key>
|
<key>DTPlatformName</key>
|
||||||
<string>iphoneos</string>
|
<string>iphoneos</string>
|
||||||
<key>MinimumOSVersion</key>
|
<key>MinimumOSVersion</key>
|
||||||
|
|||||||
BIN
External/iOS/Crashlytics.framework/run
vendored
BIN
External/iOS/Crashlytics.framework/submit
vendored
@@ -2,7 +2,10 @@
|
|||||||
#
|
#
|
||||||
# TROUBLESHOOTING
|
# TROUBLESHOOTING
|
||||||
# - To enable verbose algorithm/implementation debugging, use ./build -DDEBUG
|
# - To enable verbose algorithm/implementation debugging, use ./build -DDEBUG
|
||||||
# - If you see 'undefined reference to `clock_gettime'', try ./build -lrt instead
|
# - If you see 'undefined reference to `clock_gettime'',
|
||||||
|
# try ./build -lrt instead.
|
||||||
|
# - If you see 'x86.S:202: Error: junk at end of line, first unrecognized character is `,'',
|
||||||
|
# try commenting the line in lib/bcrypt/x86.S.
|
||||||
#
|
#
|
||||||
# BUGS
|
# BUGS
|
||||||
# masterpassword@lyndir.com
|
# masterpassword@lyndir.com
|
||||||
@@ -32,6 +35,9 @@ fi
|
|||||||
|
|
||||||
### DEPENDENCIES
|
### DEPENDENCIES
|
||||||
|
|
||||||
|
digest() {
|
||||||
|
openssl sha -sha256 -binary < "$1" | od -t x1 -An -v | tr -d '[:space:]'
|
||||||
|
}
|
||||||
fetch() {
|
fetch() {
|
||||||
if hash wget 2>/dev/null; then
|
if hash wget 2>/dev/null; then
|
||||||
wget -O "${1##*/}" "$1"
|
wget -O "${1##*/}" "$1"
|
||||||
@@ -54,7 +60,7 @@ unpack() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
printf 'Verifying package: %s, against digest: %s...' "$1" "$2"
|
printf 'Verifying package: %s, against digest: %s...' "$1" "$2"
|
||||||
[[ $(openssl sha < "$1") = $2 ]] || {
|
[[ $(digest "$1") = $2 ]] || {
|
||||||
printf ' mismatch!\n'
|
printf ' mismatch!\n'
|
||||||
echo 2>&1 "Downloaded package doesn't match digest."
|
echo 2>&1 "Downloaded package doesn't match digest."
|
||||||
exit 1
|
exit 1
|
||||||
@@ -75,7 +81,7 @@ fetchSource() (
|
|||||||
[[ -e $files ]] || {
|
[[ -e $files ]] || {
|
||||||
echo
|
echo
|
||||||
echo "Unpacking: ${PWD##*/}, using package..."
|
echo "Unpacking: ${PWD##*/}, using package..."
|
||||||
unpack "${pkg##*/}" "$pkg_sha"
|
unpack "${pkg##*/}" "$pkg_sha256"
|
||||||
}
|
}
|
||||||
|
|
||||||
elif [[ $git ]] && hash git 2>/dev/null; then
|
elif [[ $git ]] && hash git 2>/dev/null; then
|
||||||
@@ -108,7 +114,7 @@ fetchSource() (
|
|||||||
echo
|
echo
|
||||||
echo "Fetching: ${PWD##*/}, using package..."
|
echo "Fetching: ${PWD##*/}, using package..."
|
||||||
fetch "$pkg"
|
fetch "$pkg"
|
||||||
unpack "${pkg##*/}" "$pkg_sha"
|
unpack "${pkg##*/}" "$pkg_sha256"
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
home=http://www.openwall.com/crypt/
|
home=http://www.openwall.com/crypt/
|
||||||
pkg=http://www.openwall.com/crypt/crypt_blowfish-1.3.tar.gz
|
pkg=http://www.openwall.com/crypt/crypt_blowfish-1.3.tar.gz
|
||||||
pkg_sha=7253c86c8fe890e67ec782749f95ce3f1517b065
|
pkg_sha256=83fa01fca6996fe8d882b7f8e9ba0305a5664936100b01481ea3c6a8ce8d72fd
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
home=https://code.google.com/p/scrypt/
|
home=https://code.google.com/p/scrypt/
|
||||||
svn=http://scrypt.googlecode.com/svn
|
svn=http://scrypt.googlecode.com/svn
|
||||||
pkg=http://masterpasswordapp.com/libscrypt-b12b554.tar.gz
|
pkg=http://masterpasswordapp.com/libscrypt-b12b554.tar.gz
|
||||||
pkg_sha=a86445c3e031392d20652f4163adfd3fb0b1994e
|
pkg_sha256=c726daec68a345e420896f005394a948dc5a6924713ed94b684c856d4c247f0b
|
||||||
|
|||||||
@@ -169,6 +169,8 @@ PearlAssociatedObjectProperty( NSMutableArray*, ProductObservers, productObserve
|
|||||||
for (id<MPInAppDelegate> productObserver in self.productObservers)
|
for (id<MPInAppDelegate> productObserver in self.productObservers)
|
||||||
[productObserver updateWithTransaction:transaction];
|
[productObserver updateWithTransaction:transaction];
|
||||||
}
|
}
|
||||||
|
if (![[NSUserDefaults standardUserDefaults] synchronize])
|
||||||
|
wrn( @"Couldn't synchronize after transaction updates." );
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error {
|
- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error {
|
||||||
|
|||||||
@@ -122,10 +122,8 @@ static NSDictionary *keyQuery(MPUserEntity *user) {
|
|||||||
|
|
||||||
// No more methods left, fail if key still not known.
|
// No more methods left, fail if key still not known.
|
||||||
if (!tryKey) {
|
if (!tryKey) {
|
||||||
if (password) {
|
if (password)
|
||||||
inf( @"Login failed for: %@", user.userID );
|
inf( @"Login failed for: %@", user.userID );
|
||||||
MPCheckpoint( MPCheckpointSignInFailed, nil );
|
|
||||||
}
|
|
||||||
|
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
@@ -159,7 +157,6 @@ static NSDictionary *keyQuery(MPUserEntity *user) {
|
|||||||
}];
|
}];
|
||||||
|
|
||||||
[[NSNotificationCenter defaultCenter] postNotificationName:MPSignedInNotification object:self];
|
[[NSNotificationCenter defaultCenter] postNotificationName:MPSignedInNotification object:self];
|
||||||
MPCheckpoint( MPCheckpointSignedIn, nil );
|
|
||||||
|
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
@property(strong, nonatomic, readonly) MPKey *key;
|
@property(strong, nonatomic, readonly) MPKey *key;
|
||||||
@property(strong, nonatomic, readonly) NSManagedObjectID *activeUserOID;
|
@property(strong, nonatomic, readonly) NSManagedObjectID *activeUserOID;
|
||||||
|
@property(strong, nonatomic, readonly) NSPersistentStoreCoordinator *storeCoordinator;
|
||||||
|
|
||||||
+ (instancetype)get;
|
+ (instancetype)get;
|
||||||
|
|
||||||
|
|||||||
@@ -6,15 +6,16 @@
|
|||||||
// Copyright (c) 2011 Lyndir. All rights reserved.
|
// Copyright (c) 2011 Lyndir. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <StoreKit/StoreKit.h>
|
|
||||||
#import "MPAppDelegate_Shared.h"
|
#import "MPAppDelegate_Shared.h"
|
||||||
#import "MPAppDelegate_Store.h"
|
#import "MPAppDelegate_Store.h"
|
||||||
#import "MPAppDelegate_Key.h"
|
#import "MPAppDelegate_Key.h"
|
||||||
|
#import "NSManagedObjectModel+KCOrderedAccessorFix.h"
|
||||||
|
|
||||||
@interface MPAppDelegate_Shared ()
|
@interface MPAppDelegate_Shared ()
|
||||||
|
|
||||||
@property(strong, nonatomic) MPKey *key;
|
@property(strong, nonatomic) MPKey *key;
|
||||||
@property(strong, nonatomic) NSManagedObjectID *activeUserOID;
|
@property(strong, nonatomic) NSManagedObjectID *activeUserOID;
|
||||||
|
@property(strong, nonatomic) NSPersistentStoreCoordinator *storeCoordinator;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@@ -31,6 +32,18 @@
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (instancetype)init {
|
||||||
|
|
||||||
|
if (!(self = [super init]))
|
||||||
|
return nil;
|
||||||
|
|
||||||
|
NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
|
||||||
|
[model kc_generateOrderedSetAccessors];
|
||||||
|
self.storeCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
- (MPUserEntity *)activeUserForMainThread {
|
- (MPUserEntity *)activeUserForMainThread {
|
||||||
|
|
||||||
return [self activeUserInContext:[MPAppDelegate_Shared managedObjectContextForMainThreadIfReady]];
|
return [self activeUserInContext:[MPAppDelegate_Shared managedObjectContextForMainThreadIfReady]];
|
||||||
|
|||||||
@@ -7,8 +7,6 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import "MPAppDelegate_Store.h"
|
#import "MPAppDelegate_Store.h"
|
||||||
#import "MPGeneratedSiteEntity.h"
|
|
||||||
#import "NSManagedObjectModel+KCOrderedAccessorFix.h"
|
|
||||||
|
|
||||||
#if TARGET_OS_IPHONE
|
#if TARGET_OS_IPHONE
|
||||||
#define STORE_OPTIONS NSPersistentStoreFileProtectionKey : NSFileProtectionComplete,
|
#define STORE_OPTIONS NSPersistentStoreFileProtectionKey : NSFileProtectionComplete,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
#define STORE_OPTIONS
|
#define STORE_OPTIONS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define MPStoreMigrationLevelKey @"MPMigrationLevelLocalStoreKey"
|
#define MPMigrationLevelLocalStoreKey @"MPMigrationLevelLocalStoreKey"
|
||||||
|
|
||||||
typedef NS_ENUM( NSInteger, MPStoreMigrationLevel ) {
|
typedef NS_ENUM( NSInteger, MPStoreMigrationLevel ) {
|
||||||
MPStoreMigrationLevelV1,
|
MPStoreMigrationLevelV1,
|
||||||
@@ -27,9 +25,7 @@ typedef NS_ENUM( NSInteger, MPStoreMigrationLevel ) {
|
|||||||
|
|
||||||
@implementation MPAppDelegate_Shared(Store)
|
@implementation MPAppDelegate_Shared(Store)
|
||||||
|
|
||||||
PearlAssociatedObjectProperty( id, SaveObserver, saveObserver );
|
PearlAssociatedObjectProperty( NSOperationQueue *, StoreQueue, storeQueue );
|
||||||
|
|
||||||
PearlAssociatedObjectProperty( NSPersistentStoreCoordinator*, PersistentStoreCoordinator, persistentStoreCoordinator );
|
|
||||||
|
|
||||||
PearlAssociatedObjectProperty( NSManagedObjectContext*, PrivateManagedObjectContext, privateManagedObjectContext );
|
PearlAssociatedObjectProperty( NSManagedObjectContext*, PrivateManagedObjectContext, privateManagedObjectContext );
|
||||||
|
|
||||||
@@ -56,7 +52,12 @@ PearlAssociatedObjectProperty( NSNumber*, StoreCorrupted, storeCorrupted );
|
|||||||
return NO;
|
return NO;
|
||||||
|
|
||||||
[mainManagedObjectContext performBlock:^{
|
[mainManagedObjectContext performBlock:^{
|
||||||
mocBlock( mainManagedObjectContext );
|
@try {
|
||||||
|
mocBlock( mainManagedObjectContext );
|
||||||
|
}
|
||||||
|
@catch (NSException *exception) {
|
||||||
|
err( @"While performing managed block:\n%@", [exception fullDescription] );
|
||||||
|
}
|
||||||
}];
|
}];
|
||||||
|
|
||||||
return YES;
|
return YES;
|
||||||
@@ -69,7 +70,12 @@ PearlAssociatedObjectProperty( NSNumber*, StoreCorrupted, storeCorrupted );
|
|||||||
return NO;
|
return NO;
|
||||||
|
|
||||||
[mainManagedObjectContext performBlockAndWait:^{
|
[mainManagedObjectContext performBlockAndWait:^{
|
||||||
mocBlock( mainManagedObjectContext );
|
@try {
|
||||||
|
mocBlock( mainManagedObjectContext );
|
||||||
|
}
|
||||||
|
@catch (NSException *exception) {
|
||||||
|
err( @"While performing managed block:\n%@", [exception fullDescription] );
|
||||||
|
}
|
||||||
}];
|
}];
|
||||||
|
|
||||||
return YES;
|
return YES;
|
||||||
@@ -84,7 +90,12 @@ PearlAssociatedObjectProperty( NSNumber*, StoreCorrupted, storeCorrupted );
|
|||||||
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
|
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
|
||||||
moc.parentContext = privateManagedObjectContextIfReady;
|
moc.parentContext = privateManagedObjectContextIfReady;
|
||||||
[moc performBlock:^{
|
[moc performBlock:^{
|
||||||
mocBlock( moc );
|
@try {
|
||||||
|
mocBlock( moc );
|
||||||
|
}
|
||||||
|
@catch (NSException *exception) {
|
||||||
|
err( @"While performing managed block:\n%@", [exception fullDescription] );
|
||||||
|
}
|
||||||
}];
|
}];
|
||||||
|
|
||||||
return YES;
|
return YES;
|
||||||
@@ -99,7 +110,12 @@ PearlAssociatedObjectProperty( NSNumber*, StoreCorrupted, storeCorrupted );
|
|||||||
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
|
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
|
||||||
moc.parentContext = privateManagedObjectContextIfReady;
|
moc.parentContext = privateManagedObjectContextIfReady;
|
||||||
[moc performBlockAndWait:^{
|
[moc performBlockAndWait:^{
|
||||||
mocBlock( moc );
|
@try {
|
||||||
|
mocBlock( moc );
|
||||||
|
}
|
||||||
|
@catch (NSException *exception) {
|
||||||
|
err( @"While performing managed block:\n%@", [exception fullDescription] );
|
||||||
|
}
|
||||||
}];
|
}];
|
||||||
|
|
||||||
return YES;
|
return YES;
|
||||||
@@ -123,20 +139,28 @@ PearlAssociatedObjectProperty( NSNumber*, StoreCorrupted, storeCorrupted );
|
|||||||
inDomains:NSUserDomainMask] lastObject];
|
inDomains:NSUserDomainMask] lastObject];
|
||||||
return [[[applicationSupportURL
|
return [[[applicationSupportURL
|
||||||
URLByAppendingPathComponent:[NSBundle mainBundle].bundleIdentifier isDirectory:YES]
|
URLByAppendingPathComponent:[NSBundle mainBundle].bundleIdentifier isDirectory:YES]
|
||||||
URLByAppendingPathComponent:@"UbiquityStore" isDirectory:NO]
|
URLByAppendingPathComponent:@"MasterPassword" isDirectory:NO]
|
||||||
URLByAppendingPathExtension:@"sqlite"];
|
URLByAppendingPathExtension:@"sqlite"];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)loadStore {
|
- (void)loadStore {
|
||||||
|
|
||||||
@synchronized (self) {
|
static dispatch_once_t once = 0;
|
||||||
|
dispatch_once( &once, ^{
|
||||||
|
(self.storeQueue = [NSOperationQueue new]).maxConcurrentOperationCount = 1;
|
||||||
|
} );
|
||||||
|
|
||||||
|
// Do nothing if already fully set up, otherwise (re-)load the store.
|
||||||
|
if (self.storeCoordinator && self.mainManagedObjectContext && self.privateManagedObjectContext)
|
||||||
|
return;
|
||||||
|
|
||||||
|
[self.storeQueue addOperationWithBlock:^{
|
||||||
// Do nothing if already fully set up, otherwise (re-)load the store.
|
// Do nothing if already fully set up, otherwise (re-)load the store.
|
||||||
if (self.persistentStoreCoordinator && self.saveObserver && self.mainManagedObjectContext && self.privateManagedObjectContext)
|
if (self.storeCoordinator && self.mainManagedObjectContext && self.privateManagedObjectContext)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Unregister any existing observers and contexts.
|
// Unregister any existing observers and contexts.
|
||||||
if (self.saveObserver)
|
PearlRemoveNotificationObserversFrom( self.mainManagedObjectContext );
|
||||||
[[NSNotificationCenter defaultCenter] removeObserver:self.saveObserver];
|
|
||||||
[self.mainManagedObjectContext performBlockAndWait:^{
|
[self.mainManagedObjectContext performBlockAndWait:^{
|
||||||
[self.mainManagedObjectContext reset];
|
[self.mainManagedObjectContext reset];
|
||||||
self.mainManagedObjectContext = nil;
|
self.mainManagedObjectContext = nil;
|
||||||
@@ -153,13 +177,31 @@ PearlAssociatedObjectProperty( NSNumber*, StoreCorrupted, storeCorrupted );
|
|||||||
// Check if migration is necessary.
|
// Check if migration is necessary.
|
||||||
[self migrateStore];
|
[self migrateStore];
|
||||||
|
|
||||||
// Create a new store coordinator.
|
// Install managed object contexts and observers.
|
||||||
if (!self.persistentStoreCoordinator) {
|
self.privateManagedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
|
||||||
NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
|
[self.privateManagedObjectContext performBlockAndWait:^{
|
||||||
[model kc_generateOrderedSetAccessors];
|
self.privateManagedObjectContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy;
|
||||||
self.persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
|
self.privateManagedObjectContext.persistentStoreCoordinator = self.storeCoordinator;
|
||||||
}
|
}];
|
||||||
|
|
||||||
|
self.mainManagedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
|
||||||
|
self.mainManagedObjectContext.parentContext = self.privateManagedObjectContext;
|
||||||
|
|
||||||
|
// When privateManagedObjectContext is saved, import the changes into mainManagedObjectContext.
|
||||||
|
PearlAddNotificationObserverTo( self.mainManagedObjectContext, NSManagedObjectContextDidSaveNotification,
|
||||||
|
self.privateManagedObjectContext, nil, ^(NSManagedObjectContext *mainManagedObjectContext, NSNotification *note) {
|
||||||
|
[mainManagedObjectContext performBlock:^{
|
||||||
|
@try {
|
||||||
|
[mainManagedObjectContext mergeChangesFromContextDidSaveNotification:note];
|
||||||
|
}
|
||||||
|
@catch (NSException *exception) {
|
||||||
|
err( @"While merging changes:\n%@",[exception fullDescription] );
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
} );
|
||||||
|
|
||||||
|
|
||||||
|
// Create a new store coordinator.
|
||||||
NSError *error = nil;
|
NSError *error = nil;
|
||||||
NSURL *localStoreURL = [self localStoreURL];
|
NSURL *localStoreURL = [self localStoreURL];
|
||||||
if (![[NSFileManager defaultManager] createDirectoryAtURL:[localStoreURL URLByDeletingLastPathComponent]
|
if (![[NSFileManager defaultManager] createDirectoryAtURL:[localStoreURL URLByDeletingLastPathComponent]
|
||||||
@@ -167,12 +209,12 @@ PearlAssociatedObjectProperty( NSNumber*, StoreCorrupted, storeCorrupted );
|
|||||||
err( @"Couldn't create our application support directory: %@", [error fullDescription] );
|
err( @"Couldn't create our application support directory: %@", [error fullDescription] );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (![self.persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[self localStoreURL]
|
if (![self.storeCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[self localStoreURL]
|
||||||
options:@{
|
options:@{
|
||||||
NSMigratePersistentStoresAutomaticallyOption : @YES,
|
NSMigratePersistentStoresAutomaticallyOption : @YES,
|
||||||
NSInferMappingModelAutomaticallyOption : @YES,
|
NSInferMappingModelAutomaticallyOption : @YES,
|
||||||
STORE_OPTIONS
|
STORE_OPTIONS
|
||||||
} error:&error]) {
|
} error:&error]) {
|
||||||
err( @"Failed to open store: %@", [error fullDescription] );
|
err( @"Failed to open store: %@", [error fullDescription] );
|
||||||
self.storeCorrupted = @YES;
|
self.storeCorrupted = @YES;
|
||||||
[self handleCoordinatorError:error];
|
[self handleCoordinatorError:error];
|
||||||
@@ -180,25 +222,6 @@ PearlAssociatedObjectProperty( NSNumber*, StoreCorrupted, storeCorrupted );
|
|||||||
}
|
}
|
||||||
self.storeCorrupted = @NO;
|
self.storeCorrupted = @NO;
|
||||||
|
|
||||||
// Create our contexts and observer.
|
|
||||||
self.privateManagedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
|
|
||||||
[self.privateManagedObjectContext performBlockAndWait:^{
|
|
||||||
self.privateManagedObjectContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy;
|
|
||||||
self.privateManagedObjectContext.persistentStoreCoordinator = self.persistentStoreCoordinator;
|
|
||||||
}];
|
|
||||||
|
|
||||||
self.mainManagedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
|
|
||||||
self.mainManagedObjectContext.parentContext = self.privateManagedObjectContext;
|
|
||||||
|
|
||||||
self.saveObserver = [[NSNotificationCenter defaultCenter] addObserverForName:NSManagedObjectContextDidSaveNotification
|
|
||||||
object:self.privateManagedObjectContext queue:nil usingBlock:
|
|
||||||
^(NSNotification *note) {
|
|
||||||
// When privateManagedObjectContext is saved, import the changes into mainManagedObjectContext.
|
|
||||||
[self.mainManagedObjectContext performBlock:^{
|
|
||||||
[self.mainManagedObjectContext mergeChangesFromContextDidSaveNotification:note];
|
|
||||||
}];
|
|
||||||
}];
|
|
||||||
|
|
||||||
#if TARGET_OS_IPHONE
|
#if TARGET_OS_IPHONE
|
||||||
PearlAddNotificationObserver( UIApplicationWillTerminateNotification, UIApp, [NSOperationQueue mainQueue],
|
PearlAddNotificationObserver( UIApplicationWillTerminateNotification, UIApp, [NSOperationQueue mainQueue],
|
||||||
^(MPAppDelegate_Shared *self, NSNotification *note) {
|
^(MPAppDelegate_Shared *self, NSNotification *note) {
|
||||||
@@ -220,15 +243,14 @@ PearlAssociatedObjectProperty( NSNumber*, StoreCorrupted, storeCorrupted );
|
|||||||
[MPAppDelegate_Shared managedObjectContextPerformBlockAndWait:^(NSManagedObjectContext *context) {
|
[MPAppDelegate_Shared managedObjectContextPerformBlockAndWait:^(NSManagedObjectContext *context) {
|
||||||
[self findAndFixInconsistenciesSaveInContext:context];
|
[self findAndFixInconsistenciesSaveInContext:context];
|
||||||
}];
|
}];
|
||||||
}
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)deleteAndResetStore {
|
- (void)deleteAndResetStore {
|
||||||
|
|
||||||
@synchronized (self) {
|
@synchronized (self) {
|
||||||
// Unregister any existing observers and contexts.
|
// Unregister any existing observers and contexts.
|
||||||
if (self.saveObserver)
|
PearlRemoveNotificationObserversFrom( self.mainManagedObjectContext );
|
||||||
[[NSNotificationCenter defaultCenter] removeObserver:self.saveObserver];
|
|
||||||
[self.mainManagedObjectContext performBlockAndWait:^{
|
[self.mainManagedObjectContext performBlockAndWait:^{
|
||||||
[self.mainManagedObjectContext reset];
|
[self.mainManagedObjectContext reset];
|
||||||
self.mainManagedObjectContext = nil;
|
self.mainManagedObjectContext = nil;
|
||||||
@@ -238,11 +260,10 @@ PearlAssociatedObjectProperty( NSNumber*, StoreCorrupted, storeCorrupted );
|
|||||||
self.privateManagedObjectContext = nil;
|
self.privateManagedObjectContext = nil;
|
||||||
}];
|
}];
|
||||||
NSError *error = nil;
|
NSError *error = nil;
|
||||||
for (NSPersistentStore *store in self.persistentStoreCoordinator.persistentStores) {
|
for (NSPersistentStore *store in self.storeCoordinator.persistentStores) {
|
||||||
if (![self.persistentStoreCoordinator removePersistentStore:store error:&error])
|
if (![self.storeCoordinator removePersistentStore:store error:&error])
|
||||||
err( @"Couldn't remove persistence store from coordinator: %@", [error fullDescription] );
|
err( @"Couldn't remove persistence store from coordinator: %@", [error fullDescription] );
|
||||||
}
|
}
|
||||||
self.persistentStoreCoordinator = nil;
|
|
||||||
if (![[NSFileManager defaultManager] removeItemAtURL:self.localStoreURL error:&error])
|
if (![[NSFileManager defaultManager] removeItemAtURL:self.localStoreURL error:&error])
|
||||||
err( @"Couldn't remove persistence store at URL %@: %@", self.localStoreURL, [error fullDescription] );
|
err( @"Couldn't remove persistence store at URL %@: %@", self.localStoreURL, [error fullDescription] );
|
||||||
|
|
||||||
@@ -287,23 +308,25 @@ PearlAssociatedObjectProperty( NSNumber*, StoreCorrupted, storeCorrupted );
|
|||||||
|
|
||||||
- (void)migrateStore {
|
- (void)migrateStore {
|
||||||
|
|
||||||
MPStoreMigrationLevel migrationLevel = (signed)[[NSUserDefaults standardUserDefaults] integerForKey:MPStoreMigrationLevelKey];
|
MPStoreMigrationLevel migrationLevel = (signed)[[NSUserDefaults standardUserDefaults] integerForKey:MPMigrationLevelLocalStoreKey];
|
||||||
if (migrationLevel >= MPStoreMigrationLevelCurrent)
|
if (migrationLevel >= MPStoreMigrationLevelCurrent)
|
||||||
// Local store up-to-date.
|
// Local store up-to-date.
|
||||||
return;
|
return;
|
||||||
|
|
||||||
inf( @"Local store migration level: %d (current %d)", (signed)migrationLevel, (signed)MPStoreMigrationLevelCurrent );
|
inf( @"Local store migration level: %d (current %d)", (signed)migrationLevel, (signed)MPStoreMigrationLevelCurrent );
|
||||||
if (migrationLevel == MPStoreMigrationLevelV1 && ![self migrateV1LocalStore]) {
|
if (migrationLevel <= MPStoreMigrationLevelV1 && ![self migrateV1LocalStore]) {
|
||||||
inf( @"Failed to migrate old V1 to new local store." );
|
inf( @"Failed to migrate old V1 to new local store." );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (migrationLevel == MPStoreMigrationLevelV2 && ![self migrateV2LocalStore]) {
|
if (migrationLevel <= MPStoreMigrationLevelV2 && ![self migrateV2LocalStore]) {
|
||||||
inf( @"Failed to migrate old V2 to new local store." );
|
inf( @"Failed to migrate old V2 to new local store." );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
[[NSUserDefaults standardUserDefaults] setInteger:MPStoreMigrationLevelCurrent forKey:MPStoreMigrationLevelKey];
|
[[NSUserDefaults standardUserDefaults] setInteger:MPStoreMigrationLevelCurrent forKey:MPMigrationLevelLocalStoreKey];
|
||||||
inf( @"Successfully migrated old to new local store." );
|
inf( @"Successfully migrated old to new local store." );
|
||||||
|
if (![[NSUserDefaults standardUserDefaults] synchronize])
|
||||||
|
wrn( @"Couldn't synchronize after store migration." );
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)migrateV1LocalStore {
|
- (BOOL)migrateV1LocalStore {
|
||||||
@@ -319,14 +342,16 @@ PearlAssociatedObjectProperty( NSNumber*, StoreCorrupted, storeCorrupted );
|
|||||||
|
|
||||||
inf( @"Migrating V1 local store" );
|
inf( @"Migrating V1 local store" );
|
||||||
NSURL *newLocalStoreURL = [self localStoreURL];
|
NSURL *newLocalStoreURL = [self localStoreURL];
|
||||||
NSError *error = nil;
|
if (![[NSFileManager defaultManager] fileExistsAtPath:newLocalStoreURL.path isDirectory:NULL]) {
|
||||||
if (![[NSFileManager defaultManager] createDirectoryAtURL:[newLocalStoreURL URLByDeletingLastPathComponent]
|
inf( @"New local store already exists." );
|
||||||
withIntermediateDirectories:YES attributes:nil error:&error]) {
|
return YES;
|
||||||
err( @"Couldn't create our application support directory: %@", [error fullDescription] );
|
|
||||||
return NO;
|
|
||||||
}
|
}
|
||||||
if (![[NSFileManager defaultManager] moveItemAtURL:oldLocalStoreURL toURL:newLocalStoreURL error:&error]) {
|
|
||||||
err( @"Couldn't move the old store to the new location: %@", [error fullDescription] );
|
NSError *error = nil;
|
||||||
|
if (![NSPersistentStore migrateStore:oldLocalStoreURL withOptions:@{ STORE_OPTIONS }
|
||||||
|
toStore:newLocalStoreURL withOptions:@{ STORE_OPTIONS }
|
||||||
|
model:nil error:&error]) {
|
||||||
|
err( @"Couldn't migrate the old store to the new location: %@", [error fullDescription] );
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -358,14 +383,22 @@ PearlAssociatedObjectProperty( NSNumber*, StoreCorrupted, storeCorrupted );
|
|||||||
|
|
||||||
inf( @"Migrating V2 local store" );
|
inf( @"Migrating V2 local store" );
|
||||||
NSURL *newLocalStoreURL = [self localStoreURL];
|
NSURL *newLocalStoreURL = [self localStoreURL];
|
||||||
NSError *error = nil;
|
if ([[NSFileManager defaultManager] fileExistsAtPath:newLocalStoreURL.path isDirectory:NULL]) {
|
||||||
if (![[NSFileManager defaultManager] createDirectoryAtURL:[newLocalStoreURL URLByDeletingLastPathComponent]
|
inf( @"New local store already exists." );
|
||||||
withIntermediateDirectories:YES attributes:nil error:&error]) {
|
return YES;
|
||||||
err( @"Couldn't create our application support directory: %@", [error fullDescription] );
|
|
||||||
return NO;
|
|
||||||
}
|
}
|
||||||
if (![[NSFileManager defaultManager] moveItemAtURL:oldLocalStoreURL toURL:newLocalStoreURL error:&error]) {
|
|
||||||
err( @"Couldn't move the old store to the new location: %@", [error fullDescription] );
|
NSError *error = nil;
|
||||||
|
if (![NSPersistentStore migrateStore:oldLocalStoreURL withOptions:@{
|
||||||
|
NSMigratePersistentStoresAutomaticallyOption : @YES,
|
||||||
|
NSInferMappingModelAutomaticallyOption : @YES,
|
||||||
|
STORE_OPTIONS
|
||||||
|
} toStore:newLocalStoreURL withOptions:@{
|
||||||
|
NSMigratePersistentStoresAutomaticallyOption : @YES,
|
||||||
|
NSInferMappingModelAutomaticallyOption : @YES,
|
||||||
|
STORE_OPTIONS
|
||||||
|
} model:nil error:&error]) {
|
||||||
|
err( @"Couldn't migrate the old store to the new location: %@", [error fullDescription] );
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -697,6 +730,10 @@ PearlAssociatedObjectProperty( NSNumber*, StoreCorrupted, storeCorrupted );
|
|||||||
|
|
||||||
// Create new site.
|
// Create new site.
|
||||||
NSString *typeEntityName = [MPAlgorithmForVersion( version ) classNameOfType:type];
|
NSString *typeEntityName = [MPAlgorithmForVersion( version ) classNameOfType:type];
|
||||||
|
if (!typeEntityName) {
|
||||||
|
err( @"Invalid site type in import file: %@ has type %lu", siteName, (long)type );
|
||||||
|
return MPImportResultInternalError;
|
||||||
|
}
|
||||||
MPSiteEntity *site = [NSEntityDescription insertNewObjectForEntityForName:typeEntityName inManagedObjectContext:context];
|
MPSiteEntity *site = [NSEntityDescription insertNewObjectForEntityForName:typeEntityName inManagedObjectContext:context];
|
||||||
site.name = siteName;
|
site.name = siteName;
|
||||||
site.loginName = loginName;
|
site.loginName = loginName;
|
||||||
@@ -721,7 +758,6 @@ PearlAssociatedObjectProperty( NSNumber*, StoreCorrupted, storeCorrupted );
|
|||||||
return MPImportResultInternalError;
|
return MPImportResultInternalError;
|
||||||
|
|
||||||
inf( @"Import completed successfully." );
|
inf( @"Import completed successfully." );
|
||||||
MPCheckpoint( MPCheckpointSitesImported, nil );
|
|
||||||
|
|
||||||
[[NSNotificationCenter defaultCenter] postNotificationName:MPSitesImportedNotification object:nil userInfo:@{
|
[[NSNotificationCenter defaultCenter] postNotificationName:MPSitesImportedNotification object:nil userInfo:@{
|
||||||
MPSitesImportedNotificationUserKey : user
|
MPSitesImportedNotificationUserKey : user
|
||||||
@@ -789,10 +825,6 @@ PearlAssociatedObjectProperty( NSNumber*, StoreCorrupted, storeCorrupted );
|
|||||||
[(loginName?: @"") UTF8String], [siteName UTF8String], content?: @""];
|
[(loginName?: @"") UTF8String], [siteName UTF8String], content?: @""];
|
||||||
}
|
}
|
||||||
|
|
||||||
MPCheckpoint( MPCheckpointSitesExported, @{
|
|
||||||
@"showPasswords" : @(revealPasswords)
|
|
||||||
} );
|
|
||||||
|
|
||||||
return export;
|
return export;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
}
|
}
|
||||||
@catch (NSException *exception) {
|
@catch (NSException *exception) {
|
||||||
success = NO;
|
success = NO;
|
||||||
err( @"While saving: %@", exception );
|
err( @"While saving: %@", [exception fullDescription] );
|
||||||
}
|
}
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
@@ -128,10 +128,15 @@
|
|||||||
|
|
||||||
- (NSString *)debugDescription {
|
- (NSString *)debugDescription {
|
||||||
|
|
||||||
return strf( @"{%@: name=%@, user=%@, type=%lu, uses=%ld, lastUsed=%@, version=%ld, loginName=%@, requiresExplicitMigration=%d}",
|
@try {
|
||||||
NSStringFromClass( [self class] ), self.name, self.user.name, (long)self.type, (long)self.uses, self.lastUsed,
|
return strf( @"{%@: name=%@, user=%@, type=%lu, uses=%ld, lastUsed=%@, version=%ld, loginName=%@, requiresExplicitMigration=%d}",
|
||||||
(long)self.version,
|
NSStringFromClass( [self class] ), self.name, self.user.name, (long)self.type, (long)self.uses, self.lastUsed,
|
||||||
self.loginName, self.requiresExplicitMigration );
|
(long)self.version,
|
||||||
|
self.loginName, self.requiresExplicitMigration );
|
||||||
|
} @catch (NSException *exception) {
|
||||||
|
return strf( @"{%@: inaccessible: %@}",
|
||||||
|
NSStringFromClass( [self class] ), [exception fullDescription] );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)tryMigrateExplicitly:(BOOL)explicit {
|
- (BOOL)tryMigrateExplicitly:(BOOL)explicit {
|
||||||
|
|||||||
@@ -47,35 +47,6 @@ typedef NS_ENUM(NSUInteger, MPSiteType) {
|
|||||||
|
|
||||||
#define MPErrorDomain @"MPErrorDomain"
|
#define MPErrorDomain @"MPErrorDomain"
|
||||||
|
|
||||||
#define MPCheckpointHelpChapter @"MPCheckpointHelpChapter"
|
|
||||||
#define MPCheckpointCopyToPasteboard @"MPCheckpointCopyToPasteboard"
|
|
||||||
#define MPCheckpointCopyLoginNameToPasteboard @"MPCheckpointCopyLoginNameToPasteboard"
|
|
||||||
#define MPCheckpointResetPasswordCounter @"MPCheckpointResetPasswordCounter"
|
|
||||||
#define MPCheckpointIncrementPasswordCounter @"MPCheckpointIncrementPasswordCounter"
|
|
||||||
#define MPCheckpointEditPassword @"MPCheckpointEditPassword"
|
|
||||||
#define MPCheckpointEditLoginName @"MPCheckpointEditLoginName"
|
|
||||||
#define MPCheckpointUseType @"MPCheckpointUseType"
|
|
||||||
#define MPCheckpointDeleteSite @"MPCheckpointDeleteSite"
|
|
||||||
#define MPCheckpointShowGuide @"MPCheckpointShowGuide"
|
|
||||||
#define MPCheckpointShowSetup @"MPCheckpointShowSetup"
|
|
||||||
#define MPCheckpointChangeMP @"MPCheckpointChangeMP"
|
|
||||||
#define MPCheckpointMPErrorUbiquity @"MPCheckpointMPErrorUbiquity"
|
|
||||||
#define MPCheckpointLocalStoreReset @"MPCheckpointLocalStoreReset"
|
|
||||||
#define MPCheckpointCloudStoreReset @"MPCheckpointCloudStoreReset"
|
|
||||||
#define MPCheckpointSignInFailed @"MPCheckpointSignInFailed"
|
|
||||||
#define MPCheckpointSignedIn @"MPCheckpointSignedIn"
|
|
||||||
#define MPCheckpointConfig @"MPCheckpointConfig"
|
|
||||||
#define MPCheckpointCloud @"MPCheckpointCloud"
|
|
||||||
#define MPCheckpointSitesImported @"MPCheckpointSitesImported"
|
|
||||||
#define MPCheckpointSitesExported @"MPCheckpointSitesExported"
|
|
||||||
#define MPCheckpointExplicitMigration @"MPCheckpointExplicitMigration"
|
|
||||||
#define MPCheckpointReview @"MPCheckpointReview"
|
|
||||||
#define MPCheckpointApps @"MPCheckpointApps"
|
|
||||||
#define MPCheckpointApp @"MPCheckpointApp"
|
|
||||||
#define MPCheckpointEmergencyGenerator @"MPCheckpointEmergencyGenerator"
|
|
||||||
#define MPCheckpointLogs @"MPCheckpointLogs"
|
|
||||||
#define MPCheckpointStarted @"MPCheckpointStarted"
|
|
||||||
|
|
||||||
#define MPSignedInNotification @"MPSignedInNotification"
|
#define MPSignedInNotification @"MPSignedInNotification"
|
||||||
#define MPSignedOutNotification @"MPSignedOutNotification"
|
#define MPSignedOutNotification @"MPSignedOutNotification"
|
||||||
#define MPKeyForgottenNotification @"MPKeyForgottenNotification"
|
#define MPKeyForgottenNotification @"MPKeyForgottenNotification"
|
||||||
@@ -86,8 +57,3 @@ typedef NS_ENUM(NSUInteger, MPSiteType) {
|
|||||||
|
|
||||||
#define MPSitesImportedNotificationUserKey @"MPSitesImportedNotificationUserKey"
|
#define MPSitesImportedNotificationUserKey @"MPSitesImportedNotificationUserKey"
|
||||||
#define MPInconsistenciesFixResultUserKey @"MPInconsistenciesFixResultUserKey"
|
#define MPInconsistenciesFixResultUserKey @"MPInconsistenciesFixResultUserKey"
|
||||||
|
|
||||||
static void MPCheckpoint(NSString *checkpoint, NSDictionary *attributes) {
|
|
||||||
|
|
||||||
inf(@"%@: %@", checkpoint, attributes);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -8,13 +8,12 @@
|
|||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
#import "MPAppDelegate_Shared.h"
|
#import "MPAppDelegate_Shared.h"
|
||||||
#import "RHStatusItemView.h"
|
|
||||||
#import "MPPasswordWindowController.h"
|
#import "MPPasswordWindowController.h"
|
||||||
#import "MPInitialWindowController.h"
|
#import "MPInitialWindowController.h"
|
||||||
|
|
||||||
@interface MPMacAppDelegate : MPAppDelegate_Shared<NSApplicationDelegate>
|
@interface MPMacAppDelegate : MPAppDelegate_Shared<NSApplicationDelegate>
|
||||||
|
|
||||||
@property(nonatomic, strong) RHStatusItemView *statusView;
|
@property(nonatomic, strong) NSStatusItem *statusView;
|
||||||
@property(nonatomic, strong) MPPasswordWindowController *passwordWindowController;
|
@property(nonatomic, strong) MPPasswordWindowController *passwordWindowController;
|
||||||
@property(nonatomic, strong) MPInitialWindowController *initialWindowController;
|
@property(nonatomic, strong) MPInitialWindowController *initialWindowController;
|
||||||
@property(nonatomic, weak) IBOutlet NSMenuItem *lockItem;
|
@property(nonatomic, weak) IBOutlet NSMenuItem *lockItem;
|
||||||
|
|||||||
@@ -9,8 +9,6 @@
|
|||||||
#import "MPMacAppDelegate.h"
|
#import "MPMacAppDelegate.h"
|
||||||
#import "MPAppDelegate_Key.h"
|
#import "MPAppDelegate_Key.h"
|
||||||
#import "MPAppDelegate_Store.h"
|
#import "MPAppDelegate_Store.h"
|
||||||
#import "MPPasswordWindowController.h"
|
|
||||||
#import "PearlProfiler.h"
|
|
||||||
#import <Carbon/Carbon.h>
|
#import <Carbon/Carbon.h>
|
||||||
#import <ServiceManagement/ServiceManagement.h>
|
#import <ServiceManagement/ServiceManagement.h>
|
||||||
|
|
||||||
@@ -75,29 +73,37 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
|
|||||||
} forKeyPath:@"activeUser" options:0 context:nil];
|
} forKeyPath:@"activeUser" options:0 context:nil];
|
||||||
|
|
||||||
// Status item.
|
// Status item.
|
||||||
self.statusView = [[RHStatusItemView alloc] initWithStatusBarItem:
|
self.statusView = [[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength];
|
||||||
[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength]];
|
|
||||||
self.statusView.image = [NSImage imageNamed:@"menu-icon"];
|
self.statusView.image = [NSImage imageNamed:@"menu-icon"];
|
||||||
|
self.statusView.image.template = YES;
|
||||||
self.statusView.menu = self.statusMenu;
|
self.statusView.menu = self.statusMenu;
|
||||||
self.statusView.target = self;
|
self.statusView.target = self;
|
||||||
self.statusView.action = @selector( showMenu );
|
self.statusView.action = @selector( showMenu );
|
||||||
|
|
||||||
[[NSNotificationCenter defaultCenter] addObserverForName:USMStoreDidChangeNotification object:nil
|
PearlAddNotificationObserver( NSPersistentStoreCoordinatorStoresWillChangeNotification, self.storeCoordinator, nil,
|
||||||
queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
|
^(id self, NSNotification *note) {
|
||||||
[self updateUsers];
|
PearlMainQueue( ^{
|
||||||
}];
|
[self updateUsers];
|
||||||
[[NSNotificationCenter defaultCenter] addObserverForName:USMStoreDidImportChangesNotification object:nil
|
} );
|
||||||
queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
|
} );
|
||||||
[self updateUsers];
|
PearlAddNotificationObserver( NSPersistentStoreCoordinatorStoresDidChangeNotification, self.storeCoordinator, nil,
|
||||||
}];
|
^(id self, NSNotification *note) {
|
||||||
[[NSNotificationCenter defaultCenter] addObserverForName:MPCheckConfigNotification object:nil
|
PearlMainQueue( ^{
|
||||||
queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
|
[self updateUsers];
|
||||||
NSString *key = note.object;
|
} );
|
||||||
if (!key || [key isEqualToString:NSStringFromSelector( @selector( hidePasswords ) )])
|
} );
|
||||||
self.hidePasswordsItem.state = [[MPConfig get].hidePasswords boolValue]? NSOnState: NSOffState;
|
PearlAddNotificationObserver( MPCheckConfigNotification, nil, nil,
|
||||||
if (!key || [key isEqualToString:NSStringFromSelector( @selector( rememberLogin ) )])
|
^(MPMacAppDelegate *self, NSNotification *note) {
|
||||||
self.rememberPasswordItem.state = [[MPConfig get].rememberLogin boolValue]? NSOnState: NSOffState;
|
PearlMainQueue( ^{
|
||||||
}];
|
NSString *key = note.object;
|
||||||
|
if (!key || [key isEqualToString:NSStringFromSelector( @
|
||||||
|
selector( hidePasswords ) )])
|
||||||
|
self.hidePasswordsItem.state = [[MPConfig get].hidePasswords boolValue]? NSOnState: NSOffState;
|
||||||
|
if (!key || [key isEqualToString:NSStringFromSelector( @
|
||||||
|
selector( rememberLogin ) )])
|
||||||
|
self.rememberPasswordItem.state = [[MPConfig get].rememberLogin boolValue]? NSOnState: NSOffState;
|
||||||
|
} );
|
||||||
|
} );
|
||||||
[self updateUsers];
|
[self updateUsers];
|
||||||
|
|
||||||
// Global hotkey.
|
// Global hotkey.
|
||||||
@@ -178,12 +184,9 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
|
|||||||
NSArray *jobs = (__bridge_transfer NSArray *)SMCopyAllJobDictionaries( kSMDomainUserLaunchd );
|
NSArray *jobs = (__bridge_transfer NSArray *)SMCopyAllJobDictionaries( kSMDomainUserLaunchd );
|
||||||
|
|
||||||
for (NSDictionary *job in jobs)
|
for (NSDictionary *job in jobs)
|
||||||
if ([LOGIN_HELPER_BUNDLE_ID isEqualToString:[job objectForKey:@"Label"]]) {
|
if ([LOGIN_HELPER_BUNDLE_ID isEqualToString:job[@"Label"]])
|
||||||
dbg( @"loginItemEnabled: %@", @([[job objectForKey:@"OnDemand"] boolValue]) );
|
return [job[@"OnDemand"] boolValue];
|
||||||
return [[job objectForKey:@"OnDemand"] boolValue];
|
|
||||||
}
|
|
||||||
|
|
||||||
dbg( @"loginItemEnabled: not found" );
|
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -305,9 +308,9 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
|
|||||||
- (IBAction)togglePreference:(id)sender {
|
- (IBAction)togglePreference:(id)sender {
|
||||||
|
|
||||||
if (sender == self.hidePasswordsItem)
|
if (sender == self.hidePasswordsItem)
|
||||||
[MPConfig get].hidePasswords = [NSNumber numberWithBool:![[MPConfig get].hidePasswords boolValue]];
|
[MPConfig get].hidePasswords = @(![[MPConfig get].hidePasswords boolValue]);
|
||||||
if (sender == self.rememberPasswordItem)
|
if (sender == self.rememberPasswordItem)
|
||||||
[MPConfig get].rememberLogin = [NSNumber numberWithBool:![[MPConfig get].rememberLogin boolValue]];
|
[MPConfig get].rememberLogin = @(![[MPConfig get].rememberLogin boolValue]);
|
||||||
if (sender == self.openAtLoginItem)
|
if (sender == self.openAtLoginItem)
|
||||||
[self setLoginItemEnabled:self.openAtLoginItem.state != NSOnState];
|
[self setLoginItemEnabled:self.openAtLoginItem.state != NSOnState];
|
||||||
if (sender == self.savePasswordItem) {
|
if (sender == self.savePasswordItem) {
|
||||||
@@ -391,7 +394,7 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
|
|||||||
|
|
||||||
- (IBAction)showPopup:(id)sender {
|
- (IBAction)showPopup:(id)sender {
|
||||||
|
|
||||||
[self.statusView popUpMenu];
|
[self.statusView popUpStatusItemMenu:self.statusView.menu];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)showPasswordWindow:(id)sender {
|
- (IBAction)showPasswordWindow:(id)sender {
|
||||||
@@ -409,13 +412,10 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Don't show window if we weren't already running (ie. if we haven't been activated before).
|
// Don't show window if we weren't already running (ie. if we haven't been activated before).
|
||||||
PearlProfiler *profiler = [PearlProfiler profilerForTask:@"passwordWindowController"];
|
|
||||||
if (!self.passwordWindowController)
|
if (!self.passwordWindowController)
|
||||||
self.passwordWindowController = [[MPPasswordWindowController alloc] initWithWindowNibName:@"MPPasswordWindowController"];
|
self.passwordWindowController = [[MPPasswordWindowController alloc] initWithWindowNibName:@"MPPasswordWindowController"];
|
||||||
[profiler finishJob:@"init"];
|
|
||||||
|
|
||||||
[self.passwordWindowController showWindow:self];
|
[self.passwordWindowController showWindow:self];
|
||||||
[profiler finishJob:@"show"];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - Private
|
#pragma mark - Private
|
||||||
@@ -463,12 +463,14 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
|
|||||||
NSString *exportedSites = [self exportSitesRevealPasswords:revealPasswords];
|
NSString *exportedSites = [self exportSitesRevealPasswords:revealPasswords];
|
||||||
[[[NSFileCoordinator alloc] initWithFilePresenter:nil] coordinateWritingItemAtURL:savePanel.URL options:0 error:&coordinateError
|
[[[NSFileCoordinator alloc] initWithFilePresenter:nil] coordinateWritingItemAtURL:savePanel.URL options:0 error:&coordinateError
|
||||||
byAccessor:^(NSURL *newURL) {
|
byAccessor:^(NSURL *newURL) {
|
||||||
NSError *writeError = nil;
|
NSError *writeError = nil;
|
||||||
if (![exportedSites writeToURL:newURL atomically:NO encoding:NSUTF8StringEncoding error:&writeError])
|
if (![exportedSites writeToURL:newURL atomically:NO
|
||||||
PearlMainQueue( ^{
|
encoding:NSUTF8StringEncoding
|
||||||
[[NSAlert alertWithError:writeError] runModal];
|
error:&writeError])
|
||||||
} );
|
PearlMainQueue( ^{
|
||||||
}];
|
[[NSAlert alertWithError:writeError] runModal];
|
||||||
|
} );
|
||||||
|
}];
|
||||||
if (coordinateError)
|
if (coordinateError)
|
||||||
PearlMainQueue( ^{
|
PearlMainQueue( ^{
|
||||||
[[NSAlert alertWithError:coordinateError] runModal];
|
[[NSAlert alertWithError:coordinateError] runModal];
|
||||||
@@ -543,7 +545,7 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
|
|||||||
|
|
||||||
[self updateMenuItems];
|
[self updateMenuItems];
|
||||||
|
|
||||||
[self.statusView popUpMenu];
|
[self.statusView popUpStatusItemMenu:self.statusView.menu];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)updateMenuItems {
|
- (void)updateMenuItems {
|
||||||
@@ -596,30 +598,6 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - UbiquityStoreManagerDelegate
|
|
||||||
|
|
||||||
- (void)ubiquityStoreManager:(UbiquityStoreManager *)manager didLoadStoreForCoordinator:(NSPersistentStoreCoordinator *)coordinator
|
|
||||||
isCloud:(BOOL)isCloudStore {
|
|
||||||
|
|
||||||
[super ubiquityStoreManager:manager didLoadStoreForCoordinator:coordinator isCloud:isCloudStore];
|
|
||||||
|
|
||||||
if (isCloudStore) {
|
|
||||||
NSAlert *alert = [NSAlert new];
|
|
||||||
alert.messageText = @"iCloud Support Deprecated";
|
|
||||||
alert.informativeText = @"Master Password is moving away from iCloud due to limited platform support and reliability issues. "
|
|
||||||
@"\n\nMaster Password's generated passwords do not require syncing. "
|
|
||||||
@"Your sites will always have the same passwords on all your devices. "
|
|
||||||
@"\n\niCloud continues to work for now but will be deactivated in a future update. "
|
|
||||||
@"Disable iCloud now to copy your iCloud sites to your device and avoid losing them when iCloud becomes discontinued.";
|
|
||||||
[alert addButtonWithTitle:@"Disable iCloud"];
|
|
||||||
[alert addButtonWithTitle:@"Ignore For Now"];
|
|
||||||
|
|
||||||
NSInteger response = [alert runModal];
|
|
||||||
if (response == NSAlertFirstButtonReturn)
|
|
||||||
[[self storeManager] migrateCloudToLocal];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark - PearlConfigDelegate
|
#pragma mark - PearlConfigDelegate
|
||||||
|
|
||||||
- (void)didUpdateConfigForKey:(SEL)configKey fromValue:(id)oldValue {
|
- (void)didUpdateConfigForKey:(SEL)configKey fromValue:(id)oldValue {
|
||||||
|
|||||||
23
MasterPassword/ObjC/Mac/MPNoStateButton.h
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/**
|
||||||
|
* 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 <lhunath@lyndir.com>
|
||||||
|
* @license http://www.gnu.org/licenses/lgpl-3.0.txt
|
||||||
|
*/
|
||||||
|
|
||||||
|
//
|
||||||
|
// MPNoStateButton.h
|
||||||
|
// MPNoStateButton
|
||||||
|
//
|
||||||
|
// Created by lhunath on 14-10-27.
|
||||||
|
// Copyright, lhunath (Maarten Billemont) 2014. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
|
||||||
|
@interface MPNoStateButtonCell : NSButtonCell
|
||||||
|
@end
|
||||||
31
MasterPassword/ObjC/Mac/MPNoStateButton.m
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
/**
|
||||||
|
* 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 <lhunath@lyndir.com>
|
||||||
|
* @license http://www.gnu.org/licenses/lgpl-3.0.txt
|
||||||
|
*/
|
||||||
|
|
||||||
|
//
|
||||||
|
// MPNoStateButton.h
|
||||||
|
// MPNoStateButton
|
||||||
|
//
|
||||||
|
// Created by lhunath on 14-10-27.
|
||||||
|
// Copyright, lhunath (Maarten Billemont) 2014. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MPNoStateButton.h"
|
||||||
|
|
||||||
|
|
||||||
|
@implementation MPNoStateButtonCell {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setState:(NSInteger)state {
|
||||||
|
|
||||||
|
[super setState:NSOnState];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
@@ -20,9 +20,7 @@
|
|||||||
#import "MPPasswordWindowController.h"
|
#import "MPPasswordWindowController.h"
|
||||||
#import "MPMacAppDelegate.h"
|
#import "MPMacAppDelegate.h"
|
||||||
#import "MPAppDelegate_Store.h"
|
#import "MPAppDelegate_Store.h"
|
||||||
#import "MPSiteModel.h"
|
|
||||||
#import "MPAppDelegate_Key.h"
|
#import "MPAppDelegate_Key.h"
|
||||||
#import "PearlProfiler.h"
|
|
||||||
|
|
||||||
#define MPAlertIncorrectMP @"MPAlertIncorrectMP"
|
#define MPAlertIncorrectMP @"MPAlertIncorrectMP"
|
||||||
#define MPAlertChangeMP @"MPAlertChangeMP"
|
#define MPAlertChangeMP @"MPAlertChangeMP"
|
||||||
@@ -34,11 +32,11 @@
|
|||||||
|
|
||||||
@interface MPPasswordWindowController()
|
@interface MPPasswordWindowController()
|
||||||
|
|
||||||
@property(nonatomic, copy) NSString *currentSiteText;
|
|
||||||
@property(nonatomic, strong) CAGradientLayer *siteGradient;
|
@property(nonatomic, strong) CAGradientLayer *siteGradient;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation MPPasswordWindowController { BOOL _skipTextChange; }
|
@implementation MPPasswordWindowController
|
||||||
|
|
||||||
#pragma mark - Life
|
#pragma mark - Life
|
||||||
|
|
||||||
@@ -56,31 +54,33 @@
|
|||||||
// }];
|
// }];
|
||||||
[[NSNotificationCenter defaultCenter] addObserverForName:NSWindowDidBecomeKeyNotification object:self.window
|
[[NSNotificationCenter defaultCenter] addObserverForName:NSWindowDidBecomeKeyNotification object:self.window
|
||||||
queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
|
queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
|
||||||
[self fadeIn];
|
[self fadeIn];
|
||||||
[self updateUser];
|
[self updateUser];
|
||||||
}];
|
}];
|
||||||
[[NSNotificationCenter defaultCenter] addObserverForName:NSWindowWillCloseNotification object:self.window
|
[[NSNotificationCenter defaultCenter] addObserverForName:NSWindowWillCloseNotification object:self.window
|
||||||
queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
|
queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
|
||||||
NSWindow *sheet = [self.window attachedSheet];
|
NSWindow *sheet = [self.window attachedSheet];
|
||||||
if (sheet)
|
if (sheet)
|
||||||
[NSApp endSheet:sheet];
|
[NSApp endSheet:sheet];
|
||||||
}];
|
}];
|
||||||
[[NSNotificationCenter defaultCenter] addObserverForName:NSApplicationWillResignActiveNotification object:nil
|
[[NSNotificationCenter defaultCenter] addObserverForName:NSApplicationWillResignActiveNotification object:nil
|
||||||
queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
|
queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
|
||||||
|
#ifndef DEBUG
|
||||||
[self fadeOut];
|
[self fadeOut];
|
||||||
}];
|
#endif
|
||||||
|
}];
|
||||||
[[NSNotificationCenter defaultCenter] addObserverForName:MPSignedInNotification object:nil
|
[[NSNotificationCenter defaultCenter] addObserverForName:MPSignedInNotification object:nil
|
||||||
queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
|
queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
|
||||||
[self updateUser];
|
[self updateUser];
|
||||||
}];
|
}];
|
||||||
[[NSNotificationCenter defaultCenter] addObserverForName:MPSignedOutNotification object:nil
|
[[NSNotificationCenter defaultCenter] addObserverForName:MPSignedOutNotification object:nil
|
||||||
queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
|
queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
|
||||||
[self updateUser];
|
[self updateUser];
|
||||||
}];
|
}];
|
||||||
[self observeKeyPath:@"sitesController.selection"
|
[self observeKeyPath:@"sitesController.selection"
|
||||||
withBlock:^(id from, id to, NSKeyValueChange cause, id _self) {
|
withBlock:^(id from, id to, NSKeyValueChange cause, id _self) {
|
||||||
[_self updateSelection];
|
[_self updateSelection];
|
||||||
}];
|
}];
|
||||||
|
|
||||||
NSSearchFieldCell *siteFieldCell = self.siteField.cell;
|
NSSearchFieldCell *siteFieldCell = self.siteField.cell;
|
||||||
siteFieldCell.searchButtonCell = nil;
|
siteFieldCell.searchButtonCell = nil;
|
||||||
@@ -118,7 +118,6 @@
|
|||||||
|
|
||||||
- (void)doCommandBySelector:(SEL)commandSelector {
|
- (void)doCommandBySelector:(SEL)commandSelector {
|
||||||
|
|
||||||
dbg( @"doCommandBySelector: %@", NSStringFromSelector( commandSelector ) );
|
|
||||||
[self handleCommand:commandSelector];
|
[self handleCommand:commandSelector];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,12 +125,9 @@
|
|||||||
|
|
||||||
- (BOOL)control:(NSControl *)control textView:(NSTextView *)fieldEditor doCommandBySelector:(SEL)commandSelector {
|
- (BOOL)control:(NSControl *)control textView:(NSTextView *)fieldEditor doCommandBySelector:(SEL)commandSelector {
|
||||||
|
|
||||||
dbg( @"@control:%@ textView:%@ doCommandBySelector:%@", control, fieldEditor, NSStringFromSelector( commandSelector ) );
|
|
||||||
if (control == self.siteField) {
|
if (control == self.siteField) {
|
||||||
if ([NSStringFromSelector( commandSelector ) rangeOfString:@"delete"].location == 0) {
|
if ([NSStringFromSelector( commandSelector ) rangeOfString:@"delete"].location == 0)
|
||||||
_skipTextChange = YES;
|
|
||||||
return NO;
|
return NO;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (control == self.securePasswordField || control == self.revealPasswordField) {
|
if (control == self.securePasswordField || control == self.revealPasswordField) {
|
||||||
if (commandSelector == @selector( insertNewline: ))
|
if (commandSelector == @selector( insertNewline: ))
|
||||||
@@ -178,7 +174,6 @@
|
|||||||
|
|
||||||
- (BOOL)textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector {
|
- (BOOL)textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector {
|
||||||
|
|
||||||
dbg( @"textView:%@doCommandBySelector:%@", textView, NSStringFromSelector( commandSelector ) );
|
|
||||||
return [self handleCommand:commandSelector];
|
return [self handleCommand:commandSelector];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,9 +226,9 @@
|
|||||||
// "Create" button.
|
// "Create" button.
|
||||||
[[MPMacAppDelegate get] addSiteNamed:[self.siteField stringValue] completion:
|
[[MPMacAppDelegate get] addSiteNamed:[self.siteField stringValue] completion:
|
||||||
^(MPSiteEntity *site, NSManagedObjectContext *context) {
|
^(MPSiteEntity *site, NSManagedObjectContext *context) {
|
||||||
if (site)
|
if (site)
|
||||||
PearlMainQueue( ^{ [self updateSites]; } );
|
PearlMainQueue( ^{ [self updateSites]; } );
|
||||||
}];
|
}];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@@ -309,11 +304,6 @@
|
|||||||
|
|
||||||
#pragma mark - State
|
#pragma mark - State
|
||||||
|
|
||||||
- (NSString *)query {
|
|
||||||
|
|
||||||
return [self.siteField.stringValue stringByReplacingCharactersInRange:self.siteField.currentEditor.selectedRange withString:@""]?: @"";
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)insertObject:(MPSiteModel *)model inSitesAtIndex:(NSUInteger)index {
|
- (void)insertObject:(MPSiteModel *)model inSitesAtIndex:(NSUInteger)index {
|
||||||
|
|
||||||
[self.sites insertObject:model atIndex:index];
|
[self.sites insertObject:model atIndex:index];
|
||||||
@@ -343,7 +333,7 @@
|
|||||||
[alert addButtonWithTitle:@"Delete"];
|
[alert addButtonWithTitle:@"Delete"];
|
||||||
[alert addButtonWithTitle:@"Cancel"];
|
[alert addButtonWithTitle:@"Cancel"];
|
||||||
[alert setMessageText:@"Delete Site?"];
|
[alert setMessageText:@"Delete Site?"];
|
||||||
[alert setInformativeText:strf( @"Do you want to delete the site named:\n\n%@", self.selectedSite.siteName )];
|
[alert setInformativeText:strf( @"Do you want to delete the site named:\n\n%@", self.selectedSite.name )];
|
||||||
[alert beginSheetModalForWindow:self.window modalDelegate:self
|
[alert beginSheetModalForWindow:self.window modalDelegate:self
|
||||||
didEndSelector:@selector( alertDidEnd:returnCode:contextInfo: ) contextInfo:MPAlertDeleteSite];
|
didEndSelector:@selector( alertDidEnd:returnCode:contextInfo: ) contextInfo:MPAlertDeleteSite];
|
||||||
}
|
}
|
||||||
@@ -354,7 +344,7 @@
|
|||||||
[alert addButtonWithTitle:@"Save"];
|
[alert addButtonWithTitle:@"Save"];
|
||||||
[alert addButtonWithTitle:@"Cancel"];
|
[alert addButtonWithTitle:@"Cancel"];
|
||||||
[alert setMessageText:@"Change Login Name"];
|
[alert setMessageText:@"Change Login Name"];
|
||||||
[alert setInformativeText:strf( @"Enter the login name for: %@", self.selectedSite.siteName )];
|
[alert setInformativeText:strf( @"Enter the login name for: %@", self.selectedSite.name )];
|
||||||
NSTextField *loginField = [[NSTextField alloc] initWithFrame:NSMakeRect( 0, 0, 200, 22 )];
|
NSTextField *loginField = [[NSTextField alloc] initWithFrame:NSMakeRect( 0, 0, 200, 22 )];
|
||||||
loginField.stringValue = self.selectedSite.loginName?: @"";
|
loginField.stringValue = self.selectedSite.loginName?: @"";
|
||||||
[loginField selectText:self];
|
[loginField selectText:self];
|
||||||
@@ -388,7 +378,7 @@
|
|||||||
[alert addButtonWithTitle:@"Save"];
|
[alert addButtonWithTitle:@"Save"];
|
||||||
[alert addButtonWithTitle:@"Cancel"];
|
[alert addButtonWithTitle:@"Cancel"];
|
||||||
[alert setMessageText:@"Change Password"];
|
[alert setMessageText:@"Change Password"];
|
||||||
[alert setInformativeText:strf( @"Enter the new password for: %@", self.selectedSite.siteName )];
|
[alert setInformativeText:strf( @"Enter the new password for: %@", self.selectedSite.name )];
|
||||||
[alert setAccessoryView:[[NSSecureTextField alloc] initWithFrame:NSMakeRect( 0, 0, 200, 22 )]];
|
[alert setAccessoryView:[[NSSecureTextField alloc] initWithFrame:NSMakeRect( 0, 0, 200, 22 )]];
|
||||||
[alert layout];
|
[alert layout];
|
||||||
[alert beginSheetModalForWindow:self.window modalDelegate:self
|
[alert beginSheetModalForWindow:self.window modalDelegate:self
|
||||||
@@ -404,8 +394,9 @@
|
|||||||
MPSiteType type = [types[t] unsignedIntegerValue];
|
MPSiteType type = [types[t] unsignedIntegerValue];
|
||||||
NSString *title = [site.algorithm nameOfType:type];
|
NSString *title = [site.algorithm nameOfType:type];
|
||||||
if (type & MPSiteTypeClassGenerated)
|
if (type & MPSiteTypeClassGenerated)
|
||||||
title = [site.algorithm generatePasswordForSiteNamed:site.siteName ofType:type
|
title = [site.algorithm generatePasswordForSiteNamed:site.name ofType:type
|
||||||
withCounter:site.counter usingKey:[MPMacAppDelegate get].key];
|
withCounter:site.counter
|
||||||
|
usingKey:[MPMacAppDelegate get].key];
|
||||||
|
|
||||||
NSButtonCell *cell = [self.passwordTypesMatrix cellAtRow:(NSInteger)t column:0];
|
NSButtonCell *cell = [self.passwordTypesMatrix cellAtRow:(NSInteger)t column:0];
|
||||||
cell.tag = type;
|
cell.tag = type;
|
||||||
@@ -417,7 +408,7 @@
|
|||||||
[alert addButtonWithTitle:@"Save"];
|
[alert addButtonWithTitle:@"Save"];
|
||||||
[alert addButtonWithTitle:@"Cancel"];
|
[alert addButtonWithTitle:@"Cancel"];
|
||||||
[alert setMessageText:@"Change Password Type"];
|
[alert setMessageText:@"Change Password Type"];
|
||||||
[alert setInformativeText:strf( @"Choose a new password type for: %@", site.siteName )];
|
[alert setInformativeText:strf( @"Choose a new password type for: %@", site.name )];
|
||||||
[alert setAccessoryView:self.passwordTypesBox];
|
[alert setAccessoryView:self.passwordTypesBox];
|
||||||
[alert layout];
|
[alert layout];
|
||||||
[alert beginSheetModalForWindow:self.window modalDelegate:self
|
[alert beginSheetModalForWindow:self.window modalDelegate:self
|
||||||
@@ -460,9 +451,9 @@
|
|||||||
NSUserNotification *notification = [NSUserNotification new];
|
NSUserNotification *notification = [NSUserNotification new];
|
||||||
notification.title = @"Password Copied";
|
notification.title = @"Password Copied";
|
||||||
if (selectedSite.loginName.length)
|
if (selectedSite.loginName.length)
|
||||||
notification.subtitle = strf( @"%@ at %@", selectedSite.loginName, selectedSite.siteName );
|
notification.subtitle = strf( @"%@ at %@", selectedSite.loginName, selectedSite.name );
|
||||||
else
|
else
|
||||||
notification.subtitle = selectedSite.siteName;
|
notification.subtitle = selectedSite.name;
|
||||||
[[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification];
|
[[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -511,15 +502,24 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PearlProfiler *profiler = [PearlProfiler profilerForTask:@"updateSites"];
|
static NSRegularExpression *fuzzyRE;
|
||||||
NSString *query = [self query];
|
static dispatch_once_t once = 0;
|
||||||
[profiler finishJob:@"query"];
|
dispatch_once( &once, ^{
|
||||||
|
fuzzyRE = [NSRegularExpression regularExpressionWithPattern:@"(.)" options:0 error:nil];
|
||||||
|
} );
|
||||||
|
|
||||||
|
NSString *queryString = self.siteField.stringValue;
|
||||||
|
NSString *queryPattern = [queryString stringByReplacingMatchesOfExpression:fuzzyRE withTemplate:@"*$1*"];
|
||||||
|
NSMutableArray *fuzzyGroups = [NSMutableArray new];
|
||||||
|
[fuzzyRE enumerateMatchesInString:queryString options:0 range:NSMakeRange( 0, queryString.length )
|
||||||
|
usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
|
||||||
|
[fuzzyGroups addObject:[queryString substringWithRange:result.range] ];
|
||||||
|
}];
|
||||||
[MPMacAppDelegate managedObjectContextPerformBlockAndWait:^(NSManagedObjectContext *context) {
|
[MPMacAppDelegate managedObjectContextPerformBlockAndWait:^(NSManagedObjectContext *context) {
|
||||||
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass( [MPSiteEntity class] )];
|
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass( [MPSiteEntity class] )];
|
||||||
fetchRequest.sortDescriptors = [NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"lastUsed" ascending:NO]];
|
fetchRequest.sortDescriptors = @[ [[NSSortDescriptor alloc] initWithKey:@"lastUsed" ascending:NO] ];
|
||||||
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"(%@ == '' OR name BEGINSWITH[cd] %@) AND user == %@",
|
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"(%@ == '' OR name LIKE[cd] %@) AND user == %@",
|
||||||
query, query, [[MPMacAppDelegate get] activeUserInContext:context]];
|
queryPattern, queryPattern, [[MPMacAppDelegate get] activeUserInContext:context]];
|
||||||
[profiler finishJob:@"setup fetch"];
|
|
||||||
|
|
||||||
NSError *error = nil;
|
NSError *error = nil;
|
||||||
NSArray *siteResults = [context executeFetchRequest:fetchRequest error:&error];
|
NSArray *siteResults = [context executeFetchRequest:fetchRequest error:&error];
|
||||||
@@ -527,43 +527,17 @@
|
|||||||
err( @"While fetching sites for completion: %@", [error fullDescription] );
|
err( @"While fetching sites for completion: %@", [error fullDescription] );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
[profiler finishJob:@"do fetch"];
|
|
||||||
|
|
||||||
NSMutableArray *newSites = [NSMutableArray arrayWithCapacity:[siteResults count]];
|
NSMutableArray *newSites = [NSMutableArray arrayWithCapacity:[siteResults count]];
|
||||||
for (MPSiteEntity *site in siteResults)
|
for (MPSiteEntity *site in siteResults)
|
||||||
[newSites addObject:[[MPSiteModel alloc] initWithEntity:site]];
|
[newSites addObject:[[MPSiteModel alloc] initWithEntity:site fuzzyGroups:fuzzyGroups]];
|
||||||
[profiler finishJob:@"make models"];
|
|
||||||
self.sites = newSites;
|
self.sites = newSites;
|
||||||
[profiler finishJob:@"update sites"];
|
|
||||||
}];
|
}];
|
||||||
[profiler finishJob:@"done"];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)updateSelection {
|
- (void)updateSelection {
|
||||||
|
|
||||||
if (_skipTextChange) {
|
|
||||||
_skipTextChange = NO;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
NSString *siteName = self.selectedSite.siteName;
|
|
||||||
if (!siteName)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if ([self.window isKeyWindow] && [self.siteField isEqual:[self.window firstResponder]]) {
|
|
||||||
NSRange siteNameQueryRange = [siteName rangeOfString:[self query]];
|
|
||||||
self.siteField.stringValue = siteName;
|
|
||||||
|
|
||||||
if (siteNameQueryRange.location == 0)
|
|
||||||
self.siteField.currentEditor.selectedRange =
|
|
||||||
NSMakeRange( siteNameQueryRange.length, siteName.length - siteNameQueryRange.length );
|
|
||||||
}
|
|
||||||
|
|
||||||
[self.siteTable scrollRowToVisible:(NSInteger)self.sitesController.selectionIndex];
|
[self.siteTable scrollRowToVisible:(NSInteger)self.sitesController.selectionIndex];
|
||||||
[self updateGradient];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)updateGradient {
|
|
||||||
|
|
||||||
NSView *siteScrollView = self.siteTable.superview.superview;
|
NSView *siteScrollView = self.siteTable.superview.superview;
|
||||||
NSRect selectedCellFrame = [self.siteTable frameOfCellAtColumn:0 row:((NSInteger)self.sitesController.selectionIndex)];
|
NSRect selectedCellFrame = [self.siteTable frameOfCellAtColumn:0 row:((NSInteger)self.sitesController.selectionIndex)];
|
||||||
@@ -590,7 +564,7 @@
|
|||||||
|
|
||||||
- (void)copyContent:(NSString *)content {
|
- (void)copyContent:(NSString *)content {
|
||||||
|
|
||||||
[[NSPasteboard generalPasteboard] declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
|
[[NSPasteboard generalPasteboard] declareTypes:@[ NSStringPboardType ] owner:nil];
|
||||||
if (![[NSPasteboard generalPasteboard] setString:content forType:NSPasteboardTypeString]) {
|
if (![[NSPasteboard generalPasteboard] setString:content forType:NSPasteboardTypeString]) {
|
||||||
wrn( @"Couldn't copy password to pasteboard." );
|
wrn( @"Couldn't copy password to pasteboard." );
|
||||||
return;
|
return;
|
||||||
@@ -607,7 +581,6 @@
|
|||||||
if ([self.window isOnActiveSpace] && self.window.alphaValue)
|
if ([self.window isOnActiveSpace] && self.window.alphaValue)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
PearlProfiler *profiler = [PearlProfiler profilerForTask:@"fadeIn"];
|
|
||||||
CGDirectDisplayID displayID = [self.window.screen.deviceDescription[@"NSScreenNumber"] unsignedIntValue];
|
CGDirectDisplayID displayID = [self.window.screen.deviceDescription[@"NSScreenNumber"] unsignedIntValue];
|
||||||
CGImageRef capturedImage = CGDisplayCreateImage( displayID );
|
CGImageRef capturedImage = CGDisplayCreateImage( displayID );
|
||||||
if (!capturedImage || CGImageGetWidth( capturedImage ) <= 1) {
|
if (!capturedImage || CGImageGetWidth( capturedImage ) <= 1) {
|
||||||
@@ -615,11 +588,9 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
[profiler finishJob:@"captured window: %d, on screen: %@", displayID, self.window.screen.deviceDescription];
|
|
||||||
NSImage *screenImage = [[NSImage alloc] initWithCGImage:capturedImage size:NSMakeSize(
|
NSImage *screenImage = [[NSImage alloc] initWithCGImage:capturedImage size:NSMakeSize(
|
||||||
CGImageGetWidth( capturedImage ) / self.window.backingScaleFactor,
|
CGImageGetWidth( capturedImage ) / self.window.backingScaleFactor,
|
||||||
CGImageGetHeight( capturedImage ) / self.window.backingScaleFactor )];
|
CGImageGetHeight( capturedImage ) / self.window.backingScaleFactor )];
|
||||||
[profiler finishJob:@"image size: %@, bytes: %ld", NSStringFromSize( screenImage.size ), screenImage.TIFFRepresentation.length];
|
|
||||||
|
|
||||||
NSImage *smallImage = [[NSImage alloc] initWithSize:NSMakeSize(
|
NSImage *smallImage = [[NSImage alloc] initWithSize:NSMakeSize(
|
||||||
CGImageGetWidth( capturedImage ) / 20,
|
CGImageGetWidth( capturedImage ) / 20,
|
||||||
@@ -631,16 +602,12 @@
|
|||||||
operation:NSCompositeSourceOver
|
operation:NSCompositeSourceOver
|
||||||
fraction:1.0];
|
fraction:1.0];
|
||||||
[smallImage unlockFocus];
|
[smallImage unlockFocus];
|
||||||
[profiler finishJob:@"small image size: %@, bytes: %ld", NSStringFromSize( screenImage.size ), screenImage.TIFFRepresentation.length];
|
|
||||||
|
|
||||||
self.blurView.image = smallImage;
|
self.blurView.image = smallImage;
|
||||||
[profiler finishJob:@"assigned image"];
|
|
||||||
|
|
||||||
[self.window setFrame:self.window.screen.frame display:YES];
|
[self.window setFrame:self.window.screen.frame display:YES];
|
||||||
[profiler finishJob:@"assigned frame"];
|
|
||||||
[NSAnimationContext currentContext].timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
|
[NSAnimationContext currentContext].timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
|
||||||
self.window.animator.alphaValue = 1.0;
|
self.window.animator.alphaValue = 1.0;
|
||||||
[profiler finishJob:@"animating window"];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)fadeOut {
|
- (void)fadeOut {
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="5056" systemVersion="13E28" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6250" systemVersion="14A389" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment defaultVersion="1080" identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="5056"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6250"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="MPPasswordWindowController">
|
<customObject id="-2" userLabel="File's Owner" customClass="MPPasswordWindowController">
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="blurView" destination="Bwc-sd-6gm" id="wNV-0x-LJn"/>
|
<outlet property="blurView" destination="Bwc-sd-6gm" id="wNV-0x-LJn"/>
|
||||||
<outlet property="sitesController" destination="mcS-ik-b0n" id="cdF-BL-lfg"/>
|
|
||||||
<outlet property="inputLabel" destination="OnR-s6-d4P" id="p6G-Ut-cdu"/>
|
<outlet property="inputLabel" destination="OnR-s6-d4P" id="p6G-Ut-cdu"/>
|
||||||
<outlet property="passwordTypesBox" destination="bZe-7q-i6q" id="Ai3-pt-i6K"/>
|
<outlet property="passwordTypesBox" destination="bZe-7q-i6q" id="Ai3-pt-i6K"/>
|
||||||
<outlet property="passwordTypesMatrix" destination="3fr-Fd-pxx" id="T8g-mS-lxP"/>
|
<outlet property="passwordTypesMatrix" destination="3fr-Fd-pxx" id="T8g-mS-lxP"/>
|
||||||
@@ -17,11 +16,12 @@
|
|||||||
<outlet property="securePasswordField" destination="iGR-wo-ual" id="DGh-5i-3u4"/>
|
<outlet property="securePasswordField" destination="iGR-wo-ual" id="DGh-5i-3u4"/>
|
||||||
<outlet property="siteField" destination="CnS-iI-dhr" id="Ogo-lS-dcT"/>
|
<outlet property="siteField" destination="CnS-iI-dhr" id="Ogo-lS-dcT"/>
|
||||||
<outlet property="siteTable" destination="xvJ-5c-vDp" id="ClP-j8-DyI"/>
|
<outlet property="siteTable" destination="xvJ-5c-vDp" id="ClP-j8-DyI"/>
|
||||||
|
<outlet property="sitesController" destination="mcS-ik-b0n" id="cdF-BL-lfg"/>
|
||||||
<outlet property="window" destination="QvC-M9-y7g" id="dPy-F3-9rn"/>
|
<outlet property="window" destination="QvC-M9-y7g" id="dPy-F3-9rn"/>
|
||||||
</connections>
|
</connections>
|
||||||
</customObject>
|
</customObject>
|
||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
<customObject id="-3" userLabel="Application"/>
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
<window title="Master Password" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hasShadow="NO" oneShot="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" animationBehavior="default" id="QvC-M9-y7g" customClass="MPPasswordWindow">
|
<window title="Master Password" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hasShadow="NO" oneShot="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" animationBehavior="default" id="QvC-M9-y7g" customClass="MPPasswordWindow">
|
||||||
<windowCollectionBehavior key="collectionBehavior" transient="YES" ignoresCycle="YES" fullScreenAuxiliary="YES"/>
|
<windowCollectionBehavior key="collectionBehavior" transient="YES" ignoresCycle="YES" fullScreenAuxiliary="YES"/>
|
||||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" bottomStrut="YES"/>
|
<windowPositionMask key="initialPositionMask" leftStrut="YES" bottomStrut="YES"/>
|
||||||
@@ -32,18 +32,24 @@
|
|||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Bwc-sd-6gm" userLabel="Screen Capture">
|
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Bwc-sd-6gm" userLabel="Screen Capture">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="640" height="560"/>
|
<rect key="frame" x="-80" y="-80" width="800" height="720"/>
|
||||||
<contentFilters>
|
<contentFilters>
|
||||||
<ciFilter name="CIGaussianBlur">
|
<ciFilter name="CIGaussianBlur">
|
||||||
<configuration>
|
<configuration>
|
||||||
<null key="inputImage"/>
|
<null key="inputImage"/>
|
||||||
<real key="inputRadius" value="40"/>
|
<real key="inputRadius" value="30"/>
|
||||||
</configuration>
|
</configuration>
|
||||||
</ciFilter>
|
</ciFilter>
|
||||||
<ciFilter name="CISepiaTone">
|
<ciFilter name="CISepiaTone">
|
||||||
<configuration>
|
<configuration>
|
||||||
<null key="inputImage"/>
|
<null key="inputImage"/>
|
||||||
<real key="inputIntensity" value="0.40000000000000002"/>
|
<real key="inputIntensity" value="0.20000000000000001"/>
|
||||||
|
</configuration>
|
||||||
|
</ciFilter>
|
||||||
|
<ciFilter name="CIExposureAdjust">
|
||||||
|
<configuration>
|
||||||
|
<real key="inputEV" value="0.0"/>
|
||||||
|
<null key="inputImage"/>
|
||||||
</configuration>
|
</configuration>
|
||||||
</ciFilter>
|
</ciFilter>
|
||||||
</contentFilters>
|
</contentFilters>
|
||||||
@@ -51,13 +57,13 @@
|
|||||||
</imageView>
|
</imageView>
|
||||||
<secureTextField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="iGR-wo-ual" userLabel="Secure Master Password">
|
<secureTextField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="iGR-wo-ual" userLabel="Secure Master Password">
|
||||||
<rect key="frame" x="18" y="258" width="604" height="44"/>
|
<rect key="frame" x="18" y="258" width="604" height="44"/>
|
||||||
<shadow key="shadow" blurRadius="1">
|
<shadow key="shadow" blurRadius="0.5">
|
||||||
<size key="offset" width="0.0" height="1"/>
|
<size key="offset" width="0.0" height="1"/>
|
||||||
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</shadow>
|
</shadow>
|
||||||
<secureTextFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" focusRingType="none" alignment="center" usesSingleLineMode="YES" id="NcX-1Z-2OC">
|
<secureTextFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" focusRingType="none" alignment="center" usesSingleLineMode="YES" id="NcX-1Z-2OC">
|
||||||
<font key="font" metaFont="system" size="36"/>
|
<font key="font" metaFont="system" size="36"/>
|
||||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||||
<allowedInputSourceLocales>
|
<allowedInputSourceLocales>
|
||||||
<string>NSAllRomanInputSourcesLocaleIdentifier</string>
|
<string>NSAllRomanInputSourcesLocaleIdentifier</string>
|
||||||
@@ -86,13 +92,13 @@
|
|||||||
</secureTextField>
|
</secureTextField>
|
||||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="v80-wd-hUR" userLabel="Reveal Master Password">
|
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="v80-wd-hUR" userLabel="Reveal Master Password">
|
||||||
<rect key="frame" x="18" y="258" width="604" height="44"/>
|
<rect key="frame" x="18" y="258" width="604" height="44"/>
|
||||||
<shadow key="shadow" blurRadius="1">
|
<shadow key="shadow" blurRadius="0.5">
|
||||||
<size key="offset" width="0.0" height="1"/>
|
<size key="offset" width="0.0" height="1"/>
|
||||||
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</shadow>
|
</shadow>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" state="on" focusRingType="none" alignment="center" placeholderString="" usesSingleLineMode="YES" id="gRw-5C-YUN">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" state="on" focusRingType="none" alignment="center" placeholderString="" usesSingleLineMode="YES" id="gRw-5C-YUN">
|
||||||
<font key="font" metaFont="system" size="36"/>
|
<font key="font" metaFont="system" size="36"/>
|
||||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||||
<allowedInputSourceLocales>
|
<allowedInputSourceLocales>
|
||||||
<string>NSAllRomanInputSourcesLocaleIdentifier</string>
|
<string>NSAllRomanInputSourcesLocaleIdentifier</string>
|
||||||
@@ -123,11 +129,11 @@
|
|||||||
<outlet property="delegate" destination="-2" id="2nK-Rc-uyR"/>
|
<outlet property="delegate" destination="-2" id="2nK-Rc-uyR"/>
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="R46-fx-n14" userLabel="Reset Master Password">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="R46-fx-n14" userLabel="Reset Button">
|
||||||
<rect key="frame" x="242" y="19" width="156" height="20"/>
|
<rect key="frame" x="230" y="19" width="181" height="19"/>
|
||||||
<buttonCell key="cell" type="inline" title="Reset My Master Password" bezelStyle="inline" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="B7Z-72-fVP">
|
<buttonCell key="cell" type="recessed" title="Reset My Master Password" bezelStyle="recessed" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="B7Z-72-fVP" customClass="MPNoStateButtonCell">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
||||||
<font key="font" size="11" name="HelveticaNeue-Bold"/>
|
<font key="font" metaFont="systemBold" size="12"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="resetMasterPassword:" target="-2" id="kCy-X0-teH"/>
|
<action selector="resetMasterPassword:" target="-2" id="kCy-X0-teH"/>
|
||||||
@@ -144,11 +150,10 @@
|
|||||||
<rect key="frame" x="0.0" y="0.0" width="512" height="147"/>
|
<rect key="frame" x="0.0" y="0.0" width="512" height="147"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" selectionHighlightStyle="sourceList" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="33" rowSizeStyle="automatic" viewBased="YES" floatsGroupRows="NO" id="xvJ-5c-vDp" customClass="MPSitesTableView">
|
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="33" rowSizeStyle="automatic" viewBased="YES" floatsGroupRows="NO" id="xvJ-5c-vDp" customClass="MPSitesTableView">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="515" height="147"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<size key="intercellSpacing" width="3" height="2"/>
|
<size key="intercellSpacing" width="3" height="2"/>
|
||||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="calibratedRGB"/>
|
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="deviceWhite"/>
|
||||||
<color key="gridColor" name="selectedControlColor" catalog="System" colorSpace="catalog"/>
|
<color key="gridColor" name="selectedControlColor" catalog="System" colorSpace="catalog"/>
|
||||||
<tableColumns>
|
<tableColumns>
|
||||||
<tableColumn editable="NO" width="512" minWidth="512" maxWidth="512" id="S71-gk-yF7">
|
<tableColumn editable="NO" width="512" minWidth="512" maxWidth="512" id="S71-gk-yF7">
|
||||||
@@ -170,17 +175,17 @@
|
|||||||
<subviews>
|
<subviews>
|
||||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="ydd-Rv-tra">
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="ydd-Rv-tra">
|
||||||
<rect key="frame" x="-2" y="2" width="516" height="29"/>
|
<rect key="frame" x="-2" y="2" width="516" height="29"/>
|
||||||
<shadow key="shadow" blurRadius="1">
|
<shadow key="shadow" blurRadius="0.5">
|
||||||
<size key="offset" width="0.0" height="1"/>
|
<size key="offset" width="0.0" height="1"/>
|
||||||
<color key="color" white="0.0" alpha="0.80000000000000004" colorSpace="calibratedWhite"/>
|
<color key="color" white="0.0" alpha="0.80000000000000004" colorSpace="calibratedWhite"/>
|
||||||
</shadow>
|
</shadow>
|
||||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" alignment="center" title="apple.com" id="o0g-Zv-pH4">
|
<textFieldCell key="cell" lineBreakMode="truncatingTail" alignment="center" title="apple.com" id="o0g-Zv-pH4">
|
||||||
<font key="font" size="24" name="HelveticaNeue-Thin"/>
|
<font key="font" size="24" name="HelveticaNeue-Thin"/>
|
||||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="alternateSelectedControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
<connections>
|
<connections>
|
||||||
<binding destination="xQb-o5-M5U" name="value" keyPath="objectValue.siteName" id="CZi-gD-5Ec">
|
<binding destination="xQb-o5-M5U" name="value" keyPath="objectValue.displayedName" id="CZi-gD-5Ec">
|
||||||
<dictionary key="options">
|
<dictionary key="options">
|
||||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||||
</dictionary>
|
</dictionary>
|
||||||
@@ -195,11 +200,10 @@
|
|||||||
<constraint firstItem="ydd-Rv-tra" firstAttribute="top" secondItem="xQb-o5-M5U" secondAttribute="top" constant="2" id="eZT-Sd-wW5"/>
|
<constraint firstItem="ydd-Rv-tra" firstAttribute="top" secondItem="xQb-o5-M5U" secondAttribute="top" constant="2" id="eZT-Sd-wW5"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<backgroundFilters>
|
<backgroundFilters>
|
||||||
<ciFilter name="CIGloom">
|
<ciFilter name="CIGaussianBlur">
|
||||||
<configuration>
|
<configuration>
|
||||||
<null key="inputImage"/>
|
<null key="inputImage"/>
|
||||||
<real key="inputIntensity" value="1"/>
|
<real key="inputRadius" value="20"/>
|
||||||
<real key="inputRadius" value="10"/>
|
|
||||||
</configuration>
|
</configuration>
|
||||||
</ciFilter>
|
</ciFilter>
|
||||||
</backgroundFilters>
|
</backgroundFilters>
|
||||||
@@ -237,13 +241,13 @@
|
|||||||
</scrollView>
|
</scrollView>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="OnR-s6-d4P" userLabel="Input Label">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="OnR-s6-d4P" userLabel="Input Label">
|
||||||
<rect key="frame" x="209" y="310" width="223" height="20"/>
|
<rect key="frame" x="209" y="310" width="223" height="20"/>
|
||||||
<shadow key="shadow" blurRadius="1">
|
<shadow key="shadow" blurRadius="0.5">
|
||||||
<size key="offset" width="0.0" height="1"/>
|
<size key="offset" width="0.0" height="1"/>
|
||||||
<color key="color" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="calibratedRGB"/>
|
<color key="color" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="calibratedRGB"/>
|
||||||
</shadow>
|
</shadow>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Maarten Billemont's password for:" id="1Lb-d0-fQD">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Maarten Billemont's password for:" id="1Lb-d0-fQD">
|
||||||
<font key="font" size="14" name="HelveticaNeue"/>
|
<font key="font" size="14" name="HelveticaNeue"/>
|
||||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
@@ -252,14 +256,14 @@
|
|||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" constant="512" id="rW7-Vq-4Xy"/>
|
<constraint firstAttribute="width" constant="512" id="rW7-Vq-4Xy"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<shadow key="shadow" blurRadius="1">
|
<shadow key="shadow" blurRadius="0.5">
|
||||||
<size key="offset" width="0.0" height="1"/>
|
<size key="offset" width="0.0" height="1"/>
|
||||||
<color key="color" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="calibratedRGB"/>
|
<color key="color" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="calibratedRGB"/>
|
||||||
</shadow>
|
</shadow>
|
||||||
<searchFieldCell key="cell" selectable="YES" editable="YES" focusRingType="none" alignment="center" placeholderString="Site Name" sendsSearchStringImmediately="YES" id="ppl-2c-1E9">
|
<searchFieldCell key="cell" selectable="YES" editable="YES" focusRingType="none" alignment="center" placeholderString="Site Name" sendsSearchStringImmediately="YES" id="ppl-2c-1E9">
|
||||||
<font key="font" size="36" name="HelveticaNeue-Thin"/>
|
<font key="font" size="36" name="HelveticaNeue-Thin"/>
|
||||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="0.0" colorSpace="calibratedRGB"/>
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
</searchFieldCell>
|
</searchFieldCell>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="doSearchSites:" target="-2" id="NJO-iR-OXt"/>
|
<action selector="doSearchSites:" target="-2" id="NJO-iR-OXt"/>
|
||||||
@@ -268,10 +272,10 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</searchField>
|
</searchField>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vES-W5-m4x" userLabel="Type Button">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vES-W5-m4x" userLabel="Type Button">
|
||||||
<rect key="frame" x="253" y="19" width="135" height="20"/>
|
<rect key="frame" x="242" y="19" width="157" height="19"/>
|
||||||
<buttonCell key="cell" type="inline" title="Change Password Type" bezelStyle="inline" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Fom-sN-EtZ">
|
<buttonCell key="cell" type="recessed" title="Change Password Type" bezelStyle="recessed" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Fom-sN-EtZ" customClass="MPNoStateButtonCell">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
||||||
<font key="font" size="11" name="HelveticaNeue-Bold"/>
|
<font key="font" metaFont="systemBold" size="12"/>
|
||||||
<string key="keyEquivalent">t</string>
|
<string key="keyEquivalent">t</string>
|
||||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
@@ -285,7 +289,7 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="d3u-Ze-9uf" userLabel="Counter Container">
|
<customView translatesAutoresizingMaskIntoConstraints="NO" id="d3u-Ze-9uf" userLabel="Counter Container">
|
||||||
<rect key="frame" x="306" y="47" width="28" height="22"/>
|
<rect key="frame" x="306" y="46" width="28" height="22"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XgA-Vl-CKh" userLabel="Counter Stepper">
|
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XgA-Vl-CKh" userLabel="Counter Stepper">
|
||||||
<rect key="frame" x="-3" y="-3" width="19" height="27"/>
|
<rect key="frame" x="-3" y="-3" width="19" height="27"/>
|
||||||
@@ -296,13 +300,13 @@
|
|||||||
</stepper>
|
</stepper>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NvO-kt-eZ2" userLabel="Counter Field">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NvO-kt-eZ2" userLabel="Counter Field">
|
||||||
<rect key="frame" x="19" y="2" width="11" height="19"/>
|
<rect key="frame" x="19" y="2" width="11" height="19"/>
|
||||||
<shadow key="shadow" blurRadius="1">
|
<shadow key="shadow" blurRadius="0.5">
|
||||||
<size key="offset" width="0.0" height="1"/>
|
<size key="offset" width="0.0" height="1"/>
|
||||||
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</shadow>
|
</shadow>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="1" id="dhQ-bJ-rn3">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="1" id="dhQ-bJ-rn3">
|
||||||
<font key="font" size="12" name="HelveticaNeue-Medium"/>
|
<font key="font" size="12" name="HelveticaNeue-Medium"/>
|
||||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="calibratedRGB"/>
|
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="calibratedRGB"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
<connections>
|
<connections>
|
||||||
@@ -338,10 +342,10 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</customView>
|
</customView>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1Qo-iG-CQt" userLabel="Login Button">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1Qo-iG-CQt" userLabel="Login Button">
|
||||||
<rect key="frame" x="149" y="19" width="96" height="20"/>
|
<rect key="frame" x="123" y="19" width="111" height="19"/>
|
||||||
<buttonCell key="cell" type="inline" title="Set Login Name" bezelStyle="inline" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="QFo-9y-aVe">
|
<buttonCell key="cell" type="recessed" title="Set Login Name" bezelStyle="recessed" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="QFo-9y-aVe" customClass="MPNoStateButtonCell">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
||||||
<font key="font" size="11" name="HelveticaNeue-Bold"/>
|
<font key="font" metaFont="systemBold" size="12"/>
|
||||||
<string key="keyEquivalent">l</string>
|
<string key="keyEquivalent">l</string>
|
||||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
@@ -352,7 +356,7 @@
|
|||||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||||
</dictionary>
|
</dictionary>
|
||||||
</binding>
|
</binding>
|
||||||
<binding destination="mcS-ik-b0n" name="title" keyPath="selection.loginName" id="g1z-0F-hE9">
|
<binding destination="mcS-ik-b0n" name="title" keyPath="selection.loginName" id="uub-7k-XZ8">
|
||||||
<dictionary key="options">
|
<dictionary key="options">
|
||||||
<string key="NSNullPlaceholder">Set Login Name</string>
|
<string key="NSNullPlaceholder">Set Login Name</string>
|
||||||
</dictionary>
|
</dictionary>
|
||||||
@@ -363,10 +367,10 @@
|
|||||||
<rect key="frame" x="312" y="524" width="16" height="16"/>
|
<rect key="frame" x="312" y="524" width="16" height="16"/>
|
||||||
</progressIndicator>
|
</progressIndicator>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XuF-Sp-6JD" userLabel="Delete Button">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XuF-Sp-6JD" userLabel="Delete Button">
|
||||||
<rect key="frame" x="396" y="19" width="70" height="20"/>
|
<rect key="frame" x="407" y="19" width="81" height="19"/>
|
||||||
<buttonCell key="cell" type="inline" title="Delete Site" bezelStyle="inline" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="26m-of-YMQ">
|
<buttonCell key="cell" type="recessed" title="Delete Site" bezelStyle="recessed" alignment="center" refusesFirstResponder="YES" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="26m-of-YMQ" customClass="MPNoStateButtonCell">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
||||||
<font key="font" size="11" name="HelveticaNeue-Bold"/>
|
<font key="font" metaFont="systemBold" size="12"/>
|
||||||
<string key="keyEquivalent">d</string>
|
<string key="keyEquivalent">d</string>
|
||||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
@@ -380,10 +384,10 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="brI-fg-Kav" userLabel="Password Button">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="brI-fg-Kav" userLabel="Password Button">
|
||||||
<rect key="frame" x="266" y="46" width="108" height="20"/>
|
<rect key="frame" x="258" y="45" width="125" height="19"/>
|
||||||
<buttonCell key="cell" type="inline" title="Change Password" bezelStyle="inline" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="FQu-fM-NWY">
|
<buttonCell key="cell" type="recessed" title="Change Password" bezelStyle="recessed" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="FQu-fM-NWY" customClass="MPNoStateButtonCell">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
||||||
<font key="font" size="11" name="HelveticaNeue-Bold"/>
|
<font key="font" metaFont="systemBold" size="12"/>
|
||||||
<string key="keyEquivalent">p</string>
|
<string key="keyEquivalent">p</string>
|
||||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
@@ -410,7 +414,7 @@
|
|||||||
<subviews>
|
<subviews>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XUV-zU-Y9c">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XUV-zU-Y9c">
|
||||||
<rect key="frame" x="298" y="41" width="4" height="97"/>
|
<rect key="frame" x="298" y="41" width="4" height="97"/>
|
||||||
<shadow key="shadow" blurRadius="1">
|
<shadow key="shadow" blurRadius="0.5">
|
||||||
<size key="offset" width="0.0" height="1"/>
|
<size key="offset" width="0.0" height="1"/>
|
||||||
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</shadow>
|
</shadow>
|
||||||
@@ -418,8 +422,8 @@
|
|||||||
<ciFilter name="CIGloom">
|
<ciFilter name="CIGloom">
|
||||||
<configuration>
|
<configuration>
|
||||||
<null key="inputImage"/>
|
<null key="inputImage"/>
|
||||||
<real key="inputIntensity" value="1"/>
|
<real key="inputIntensity" value="0.80000000000000004"/>
|
||||||
<real key="inputRadius" value="10"/>
|
<real key="inputRadius" value="8"/>
|
||||||
</configuration>
|
</configuration>
|
||||||
</ciFilter>
|
</ciFilter>
|
||||||
</contentFilters>
|
</contentFilters>
|
||||||
@@ -434,18 +438,18 @@
|
|||||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||||
</dictionary>
|
</dictionary>
|
||||||
</binding>
|
</binding>
|
||||||
<binding destination="mcS-ik-b0n" name="value" keyPath="selection.contentDisplay" id="djg-i5-pwt"/>
|
<binding destination="mcS-ik-b0n" name="value" keyPath="selection.displayedContent" id="djg-i5-pwt"/>
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ia6-7b-dFr">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ia6-7b-dFr">
|
||||||
<rect key="frame" x="114" y="82" width="372" height="14"/>
|
<rect key="frame" x="111" y="82" width="378" height="14"/>
|
||||||
<shadow key="shadow" blurRadius="1">
|
<shadow key="shadow" blurRadius="0.5">
|
||||||
<size key="offset" width="0.0" height="1"/>
|
<size key="offset" width="0.0" height="1"/>
|
||||||
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</shadow>
|
</shadow>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="No password set. Click "Change Password" on the bottom to set one." id="eDQ-iz-97a">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="No password set. Click "Change Password" on the bottom to set one." id="eDQ-iz-97a">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
<connections>
|
<connections>
|
||||||
@@ -475,16 +479,21 @@
|
|||||||
</textField>
|
</textField>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="OaQ-of-zmb">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="OaQ-of-zmb">
|
||||||
<rect key="frame" x="39" y="142" width="522" height="23"/>
|
<rect key="frame" x="39" y="142" width="522" height="23"/>
|
||||||
<shadow key="shadow" blurRadius="1">
|
<shadow key="shadow" blurRadius="0.5">
|
||||||
<size key="offset" width="0.0" height="1"/>
|
<size key="offset" width="0.0" height="1"/>
|
||||||
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</shadow>
|
</shadow>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Master Password generates passwords for your sites (and other things)." id="YyD-hd-wi3">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Master Password generates passwords for your sites (and other things)." id="YyD-hd-wi3">
|
||||||
<font key="font" size="16" name="HelveticaNeue"/>
|
<font key="font" size="16" name="HelveticaNeue"/>
|
||||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
<connections>
|
<connections>
|
||||||
|
<binding destination="-2" name="hidden" keyPath="locked" id="I7S-x6-XZk">
|
||||||
|
<dictionary key="options">
|
||||||
|
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
<binding destination="-2" name="hidden2" keyPath="newUser" previousBinding="I7S-x6-XZk" id="HKK-Eu-1qV">
|
<binding destination="-2" name="hidden2" keyPath="newUser" previousBinding="I7S-x6-XZk" id="HKK-Eu-1qV">
|
||||||
<dictionary key="options">
|
<dictionary key="options">
|
||||||
<integer key="NSMultipleValuesPlaceholder" value="-1"/>
|
<integer key="NSMultipleValuesPlaceholder" value="-1"/>
|
||||||
@@ -494,16 +503,11 @@
|
|||||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||||
</dictionary>
|
</dictionary>
|
||||||
</binding>
|
</binding>
|
||||||
<binding destination="-2" name="hidden" keyPath="locked" id="I7S-x6-XZk">
|
|
||||||
<dictionary key="options">
|
|
||||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="sYt-eL-uwt">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="sYt-eL-uwt">
|
||||||
<rect key="frame" x="46" y="44" width="508" height="90"/>
|
<rect key="frame" x="46" y="44" width="508" height="90"/>
|
||||||
<shadow key="shadow" blurRadius="1">
|
<shadow key="shadow" blurRadius="0.5">
|
||||||
<size key="offset" width="0.0" height="1"/>
|
<size key="offset" width="0.0" height="1"/>
|
||||||
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</shadow>
|
</shadow>
|
||||||
@@ -514,10 +518,15 @@
|
|||||||
— Your "site name" can be any name; we recommend the bare domain name (eg. apple.com).
|
— Your "site name" can be any name; we recommend the bare domain name (eg. apple.com).
|
||||||
— Make your new master password strong (eg. a short sentence) and tell *nobody*.
|
— Make your new master password strong (eg. a short sentence) and tell *nobody*.
|
||||||
— Share your site's password instead. You can change it if necessary.</string>
|
— Share your site's password instead. You can change it if necessary.</string>
|
||||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
<connections>
|
<connections>
|
||||||
|
<binding destination="-2" name="hidden" keyPath="locked" id="yDL-cR-bDf">
|
||||||
|
<dictionary key="options">
|
||||||
|
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
<binding destination="-2" name="hidden2" keyPath="newUser" previousBinding="yDL-cR-bDf" id="fus-M7-S1J">
|
<binding destination="-2" name="hidden2" keyPath="newUser" previousBinding="yDL-cR-bDf" id="fus-M7-S1J">
|
||||||
<dictionary key="options">
|
<dictionary key="options">
|
||||||
<integer key="NSMultipleValuesPlaceholder" value="-1"/>
|
<integer key="NSMultipleValuesPlaceholder" value="-1"/>
|
||||||
@@ -527,11 +536,6 @@
|
|||||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||||
</dictionary>
|
</dictionary>
|
||||||
</binding>
|
</binding>
|
||||||
<binding destination="-2" name="hidden" keyPath="locked" id="yDL-cR-bDf">
|
|
||||||
<dictionary key="options">
|
|
||||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
</subviews>
|
</subviews>
|
||||||
@@ -546,15 +550,15 @@
|
|||||||
<constraint firstAttribute="centerY" secondItem="sYt-eL-uwt" secondAttribute="centerY" id="zLS-QG-MKS"/>
|
<constraint firstAttribute="centerY" secondItem="sYt-eL-uwt" secondAttribute="centerY" id="zLS-QG-MKS"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</customView>
|
</customView>
|
||||||
<textField hidden="YES" horizontalHuggingPriority="251" verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="npC-Kk-gUM">
|
<textField hidden="YES" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="npC-Kk-gUM">
|
||||||
<rect key="frame" x="140" y="235" width="359" height="15"/>
|
<rect key="frame" x="101" y="235" width="438" height="15"/>
|
||||||
<shadow key="shadow" blurRadius="1">
|
<shadow key="shadow" blurRadius="0.5">
|
||||||
<size key="offset" width="0.0" height="1"/>
|
<size key="offset" width="0.0" height="1"/>
|
||||||
<color key="color" white="0.0" alpha="0.69999999999999996" colorSpace="calibratedWhite"/>
|
<color key="color" white="0.0" alpha="0.69999999999999996" colorSpace="calibratedWhite"/>
|
||||||
</shadow>
|
</shadow>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Type the name of your site (eg. apple.com), then hit enter ⏎ to create a password for it." id="QTI-cz-Onx">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Type the name of your site (eg. apple.com), then hit enter ⏎ to create a password for it." id="QTI-cz-Onx">
|
||||||
<font key="font" size="11" name="HelveticaNeue"/>
|
<font key="font" size="11" name="HelveticaNeue"/>
|
||||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
<connections>
|
<connections>
|
||||||
@@ -571,13 +575,13 @@
|
|||||||
</textField>
|
</textField>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="rhm-sC-xFS">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="rhm-sC-xFS">
|
||||||
<rect key="frame" x="37" y="235" width="566" height="15"/>
|
<rect key="frame" x="37" y="235" width="566" height="15"/>
|
||||||
<shadow key="shadow" blurRadius="1">
|
<shadow key="shadow" blurRadius="0.5">
|
||||||
<size key="offset" width="0.0" height="1"/>
|
<size key="offset" width="0.0" height="1"/>
|
||||||
<color key="color" white="0.0" alpha="0.80000000000000004" colorSpace="calibratedWhite"/>
|
<color key="color" white="0.0" alpha="0.80000000000000004" colorSpace="calibratedWhite"/>
|
||||||
</shadow>
|
</shadow>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Hit enter ⏎ to copy the password, then paste it using ⌘V. Use the arrows ⇅ to navigate the list or esc ⎋ to exit." id="n3W-XU-dya">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Hit enter ⏎ to copy the password, then paste it using ⌘V. Use the arrows ⇅ to navigate the list or esc ⎋ to exit." id="n3W-XU-dya">
|
||||||
<font key="font" size="11" name="HelveticaNeue"/>
|
<font key="font" size="11" name="HelveticaNeue"/>
|
||||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
<connections>
|
<connections>
|
||||||
@@ -595,13 +599,13 @@
|
|||||||
</textField>
|
</textField>
|
||||||
<textField hidden="YES" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lW3-2z-cEa">
|
<textField hidden="YES" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lW3-2z-cEa">
|
||||||
<rect key="frame" x="190" y="235" width="260" height="15"/>
|
<rect key="frame" x="190" y="235" width="260" height="15"/>
|
||||||
<shadow key="shadow" blurRadius="1">
|
<shadow key="shadow" blurRadius="0.5">
|
||||||
<size key="offset" width="0.0" height="1"/>
|
<size key="offset" width="0.0" height="1"/>
|
||||||
<color key="color" white="0.0" alpha="0.70000000000000007" colorSpace="calibratedWhite"/>
|
<color key="color" white="0.0" alpha="0.70000000000000007" colorSpace="calibratedWhite"/>
|
||||||
</shadow>
|
</shadow>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Hold alt ⌥ to temporarily reveal what you've typed." id="4Ep-xX-Ky8">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Hold alt ⌥ to temporarily reveal what you've typed." id="4Ep-xX-Ky8">
|
||||||
<font key="font" size="11" name="HelveticaNeue"/>
|
<font key="font" size="11" name="HelveticaNeue"/>
|
||||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
<connections>
|
<connections>
|
||||||
@@ -612,7 +616,7 @@
|
|||||||
</binding>
|
</binding>
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="Aue-Zx-6Mf">
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="Aue-Zx-6Mf" userLabel="Settings Button">
|
||||||
<rect key="frame" x="588" y="508" width="32" height="32"/>
|
<rect key="frame" x="588" y="508" width="32" height="32"/>
|
||||||
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="icon_gear" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="i8r-9N-vcQ">
|
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="icon_gear" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="i8r-9N-vcQ">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
@@ -625,14 +629,14 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="qal-PP-YtO">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="qal-PP-YtO">
|
||||||
<rect key="frame" x="420" y="1" width="23" height="15"/>
|
<rect key="frame" x="436" y="1" width="23" height="15"/>
|
||||||
<shadow key="shadow" blurRadius="1">
|
<shadow key="shadow" blurRadius="0.5">
|
||||||
<size key="offset" width="0.0" height="1"/>
|
<size key="offset" width="0.0" height="1"/>
|
||||||
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</shadow>
|
</shadow>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="⌘D" id="PPC-be-w4E">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="⌘D" id="PPC-be-w4E">
|
||||||
<font key="font" size="11" name="HelveticaNeue"/>
|
<font key="font" size="11" name="HelveticaNeue"/>
|
||||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
<connections>
|
<connections>
|
||||||
@@ -654,13 +658,13 @@
|
|||||||
</textField>
|
</textField>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9b3-wy-KBb">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9b3-wy-KBb">
|
||||||
<rect key="frame" x="309" y="2" width="22" height="14"/>
|
<rect key="frame" x="309" y="2" width="22" height="14"/>
|
||||||
<shadow key="shadow" blurRadius="1">
|
<shadow key="shadow" blurRadius="0.5">
|
||||||
<size key="offset" width="0.0" height="1"/>
|
<size key="offset" width="0.0" height="1"/>
|
||||||
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</shadow>
|
</shadow>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="⌘T" id="HFM-Bk-akx">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="⌘T" id="HFM-Bk-akx">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
<connections>
|
<connections>
|
||||||
@@ -681,14 +685,14 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ido-NQ-3MY">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ido-NQ-3MY">
|
||||||
<rect key="frame" x="186" y="1" width="22" height="15"/>
|
<rect key="frame" x="167" y="1" width="22" height="15"/>
|
||||||
<shadow key="shadow" blurRadius="1">
|
<shadow key="shadow" blurRadius="0.5">
|
||||||
<size key="offset" width="0.0" height="1"/>
|
<size key="offset" width="0.0" height="1"/>
|
||||||
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</shadow>
|
</shadow>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="⌘L" id="fUB-rF-7x8">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="⌘L" id="fUB-rF-7x8">
|
||||||
<font key="font" size="11" name="HelveticaNeue"/>
|
<font key="font" size="11" name="HelveticaNeue"/>
|
||||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
<connections>
|
<connections>
|
||||||
@@ -709,14 +713,14 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="uol-dE-I8H">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="uol-dE-I8H">
|
||||||
<rect key="frame" x="309" y="70" width="22" height="14"/>
|
<rect key="frame" x="309" y="68" width="23" height="14"/>
|
||||||
<shadow key="shadow" blurRadius="1">
|
<shadow key="shadow" blurRadius="0.5">
|
||||||
<size key="offset" width="0.0" height="1"/>
|
<size key="offset" width="0.0" height="1"/>
|
||||||
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</shadow>
|
</shadow>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="⌘P" id="MyN-x6-dMk">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="⌘P" id="MyN-x6-dMk">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
<connections>
|
<connections>
|
||||||
@@ -746,14 +750,14 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="UpZ-rb-NXd">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="UpZ-rb-NXd">
|
||||||
<rect key="frame" x="242" y="70" width="157" height="14"/>
|
<rect key="frame" x="241" y="68" width="158" height="14"/>
|
||||||
<shadow key="shadow" blurRadius="1">
|
<shadow key="shadow" blurRadius="0.5">
|
||||||
<size key="offset" width="0.0" height="1"/>
|
<size key="offset" width="0.0" height="1"/>
|
||||||
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</shadow>
|
</shadow>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Click here to set a password:" id="gjc-Fw-xa1">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Click here to set a password:" id="gjc-Fw-xa1">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
<connections>
|
<connections>
|
||||||
@@ -788,13 +792,13 @@
|
|||||||
</textField>
|
</textField>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="gAU-xs-aae">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="gAU-xs-aae">
|
||||||
<rect key="frame" x="595" y="490" width="19" height="14"/>
|
<rect key="frame" x="595" y="490" width="19" height="14"/>
|
||||||
<shadow key="shadow" blurRadius="1">
|
<shadow key="shadow" blurRadius="0.5">
|
||||||
<size key="offset" width="0.0" height="1"/>
|
<size key="offset" width="0.0" height="1"/>
|
||||||
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</shadow>
|
</shadow>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="⌘," id="Xm1-qb-6EP">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="⌘," id="Xm1-qb-6EP">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
<connections>
|
<connections>
|
||||||
@@ -810,7 +814,7 @@
|
|||||||
<constraint firstItem="v80-wd-hUR" firstAttribute="top" secondItem="iGR-wo-ual" secondAttribute="top" id="1iV-OU-5Ay"/>
|
<constraint firstItem="v80-wd-hUR" firstAttribute="top" secondItem="iGR-wo-ual" secondAttribute="top" id="1iV-OU-5Ay"/>
|
||||||
<constraint firstItem="brI-fg-Kav" firstAttribute="centerX" secondItem="vES-W5-m4x" secondAttribute="centerX" id="1tN-p4-2m4"/>
|
<constraint firstItem="brI-fg-Kav" firstAttribute="centerX" secondItem="vES-W5-m4x" secondAttribute="centerX" id="1tN-p4-2m4"/>
|
||||||
<constraint firstItem="Ido-NQ-3MY" firstAttribute="top" secondItem="1Qo-iG-CQt" secondAttribute="bottom" constant="4" id="3MM-M7-OKF"/>
|
<constraint firstItem="Ido-NQ-3MY" firstAttribute="top" secondItem="1Qo-iG-CQt" secondAttribute="bottom" constant="4" id="3MM-M7-OKF"/>
|
||||||
<constraint firstAttribute="bottom" secondItem="Bwc-sd-6gm" secondAttribute="bottom" id="3fF-7g-c6C"/>
|
<constraint firstAttribute="bottom" secondItem="Bwc-sd-6gm" secondAttribute="bottom" constant="-80" id="3fF-7g-c6C"/>
|
||||||
<constraint firstItem="XuF-Sp-6JD" firstAttribute="centerX" secondItem="qal-PP-YtO" secondAttribute="centerX" id="7mj-3B-j0X"/>
|
<constraint firstItem="XuF-Sp-6JD" firstAttribute="centerX" secondItem="qal-PP-YtO" secondAttribute="centerX" id="7mj-3B-j0X"/>
|
||||||
<constraint firstItem="NGk-Io-Buc" firstAttribute="top" secondItem="oSh-Ec-8Nf" secondAttribute="bottom" constant="8" symbolic="YES" id="8AC-MT-cz4"/>
|
<constraint firstItem="NGk-Io-Buc" firstAttribute="top" secondItem="oSh-Ec-8Nf" secondAttribute="bottom" constant="8" symbolic="YES" id="8AC-MT-cz4"/>
|
||||||
<constraint firstItem="vES-W5-m4x" firstAttribute="centerX" secondItem="CnS-iI-dhr" secondAttribute="centerX" id="92S-HP-Vk7"/>
|
<constraint firstItem="vES-W5-m4x" firstAttribute="centerX" secondItem="CnS-iI-dhr" secondAttribute="centerX" id="92S-HP-Vk7"/>
|
||||||
@@ -822,7 +826,7 @@
|
|||||||
<constraint firstAttribute="centerY" secondItem="iGR-wo-ual" secondAttribute="centerY" id="GZE-mX-kjj"/>
|
<constraint firstAttribute="centerY" secondItem="iGR-wo-ual" secondAttribute="centerY" id="GZE-mX-kjj"/>
|
||||||
<constraint firstAttribute="centerY" secondItem="CnS-iI-dhr" secondAttribute="centerY" id="HjG-vb-3Qg"/>
|
<constraint firstAttribute="centerY" secondItem="CnS-iI-dhr" secondAttribute="centerY" id="HjG-vb-3Qg"/>
|
||||||
<constraint firstItem="iGR-wo-ual" firstAttribute="leading" secondItem="EiT-Mj-1SZ" secondAttribute="leading" constant="20" symbolic="YES" id="KNz-B2-qfi"/>
|
<constraint firstItem="iGR-wo-ual" firstAttribute="leading" secondItem="EiT-Mj-1SZ" secondAttribute="leading" constant="20" symbolic="YES" id="KNz-B2-qfi"/>
|
||||||
<constraint firstItem="Bwc-sd-6gm" firstAttribute="top" secondItem="EiT-Mj-1SZ" secondAttribute="top" id="Kqb-ig-5cP"/>
|
<constraint firstItem="Bwc-sd-6gm" firstAttribute="top" secondItem="EiT-Mj-1SZ" secondAttribute="top" constant="-80" id="Kqb-ig-5cP"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="iGR-wo-ual" secondAttribute="trailing" constant="20" symbolic="YES" id="LW8-vu-scs"/>
|
<constraint firstAttribute="trailing" secondItem="iGR-wo-ual" secondAttribute="trailing" constant="20" symbolic="YES" id="LW8-vu-scs"/>
|
||||||
<constraint firstItem="Aue-Zx-6Mf" firstAttribute="top" secondItem="EiT-Mj-1SZ" secondAttribute="top" constant="20" symbolic="YES" id="Lts-go-pIX"/>
|
<constraint firstItem="Aue-Zx-6Mf" firstAttribute="top" secondItem="EiT-Mj-1SZ" secondAttribute="top" constant="20" symbolic="YES" id="Lts-go-pIX"/>
|
||||||
<constraint firstAttribute="bottom" secondItem="Bme-XK-MMc" secondAttribute="bottom" constant="80" id="MbE-Oa-J9k"/>
|
<constraint firstAttribute="bottom" secondItem="Bme-XK-MMc" secondAttribute="bottom" constant="80" id="MbE-Oa-J9k"/>
|
||||||
@@ -845,7 +849,7 @@
|
|||||||
<constraint firstItem="OnR-s6-d4P" firstAttribute="top" secondItem="NGk-Io-Buc" secondAttribute="bottom" constant="8" symbolic="YES" id="dr2-eR-Yup"/>
|
<constraint firstItem="OnR-s6-d4P" firstAttribute="top" secondItem="NGk-Io-Buc" secondAttribute="bottom" constant="8" symbolic="YES" id="dr2-eR-Yup"/>
|
||||||
<constraint firstAttribute="bottom" secondItem="vES-W5-m4x" secondAttribute="bottom" constant="20" symbolic="YES" id="eHI-Tn-bYD"/>
|
<constraint firstAttribute="bottom" secondItem="vES-W5-m4x" secondAttribute="bottom" constant="20" symbolic="YES" id="eHI-Tn-bYD"/>
|
||||||
<constraint firstItem="rhm-sC-xFS" firstAttribute="top" secondItem="CnS-iI-dhr" secondAttribute="bottom" constant="8" symbolic="YES" id="f1g-ug-BVL"/>
|
<constraint firstItem="rhm-sC-xFS" firstAttribute="top" secondItem="CnS-iI-dhr" secondAttribute="bottom" constant="8" symbolic="YES" id="f1g-ug-BVL"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="Bwc-sd-6gm" secondAttribute="trailing" id="gKu-JH-NDR"/>
|
<constraint firstAttribute="trailing" secondItem="Bwc-sd-6gm" secondAttribute="trailing" constant="-80" id="gKu-JH-NDR"/>
|
||||||
<constraint firstItem="CnS-iI-dhr" firstAttribute="centerX" secondItem="rhm-sC-xFS" secondAttribute="centerX" id="gmg-aZ-1Si"/>
|
<constraint firstItem="CnS-iI-dhr" firstAttribute="centerX" secondItem="rhm-sC-xFS" secondAttribute="centerX" id="gmg-aZ-1Si"/>
|
||||||
<constraint firstItem="Bme-XK-MMc" firstAttribute="top" secondItem="rhm-sC-xFS" secondAttribute="bottom" constant="8" symbolic="YES" id="gsL-Ww-yLa"/>
|
<constraint firstItem="Bme-XK-MMc" firstAttribute="top" secondItem="rhm-sC-xFS" secondAttribute="bottom" constant="8" symbolic="YES" id="gsL-Ww-yLa"/>
|
||||||
<constraint firstItem="9b3-wy-KBb" firstAttribute="top" secondItem="vES-W5-m4x" secondAttribute="bottom" constant="4" id="hKa-2u-uL3"/>
|
<constraint firstItem="9b3-wy-KBb" firstAttribute="top" secondItem="vES-W5-m4x" secondAttribute="bottom" constant="4" id="hKa-2u-uL3"/>
|
||||||
@@ -858,7 +862,7 @@
|
|||||||
<constraint firstItem="vES-W5-m4x" firstAttribute="top" secondItem="brI-fg-Kav" secondAttribute="bottom" constant="8" symbolic="YES" id="rCP-oh-rWr"/>
|
<constraint firstItem="vES-W5-m4x" firstAttribute="top" secondItem="brI-fg-Kav" secondAttribute="bottom" constant="8" symbolic="YES" id="rCP-oh-rWr"/>
|
||||||
<constraint firstItem="v80-wd-hUR" firstAttribute="trailing" secondItem="iGR-wo-ual" secondAttribute="trailing" id="rIx-cQ-PNt"/>
|
<constraint firstItem="v80-wd-hUR" firstAttribute="trailing" secondItem="iGR-wo-ual" secondAttribute="trailing" id="rIx-cQ-PNt"/>
|
||||||
<constraint firstItem="brI-fg-Kav" firstAttribute="centerX" secondItem="uol-dE-I8H" secondAttribute="centerX" id="s5w-Nc-YJY"/>
|
<constraint firstItem="brI-fg-Kav" firstAttribute="centerX" secondItem="uol-dE-I8H" secondAttribute="centerX" id="s5w-Nc-YJY"/>
|
||||||
<constraint firstItem="Bwc-sd-6gm" firstAttribute="leading" secondItem="EiT-Mj-1SZ" secondAttribute="leading" id="tea-fv-b1S"/>
|
<constraint firstItem="Bwc-sd-6gm" firstAttribute="leading" secondItem="EiT-Mj-1SZ" secondAttribute="leading" constant="-80" id="tea-fv-b1S"/>
|
||||||
<constraint firstItem="lW3-2z-cEa" firstAttribute="centerX" secondItem="iGR-wo-ual" secondAttribute="centerX" id="vML-2u-shw"/>
|
<constraint firstItem="lW3-2z-cEa" firstAttribute="centerX" secondItem="iGR-wo-ual" secondAttribute="centerX" id="vML-2u-shw"/>
|
||||||
<constraint firstItem="v80-wd-hUR" firstAttribute="bottom" secondItem="iGR-wo-ual" secondAttribute="bottom" id="xiX-8e-pNR"/>
|
<constraint firstItem="v80-wd-hUR" firstAttribute="bottom" secondItem="iGR-wo-ual" secondAttribute="bottom" id="xiX-8e-pNR"/>
|
||||||
<constraint firstItem="v80-wd-hUR" firstAttribute="leading" secondItem="iGR-wo-ual" secondAttribute="leading" id="yVZ-Ar-5ov"/>
|
<constraint firstItem="v80-wd-hUR" firstAttribute="leading" secondItem="iGR-wo-ual" secondAttribute="leading" id="yVZ-Ar-5ov"/>
|
||||||
@@ -867,6 +871,7 @@
|
|||||||
</constraints>
|
</constraints>
|
||||||
<animations/>
|
<animations/>
|
||||||
</view>
|
</view>
|
||||||
|
<point key="canvasLocation" x="-267" y="279"/>
|
||||||
</window>
|
</window>
|
||||||
<userDefaultsController representsSharedInstance="YES" id="yy2-3W-Ocj"/>
|
<userDefaultsController representsSharedInstance="YES" id="yy2-3W-Ocj"/>
|
||||||
<arrayController objectClassName="MPSiteModel" id="mcS-ik-b0n">
|
<arrayController objectClassName="MPSiteModel" id="mcS-ik-b0n">
|
||||||
|
|||||||
@@ -17,15 +17,17 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
|
#import "MPSiteEntity.h"
|
||||||
@class MPSiteEntity;
|
@class MPSiteEntity;
|
||||||
|
|
||||||
@interface MPSiteModel : NSObject
|
@interface MPSiteModel : NSObject
|
||||||
|
|
||||||
@property (nonatomic) NSString *siteName;
|
@property (nonatomic) NSString *name;
|
||||||
|
@property (nonatomic) NSAttributedString *displayedName;
|
||||||
@property (nonatomic) MPSiteType type;
|
@property (nonatomic) MPSiteType type;
|
||||||
@property (nonatomic) NSString *typeName;
|
@property (nonatomic) NSString *typeName;
|
||||||
@property (nonatomic) NSString *content;
|
@property (nonatomic) NSString *content;
|
||||||
@property (nonatomic) NSString *contentDisplay;
|
@property (nonatomic) NSString *displayedContent;
|
||||||
@property (nonatomic) NSString *loginName;
|
@property (nonatomic) NSString *loginName;
|
||||||
@property (nonatomic) NSNumber *uses;
|
@property (nonatomic) NSNumber *uses;
|
||||||
@property (nonatomic) NSUInteger counter;
|
@property (nonatomic) NSUInteger counter;
|
||||||
@@ -34,7 +36,7 @@
|
|||||||
@property (nonatomic) BOOL generated;
|
@property (nonatomic) BOOL generated;
|
||||||
@property (nonatomic) BOOL stored;
|
@property (nonatomic) BOOL stored;
|
||||||
|
|
||||||
- (id)initWithEntity:(MPSiteEntity *)entity;
|
- (instancetype)initWithEntity:(MPSiteEntity *)entity fuzzyGroups:(NSArray *)fuzzyGroups;
|
||||||
- (MPSiteEntity *)entityInContext:(NSManagedObjectContext *)moc;
|
- (MPSiteEntity *)entityInContext:(NSManagedObjectContext *)moc;
|
||||||
|
|
||||||
- (void)updateContent;
|
- (void)updateContent;
|
||||||
|
|||||||
@@ -28,27 +28,42 @@
|
|||||||
BOOL _initialized;
|
BOOL _initialized;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithEntity:(MPSiteEntity *)entity {
|
- (id)initWithEntity:(MPSiteEntity *)entity fuzzyGroups:(NSArray *)fuzzyGroups {
|
||||||
|
|
||||||
if (!(self = [super init]))
|
if (!(self = [super init]))
|
||||||
return nil;
|
return nil;
|
||||||
|
|
||||||
[self setEntity:entity];
|
[self setEntity:entity fuzzyGroups:fuzzyGroups];
|
||||||
_initialized = YES;
|
_initialized = YES;
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setEntity:(MPSiteEntity *)entity {
|
- (void)setEntity:(MPSiteEntity *)entity fuzzyGroups:(NSArray *)fuzzyGroups {
|
||||||
|
|
||||||
if ([_entityOID isEqual:entity.objectID])
|
if ([_entityOID isEqual:entity.objectID])
|
||||||
return;
|
return;
|
||||||
_entityOID = entity.objectID;
|
_entityOID = entity.objectID;
|
||||||
|
|
||||||
|
NSString *siteName = entity.name;
|
||||||
|
NSMutableAttributedString *attributedSiteName = [[NSMutableAttributedString alloc] initWithString:siteName];
|
||||||
|
for (NSUInteger f = 0, s = (NSUInteger)-1; f < [fuzzyGroups count]; ++f) {
|
||||||
|
s = [siteName rangeOfString:fuzzyGroups[f] options:NSDiacriticInsensitiveSearch | NSCaseInsensitiveSearch
|
||||||
|
range:NSMakeRange( s + 1, [siteName length] - (s + 1) )].location;
|
||||||
|
if (s == NSNotFound)
|
||||||
|
break;
|
||||||
|
|
||||||
|
[attributedSiteName addAttribute:NSBackgroundColorAttributeName value:[NSColor alternateSelectedControlColor]
|
||||||
|
range:NSMakeRange( s, [fuzzyGroups[f] length] )];
|
||||||
|
}
|
||||||
|
NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];
|
||||||
|
paragraphStyle.alignment = NSCenterTextAlignment;
|
||||||
|
[attributedSiteName addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange( 0, [siteName length] )];
|
||||||
|
|
||||||
|
self.displayedName = attributedSiteName;
|
||||||
|
self.name = siteName;
|
||||||
self.algorithm = entity.algorithm;
|
self.algorithm = entity.algorithm;
|
||||||
self.siteName = entity.name;
|
|
||||||
self.lastUsed = entity.lastUsed;
|
self.lastUsed = entity.lastUsed;
|
||||||
self.loginName = entity.loginName;
|
|
||||||
self.type = entity.type;
|
self.type = entity.type;
|
||||||
self.typeName = entity.typeName;
|
self.typeName = entity.typeName;
|
||||||
self.uses = entity.uses_;
|
self.uses = entity.uses_;
|
||||||
@@ -124,7 +139,12 @@
|
|||||||
|
|
||||||
PearlMainQueue( ^{
|
PearlMainQueue( ^{
|
||||||
self.content = result;
|
self.content = result;
|
||||||
self.contentDisplay = displayResult;
|
self.displayedContent = displayResult;
|
||||||
|
} );
|
||||||
|
}];
|
||||||
|
[entity resolveLoginUsingKey:[MPAppDelegate_Shared get].key result:^(NSString *result) {
|
||||||
|
PearlMainQueue( ^{
|
||||||
|
self.loginName = result;
|
||||||
} );
|
} );
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,8 +39,6 @@
|
|||||||
</array>
|
</array>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>${EXECUTABLE_NAME}</string>
|
<string>${EXECUTABLE_NAME}</string>
|
||||||
<key>CFBundleIconFile</key>
|
|
||||||
<string>MasterPassword</string>
|
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
<string>com.lyndir.lhunath.MasterPassword.Mac</string>
|
<string>com.lyndir.lhunath.MasterPassword.Mac</string>
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
@@ -62,7 +60,7 @@
|
|||||||
<key>LSUIElement</key>
|
<key>LSUIElement</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>NSHumanReadableCopyright</key>
|
<key>NSHumanReadableCopyright</key>
|
||||||
<string>Copyright © 2011-2013 Lyndir. All rights reserved.</string>
|
<string>Copyright © 2011-2014 Lyndir</string>
|
||||||
<key>NSMainNibFile</key>
|
<key>NSMainNibFile</key>
|
||||||
<string>MainMenu</string>
|
<string>MainMenu</string>
|
||||||
<key>NSPrincipalClass</key>
|
<key>NSPrincipalClass</key>
|
||||||
|
|||||||
@@ -103,7 +103,7 @@
|
|||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
CLASSPREFIX = MP;
|
CLASSPREFIX = MP;
|
||||||
LastUpgradeCheck = 0510;
|
LastUpgradeCheck = 0610;
|
||||||
ORGANIZATIONNAME = "Maarten Billemont";
|
ORGANIZATIONNAME = "Maarten Billemont";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
DAD9B5C0176299B9001835F9 = {
|
DAD9B5C0176299B9001835F9 = {
|
||||||
@@ -209,6 +209,7 @@
|
|||||||
CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application";
|
CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application";
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/MasterPassword-Mac-LoginHelper/MasterPassword-Mac-LoginHelper-Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/MasterPassword-Mac-LoginHelper/MasterPassword-Mac-LoginHelper-Info.plist";
|
||||||
|
PROVISIONING_PROFILE = "8ea8f441-a2d3-4119-ad85-f18953e17648";
|
||||||
};
|
};
|
||||||
name = "AppStore-Mac";
|
name = "AppStore-Mac";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
93D390C676DF52DA7E459F19 /* MPPasswordWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39D9D0061FF1159998F06 /* MPPasswordWindow.m */; };
|
93D390C676DF52DA7E459F19 /* MPPasswordWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39D9D0061FF1159998F06 /* MPPasswordWindow.m */; };
|
||||||
93D392EC39DA43C46C692C12 /* NSDictionary+Indexing.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D393B97158D7BE9332EA53 /* NSDictionary+Indexing.h */; };
|
93D392EC39DA43C46C692C12 /* NSDictionary+Indexing.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D393B97158D7BE9332EA53 /* NSDictionary+Indexing.h */; };
|
||||||
93D394C4254EEB45FB335AFB /* MPSitesTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39423D7BF4FD31FE6D27C /* MPSitesTableView.m */; };
|
93D394C4254EEB45FB335AFB /* MPSitesTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39423D7BF4FD31FE6D27C /* MPSitesTableView.m */; };
|
||||||
|
93D395E4830290EBB6E71F34 /* MPNoStateButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39538C4CEFF46DF379254 /* MPNoStateButton.m */; };
|
||||||
93D395F08A087F8A24689347 /* NSArray+Indexing.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39067C0AFDC581794E2B8 /* NSArray+Indexing.m */; };
|
93D395F08A087F8A24689347 /* NSArray+Indexing.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39067C0AFDC581794E2B8 /* NSArray+Indexing.m */; };
|
||||||
93D3970BCF85F7902E611168 /* PearlProfiler.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39DB3A8ADED08C39A6228 /* PearlProfiler.m */; };
|
93D3970BCF85F7902E611168 /* PearlProfiler.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39DB3A8ADED08C39A6228 /* PearlProfiler.m */; };
|
||||||
93D39784E725A34D1EE3FB3B /* MPInitialWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39D3CB30874147D9A9E1B /* MPInitialWindowController.m */; };
|
93D39784E725A34D1EE3FB3B /* MPInitialWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39D3CB30874147D9A9E1B /* MPInitialWindowController.m */; };
|
||||||
@@ -22,13 +23,11 @@
|
|||||||
DA0933D01747B91B00DE1CEF /* appstore.png in Resources */ = {isa = PBXBuildFile; fileRef = DA0933CF1747B91B00DE1CEF /* appstore.png */; };
|
DA0933D01747B91B00DE1CEF /* appstore.png in Resources */ = {isa = PBXBuildFile; fileRef = DA0933CF1747B91B00DE1CEF /* appstore.png */; };
|
||||||
DA10007F1998A4C6002B873F /* scrypt in Headers */ = {isa = PBXBuildFile; fileRef = DAE8E65619867AF500416A0F /* scrypt */; settings = {ATTRIBUTES = (Public, ); }; };
|
DA10007F1998A4C6002B873F /* scrypt in Headers */ = {isa = PBXBuildFile; fileRef = DAE8E65619867AF500416A0F /* scrypt */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
DA1000801998A4C6002B873F /* openssl in Headers */ = {isa = PBXBuildFile; fileRef = DAE8E65719867AF500416A0F /* openssl */; settings = {ATTRIBUTES = (Public, ); }; };
|
DA1000801998A4C6002B873F /* openssl in Headers */ = {isa = PBXBuildFile; fileRef = DAE8E65719867AF500416A0F /* openssl */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
DA16B33F170661D4000A0EAB /* libUbiquityStoreManager.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA4425CB1557BED40052177D /* libUbiquityStoreManager.a */; };
|
|
||||||
DA16B341170661DB000A0EAB /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA16B340170661DB000A0EAB /* Carbon.framework */; };
|
DA16B341170661DB000A0EAB /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA16B340170661DB000A0EAB /* Carbon.framework */; };
|
||||||
DA16B342170661E0000A0EAB /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC632871486D95D0075AEA5 /* Security.framework */; };
|
DA16B342170661E0000A0EAB /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC632871486D95D0075AEA5 /* Security.framework */; };
|
||||||
DA16B344170661EE000A0EAB /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA16B343170661EE000A0EAB /* Cocoa.framework */; };
|
DA16B344170661EE000A0EAB /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA16B343170661EE000A0EAB /* Cocoa.framework */; };
|
||||||
DA16B345170661F2000A0EAB /* libPearl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC77CAD148291A600BCF976 /* libPearl.a */; };
|
DA16B345170661F2000A0EAB /* libPearl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC77CAD148291A600BCF976 /* libPearl.a */; };
|
||||||
DA2508F119511D3600AC23F1 /* MPPasswordWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = DA2508F019511D3600AC23F1 /* MPPasswordWindowController.xib */; };
|
DA2508F119511D3600AC23F1 /* MPPasswordWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = DA2508F019511D3600AC23F1 /* MPPasswordWindowController.xib */; };
|
||||||
DA2508F719513C1400AC23F1 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA16B343170661EE000A0EAB /* Cocoa.framework */; };
|
|
||||||
DA250925195148E200AC23F1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAEBC45214F6364500987BF6 /* QuartzCore.framework */; };
|
DA250925195148E200AC23F1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAEBC45214F6364500987BF6 /* QuartzCore.framework */; };
|
||||||
DA29992C19C6A89900AF7DF1 /* MasterPassword.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = DA29992619C6A89900AF7DF1 /* MasterPassword.xcdatamodeld */; };
|
DA29992C19C6A89900AF7DF1 /* MasterPassword.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = DA29992619C6A89900AF7DF1 /* MasterPassword.xcdatamodeld */; };
|
||||||
DA2CA4ED18D323D3007798F8 /* NSError+PearlFullDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = DA2CA4E718D323D3007798F8 /* NSError+PearlFullDescription.m */; };
|
DA2CA4ED18D323D3007798F8 /* NSError+PearlFullDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = DA2CA4E718D323D3007798F8 /* NSError+PearlFullDescription.m */; };
|
||||||
@@ -55,15 +54,15 @@
|
|||||||
DA3B8453190FC86F00246EEA /* NSManagedObject+Pearl.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3B8451190FC86F00246EEA /* NSManagedObject+Pearl.h */; };
|
DA3B8453190FC86F00246EEA /* NSManagedObject+Pearl.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3B8451190FC86F00246EEA /* NSManagedObject+Pearl.h */; };
|
||||||
DA3B8456190FC89700246EEA /* MPFixable.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3B8454190FC89700246EEA /* MPFixable.m */; };
|
DA3B8456190FC89700246EEA /* MPFixable.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3B8454190FC89700246EEA /* MPFixable.m */; };
|
||||||
DA3BCFCD19BD09E0006B2681 /* SourceCodePro-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = DA3BCFCC19BD09E0006B2681 /* SourceCodePro-Regular.otf */; };
|
DA3BCFCD19BD09E0006B2681 /* SourceCodePro-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = DA3BCFCC19BD09E0006B2681 /* SourceCodePro-Regular.otf */; };
|
||||||
DA4425CC1557BED40052177D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
|
|
||||||
DA4DA1D91564471A00F6F596 /* libjrswizzle.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC6326C148680650075AEA5 /* libjrswizzle.a */; };
|
DA4DA1D91564471A00F6F596 /* libjrswizzle.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC6326C148680650075AEA5 /* libjrswizzle.a */; };
|
||||||
|
DA5180CA19FF2F9200A587E9 /* MPAlgorithmV2.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5180C719FF2F9200A587E9 /* MPAlgorithmV2.m */; };
|
||||||
|
DA5180CE19FF307E00A587E9 /* MPAppDelegate_Store.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5180CD19FF307E00A587E9 /* MPAppDelegate_Store.m */; };
|
||||||
DA5E5C9417248AA1003798D8 /* libscryptenc-osx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5E5C8717248AA1003798D8 /* libscryptenc-osx.a */; };
|
DA5E5C9417248AA1003798D8 /* libscryptenc-osx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5E5C8717248AA1003798D8 /* libscryptenc-osx.a */; };
|
||||||
DA5E5CF61724A667003798D8 /* MPAlgorithm.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5E5C981724A667003798D8 /* MPAlgorithm.m */; };
|
DA5E5CF61724A667003798D8 /* MPAlgorithm.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5E5C981724A667003798D8 /* MPAlgorithm.m */; };
|
||||||
DA5E5CF71724A667003798D8 /* MPAlgorithmV0.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5E5C9A1724A667003798D8 /* MPAlgorithmV0.m */; };
|
DA5E5CF71724A667003798D8 /* MPAlgorithmV0.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5E5C9A1724A667003798D8 /* MPAlgorithmV0.m */; };
|
||||||
DA5E5CF81724A667003798D8 /* MPAlgorithmV1.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5E5C9C1724A667003798D8 /* MPAlgorithmV1.m */; };
|
DA5E5CF81724A667003798D8 /* MPAlgorithmV1.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5E5C9C1724A667003798D8 /* MPAlgorithmV1.m */; };
|
||||||
DA5E5CF91724A667003798D8 /* MPAppDelegate_Key.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5E5C9E1724A667003798D8 /* MPAppDelegate_Key.m */; };
|
DA5E5CF91724A667003798D8 /* MPAppDelegate_Key.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5E5C9E1724A667003798D8 /* MPAppDelegate_Key.m */; };
|
||||||
DA5E5CFA1724A667003798D8 /* MPAppDelegate_Shared.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5E5CA01724A667003798D8 /* MPAppDelegate_Shared.m */; };
|
DA5E5CFA1724A667003798D8 /* MPAppDelegate_Shared.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5E5CA01724A667003798D8 /* MPAppDelegate_Shared.m */; };
|
||||||
DA5E5CFB1724A667003798D8 /* MPAppDelegate_Store.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5E5CA21724A667003798D8 /* MPAppDelegate_Store.m */; };
|
|
||||||
DA5E5CFC1724A667003798D8 /* MPConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5E5CA41724A667003798D8 /* MPConfig.m */; };
|
DA5E5CFC1724A667003798D8 /* MPConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5E5CA41724A667003798D8 /* MPConfig.m */; };
|
||||||
DA5E5D001724A667003798D8 /* MPEntities.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5E5CAC1724A667003798D8 /* MPEntities.m */; };
|
DA5E5D001724A667003798D8 /* MPEntities.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5E5CAC1724A667003798D8 /* MPEntities.m */; };
|
||||||
DA5E5D011724A667003798D8 /* MPKey.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5E5CAE1724A667003798D8 /* MPKey.m */; };
|
DA5E5D011724A667003798D8 /* MPKey.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5E5CAE1724A667003798D8 /* MPKey.m */; };
|
||||||
@@ -80,15 +79,14 @@
|
|||||||
DA8ED896192906920099B726 /* PearlTween.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8ED892192906920099B726 /* PearlTween.h */; };
|
DA8ED896192906920099B726 /* PearlTween.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8ED892192906920099B726 /* PearlTween.h */; };
|
||||||
DA8ED897192906920099B726 /* map-macro.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8ED894192906920099B726 /* map-macro.h */; };
|
DA8ED897192906920099B726 /* map-macro.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8ED894192906920099B726 /* map-macro.h */; };
|
||||||
DAAA81B0195A8D1300FA30D9 /* gradient.png in Resources */ = {isa = PBXBuildFile; fileRef = DAAA81AF195A8D1300FA30D9 /* gradient.png */; };
|
DAAA81B0195A8D1300FA30D9 /* gradient.png in Resources */ = {isa = PBXBuildFile; fileRef = DAAA81AF195A8D1300FA30D9 /* gradient.png */; };
|
||||||
DABC6C02175D8C85000C15D4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
|
DAADCC4719FAFFAD00987B1D /* NSNotificationCenter+PearlEasyCleanup.h in Headers */ = {isa = PBXBuildFile; fileRef = DAADCC3E19FAFFAD00987B1D /* NSNotificationCenter+PearlEasyCleanup.h */; };
|
||||||
DABC6C15175D8CE1000C15D4 /* RHStatusItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = DABC6C14175D8CE1000C15D4 /* RHStatusItemView.m */; };
|
DAADCC4819FAFFAD00987B1D /* NSPersistentStore+PearlMigration.h in Headers */ = {isa = PBXBuildFile; fileRef = DAADCC3F19FAFFAD00987B1D /* NSPersistentStore+PearlMigration.h */; };
|
||||||
DABC6C16175D8E3A000C15D4 /* libRHStatusItemView.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DABC6C01175D8C85000C15D4 /* libRHStatusItemView.a */; };
|
DAADCC4919FAFFAD00987B1D /* NSPersistentStore+PearlMigration.m in Sources */ = {isa = PBXBuildFile; fileRef = DAADCC4019FAFFAD00987B1D /* NSPersistentStore+PearlMigration.m */; };
|
||||||
|
DAADCC4B19FB000C00987B1D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAEBC45214F6364500987BF6 /* QuartzCore.framework */; };
|
||||||
|
DAADCC6919FB007F00987B1D /* NSManagedObjectModel+KCOrderedAccessorFix.m in Sources */ = {isa = PBXBuildFile; fileRef = DAADCC6719FB007F00987B1D /* NSManagedObjectModel+KCOrderedAccessorFix.m */; };
|
||||||
|
DAADCC6A19FB00B500987B1D /* libKCOrderedAccessorFix.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAADCC5019FB006500987B1D /* libKCOrderedAccessorFix.a */; };
|
||||||
DAC6326D148680650075AEA5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
|
DAC6326D148680650075AEA5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
|
||||||
DAC77CAE148291A600BCF976 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
|
DAC77CAE148291A600BCF976 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.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 */; };
|
|
||||||
DACA22BE1705DE7D002C6C22 /* UbiquityStoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DACA22BA1705DE7D002C6C22 /* UbiquityStoreManager.h */; };
|
|
||||||
DACA26FE1705DF81002C6C22 /* logo-bare.png in Resources */ = {isa = PBXBuildFile; fileRef = DACA241C1705DF7D002C6C22 /* logo-bare.png */; };
|
DACA26FE1705DF81002C6C22 /* logo-bare.png in Resources */ = {isa = PBXBuildFile; fileRef = DACA241C1705DF7D002C6C22 /* logo-bare.png */; };
|
||||||
DACA27121705DF81002C6C22 /* avatar-13@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DACA24321705DF7D002C6C22 /* avatar-13@2x.png */; };
|
DACA27121705DF81002C6C22 /* avatar-13@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DACA24321705DF7D002C6C22 /* avatar-13@2x.png */; };
|
||||||
DACA27131705DF81002C6C22 /* avatar-3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DACA24331705DF7D002C6C22 /* avatar-3@2x.png */; };
|
DACA27131705DF81002C6C22 /* avatar-3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DACA24331705DF7D002C6C22 /* avatar-3@2x.png */; };
|
||||||
@@ -213,6 +211,15 @@
|
|||||||
/* End PBXContainerItemProxy section */
|
/* End PBXContainerItemProxy section */
|
||||||
|
|
||||||
/* Begin PBXCopyFilesBuildPhase section */
|
/* Begin PBXCopyFilesBuildPhase section */
|
||||||
|
DAADCC4E19FB006500987B1D /* CopyFiles */ = {
|
||||||
|
isa = PBXCopyFilesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
dstPath = "include/$(PRODUCT_NAME)";
|
||||||
|
dstSubfolderSpec = 16;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
DAD9B5EE1762CA3A001835F9 /* Copy LoginHelper */ = {
|
DAD9B5EE1762CA3A001835F9 /* Copy LoginHelper */ = {
|
||||||
isa = PBXCopyFilesBuildPhase;
|
isa = PBXCopyFilesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
@@ -229,11 +236,13 @@
|
|||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
93D39067C0AFDC581794E2B8 /* NSArray+Indexing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+Indexing.m"; sourceTree = "<group>"; };
|
93D39067C0AFDC581794E2B8 /* NSArray+Indexing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+Indexing.m"; sourceTree = "<group>"; };
|
||||||
93D39240B5143E01F0B75E96 /* MPSiteModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPSiteModel.h; sourceTree = "<group>"; };
|
93D39240B5143E01F0B75E96 /* MPSiteModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPSiteModel.h; sourceTree = "<group>"; };
|
||||||
|
93D392A4F3DE0BD758B9B056 /* MPNoStateButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNoStateButton.h; sourceTree = "<group>"; };
|
||||||
93D392C3918763B3B72CF366 /* MPPasswordWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordWindowController.h; sourceTree = "<group>"; };
|
93D392C3918763B3B72CF366 /* MPPasswordWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordWindowController.h; sourceTree = "<group>"; };
|
||||||
93D39368EF3CBFEF2AFCA15A /* MPInitialWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPInitialWindowController.h; sourceTree = "<group>"; };
|
93D39368EF3CBFEF2AFCA15A /* MPInitialWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPInitialWindowController.h; sourceTree = "<group>"; };
|
||||||
93D393B97158D7BE9332EA53 /* NSDictionary+Indexing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+Indexing.h"; sourceTree = "<group>"; };
|
93D393B97158D7BE9332EA53 /* NSDictionary+Indexing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+Indexing.h"; sourceTree = "<group>"; };
|
||||||
93D39423D7BF4FD31FE6D27C /* MPSitesTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPSitesTableView.m; sourceTree = "<group>"; };
|
93D39423D7BF4FD31FE6D27C /* MPSitesTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPSitesTableView.m; sourceTree = "<group>"; };
|
||||||
93D394EEFF5BF555A55AF361 /* PearlProfiler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PearlProfiler.h; path = ../../../External/Pearl/Pearl/PearlProfiler.h; sourceTree = "<group>"; };
|
93D394EEFF5BF555A55AF361 /* PearlProfiler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PearlProfiler.h; path = ../../../External/Pearl/Pearl/PearlProfiler.h; sourceTree = "<group>"; };
|
||||||
|
93D39538C4CEFF46DF379254 /* MPNoStateButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNoStateButton.m; sourceTree = "<group>"; };
|
||||||
93D396D04E57792A54D437AC /* NSArray+Indexing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+Indexing.h"; sourceTree = "<group>"; };
|
93D396D04E57792A54D437AC /* NSArray+Indexing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+Indexing.h"; sourceTree = "<group>"; };
|
||||||
93D3977484534E99F9BA579D /* MPPasswordWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordWindow.h; sourceTree = "<group>"; };
|
93D3977484534E99F9BA579D /* MPPasswordWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordWindow.h; sourceTree = "<group>"; };
|
||||||
93D39A57A7823DE98A0FF83C /* MPPasswordWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordWindowController.m; sourceTree = "<group>"; };
|
93D39A57A7823DE98A0FF83C /* MPPasswordWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordWindowController.m; sourceTree = "<group>"; };
|
||||||
@@ -249,7 +258,6 @@
|
|||||||
DA16B340170661DB000A0EAB /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
|
DA16B340170661DB000A0EAB /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
|
||||||
DA16B343170661EE000A0EAB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
|
DA16B343170661EE000A0EAB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
|
||||||
DA2508F019511D3600AC23F1 /* MPPasswordWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MPPasswordWindowController.xib; sourceTree = "<group>"; };
|
DA2508F019511D3600AC23F1 /* MPPasswordWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MPPasswordWindowController.xib; sourceTree = "<group>"; };
|
||||||
DA2508F619513C1400AC23F1 /* libRMBlurredView.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRMBlurredView.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
||||||
DA2508F919513C1400AC23F1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
DA2508F919513C1400AC23F1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||||
DA2508FA19513C1400AC23F1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
|
DA2508FA19513C1400AC23F1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
|
||||||
DA2508FB19513C1400AC23F1 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
|
DA2508FB19513C1400AC23F1 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
|
||||||
@@ -292,7 +300,10 @@
|
|||||||
DA3B8454190FC89700246EEA /* MPFixable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPFixable.m; sourceTree = "<group>"; };
|
DA3B8454190FC89700246EEA /* MPFixable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPFixable.m; sourceTree = "<group>"; };
|
||||||
DA3B8455190FC89700246EEA /* MPFixable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPFixable.h; sourceTree = "<group>"; };
|
DA3B8455190FC89700246EEA /* MPFixable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPFixable.h; sourceTree = "<group>"; };
|
||||||
DA3BCFCC19BD09E0006B2681 /* SourceCodePro-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SourceCodePro-Regular.otf"; sourceTree = "<group>"; };
|
DA3BCFCC19BD09E0006B2681 /* SourceCodePro-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SourceCodePro-Regular.otf"; sourceTree = "<group>"; };
|
||||||
DA4425CB1557BED40052177D /* libUbiquityStoreManager.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libUbiquityStoreManager.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
DA5180C619FF2F9200A587E9 /* MPAlgorithmV2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAlgorithmV2.h; sourceTree = "<group>"; };
|
||||||
|
DA5180C719FF2F9200A587E9 /* MPAlgorithmV2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAlgorithmV2.m; sourceTree = "<group>"; };
|
||||||
|
DA5180CC19FF307E00A587E9 /* MPAppDelegate_Store.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAppDelegate_Store.h; sourceTree = "<group>"; };
|
||||||
|
DA5180CD19FF307E00A587E9 /* MPAppDelegate_Store.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAppDelegate_Store.m; sourceTree = "<group>"; };
|
||||||
DA5BFA44147E415C00F98B1E /* Master Password.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Master Password.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
DA5BFA44147E415C00F98B1E /* Master Password.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Master Password.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
DA5BFA4A147E415C00F98B1E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
DA5BFA4A147E415C00F98B1E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||||
DA5BFA4C147E415C00F98B1E /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
|
DA5BFA4C147E415C00F98B1E /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
|
||||||
@@ -308,8 +319,6 @@
|
|||||||
DA5E5C9E1724A667003798D8 /* MPAppDelegate_Key.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAppDelegate_Key.m; sourceTree = "<group>"; };
|
DA5E5C9E1724A667003798D8 /* MPAppDelegate_Key.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAppDelegate_Key.m; sourceTree = "<group>"; };
|
||||||
DA5E5C9F1724A667003798D8 /* MPAppDelegate_Shared.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAppDelegate_Shared.h; sourceTree = "<group>"; };
|
DA5E5C9F1724A667003798D8 /* MPAppDelegate_Shared.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAppDelegate_Shared.h; sourceTree = "<group>"; };
|
||||||
DA5E5CA01724A667003798D8 /* MPAppDelegate_Shared.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAppDelegate_Shared.m; sourceTree = "<group>"; };
|
DA5E5CA01724A667003798D8 /* MPAppDelegate_Shared.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAppDelegate_Shared.m; sourceTree = "<group>"; };
|
||||||
DA5E5CA11724A667003798D8 /* MPAppDelegate_Store.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAppDelegate_Store.h; sourceTree = "<group>"; };
|
|
||||||
DA5E5CA21724A667003798D8 /* MPAppDelegate_Store.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAppDelegate_Store.m; sourceTree = "<group>"; };
|
|
||||||
DA5E5CA31724A667003798D8 /* MPConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPConfig.h; sourceTree = "<group>"; };
|
DA5E5CA31724A667003798D8 /* MPConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPConfig.h; sourceTree = "<group>"; };
|
||||||
DA5E5CA41724A667003798D8 /* MPConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPConfig.m; sourceTree = "<group>"; };
|
DA5E5CA41724A667003798D8 /* MPConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPConfig.m; sourceTree = "<group>"; };
|
||||||
DA5E5CAB1724A667003798D8 /* MPEntities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPEntities.h; sourceTree = "<group>"; };
|
DA5E5CAB1724A667003798D8 /* MPEntities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPEntities.h; sourceTree = "<group>"; };
|
||||||
@@ -737,18 +746,17 @@
|
|||||||
DA8ED892192906920099B726 /* PearlTween.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlTween.h; sourceTree = "<group>"; };
|
DA8ED892192906920099B726 /* PearlTween.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlTween.h; sourceTree = "<group>"; };
|
||||||
DA8ED894192906920099B726 /* map-macro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "map-macro.h"; sourceTree = "<group>"; };
|
DA8ED894192906920099B726 /* map-macro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "map-macro.h"; sourceTree = "<group>"; };
|
||||||
DAAA81AF195A8D1300FA30D9 /* gradient.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = gradient.png; sourceTree = "<group>"; };
|
DAAA81AF195A8D1300FA30D9 /* gradient.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = gradient.png; sourceTree = "<group>"; };
|
||||||
|
DAADCC3E19FAFFAD00987B1D /* NSNotificationCenter+PearlEasyCleanup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSNotificationCenter+PearlEasyCleanup.h"; sourceTree = "<group>"; };
|
||||||
|
DAADCC3F19FAFFAD00987B1D /* NSPersistentStore+PearlMigration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSPersistentStore+PearlMigration.h"; sourceTree = "<group>"; };
|
||||||
|
DAADCC4019FAFFAD00987B1D /* NSPersistentStore+PearlMigration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSPersistentStore+PearlMigration.m"; sourceTree = "<group>"; };
|
||||||
|
DAADCC5019FB006500987B1D /* libKCOrderedAccessorFix.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libKCOrderedAccessorFix.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
DAADCC6619FB007F00987B1D /* NSManagedObjectModel+KCOrderedAccessorFix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSManagedObjectModel+KCOrderedAccessorFix.h"; sourceTree = "<group>"; };
|
||||||
|
DAADCC6719FB007F00987B1D /* NSManagedObjectModel+KCOrderedAccessorFix.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSManagedObjectModel+KCOrderedAccessorFix.m"; sourceTree = "<group>"; };
|
||||||
DABB981515100B4000B05417 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
|
DABB981515100B4000B05417 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
|
||||||
DABC6C01175D8C85000C15D4 /* libRHStatusItemView.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRHStatusItemView.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
||||||
DABC6C13175D8CE1000C15D4 /* RHStatusItemView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RHStatusItemView.h; sourceTree = "<group>"; };
|
|
||||||
DABC6C14175D8CE1000C15D4 /* RHStatusItemView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RHStatusItemView.m; sourceTree = "<group>"; };
|
|
||||||
DAC6326C148680650075AEA5 /* libjrswizzle.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjrswizzle.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
DAC6326C148680650075AEA5 /* libjrswizzle.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjrswizzle.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
DAC632871486D95D0075AEA5 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
|
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; };
|
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 = "<group>"; };
|
DAC77CB1148291A600BCF976 /* Pearl-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "Pearl-Prefix.pch"; path = "../../MasterPassword/ObjC/Pearl/Pearl-Prefix.pch"; sourceTree = "<group>"; };
|
||||||
DACA22B71705DE7D002C6C22 /* UbiquityStoreManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UbiquityStoreManager.m; sourceTree = "<group>"; };
|
|
||||||
DACA22B81705DE7D002C6C22 /* NSError+UbiquityStoreManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSError+UbiquityStoreManager.h"; sourceTree = "<group>"; };
|
|
||||||
DACA22B91705DE7D002C6C22 /* NSError+UbiquityStoreManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSError+UbiquityStoreManager.m"; sourceTree = "<group>"; };
|
|
||||||
DACA22BA1705DE7D002C6C22 /* UbiquityStoreManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UbiquityStoreManager.h; sourceTree = "<group>"; };
|
|
||||||
DACA241C1705DF7D002C6C22 /* logo-bare.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "logo-bare.png"; sourceTree = "<group>"; };
|
DACA241C1705DF7D002C6C22 /* logo-bare.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "logo-bare.png"; sourceTree = "<group>"; };
|
||||||
DACA24321705DF7D002C6C22 /* avatar-13@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "avatar-13@2x.png"; sourceTree = "<group>"; };
|
DACA24321705DF7D002C6C22 /* avatar-13@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "avatar-13@2x.png"; sourceTree = "<group>"; };
|
||||||
DACA24331705DF7D002C6C22 /* avatar-3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "avatar-3@2x.png"; sourceTree = "<group>"; };
|
DACA24331705DF7D002C6C22 /* avatar-3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "avatar-3@2x.png"; sourceTree = "<group>"; };
|
||||||
@@ -796,6 +804,17 @@
|
|||||||
DACA29721705E1A8002C6C22 /* dictionary.lst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dictionary.lst; sourceTree = "<group>"; };
|
DACA29721705E1A8002C6C22 /* dictionary.lst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dictionary.lst; sourceTree = "<group>"; };
|
||||||
DACA29771705E2BD002C6C22 /* JRSwizzle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JRSwizzle.h; sourceTree = "<group>"; };
|
DACA29771705E2BD002C6C22 /* JRSwizzle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JRSwizzle.h; sourceTree = "<group>"; };
|
||||||
DACA298C1705E2BD002C6C22 /* JRSwizzle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JRSwizzle.m; sourceTree = "<group>"; };
|
DACA298C1705E2BD002C6C22 /* JRSwizzle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JRSwizzle.m; sourceTree = "<group>"; };
|
||||||
|
DAD0C5F619FD6034009CB08D /* icon_128x128.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_128x128.png; sourceTree = "<group>"; };
|
||||||
|
DAD0C5F719FD6034009CB08D /* icon_128x128@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_128x128@2x.png"; sourceTree = "<group>"; };
|
||||||
|
DAD0C5F819FD6034009CB08D /* icon_16x16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_16x16.png; sourceTree = "<group>"; };
|
||||||
|
DAD0C5F919FD6034009CB08D /* icon_16x16@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_16x16@2x.png"; sourceTree = "<group>"; };
|
||||||
|
DAD0C5FA19FD6034009CB08D /* icon_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_256x256.png; sourceTree = "<group>"; };
|
||||||
|
DAD0C5FB19FD6034009CB08D /* icon_256x256@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_256x256@2x.png"; sourceTree = "<group>"; };
|
||||||
|
DAD0C5FC19FD6034009CB08D /* icon_32x32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_32x32.png; sourceTree = "<group>"; };
|
||||||
|
DAD0C5FD19FD6034009CB08D /* icon_32x32@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_32x32@2x.png"; sourceTree = "<group>"; };
|
||||||
|
DAD0C5FE19FD6034009CB08D /* icon_512x512.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_512x512.png; sourceTree = "<group>"; };
|
||||||
|
DAD0C5FF19FD6034009CB08D /* icon_512x512@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_512x512@2x.png"; sourceTree = "<group>"; };
|
||||||
|
DAD0C60019FD6034009CB08D /* icon.sketch */ = {isa = PBXFileReference; lastKnownFileType = file; path = icon.sketch; sourceTree = "<group>"; };
|
||||||
DAD312C01552A20800A3F9ED /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; };
|
DAD312C01552A20800A3F9ED /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; };
|
||||||
DAD9B5E1176299B9001835F9 /* MasterPassword-Mac-LoginHelper.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "MasterPassword-Mac-LoginHelper.xcodeproj"; path = "MasterPassword-Mac-LoginHelper/MasterPassword-Mac-LoginHelper.xcodeproj"; sourceTree = "<group>"; };
|
DAD9B5E1176299B9001835F9 /* MasterPassword-Mac-LoginHelper.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "MasterPassword-Mac-LoginHelper.xcodeproj"; path = "MasterPassword-Mac-LoginHelper/MasterPassword-Mac-LoginHelper.xcodeproj"; sourceTree = "<group>"; };
|
||||||
DAD9B5EF1762CAA4001835F9 /* ServiceManagement.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ServiceManagement.framework; path = System/Library/Frameworks/ServiceManagement.framework; sourceTree = SDKROOT; };
|
DAD9B5EF1762CAA4001835F9 /* ServiceManagement.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ServiceManagement.framework; path = System/Library/Frameworks/ServiceManagement.framework; sourceTree = SDKROOT; };
|
||||||
@@ -854,30 +873,13 @@
|
|||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
DA2508F319513C1400AC23F1 /* Frameworks */ = {
|
|
||||||
isa = PBXFrameworksBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
DA2508F719513C1400AC23F1 /* Cocoa.framework in Frameworks */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
DA4425C81557BED40052177D /* Frameworks */ = {
|
|
||||||
isa = PBXFrameworksBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
DA4425CC1557BED40052177D /* Foundation.framework in Frameworks */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
DA5BFA41147E415C00F98B1E /* Frameworks */ = {
|
DA5BFA41147E415C00F98B1E /* Frameworks */ = {
|
||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
DAADCC6A19FB00B500987B1D /* libKCOrderedAccessorFix.a in Frameworks */,
|
||||||
DA250925195148E200AC23F1 /* QuartzCore.framework in Frameworks */,
|
DA250925195148E200AC23F1 /* QuartzCore.framework in Frameworks */,
|
||||||
DAD9B5F01762CAA4001835F9 /* ServiceManagement.framework in Frameworks */,
|
DAD9B5F01762CAA4001835F9 /* ServiceManagement.framework in Frameworks */,
|
||||||
DABC6C16175D8E3A000C15D4 /* libRHStatusItemView.a in Frameworks */,
|
|
||||||
DA16B33F170661D4000A0EAB /* libUbiquityStoreManager.a in Frameworks */,
|
|
||||||
DA16B341170661DB000A0EAB /* Carbon.framework in Frameworks */,
|
DA16B341170661DB000A0EAB /* Carbon.framework in Frameworks */,
|
||||||
DA16B342170661E0000A0EAB /* Security.framework in Frameworks */,
|
DA16B342170661E0000A0EAB /* Security.framework in Frameworks */,
|
||||||
DA16B345170661F2000A0EAB /* libPearl.a in Frameworks */,
|
DA16B345170661F2000A0EAB /* libPearl.a in Frameworks */,
|
||||||
@@ -886,11 +888,10 @@
|
|||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
DABC6BFE175D8C85000C15D4 /* Frameworks */ = {
|
DAADCC4D19FB006500987B1D /* Frameworks */ = {
|
||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
DABC6C02175D8C85000C15D4 /* Foundation.framework in Frameworks */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -906,6 +907,7 @@
|
|||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
DAADCC4B19FB000C00987B1D /* QuartzCore.framework in Frameworks */,
|
||||||
DAE8E65519867AE200416A0F /* libopensslcrypto-osx.a in Frameworks */,
|
DAE8E65519867AE200416A0F /* libopensslcrypto-osx.a in Frameworks */,
|
||||||
DA4DA1D91564471A00F6F596 /* libjrswizzle.a in Frameworks */,
|
DA4DA1D91564471A00F6F596 /* libjrswizzle.a in Frameworks */,
|
||||||
DAC77CAE148291A600BCF976 /* Foundation.framework in Frameworks */,
|
DAC77CAE148291A600BCF976 /* Foundation.framework in Frameworks */,
|
||||||
@@ -953,9 +955,7 @@
|
|||||||
DA5BFA44147E415C00F98B1E /* Master Password.app */,
|
DA5BFA44147E415C00F98B1E /* Master Password.app */,
|
||||||
DAC77CAD148291A600BCF976 /* libPearl.a */,
|
DAC77CAD148291A600BCF976 /* libPearl.a */,
|
||||||
DAC6326C148680650075AEA5 /* libjrswizzle.a */,
|
DAC6326C148680650075AEA5 /* libjrswizzle.a */,
|
||||||
DA4425CB1557BED40052177D /* libUbiquityStoreManager.a */,
|
DAADCC5019FB006500987B1D /* libKCOrderedAccessorFix.a */,
|
||||||
DABC6C01175D8C85000C15D4 /* libRHStatusItemView.a */,
|
|
||||||
DA2508F619513C1400AC23F1 /* libRMBlurredView.a */,
|
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -995,39 +995,41 @@
|
|||||||
DA5E5C961724A667003798D8 /* ObjC */ = {
|
DA5E5C961724A667003798D8 /* ObjC */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
DA32CFE319CF1C71004F3F0E /* MPUserEntity.h */,
|
|
||||||
DA32CFE419CF1C71004F3F0E /* MPUserEntity.m */,
|
|
||||||
DA32CFE019CF1C71004F3F0E /* MPSiteQuestionEntity.h */,
|
|
||||||
DA32CFE119CF1C71004F3F0E /* MPSiteQuestionEntity.m */,
|
|
||||||
DA32CFDD19CF1C70004F3F0E /* MPSiteEntity.h */,
|
|
||||||
DA32CFDE19CF1C70004F3F0E /* MPSiteEntity.m */,
|
|
||||||
DA32CFDA19CF1C70004F3F0E /* MPStoredSiteEntity.h */,
|
|
||||||
DA32CFDB19CF1C70004F3F0E /* MPStoredSiteEntity.m */,
|
|
||||||
DA32CFD719CF1C70004F3F0E /* MPGeneratedSiteEntity.h */,
|
|
||||||
DA32CFD819CF1C70004F3F0E /* MPGeneratedSiteEntity.m */,
|
|
||||||
DA3B8454190FC89700246EEA /* MPFixable.m */,
|
|
||||||
DA3B8455190FC89700246EEA /* MPFixable.h */,
|
|
||||||
DA5E5CB21724A667003798D8 /* Mac */,
|
DA5E5CB21724A667003798D8 /* Mac */,
|
||||||
|
DA29992619C6A89900AF7DF1 /* MasterPassword.xcdatamodeld */,
|
||||||
DA5E5C971724A667003798D8 /* MPAlgorithm.h */,
|
DA5E5C971724A667003798D8 /* MPAlgorithm.h */,
|
||||||
DA5E5C981724A667003798D8 /* MPAlgorithm.m */,
|
DA5E5C981724A667003798D8 /* MPAlgorithm.m */,
|
||||||
DA5E5C991724A667003798D8 /* MPAlgorithmV0.h */,
|
DA5E5C991724A667003798D8 /* MPAlgorithmV0.h */,
|
||||||
DA5E5C9A1724A667003798D8 /* MPAlgorithmV0.m */,
|
DA5E5C9A1724A667003798D8 /* MPAlgorithmV0.m */,
|
||||||
DA5E5C9B1724A667003798D8 /* MPAlgorithmV1.h */,
|
DA5E5C9B1724A667003798D8 /* MPAlgorithmV1.h */,
|
||||||
DA5E5C9C1724A667003798D8 /* MPAlgorithmV1.m */,
|
DA5E5C9C1724A667003798D8 /* MPAlgorithmV1.m */,
|
||||||
|
DA5180C619FF2F9200A587E9 /* MPAlgorithmV2.h */,
|
||||||
|
DA5180C719FF2F9200A587E9 /* MPAlgorithmV2.m */,
|
||||||
DA5E5C9D1724A667003798D8 /* MPAppDelegate_Key.h */,
|
DA5E5C9D1724A667003798D8 /* MPAppDelegate_Key.h */,
|
||||||
DA5E5C9E1724A667003798D8 /* MPAppDelegate_Key.m */,
|
DA5E5C9E1724A667003798D8 /* MPAppDelegate_Key.m */,
|
||||||
DA5E5C9F1724A667003798D8 /* MPAppDelegate_Shared.h */,
|
DA5E5C9F1724A667003798D8 /* MPAppDelegate_Shared.h */,
|
||||||
DA5E5CA01724A667003798D8 /* MPAppDelegate_Shared.m */,
|
DA5E5CA01724A667003798D8 /* MPAppDelegate_Shared.m */,
|
||||||
DA5E5CA11724A667003798D8 /* MPAppDelegate_Store.h */,
|
DA5180CC19FF307E00A587E9 /* MPAppDelegate_Store.h */,
|
||||||
DA5E5CA21724A667003798D8 /* MPAppDelegate_Store.m */,
|
DA5180CD19FF307E00A587E9 /* MPAppDelegate_Store.m */,
|
||||||
DA5E5CA31724A667003798D8 /* MPConfig.h */,
|
DA5E5CA31724A667003798D8 /* MPConfig.h */,
|
||||||
DA5E5CA41724A667003798D8 /* MPConfig.m */,
|
DA5E5CA41724A667003798D8 /* MPConfig.m */,
|
||||||
DA5E5CAB1724A667003798D8 /* MPEntities.h */,
|
DA5E5CAB1724A667003798D8 /* MPEntities.h */,
|
||||||
DA5E5CAC1724A667003798D8 /* MPEntities.m */,
|
DA5E5CAC1724A667003798D8 /* MPEntities.m */,
|
||||||
|
DA3B8455190FC89700246EEA /* MPFixable.h */,
|
||||||
|
DA3B8454190FC89700246EEA /* MPFixable.m */,
|
||||||
|
DA32CFD719CF1C70004F3F0E /* MPGeneratedSiteEntity.h */,
|
||||||
|
DA32CFD819CF1C70004F3F0E /* MPGeneratedSiteEntity.m */,
|
||||||
DA5E5CAD1724A667003798D8 /* MPKey.h */,
|
DA5E5CAD1724A667003798D8 /* MPKey.h */,
|
||||||
DA5E5CAE1724A667003798D8 /* MPKey.m */,
|
DA5E5CAE1724A667003798D8 /* MPKey.m */,
|
||||||
|
DA32CFDD19CF1C70004F3F0E /* MPSiteEntity.h */,
|
||||||
|
DA32CFDE19CF1C70004F3F0E /* MPSiteEntity.m */,
|
||||||
|
DA32CFE019CF1C71004F3F0E /* MPSiteQuestionEntity.h */,
|
||||||
|
DA32CFE119CF1C71004F3F0E /* MPSiteQuestionEntity.m */,
|
||||||
|
DA32CFDA19CF1C70004F3F0E /* MPStoredSiteEntity.h */,
|
||||||
|
DA32CFDB19CF1C70004F3F0E /* MPStoredSiteEntity.m */,
|
||||||
DA5E5CAF1724A667003798D8 /* MPTypes.h */,
|
DA5E5CAF1724A667003798D8 /* MPTypes.h */,
|
||||||
DA29992619C6A89900AF7DF1 /* MasterPassword.xcdatamodeld */,
|
DA32CFE319CF1C71004F3F0E /* MPUserEntity.h */,
|
||||||
|
DA32CFE419CF1C71004F3F0E /* MPUserEntity.m */,
|
||||||
);
|
);
|
||||||
name = ObjC;
|
name = ObjC;
|
||||||
path = ..;
|
path = ..;
|
||||||
@@ -1059,6 +1061,8 @@
|
|||||||
93D39368EF3CBFEF2AFCA15A /* MPInitialWindowController.h */,
|
93D39368EF3CBFEF2AFCA15A /* MPInitialWindowController.h */,
|
||||||
93D39423D7BF4FD31FE6D27C /* MPSitesTableView.m */,
|
93D39423D7BF4FD31FE6D27C /* MPSitesTableView.m */,
|
||||||
93D39AC6360DDC16AEAA4119 /* MPSitesTableView.h */,
|
93D39AC6360DDC16AEAA4119 /* MPSitesTableView.h */,
|
||||||
|
93D39538C4CEFF46DF379254 /* MPNoStateButton.m */,
|
||||||
|
93D392A4F3DE0BD758B9B056 /* MPNoStateButton.h */,
|
||||||
);
|
);
|
||||||
path = Mac;
|
path = Mac;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -1480,14 +1484,13 @@
|
|||||||
path = include;
|
path = include;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
DABC6C0E175D8CE1000C15D4 /* RHStatusItemView */ = {
|
DAADCC6819FB007F00987B1D /* KCOrderedAccessorFix */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
DABC6C13175D8CE1000C15D4 /* RHStatusItemView.h */,
|
DAADCC6619FB007F00987B1D /* NSManagedObjectModel+KCOrderedAccessorFix.h */,
|
||||||
DABC6C14175D8CE1000C15D4 /* RHStatusItemView.m */,
|
DAADCC6719FB007F00987B1D /* NSManagedObjectModel+KCOrderedAccessorFix.m */,
|
||||||
);
|
);
|
||||||
name = RHStatusItemView;
|
path = KCOrderedAccessorFix;
|
||||||
path = RHStatusItemView/RHStatusItemView;
|
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
DAC77CAF148291A600BCF976 /* Pearl */ = {
|
DAC77CAF148291A600BCF976 /* Pearl */ = {
|
||||||
@@ -1503,28 +1506,15 @@
|
|||||||
DACA22121705DDC5002C6C22 /* External */ = {
|
DACA22121705DDC5002C6C22 /* External */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
DAADCC6819FB007F00987B1D /* KCOrderedAccessorFix */,
|
||||||
DA3B8449190FC5A900246EEA /* Mac */,
|
DA3B8449190FC5A900246EEA /* Mac */,
|
||||||
DABC6C0E175D8CE1000C15D4 /* RHStatusItemView */,
|
|
||||||
DACA29751705E2BD002C6C22 /* jrswizzle */,
|
DACA29751705E2BD002C6C22 /* jrswizzle */,
|
||||||
DAC77CAF148291A600BCF976 /* Pearl */,
|
DAC77CAF148291A600BCF976 /* Pearl */,
|
||||||
DACA22B61705DE7D002C6C22 /* UbiquityStoreManager */,
|
|
||||||
);
|
);
|
||||||
name = External;
|
name = External;
|
||||||
path = ../../../External;
|
path = ../../../External;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
DACA22B61705DE7D002C6C22 /* UbiquityStoreManager */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
DACA22BA1705DE7D002C6C22 /* UbiquityStoreManager.h */,
|
|
||||||
DACA22B71705DE7D002C6C22 /* UbiquityStoreManager.m */,
|
|
||||||
DACA22B81705DE7D002C6C22 /* NSError+UbiquityStoreManager.h */,
|
|
||||||
DACA22B91705DE7D002C6C22 /* NSError+UbiquityStoreManager.m */,
|
|
||||||
);
|
|
||||||
name = UbiquityStoreManager;
|
|
||||||
path = UbiquityStoreManager/UbiquityStoreManager;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
DACA23B41705DF7D002C6C22 /* Resources */ = {
|
DACA23B41705DF7D002C6C22 /* Resources */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@@ -1539,6 +1529,7 @@
|
|||||||
DACA23B51705DF7D002C6C22 /* Media */ = {
|
DACA23B51705DF7D002C6C22 /* Media */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
DAD0C5F419FD6034009CB08D /* mac */,
|
||||||
DA6558A319A99609009A0BEB /* Images.xcassets */,
|
DA6558A319A99609009A0BEB /* Images.xcassets */,
|
||||||
DA606FE9195D03E200CA98B5 /* Insignia */,
|
DA606FE9195D03E200CA98B5 /* Insignia */,
|
||||||
DAAA81AF195A8D1300FA30D9 /* gradient.png */,
|
DAAA81AF195A8D1300FA30D9 /* gradient.png */,
|
||||||
@@ -1636,8 +1627,33 @@
|
|||||||
DACA29771705E2BD002C6C22 /* JRSwizzle.h */,
|
DACA29771705E2BD002C6C22 /* JRSwizzle.h */,
|
||||||
DACA298C1705E2BD002C6C22 /* JRSwizzle.m */,
|
DACA298C1705E2BD002C6C22 /* JRSwizzle.m */,
|
||||||
);
|
);
|
||||||
name = jrswizzle;
|
path = jrswizzle;
|
||||||
path = Pearl/External/jrswizzle;
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
DAD0C5F419FD6034009CB08D /* mac */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
DAD0C5F519FD6034009CB08D /* icon */,
|
||||||
|
DAD0C60019FD6034009CB08D /* icon.sketch */,
|
||||||
|
);
|
||||||
|
path = mac;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
DAD0C5F519FD6034009CB08D /* icon */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
DAD0C5F619FD6034009CB08D /* icon_128x128.png */,
|
||||||
|
DAD0C5F719FD6034009CB08D /* icon_128x128@2x.png */,
|
||||||
|
DAD0C5F819FD6034009CB08D /* icon_16x16.png */,
|
||||||
|
DAD0C5F919FD6034009CB08D /* icon_16x16@2x.png */,
|
||||||
|
DAD0C5FA19FD6034009CB08D /* icon_256x256.png */,
|
||||||
|
DAD0C5FB19FD6034009CB08D /* icon_256x256@2x.png */,
|
||||||
|
DAD0C5FC19FD6034009CB08D /* icon_32x32.png */,
|
||||||
|
DAD0C5FD19FD6034009CB08D /* icon_32x32@2x.png */,
|
||||||
|
DAD0C5FE19FD6034009CB08D /* icon_512x512.png */,
|
||||||
|
DAD0C5FF19FD6034009CB08D /* icon_512x512@2x.png */,
|
||||||
|
);
|
||||||
|
path = icon;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
DAD9B5E2176299B9001835F9 /* Products */ = {
|
DAD9B5E2176299B9001835F9 /* Products */ = {
|
||||||
@@ -1660,6 +1676,9 @@
|
|||||||
DAFE45D715039823003ABA7C /* Pearl */ = {
|
DAFE45D715039823003ABA7C /* Pearl */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
DAADCC3E19FAFFAD00987B1D /* NSNotificationCenter+PearlEasyCleanup.h */,
|
||||||
|
DAADCC3F19FAFFAD00987B1D /* NSPersistentStore+PearlMigration.h */,
|
||||||
|
DAADCC4019FAFFAD00987B1D /* NSPersistentStore+PearlMigration.m */,
|
||||||
DA8ED891192906920099B726 /* PearlTween.m */,
|
DA8ED891192906920099B726 /* PearlTween.m */,
|
||||||
DA8ED892192906920099B726 /* PearlTween.h */,
|
DA8ED892192906920099B726 /* PearlTween.h */,
|
||||||
DA8ED893192906920099B726 /* include */,
|
DA8ED893192906920099B726 /* include */,
|
||||||
@@ -1750,22 +1769,6 @@
|
|||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXHeadersBuildPhase section */
|
/* Begin PBXHeadersBuildPhase section */
|
||||||
DA2508F419513C1400AC23F1 /* Headers */ = {
|
|
||||||
isa = PBXHeadersBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
DA4425C91557BED40052177D /* Headers */ = {
|
|
||||||
isa = PBXHeadersBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
DACA22BC1705DE7D002C6C22 /* NSError+UbiquityStoreManager.h in Headers */,
|
|
||||||
DACA22BE1705DE7D002C6C22 /* UbiquityStoreManager.h in Headers */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
DAC6326A148680650075AEA5 /* Headers */ = {
|
DAC6326A148680650075AEA5 /* Headers */ = {
|
||||||
isa = PBXHeadersBuildPhase;
|
isa = PBXHeadersBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
@@ -1807,12 +1810,14 @@
|
|||||||
DAFE4A3A15039824003ABA7C /* PearlSCrypt.h in Headers */,
|
DAFE4A3A15039824003ABA7C /* PearlSCrypt.h in Headers */,
|
||||||
DA30E9CE15722ECA00A68B4C /* NSBundle+PearlMutableInfo.h in Headers */,
|
DA30E9CE15722ECA00A68B4C /* NSBundle+PearlMutableInfo.h in Headers */,
|
||||||
DA30E9D715723E6900A68B4C /* PearlLazy.h in Headers */,
|
DA30E9D715723E6900A68B4C /* PearlLazy.h in Headers */,
|
||||||
|
DAADCC4719FAFFAD00987B1D /* NSNotificationCenter+PearlEasyCleanup.h in Headers */,
|
||||||
DAFE4A63150399FF003ABA88 /* NSObject+PearlKVO.h in Headers */,
|
DAFE4A63150399FF003ABA88 /* NSObject+PearlKVO.h in Headers */,
|
||||||
DAFE4A63150399FF003ABA94 /* NSDateFormatter+RFC3339.h in Headers */,
|
DAFE4A63150399FF003ABA94 /* NSDateFormatter+RFC3339.h in Headers */,
|
||||||
93D39C34FE35830EF5BE1D2A /* NSArray+Indexing.h in Headers */,
|
93D39C34FE35830EF5BE1D2A /* NSArray+Indexing.h in Headers */,
|
||||||
93D392EC39DA43C46C692C12 /* NSDictionary+Indexing.h in Headers */,
|
93D392EC39DA43C46C692C12 /* NSDictionary+Indexing.h in Headers */,
|
||||||
DA3509FE15F101A500C14A8E /* PearlQueue.h in Headers */,
|
DA3509FE15F101A500C14A8E /* PearlQueue.h in Headers */,
|
||||||
DA2CA4EE18D323D3007798F8 /* NSError+PearlFullDescription.h in Headers */,
|
DA2CA4EE18D323D3007798F8 /* NSError+PearlFullDescription.h in Headers */,
|
||||||
|
DAADCC4819FAFFAD00987B1D /* NSPersistentStore+PearlMigration.h in Headers */,
|
||||||
93D39D304F73B3BBA031522A /* PearlProfiler.h in Headers */,
|
93D39D304F73B3BBA031522A /* PearlProfiler.h in Headers */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
@@ -1820,44 +1825,11 @@
|
|||||||
/* End PBXHeadersBuildPhase section */
|
/* End PBXHeadersBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
/* Begin PBXNativeTarget section */
|
||||||
DA2508F519513C1400AC23F1 /* RMBlurredView */ = {
|
|
||||||
isa = PBXNativeTarget;
|
|
||||||
buildConfigurationList = DA25091519513C1500AC23F1 /* Build configuration list for PBXNativeTarget "RMBlurredView" */;
|
|
||||||
buildPhases = (
|
|
||||||
DA2508F219513C1400AC23F1 /* Sources */,
|
|
||||||
DA2508F319513C1400AC23F1 /* Frameworks */,
|
|
||||||
DA2508F419513C1400AC23F1 /* Headers */,
|
|
||||||
);
|
|
||||||
buildRules = (
|
|
||||||
);
|
|
||||||
dependencies = (
|
|
||||||
);
|
|
||||||
name = RMBlurredView;
|
|
||||||
productName = RMBlurredView;
|
|
||||||
productReference = DA2508F619513C1400AC23F1 /* libRMBlurredView.a */;
|
|
||||||
productType = "com.apple.product-type.library.static";
|
|
||||||
};
|
|
||||||
DA4425CA1557BED40052177D /* UbiquityStoreManager */ = {
|
|
||||||
isa = PBXNativeTarget;
|
|
||||||
buildConfigurationList = DA4425D31557BED40052177D /* Build configuration list for PBXNativeTarget "UbiquityStoreManager" */;
|
|
||||||
buildPhases = (
|
|
||||||
DA4425C71557BED40052177D /* Sources */,
|
|
||||||
DA4425C81557BED40052177D /* Frameworks */,
|
|
||||||
DA4425C91557BED40052177D /* Headers */,
|
|
||||||
);
|
|
||||||
buildRules = (
|
|
||||||
);
|
|
||||||
dependencies = (
|
|
||||||
);
|
|
||||||
name = UbiquityStoreManager;
|
|
||||||
productName = iCloudStoreManager;
|
|
||||||
productReference = DA4425CB1557BED40052177D /* libUbiquityStoreManager.a */;
|
|
||||||
productType = "com.apple.product-type.library.static";
|
|
||||||
};
|
|
||||||
DA5BFA43147E415C00F98B1E /* MasterPassword */ = {
|
DA5BFA43147E415C00F98B1E /* MasterPassword */ = {
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = DA5BFA6D147E415C00F98B1E /* Build configuration list for PBXNativeTarget "MasterPassword" */;
|
buildConfigurationList = DA5BFA6D147E415C00F98B1E /* Build configuration list for PBXNativeTarget "MasterPassword" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
|
DA4EF9CB19FD4B600032ECB5 /* Run Script: genassets */,
|
||||||
DA5BFA40147E415C00F98B1E /* Sources */,
|
DA5BFA40147E415C00F98B1E /* Sources */,
|
||||||
DA5BFA41147E415C00F98B1E /* Frameworks */,
|
DA5BFA41147E415C00F98B1E /* Frameworks */,
|
||||||
DA5BFA42147E415C00F98B1E /* Resources */,
|
DA5BFA42147E415C00F98B1E /* Resources */,
|
||||||
@@ -1875,20 +1847,21 @@
|
|||||||
productReference = DA5BFA44147E415C00F98B1E /* Master Password.app */;
|
productReference = DA5BFA44147E415C00F98B1E /* Master Password.app */;
|
||||||
productType = "com.apple.product-type.application";
|
productType = "com.apple.product-type.application";
|
||||||
};
|
};
|
||||||
DABC6C00175D8C85000C15D4 /* RHStatusItemView */ = {
|
DAADCC4F19FB006500987B1D /* KCOrderedAccessorFix */ = {
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = DABC6C0A175D8C85000C15D4 /* Build configuration list for PBXNativeTarget "RHStatusItemView" */;
|
buildConfigurationList = DAADCC5E19FB006500987B1D /* Build configuration list for PBXNativeTarget "KCOrderedAccessorFix" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
DABC6BFD175D8C85000C15D4 /* Sources */,
|
DAADCC4C19FB006500987B1D /* Sources */,
|
||||||
DABC6BFE175D8C85000C15D4 /* Frameworks */,
|
DAADCC4D19FB006500987B1D /* Frameworks */,
|
||||||
|
DAADCC4E19FB006500987B1D /* CopyFiles */,
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
dependencies = (
|
dependencies = (
|
||||||
);
|
);
|
||||||
name = RHStatusItemView;
|
name = KCOrderedAccessorFix;
|
||||||
productName = RHStatusItemView;
|
productName = KCOrderedAccessorFix;
|
||||||
productReference = DABC6C01175D8C85000C15D4 /* libRHStatusItemView.a */;
|
productReference = DAADCC5019FB006500987B1D /* libKCOrderedAccessorFix.a */;
|
||||||
productType = "com.apple.product-type.library.static";
|
productType = "com.apple.product-type.library.static";
|
||||||
};
|
};
|
||||||
DAC6326B148680650075AEA5 /* jrswizzle */ = {
|
DAC6326B148680650075AEA5 /* jrswizzle */ = {
|
||||||
@@ -1935,7 +1908,7 @@
|
|||||||
attributes = {
|
attributes = {
|
||||||
CLASSPREFIX = MP;
|
CLASSPREFIX = MP;
|
||||||
LastTestingUpgradeCheck = 0510;
|
LastTestingUpgradeCheck = 0510;
|
||||||
LastUpgradeCheck = 0600;
|
LastUpgradeCheck = 0610;
|
||||||
ORGANIZATIONNAME = Lyndir;
|
ORGANIZATIONNAME = Lyndir;
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
DA5BFA43147E415C00F98B1E = {
|
DA5BFA43147E415C00F98B1E = {
|
||||||
@@ -1946,6 +1919,9 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
DAADCC4F19FB006500987B1D = {
|
||||||
|
CreatedOnToolsVersion = 6.0.1;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
buildConfigurationList = DA5BFA3E147E415C00F98B1E /* Build configuration list for PBXProject "MasterPassword-Mac" */;
|
buildConfigurationList = DA5BFA3E147E415C00F98B1E /* Build configuration list for PBXProject "MasterPassword-Mac" */;
|
||||||
@@ -1954,6 +1930,7 @@
|
|||||||
hasScannedForEncodings = 0;
|
hasScannedForEncodings = 0;
|
||||||
knownRegions = (
|
knownRegions = (
|
||||||
en,
|
en,
|
||||||
|
nl,
|
||||||
);
|
);
|
||||||
mainGroup = DA5BFA39147E415C00F98B1E;
|
mainGroup = DA5BFA39147E415C00F98B1E;
|
||||||
productRefGroup = DA5BFA45147E415C00F98B1E /* Products */;
|
productRefGroup = DA5BFA45147E415C00F98B1E /* Products */;
|
||||||
@@ -1969,9 +1946,7 @@
|
|||||||
DA5BFA43147E415C00F98B1E /* MasterPassword */,
|
DA5BFA43147E415C00F98B1E /* MasterPassword */,
|
||||||
DAC77CAC148291A600BCF976 /* Pearl */,
|
DAC77CAC148291A600BCF976 /* Pearl */,
|
||||||
DAC6326B148680650075AEA5 /* jrswizzle */,
|
DAC6326B148680650075AEA5 /* jrswizzle */,
|
||||||
DA4425CA1557BED40052177D /* UbiquityStoreManager */,
|
DAADCC4F19FB006500987B1D /* KCOrderedAccessorFix */,
|
||||||
DABC6C00175D8C85000C15D4 /* RHStatusItemView */,
|
|
||||||
DA2508F519513C1400AC23F1 /* RMBlurredView */,
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
/* End PBXProject section */
|
/* End PBXProject section */
|
||||||
@@ -2072,6 +2047,21 @@
|
|||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "";
|
shellScript = "";
|
||||||
};
|
};
|
||||||
|
DA4EF9CB19FD4B600032ECB5 /* Run Script: genassets */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
);
|
||||||
|
name = "Run Script: genassets";
|
||||||
|
outputPaths = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = "/bin/sh -e";
|
||||||
|
shellScript = "exec ../../../Scripts/genassets";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
DA6556E314D55F3000841C99 /* Run Script: GIT version -> Info.plist */ = {
|
DA6556E314D55F3000841C99 /* Run Script: GIT version -> Info.plist */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
@@ -2083,8 +2073,8 @@
|
|||||||
outputPaths = (
|
outputPaths = (
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = "/bin/bash -e";
|
shellPath = "/bin/sh -e";
|
||||||
shellScript = "PATH+=:/usr/libexec\n\naddPlistWithKey() {\n local key=$1 type=$2 value=$3 plist=${4:-\"$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH\"}\n \n PlistBuddy -c \"Delete :'$key'\" \"$plist\" 2>/dev/null || true\n PlistBuddy -c \"Add :'$key' '$type' '$value'\" \"$plist\"\n}\nsetPlistWithKey() {\n local key=$1 value=$2 plist=${3:-\"$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH\"}\n \n PlistBuddy -c \"Set :'$key' '$value'\" \"$plist\"\n}\ngetPlistWithKey() {\n local key=$1 plist=${2:-\"$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH\"}\n \n PlistBuddy -c \"Print :'$key'\" \"$plist\"\n}\nsetSettingWithTitle() {\n local i title=$1 value=$2 plist=${3:-\"$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Settings.bundle/Root.plist\"}\n \n for (( i=0; 1; ++i )); do\n PlistBuddy -c \"Print :PreferenceSpecifiers:$i\" \"$plist\" &>/dev/null || break\n echo \"Checking preference specifier $i\"\n \n [[ $(PlistBuddy -c \"Print :PreferenceSpecifiers:$i:Title\" \"$plist\" 2>/dev/null) = $title ]] || continue\n \n echo \"Correct title, setting value.\"\n PlistBuddy -c \"Set :PreferenceSpecifiers:$i:DefaultValue $value\" \"$plist\"\n break\n done\n}\n\ndescription=$(git describe --always --dirty --long)\nversion=${description%-g*}\nIFS=- read major minor <<< \"$version\"\nprintf -v version '%s.%02d' \"$major\" \"$minor\"\nprintf -v commit '%09d' \"$((16#${description##*-g}))\"\n\naddPlistWithKey GITDescription string \"$description\"\nsetPlistWithKey CFBundleVersion \"${version//.}$commit\" # No separator between version and commit because I had already submitted a CFBundleVersion with a really high major. Cry.\nsetPlistWithKey CFBundleShortVersionString \"$version\"\n\nsetSettingWithTitle \"Build\" \"$commit\"\nsetSettingWithTitle \"Version\" \"$version\"\nsetSettingWithTitle \"Copyright\" \"$(getPlistWithKey NSHumanReadableCopyright)\"\n\nif [[ $DEPLOYMENT_LOCATION = YES ]]; then\n # This build is a release. Do some release checks.\n passed=1\n [[ $description != *-dirty ]] || \\\n { passed=0; echo >&2 \"ERROR: Cannot release a dirty version, first commit any changes.\"; }\n [[ $(PlistBuddy -c \"Print :'API Key'\" \"$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Crashlytics.plist\") ]] || \\\n { passed=0; echo >&2 \"ERROR: Cannot release: Crashlytics API key is missing.\"; }\n (( passed )) || \\\n { echo >&2 \"Failed to pass release checks. Fix the above errors and re-try. Aborting.\"; exit 1; }\nfi";
|
shellScript = "exec ../../../Scripts/updatePlist";
|
||||||
showEnvVarsInLog = 0;
|
showEnvVarsInLog = 0;
|
||||||
};
|
};
|
||||||
DAD3125D155288AA00A3F9ED /* Run Script: Crashlytics */ = {
|
DAD3125D155288AA00A3F9ED /* Run Script: Crashlytics */ = {
|
||||||
@@ -2105,22 +2095,6 @@
|
|||||||
/* End PBXShellScriptBuildPhase section */
|
/* End PBXShellScriptBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXSourcesBuildPhase section */
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
DA2508F219513C1400AC23F1 /* Sources */ = {
|
|
||||||
isa = PBXSourcesBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
DA4425C71557BED40052177D /* Sources */ = {
|
|
||||||
isa = PBXSourcesBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
DACA22BB1705DE7D002C6C22 /* UbiquityStoreManager.m in Sources */,
|
|
||||||
DACA22BD1705DE7D002C6C22 /* NSError+UbiquityStoreManager.m in Sources */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
DA5BFA40147E415C00F98B1E /* Sources */ = {
|
DA5BFA40147E415C00F98B1E /* Sources */ = {
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
@@ -2131,8 +2105,8 @@
|
|||||||
DA5E5CF71724A667003798D8 /* MPAlgorithmV0.m in Sources */,
|
DA5E5CF71724A667003798D8 /* MPAlgorithmV0.m in Sources */,
|
||||||
DA5E5CF81724A667003798D8 /* MPAlgorithmV1.m in Sources */,
|
DA5E5CF81724A667003798D8 /* MPAlgorithmV1.m in Sources */,
|
||||||
DA5E5CF91724A667003798D8 /* MPAppDelegate_Key.m in Sources */,
|
DA5E5CF91724A667003798D8 /* MPAppDelegate_Key.m in Sources */,
|
||||||
|
DA5180CE19FF307E00A587E9 /* MPAppDelegate_Store.m in Sources */,
|
||||||
DA5E5CFA1724A667003798D8 /* MPAppDelegate_Shared.m in Sources */,
|
DA5E5CFA1724A667003798D8 /* MPAppDelegate_Shared.m in Sources */,
|
||||||
DA5E5CFB1724A667003798D8 /* MPAppDelegate_Store.m in Sources */,
|
|
||||||
DA5E5CFC1724A667003798D8 /* MPConfig.m in Sources */,
|
DA5E5CFC1724A667003798D8 /* MPConfig.m in Sources */,
|
||||||
DA29992C19C6A89900AF7DF1 /* MasterPassword.xcdatamodeld in Sources */,
|
DA29992C19C6A89900AF7DF1 /* MasterPassword.xcdatamodeld in Sources */,
|
||||||
DA3B8456190FC89700246EEA /* MPFixable.m in Sources */,
|
DA3B8456190FC89700246EEA /* MPFixable.m in Sources */,
|
||||||
@@ -2143,20 +2117,22 @@
|
|||||||
DA5E5D041724A667003798D8 /* MPMacConfig.m in Sources */,
|
DA5E5D041724A667003798D8 /* MPMacConfig.m in Sources */,
|
||||||
DA5E5D0C1724A667003798D8 /* main.m in Sources */,
|
DA5E5D0C1724A667003798D8 /* main.m in Sources */,
|
||||||
93D39C5789EFA607CF788082 /* MPSiteModel.m in Sources */,
|
93D39C5789EFA607CF788082 /* MPSiteModel.m in Sources */,
|
||||||
|
DA5180CA19FF2F9200A587E9 /* MPAlgorithmV2.m in Sources */,
|
||||||
93D39F833DEC1C89B2F795AC /* MPPasswordWindowController.m in Sources */,
|
93D39F833DEC1C89B2F795AC /* MPPasswordWindowController.m in Sources */,
|
||||||
DA32CFD919CF1C70004F3F0E /* MPGeneratedSiteEntity.m in Sources */,
|
DA32CFD919CF1C70004F3F0E /* MPGeneratedSiteEntity.m in Sources */,
|
||||||
93D390C676DF52DA7E459F19 /* MPPasswordWindow.m in Sources */,
|
93D390C676DF52DA7E459F19 /* MPPasswordWindow.m in Sources */,
|
||||||
93D39784E725A34D1EE3FB3B /* MPInitialWindowController.m in Sources */,
|
93D39784E725A34D1EE3FB3B /* MPInitialWindowController.m in Sources */,
|
||||||
DA32CFDF19CF1C70004F3F0E /* MPSiteEntity.m in Sources */,
|
DA32CFDF19CF1C70004F3F0E /* MPSiteEntity.m in Sources */,
|
||||||
93D394C4254EEB45FB335AFB /* MPSitesTableView.m in Sources */,
|
93D394C4254EEB45FB335AFB /* MPSitesTableView.m in Sources */,
|
||||||
|
93D395E4830290EBB6E71F34 /* MPNoStateButton.m in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
DABC6BFD175D8C85000C15D4 /* Sources */ = {
|
DAADCC4C19FB006500987B1D /* Sources */ = {
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
DABC6C15175D8CE1000C15D4 /* RHStatusItemView.m in Sources */,
|
DAADCC6919FB007F00987B1D /* NSManagedObjectModel+KCOrderedAccessorFix.m in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -2173,6 +2149,7 @@
|
|||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
DAFE4A1415039824003ABA7C /* NSObject+PearlExport.m in Sources */,
|
DAFE4A1415039824003ABA7C /* NSObject+PearlExport.m in Sources */,
|
||||||
|
DAADCC4919FAFFAD00987B1D /* NSPersistentStore+PearlMigration.m in Sources */,
|
||||||
DAFE4A1615039824003ABA7C /* NSString+PearlNSArrayFormat.m in Sources */,
|
DAFE4A1615039824003ABA7C /* NSString+PearlNSArrayFormat.m in Sources */,
|
||||||
DAFE4A1815039824003ABA7C /* NSString+PearlSEL.m in Sources */,
|
DAFE4A1815039824003ABA7C /* NSString+PearlSEL.m in Sources */,
|
||||||
DA2CA4ED18D323D3007798F8 /* NSError+PearlFullDescription.m in Sources */,
|
DA2CA4ED18D323D3007798F8 /* NSError+PearlFullDescription.m in Sources */,
|
||||||
@@ -2250,54 +2227,6 @@
|
|||||||
/* End PBXVariantGroup section */
|
/* End PBXVariantGroup section */
|
||||||
|
|
||||||
/* Begin XCBuildConfiguration section */
|
/* Begin XCBuildConfiguration section */
|
||||||
DA25091619513C1500AC23F1 /* Debug-Mac */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
|
||||||
};
|
|
||||||
name = "Debug-Mac";
|
|
||||||
};
|
|
||||||
DA25091719513C1500AC23F1 /* AdHoc-Mac */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
|
||||||
};
|
|
||||||
name = "AdHoc-Mac";
|
|
||||||
};
|
|
||||||
DA25091819513C1500AC23F1 /* AppStore-Mac */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
|
||||||
};
|
|
||||||
name = "AppStore-Mac";
|
|
||||||
};
|
|
||||||
DA4425D41557BED40052177D /* Debug-Mac */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
|
||||||
};
|
|
||||||
name = "Debug-Mac";
|
|
||||||
};
|
|
||||||
DA4425D51557BED40052177D /* AdHoc-Mac */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
|
||||||
};
|
|
||||||
name = "AdHoc-Mac";
|
|
||||||
};
|
|
||||||
DA4425D61557BED40052177D /* AppStore-Mac */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
|
||||||
};
|
|
||||||
name = "AppStore-Mac";
|
|
||||||
};
|
|
||||||
DA5BFA6B147E415C00F98B1E /* Debug-Mac */ = {
|
DA5BFA6B147E415C00F98B1E /* Debug-Mac */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
@@ -2630,23 +2559,26 @@
|
|||||||
};
|
};
|
||||||
name = "AppStore-Mac";
|
name = "AppStore-Mac";
|
||||||
};
|
};
|
||||||
DABC6C0B175D8C85000C15D4 /* Debug-Mac */ = {
|
DAADCC5F19FB006500987B1D /* Debug-Mac */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
};
|
};
|
||||||
name = "Debug-Mac";
|
name = "Debug-Mac";
|
||||||
};
|
};
|
||||||
DABC6C0C175D8C85000C15D4 /* AdHoc-Mac */ = {
|
DAADCC6019FB006500987B1D /* AdHoc-Mac */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
};
|
};
|
||||||
name = "AdHoc-Mac";
|
name = "AdHoc-Mac";
|
||||||
};
|
};
|
||||||
DABC6C0D175D8C85000C15D4 /* AppStore-Mac */ = {
|
DAADCC6119FB006500987B1D /* AppStore-Mac */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
};
|
};
|
||||||
name = "AppStore-Mac";
|
name = "AppStore-Mac";
|
||||||
@@ -2720,26 +2652,6 @@
|
|||||||
/* End XCBuildConfiguration section */
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
/* Begin XCConfigurationList section */
|
/* Begin XCConfigurationList section */
|
||||||
DA25091519513C1500AC23F1 /* Build configuration list for PBXNativeTarget "RMBlurredView" */ = {
|
|
||||||
isa = XCConfigurationList;
|
|
||||||
buildConfigurations = (
|
|
||||||
DA25091619513C1500AC23F1 /* Debug-Mac */,
|
|
||||||
DA25091719513C1500AC23F1 /* AdHoc-Mac */,
|
|
||||||
DA25091819513C1500AC23F1 /* AppStore-Mac */,
|
|
||||||
);
|
|
||||||
defaultConfigurationIsVisible = 0;
|
|
||||||
defaultConfigurationName = "AdHoc-Mac";
|
|
||||||
};
|
|
||||||
DA4425D31557BED40052177D /* Build configuration list for PBXNativeTarget "UbiquityStoreManager" */ = {
|
|
||||||
isa = XCConfigurationList;
|
|
||||||
buildConfigurations = (
|
|
||||||
DA4425D41557BED40052177D /* Debug-Mac */,
|
|
||||||
DA4425D51557BED40052177D /* AdHoc-Mac */,
|
|
||||||
DA4425D61557BED40052177D /* AppStore-Mac */,
|
|
||||||
);
|
|
||||||
defaultConfigurationIsVisible = 0;
|
|
||||||
defaultConfigurationName = "AdHoc-Mac";
|
|
||||||
};
|
|
||||||
DA5BFA3E147E415C00F98B1E /* Build configuration list for PBXProject "MasterPassword-Mac" */ = {
|
DA5BFA3E147E415C00F98B1E /* Build configuration list for PBXProject "MasterPassword-Mac" */ = {
|
||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
@@ -2760,12 +2672,12 @@
|
|||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = "AdHoc-Mac";
|
defaultConfigurationName = "AdHoc-Mac";
|
||||||
};
|
};
|
||||||
DABC6C0A175D8C85000C15D4 /* Build configuration list for PBXNativeTarget "RHStatusItemView" */ = {
|
DAADCC5E19FB006500987B1D /* Build configuration list for PBXNativeTarget "KCOrderedAccessorFix" */ = {
|
||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
DABC6C0B175D8C85000C15D4 /* Debug-Mac */,
|
DAADCC5F19FB006500987B1D /* Debug-Mac */,
|
||||||
DABC6C0C175D8C85000C15D4 /* AdHoc-Mac */,
|
DAADCC6019FB006500987B1D /* AdHoc-Mac */,
|
||||||
DABC6C0D175D8C85000C15D4 /* AppStore-Mac */,
|
DAADCC6119FB006500987B1D /* AppStore-Mac */,
|
||||||
);
|
);
|
||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = "AdHoc-Mac";
|
defaultConfigurationName = "AdHoc-Mac";
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0600"
|
LastUpgradeVersion = "0610"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0600"
|
LastUpgradeVersion = "0610"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
|||||||
@@ -99,6 +99,8 @@
|
|||||||
- (void)setCoached:(BOOL)coached {
|
- (void)setCoached:(BOOL)coached {
|
||||||
|
|
||||||
[[NSUserDefaults standardUserDefaults] setBool:coached forKey:strf( @"%@.%ld.coached", self.coachedClass, (long)self.coachedVersion )];
|
[[NSUserDefaults standardUserDefaults] setBool:coached forKey:strf( @"%@.%ld.coached", self.coachedClass, (long)self.coachedVersion )];
|
||||||
|
if (![[NSUserDefaults standardUserDefaults] synchronize])
|
||||||
|
wrn( @"Couldn't synchronize after coachmark updates." );
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -257,8 +257,11 @@
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
[MPiOSAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
|
[MPiOSAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
|
||||||
[context deleteObject:[self siteInContext:context]];
|
MPSiteEntity *site_ = [self siteInContext:context];
|
||||||
[context saveToStore];
|
if (site_) {
|
||||||
|
[context deleteObject:site_];
|
||||||
|
[context saveToStore];
|
||||||
|
}
|
||||||
}];
|
}];
|
||||||
} cancelTitle:@"Cancel" destructiveTitle:@"Delete Site" otherTitles:nil];
|
} cancelTitle:@"Cancel" destructiveTitle:@"Delete Site" otherTitles:nil];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ typedef NS_OPTIONS( NSUInteger, MPPasswordsTips ) {
|
|||||||
self.view.backgroundColor = [UIColor clearColor];
|
self.view.backgroundColor = [UIColor clearColor];
|
||||||
[self.passwordCollectionView automaticallyAdjustInsetsForKeyboard];
|
[self.passwordCollectionView automaticallyAdjustInsetsForKeyboard];
|
||||||
self.passwordsSearchBar.autocapitalizationType = UITextAutocapitalizationTypeNone;
|
self.passwordsSearchBar.autocapitalizationType = UITextAutocapitalizationTypeNone;
|
||||||
if ([self.passwordsSearchBar respondsToSelector:@selector(keyboardAppearance)])
|
if ([self.passwordsSearchBar respondsToSelector:@selector( keyboardAppearance )])
|
||||||
self.passwordsSearchBar.keyboardAppearance = UIKeyboardAppearanceDark;
|
self.passwordsSearchBar.keyboardAppearance = UIKeyboardAppearanceDark;
|
||||||
else
|
else
|
||||||
[self.passwordsSearchBar enumerateViews:^(UIView *subview, BOOL *stop, BOOL *recurse) {
|
[self.passwordsSearchBar enumerateViews:^(UIView *subview, BOOL *stop, BOOL *recurse) {
|
||||||
@@ -170,23 +170,29 @@ typedef NS_OPTIONS( NSUInteger, MPPasswordsTips ) {
|
|||||||
forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
|
forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
|
||||||
|
|
||||||
if (controller == _fetchedResultsController) {
|
if (controller == _fetchedResultsController) {
|
||||||
[self.passwordCollectionView performBatchUpdates:^{
|
@try {
|
||||||
[self fetchedItemsDidUpdate];
|
[self.passwordCollectionView performBatchUpdates:^{
|
||||||
switch (type) {
|
[self fetchedItemsDidUpdate];
|
||||||
case NSFetchedResultsChangeInsert:
|
switch (type) {
|
||||||
[self.passwordCollectionView insertItemsAtIndexPaths:@[ newIndexPath ]];
|
case NSFetchedResultsChangeInsert:
|
||||||
break;
|
[self.passwordCollectionView insertItemsAtIndexPaths:@[ newIndexPath ]];
|
||||||
case NSFetchedResultsChangeDelete:
|
break;
|
||||||
[self.passwordCollectionView deleteItemsAtIndexPaths:@[ indexPath ]];
|
case NSFetchedResultsChangeDelete:
|
||||||
break;
|
[self.passwordCollectionView deleteItemsAtIndexPaths:@[ indexPath ]];
|
||||||
case NSFetchedResultsChangeMove:
|
break;
|
||||||
[self.passwordCollectionView moveItemAtIndexPath:indexPath toIndexPath:newIndexPath];
|
case NSFetchedResultsChangeMove:
|
||||||
break;
|
[self.passwordCollectionView moveItemAtIndexPath:indexPath toIndexPath:newIndexPath];
|
||||||
case NSFetchedResultsChangeUpdate:
|
break;
|
||||||
[self.passwordCollectionView reloadItemsAtIndexPaths:@[ indexPath ]];
|
case NSFetchedResultsChangeUpdate:
|
||||||
break;
|
[self.passwordCollectionView reloadItemsAtIndexPaths:@[ indexPath ]];
|
||||||
}
|
break;
|
||||||
} completion:nil];
|
}
|
||||||
|
} completion:nil];
|
||||||
|
}
|
||||||
|
@catch (NSException *exception) {
|
||||||
|
wrn( @"While updating password cells: %@", [exception fullDescription] );
|
||||||
|
[self.passwordCollectionView reloadData];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -249,7 +255,7 @@ typedef NS_OPTIONS( NSUInteger, MPPasswordsTips ) {
|
|||||||
if (searchBar == self.passwordsSearchBar) {
|
if (searchBar == self.passwordsSearchBar) {
|
||||||
if ([self.query length] && [[self.query stringByTrimmingCharactersInSet:_siteNameAcceptableCharactersSet] length])
|
if ([self.query length] && [[self.query stringByTrimmingCharactersInSet:_siteNameAcceptableCharactersSet] length])
|
||||||
[self showTips:MPPasswordsBadNameTip];
|
[self showTips:MPPasswordsBadNameTip];
|
||||||
|
|
||||||
[self updatePasswords];
|
[self updatePasswords];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -261,7 +267,7 @@ typedef NS_OPTIONS( NSUInteger, MPPasswordsTips ) {
|
|||||||
[UIView animateWithDuration:0.3f animations:^{
|
[UIView animateWithDuration:0.3f animations:^{
|
||||||
if (showTips & MPPasswordsBadNameTip)
|
if (showTips & MPPasswordsBadNameTip)
|
||||||
self.badNameTipContainer.alpha = 1;
|
self.badNameTipContainer.alpha = 1;
|
||||||
} completion:^(BOOL finished) {
|
} completion:^(BOOL finished) {
|
||||||
if (finished)
|
if (finished)
|
||||||
PearlMainQueueAfter( 5, ^{
|
PearlMainQueueAfter( 5, ^{
|
||||||
[UIView animateWithDuration:0.3f animations:^{
|
[UIView animateWithDuration:0.3f animations:^{
|
||||||
@@ -310,25 +316,33 @@ typedef NS_OPTIONS( NSUInteger, MPPasswordsTips ) {
|
|||||||
self.passwordSelectionContainer.alpha = 1;
|
self.passwordSelectionContainer.alpha = 1;
|
||||||
}];
|
}];
|
||||||
} );
|
} );
|
||||||
PearlAddNotificationObserver( MPSignedOutNotification, nil, [NSOperationQueue mainQueue],
|
PearlAddNotificationObserver( MPSignedOutNotification, nil, nil,
|
||||||
^(MPPasswordsViewController *self, NSNotification *note) {
|
^(MPPasswordsViewController *self, NSNotification *note) {
|
||||||
_fetchedResultsController = nil;
|
PearlMainQueue( ^{
|
||||||
self.passwordsSearchBar.text = nil;
|
_fetchedResultsController = nil;
|
||||||
[self.passwordCollectionView reloadData];
|
self.passwordsSearchBar.text = nil;
|
||||||
|
[self.passwordCollectionView reloadData];
|
||||||
|
} );
|
||||||
} );
|
} );
|
||||||
PearlAddNotificationObserver( MPCheckConfigNotification, nil, [NSOperationQueue mainQueue],
|
PearlAddNotificationObserver( MPCheckConfigNotification, nil, nil,
|
||||||
^(MPPasswordsViewController *self, NSNotification *note) {
|
^(MPPasswordsViewController *self, NSNotification *note) {
|
||||||
[self updateConfigKey:note.object];
|
PearlMainQueue( ^{
|
||||||
|
[self updateConfigKey:note.object];
|
||||||
|
} );
|
||||||
} );
|
} );
|
||||||
PearlAddNotificationObserver( NSPersistentStoreCoordinatorStoresWillChangeNotification, nil, nil,
|
PearlAddNotificationObserver( NSPersistentStoreCoordinatorStoresWillChangeNotification, nil, nil,
|
||||||
^(MPPasswordsViewController *self, NSNotification *note) {
|
^(MPPasswordsViewController *self, NSNotification *note) {
|
||||||
self->_fetchedResultsController = nil;
|
self->_fetchedResultsController = nil;
|
||||||
[self.passwordCollectionView reloadData];
|
PearlMainQueue( ^{
|
||||||
|
[self.passwordCollectionView reloadData];
|
||||||
|
} );
|
||||||
} );
|
} );
|
||||||
PearlAddNotificationObserver( NSPersistentStoreCoordinatorStoresDidChangeNotification, nil, nil,
|
PearlAddNotificationObserver( NSPersistentStoreCoordinatorStoresDidChangeNotification, nil, nil,
|
||||||
^(MPPasswordsViewController *self, NSNotification *note) {
|
^(MPPasswordsViewController *self, NSNotification *note) {
|
||||||
[self updatePasswords];
|
PearlMainQueue( ^{
|
||||||
[self registerObservers];
|
[self updatePasswords];
|
||||||
|
[self registerObservers];
|
||||||
|
} );
|
||||||
} );
|
} );
|
||||||
|
|
||||||
NSManagedObjectContext *mainContext = [MPiOSAppDelegate managedObjectContextForMainThreadIfReady];
|
NSManagedObjectContext *mainContext = [MPiOSAppDelegate managedObjectContextForMainThreadIfReady];
|
||||||
@@ -375,28 +389,34 @@ typedef NS_OPTIONS( NSUInteger, MPPasswordsTips ) {
|
|||||||
if (![self.fetchedResultsController performFetch:&error])
|
if (![self.fetchedResultsController performFetch:&error])
|
||||||
err( @"Couldn't fetch sites: %@", [error fullDescription] );
|
err( @"Couldn't fetch sites: %@", [error fullDescription] );
|
||||||
|
|
||||||
[self.passwordCollectionView performBatchUpdates:^{
|
@try {
|
||||||
[self fetchedItemsDidUpdate];
|
[self.passwordCollectionView performBatchUpdates:^{
|
||||||
|
[self fetchedItemsDidUpdate];
|
||||||
|
|
||||||
NSInteger fromSections = self.passwordCollectionView.numberOfSections;
|
NSInteger fromSections = self.passwordCollectionView.numberOfSections;
|
||||||
NSInteger toSections = [self numberOfSectionsInCollectionView:self.passwordCollectionView];
|
NSInteger toSections = [self numberOfSectionsInCollectionView:self.passwordCollectionView];
|
||||||
for (NSInteger section = 0; section < MAX( toSections, fromSections ); ++section) {
|
for (NSInteger section = 0; section < MAX( toSections, fromSections ); ++section) {
|
||||||
if (section >= fromSections)
|
if (section >= fromSections)
|
||||||
[self.passwordCollectionView insertSections:[NSIndexSet indexSetWithIndex:section]];
|
[self.passwordCollectionView insertSections:[NSIndexSet indexSetWithIndex:section]];
|
||||||
else if (section >= toSections)
|
else if (section >= toSections)
|
||||||
[self.passwordCollectionView deleteSections:[NSIndexSet indexSetWithIndex:section]];
|
[self.passwordCollectionView deleteSections:[NSIndexSet indexSetWithIndex:section]];
|
||||||
else if (section < [oldSections count])
|
else if (section < [oldSections count])
|
||||||
[self.passwordCollectionView reloadItemsFromArray:oldSections[section]
|
[self.passwordCollectionView reloadItemsFromArray:oldSections[section]
|
||||||
toArray:[[self.fetchedResultsController sections][section] objects]
|
toArray:[[self.fetchedResultsController sections][section] objects]
|
||||||
inSection:section];
|
inSection:section];
|
||||||
else
|
else
|
||||||
[self.passwordCollectionView reloadSections:[NSIndexSet indexSetWithIndex:section]];
|
[self.passwordCollectionView reloadSections:[NSIndexSet indexSetWithIndex:section]];
|
||||||
}
|
}
|
||||||
} completion:^(BOOL finished) {
|
} completion:^(BOOL finished) {
|
||||||
if (finished)
|
if (finished)
|
||||||
[self.passwordCollectionView setContentOffset:CGPointMake( 0, -self.passwordCollectionView.contentInset.top )
|
[self.passwordCollectionView setContentOffset:CGPointMake( 0, -self.passwordCollectionView.contentInset.top )
|
||||||
animated:YES];
|
animated:YES];
|
||||||
}];
|
}];
|
||||||
|
}
|
||||||
|
@catch (NSException *exception) {
|
||||||
|
wrn( @"While updating password cells: %@", [exception fullDescription] );
|
||||||
|
[self.passwordCollectionView reloadData];
|
||||||
|
}
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,8 @@
|
|||||||
inf( @"Preferences will appear" );
|
inf( @"Preferences will appear" );
|
||||||
[super viewWillAppear:animated];
|
[super viewWillAppear:animated];
|
||||||
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"tipped.passwordsPreferences"];
|
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"tipped.passwordsPreferences"];
|
||||||
|
if (![[NSUserDefaults standardUserDefaults] synchronize])
|
||||||
|
wrn( @"Couldn't synchronize after preferences appearance." );
|
||||||
|
|
||||||
MPUserEntity *activeUser = [[MPiOSAppDelegate get] activeUserForMainThread];
|
MPUserEntity *activeUser = [[MPiOSAppDelegate get] activeUserForMainThread];
|
||||||
self.generatedTypeControl.selectedSegmentIndex = [self generatedSegmentIndexForType:activeUser.defaultType];
|
self.generatedTypeControl.selectedSegmentIndex = [self generatedSegmentIndexForType:activeUser.defaultType];
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ PearlEnum( MPDevelopmentFuelConsumption,
|
|||||||
return nil;
|
return nil;
|
||||||
|
|
||||||
[[NSUserDefaults standardUserDefaults] setInteger:storeVersion forKey:@"storeVersion"];
|
[[NSUserDefaults standardUserDefaults] setInteger:storeVersion forKey:@"storeVersion"];
|
||||||
|
if (![[NSUserDefaults standardUserDefaults] synchronize])
|
||||||
|
wrn( @"Couldn't synchronize store version update." );
|
||||||
return features;
|
return features;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -666,7 +666,7 @@ referenceSizeForFooterInSection:(NSInteger)section {
|
|||||||
[self.storeLoadingActivity startAnimating];
|
[self.storeLoadingActivity startAnimating];
|
||||||
|
|
||||||
if (mainContext)
|
if (mainContext)
|
||||||
PearlAddNotificationObserver( NSManagedObjectContextObjectsDidChangeNotification, mainContext, [NSOperationQueue mainQueue],
|
PearlAddNotificationObserver( NSManagedObjectContextObjectsDidChangeNotification, mainContext, nil,
|
||||||
^(MPUsersViewController *self, NSNotification *note) {
|
^(MPUsersViewController *self, NSNotification *note) {
|
||||||
NSSet *insertedObjects = note.userInfo[NSInsertedObjectsKey];
|
NSSet *insertedObjects = note.userInfo[NSInsertedObjectsKey];
|
||||||
NSSet *deletedObjects = note.userInfo[NSDeletedObjectsKey];
|
NSSet *deletedObjects = note.userInfo[NSDeletedObjectsKey];
|
||||||
@@ -676,11 +676,11 @@ referenceSizeForFooterInSection:(NSInteger)section {
|
|||||||
}]] count])
|
}]] count])
|
||||||
[self reloadUsers];
|
[self reloadUsers];
|
||||||
} );
|
} );
|
||||||
PearlAddNotificationObserver( NSPersistentStoreCoordinatorStoresWillChangeNotification, nil, [NSOperationQueue mainQueue],
|
PearlAddNotificationObserver( NSPersistentStoreCoordinatorStoresWillChangeNotification, [MPiOSAppDelegate get].storeCoordinator, nil,
|
||||||
^(MPUsersViewController *self, NSNotification *note) {
|
^(MPUsersViewController *self, NSNotification *note) {
|
||||||
self.userIDs = nil;
|
self.userIDs = nil;
|
||||||
} );
|
} );
|
||||||
PearlAddNotificationObserver( NSPersistentStoreCoordinatorStoresDidChangeNotification, nil, [NSOperationQueue mainQueue],
|
PearlAddNotificationObserver( NSPersistentStoreCoordinatorStoresDidChangeNotification, [MPiOSAppDelegate get].storeCoordinator, nil,
|
||||||
^(MPUsersViewController *self, NSNotification *note) {
|
^(MPUsersViewController *self, NSNotification *note) {
|
||||||
[self registerObservers];
|
[self registerObservers];
|
||||||
[self reloadUsers];
|
[self reloadUsers];
|
||||||
|
|||||||
@@ -50,8 +50,11 @@
|
|||||||
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
|
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
|
||||||
navigationType:(UIWebViewNavigationType)navigationType {
|
navigationType:(UIWebViewNavigationType)navigationType {
|
||||||
|
|
||||||
if ([[request.URL absoluteString] rangeOfString:@"thanks.lhunath.com"].location != NSNotFound)
|
if ([[request.URL absoluteString] rangeOfString:@"thanks.lhunath.com"].location != NSNotFound) {
|
||||||
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"tipped.thanks"];
|
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"tipped.thanks"];
|
||||||
|
if (![[NSUserDefaults standardUserDefaults] synchronize])
|
||||||
|
wrn( @"Couldn't synchronize thanks tip." );
|
||||||
|
}
|
||||||
|
|
||||||
if ([request.URL isEqual:request.mainDocumentURL]) {
|
if ([request.URL isEqual:request.mainDocumentURL]) {
|
||||||
self.webNavigationItem.title = request.URL.host;
|
self.webNavigationItem.title = request.URL.host;
|
||||||
|
|||||||
@@ -138,18 +138,6 @@
|
|||||||
@"Find the store from the user pull‑down after logging in.", latestFeatures )
|
@"Find the store from the user pull‑down after logging in.", latestFeatures )
|
||||||
viewStyle:UIAlertViewStyleDefault initAlert:nil tappedButtonBlock:nil
|
viewStyle:UIAlertViewStyleDefault initAlert:nil tappedButtonBlock:nil
|
||||||
cancelTitle:@"Thanks" otherTitles:nil];
|
cancelTitle:@"Thanks" otherTitles:nil];
|
||||||
|
|
||||||
MPCheckpoint( MPCheckpointStarted, @{
|
|
||||||
@"simulator" : PearlStringB( [PearlDeviceUtils isSimulator] ),
|
|
||||||
@"encrypted" : PearlStringB( [PearlDeviceUtils isAppEncrypted] ),
|
|
||||||
@"jailbroken" : PearlStringB( [PearlDeviceUtils isJailbroken] ),
|
|
||||||
@"platform" : [PearlDeviceUtils platform],
|
|
||||||
#ifdef APPSTORE
|
|
||||||
@"legal" : PearlStringB([PearlDeviceUtils isAppEncrypted]),
|
|
||||||
#else
|
|
||||||
@"legal" : @"YES",
|
|
||||||
#endif
|
|
||||||
} );
|
|
||||||
}
|
}
|
||||||
@catch (id exception) {
|
@catch (id exception) {
|
||||||
err( @"During Post-Startup: %@", exception );
|
err( @"During Post-Startup: %@", exception );
|
||||||
@@ -293,33 +281,28 @@
|
|||||||
inf( @"Re-activated" );
|
inf( @"Re-activated" );
|
||||||
[[NSNotificationCenter defaultCenter] postNotificationName:MPCheckConfigNotification object:nil];
|
[[NSNotificationCenter defaultCenter] postNotificationName:MPCheckConfigNotification object:nil];
|
||||||
|
|
||||||
NSString *importHeader = @"# Master Password site export";
|
PearlNotMainQueue( ^{
|
||||||
NSString *importedSitesString = [UIPasteboard generalPasteboard].string;
|
NSString *importHeader = @"# Master Password site export";
|
||||||
if ([importedSitesString length] > [importHeader length] &&
|
NSString *importedSitesString = [UIPasteboard generalPasteboard].string;
|
||||||
[[importedSitesString substringToIndex:[importHeader length]] isEqualToString:importHeader])
|
if ([importedSitesString length] > [importHeader length] &&
|
||||||
[PearlAlert showAlertWithTitle:@"Import Sites?" message:
|
[[importedSitesString substringToIndex:[importHeader length]] isEqualToString:importHeader])
|
||||||
@"We've detected Master Password import sites on your pasteboard, would you like to import them?"
|
[PearlAlert showAlertWithTitle:@"Import Sites?" message:
|
||||||
viewStyle:UIAlertViewStyleDefault initAlert:nil
|
@"We've detected Master Password import sites on your pasteboard, would you like to import them?"
|
||||||
tappedButtonBlock:^(UIAlertView *alert, NSInteger buttonIndex) {
|
viewStyle:UIAlertViewStyleDefault initAlert:nil
|
||||||
if (buttonIndex == [alert cancelButtonIndex])
|
tappedButtonBlock:^(UIAlertView *alert, NSInteger buttonIndex) {
|
||||||
return;
|
if (buttonIndex == [alert cancelButtonIndex])
|
||||||
|
return;
|
||||||
|
|
||||||
[self importSites:importedSitesString];
|
[self importSites:importedSitesString];
|
||||||
[UIPasteboard generalPasteboard].string = nil;
|
[UIPasteboard generalPasteboard].string = @"";
|
||||||
} cancelTitle:@"No" otherTitles:@"Import Sites", nil];
|
} cancelTitle:@"No" otherTitles:@"Import Sites", nil];
|
||||||
|
} );
|
||||||
|
|
||||||
[super applicationDidBecomeActive:application];
|
[super applicationDidBecomeActive:application];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - Behavior
|
#pragma mark - Behavior
|
||||||
|
|
||||||
- (void)showReview {
|
|
||||||
|
|
||||||
[super showReview];
|
|
||||||
|
|
||||||
MPCheckpoint( MPCheckpointReview, nil );
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)showFeedbackWithLogs:(BOOL)logs forVC:(UIViewController *)viewController {
|
- (void)showFeedbackWithLogs:(BOOL)logs forVC:(UIViewController *)viewController {
|
||||||
|
|
||||||
if (![PearlEMail canSendMail])
|
if (![PearlEMail canSendMail])
|
||||||
@@ -522,8 +505,6 @@
|
|||||||
[self signOutAnimated:YES];
|
[self signOutAnimated:YES];
|
||||||
if (didReset)
|
if (didReset)
|
||||||
didReset();
|
didReset();
|
||||||
|
|
||||||
MPCheckpoint( MPCheckpointChangeMP, nil );
|
|
||||||
}
|
}
|
||||||
cancelTitle:[PearlStrings get].commonButtonAbort
|
cancelTitle:[PearlStrings get].commonButtonAbort
|
||||||
otherTitles:[PearlStrings get].commonButtonContinue, nil];
|
otherTitles:[PearlStrings get].commonButtonContinue, nil];
|
||||||
@@ -554,28 +535,25 @@
|
|||||||
[PearlLogger get].printLevel = PearlLogLevelInfo;
|
[PearlLogger get].printLevel = PearlLogLevelInfo;
|
||||||
|
|
||||||
#ifdef CRASHLYTICS
|
#ifdef CRASHLYTICS
|
||||||
[[Crashlytics sharedInstance] setBoolValue:[[MPConfig get].rememberLogin boolValue] forKey:@"rememberLogin"];
|
[[Crashlytics sharedInstance] setBoolValue:[[MPConfig get].rememberLogin boolValue] forKey:@"rememberLogin"];
|
||||||
[[Crashlytics sharedInstance] setBoolValue:[[MPiOSConfig get].sendInfo boolValue] forKey:@"sendInfo"];
|
[[Crashlytics sharedInstance] setBoolValue:[[MPiOSConfig get].sendInfo boolValue] forKey:@"sendInfo"];
|
||||||
[[Crashlytics sharedInstance] setBoolValue:[[MPiOSConfig get].helpHidden boolValue] forKey:@"helpHidden"];
|
[[Crashlytics sharedInstance] setBoolValue:[[MPiOSConfig get].helpHidden boolValue] forKey:@"helpHidden"];
|
||||||
[[Crashlytics sharedInstance] setBoolValue:[[MPiOSConfig get].showSetup boolValue] forKey:@"showQuickStart"];
|
[[Crashlytics sharedInstance] setBoolValue:[[MPiOSConfig get].showSetup boolValue] forKey:@"showQuickStart"];
|
||||||
[[Crashlytics sharedInstance] setBoolValue:[[PearlConfig get].firstRun boolValue] forKey:@"firstRun"];
|
[[Crashlytics sharedInstance] setBoolValue:[[PearlConfig get].firstRun boolValue] forKey:@"firstRun"];
|
||||||
[[Crashlytics sharedInstance] setIntValue:[[PearlConfig get].launchCount intValue] forKey:@"launchCount"];
|
[[Crashlytics sharedInstance] setIntValue:[[PearlConfig get].launchCount intValue] forKey:@"launchCount"];
|
||||||
[[Crashlytics sharedInstance] setBoolValue:[[PearlConfig get].askForReviews boolValue] forKey:@"askForReviews"];
|
[[Crashlytics sharedInstance] setBoolValue:[[PearlConfig get].askForReviews boolValue] forKey:@"askForReviews"];
|
||||||
[[Crashlytics sharedInstance] setIntValue:[[PearlConfig get].reviewAfterLaunches intValue] forKey:@"reviewAfterLaunches"];
|
[[Crashlytics sharedInstance] setIntValue:[[PearlConfig get].reviewAfterLaunches intValue] forKey:@"reviewAfterLaunches"];
|
||||||
[[Crashlytics sharedInstance] setObjectValue:[PearlConfig get].reviewedVersion forKey:@"reviewedVersion"];
|
[[Crashlytics sharedInstance] setObjectValue:[PearlConfig get].reviewedVersion forKey:@"reviewedVersion"];
|
||||||
|
[[Crashlytics sharedInstance] setBoolValue:[PearlDeviceUtils isSimulator] forKey:@"simulator"];
|
||||||
|
[[Crashlytics sharedInstance] setBoolValue:[PearlDeviceUtils isAppEncrypted] forKey:@"encrypted"];
|
||||||
|
[[Crashlytics sharedInstance] setBoolValue:[PearlDeviceUtils isJailbroken] forKey:@"jailbroken"];
|
||||||
|
[[Crashlytics sharedInstance] setObjectValue:[PearlDeviceUtils platform] forKey:@"platform"];
|
||||||
|
#ifdef APPSTORE
|
||||||
|
[[Crashlytics sharedInstance] setBoolValue:[PearlDeviceUtils isAppEncrypted] forKey:@"reviewedVersion"];
|
||||||
|
#else
|
||||||
|
[[Crashlytics sharedInstance] setBoolValue:YES forKey:@"reviewedVersion"];
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
MPCheckpoint( MPCheckpointConfig, @{
|
|
||||||
@"rememberLogin" : @([[MPConfig get].rememberLogin boolValue]),
|
|
||||||
@"sendInfo" : @([[MPiOSConfig get].sendInfo boolValue]),
|
|
||||||
@"helpHidden" : @([[MPiOSConfig get].helpHidden boolValue]),
|
|
||||||
@"showQuickStart" : @([[MPiOSConfig get].showSetup boolValue]),
|
|
||||||
@"firstRun" : @([[PearlConfig get].firstRun boolValue]),
|
|
||||||
@"launchCount" : NilToNSNull( [PearlConfig get].launchCount ),
|
|
||||||
@"askForReviews" : @([[PearlConfig get].askForReviews boolValue]),
|
|
||||||
@"reviewAfterLaunches" : NilToNSNull( [PearlConfig get].reviewAfterLaunches ),
|
|
||||||
@"reviewedVersion" : NilToNSNull( [PearlConfig get].reviewedVersion )
|
|
||||||
} );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@
|
|||||||
<key>LSRequiresIPhoneOS</key>
|
<key>LSRequiresIPhoneOS</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>NSHumanReadableCopyright</key>
|
<key>NSHumanReadableCopyright</key>
|
||||||
<string>© 2011-2014, Lyndir</string>
|
<string>Copyright © 2011-2014 Lyndir</string>
|
||||||
<key>UIAppFonts</key>
|
<key>UIAppFonts</key>
|
||||||
<array>
|
<array>
|
||||||
<string>Exo2.0-Bold.otf</string>
|
<string>Exo2.0-Bold.otf</string>
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
93D391ECBD9BD2C64115B5DD /* PearlSizedTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39156E806BB78E04F78B9 /* PearlSizedTextView.m */; };
|
93D391ECBD9BD2C64115B5DD /* PearlSizedTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39156E806BB78E04F78B9 /* PearlSizedTextView.m */; };
|
||||||
93D3922A53E41A54832E90D9 /* PearlOverlay.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D390FADEB325D8D54A957D /* PearlOverlay.m */; };
|
93D3922A53E41A54832E90D9 /* PearlOverlay.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D390FADEB325D8D54A957D /* PearlOverlay.m */; };
|
||||||
93D39262A8A97DB748213309 /* PearlEMail.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D393BB973253D4BAAC84AA /* PearlEMail.m */; };
|
93D39262A8A97DB748213309 /* PearlEMail.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D393BB973253D4BAAC84AA /* PearlEMail.m */; };
|
||||||
|
93D3928D629EA563F9EC4909 /* NSPersistentStore+PearlMigration.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D399C2F3D48E57C4803BDC /* NSPersistentStore+PearlMigration.m */; };
|
||||||
93D392A8777DC30C11361647 /* UITextView+PearlAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D39AA10CD00D05937671B1 /* UITextView+PearlAttributes.h */; };
|
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 */; };
|
93D392EC39DA43C46C692C12 /* NSDictionary+Indexing.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D393B97158D7BE9332EA53 /* NSDictionary+Indexing.h */; };
|
||||||
93D392FD5E2052F7D7DB3774 /* NSString+MPMarkDown.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39C41A27AA42D044D68AE /* NSString+MPMarkDown.m */; };
|
93D392FD5E2052F7D7DB3774 /* NSString+MPMarkDown.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39C41A27AA42D044D68AE /* NSString+MPMarkDown.m */; };
|
||||||
@@ -40,6 +41,7 @@
|
|||||||
93D39A53D76CA70786423458 /* UICollectionView+PearlReloadFromArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D39246FC21C6E63E35D615 /* UICollectionView+PearlReloadFromArray.h */; };
|
93D39A53D76CA70786423458 /* UICollectionView+PearlReloadFromArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D39246FC21C6E63E35D615 /* UICollectionView+PearlReloadFromArray.h */; };
|
||||||
93D39A5FF670957C0AF8298D /* MPPasswordCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39DEA995041A13DC9CAF7 /* MPPasswordCell.m */; };
|
93D39A5FF670957C0AF8298D /* MPPasswordCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39DEA995041A13DC9CAF7 /* MPPasswordCell.m */; };
|
||||||
93D39A8EA1C49CE43B63F47B /* PearlUICollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39D8A953779B35403AF6E /* PearlUICollectionView.m */; };
|
93D39A8EA1C49CE43B63F47B /* PearlUICollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39D8A953779B35403AF6E /* PearlUICollectionView.m */; };
|
||||||
|
93D39AA4A0BE66A872CCC02E /* NSPersistentStore+PearlMigration.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D397F4BAFFF7CF3F1B21A4 /* NSPersistentStore+PearlMigration.h */; };
|
||||||
93D39B429C67A62E29DC02DA /* MPRootSegue.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D399493FEDDE74DD1A0C15 /* MPRootSegue.m */; };
|
93D39B429C67A62E29DC02DA /* MPRootSegue.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D399493FEDDE74DD1A0C15 /* MPRootSegue.m */; };
|
||||||
93D39B76DD5AB108BA8928E8 /* UIScrollView+PearlAdjustInsets.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D39DE2CB351D4E3789462B /* UIScrollView+PearlAdjustInsets.h */; };
|
93D39B76DD5AB108BA8928E8 /* UIScrollView+PearlAdjustInsets.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D39DE2CB351D4E3789462B /* UIScrollView+PearlAdjustInsets.h */; };
|
||||||
93D39B842AB9A5D072810D76 /* NSError+PearlFullDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D398C95847261903D781D3 /* NSError+PearlFullDescription.h */; };
|
93D39B842AB9A5D072810D76 /* NSError+PearlFullDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D398C95847261903D781D3 /* NSError+PearlFullDescription.h */; };
|
||||||
@@ -483,6 +485,7 @@
|
|||||||
93D39730673227EFF6DEFF19 /* MPSetupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPSetupViewController.h; sourceTree = "<group>"; };
|
93D39730673227EFF6DEFF19 /* MPSetupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPSetupViewController.h; sourceTree = "<group>"; };
|
||||||
93D3977321EB249981821AB0 /* UITextView+PearlAttributes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITextView+PearlAttributes.m"; sourceTree = "<group>"; };
|
93D3977321EB249981821AB0 /* UITextView+PearlAttributes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITextView+PearlAttributes.m"; sourceTree = "<group>"; };
|
||||||
93D3979190DACEBD1F6AE9F4 /* MPLogsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPLogsViewController.m; sourceTree = "<group>"; };
|
93D3979190DACEBD1F6AE9F4 /* MPLogsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPLogsViewController.m; sourceTree = "<group>"; };
|
||||||
|
93D397F4BAFFF7CF3F1B21A4 /* NSPersistentStore+PearlMigration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSPersistentStore+PearlMigration.h"; sourceTree = "<group>"; };
|
||||||
93D398567FD02DB2647B8CF3 /* PearlNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlNavigationController.h; sourceTree = "<group>"; };
|
93D398567FD02DB2647B8CF3 /* PearlNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlNavigationController.h; sourceTree = "<group>"; };
|
||||||
93D398C95847261903D781D3 /* NSError+PearlFullDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSError+PearlFullDescription.h"; sourceTree = "<group>"; };
|
93D398C95847261903D781D3 /* NSError+PearlFullDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSError+PearlFullDescription.h"; sourceTree = "<group>"; };
|
||||||
93D3990E0CD1B5CF9FBB2C07 /* MPWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPWebViewController.m; sourceTree = "<group>"; };
|
93D3990E0CD1B5CF9FBB2C07 /* MPWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPWebViewController.m; sourceTree = "<group>"; };
|
||||||
@@ -491,6 +494,7 @@
|
|||||||
93D39975CE5AEC99E3F086C7 /* MPPasswordCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordCell.h; sourceTree = "<group>"; };
|
93D39975CE5AEC99E3F086C7 /* MPPasswordCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordCell.h; sourceTree = "<group>"; };
|
||||||
93D3999693660C89A7465F4E /* MPCoachmarkViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPCoachmarkViewController.h; sourceTree = "<group>"; };
|
93D3999693660C89A7465F4E /* MPCoachmarkViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPCoachmarkViewController.h; sourceTree = "<group>"; };
|
||||||
93D399A8E3181B442D347CD7 /* MPAlgorithmV2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAlgorithmV2.m; sourceTree = "<group>"; };
|
93D399A8E3181B442D347CD7 /* MPAlgorithmV2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAlgorithmV2.m; sourceTree = "<group>"; };
|
||||||
|
93D399C2F3D48E57C4803BDC /* NSPersistentStore+PearlMigration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSPersistentStore+PearlMigration.m"; sourceTree = "<group>"; };
|
||||||
93D399E571F61E50A9BF8FAF /* MPUsersViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPUsersViewController.m; sourceTree = "<group>"; };
|
93D399E571F61E50A9BF8FAF /* MPUsersViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPUsersViewController.m; sourceTree = "<group>"; };
|
||||||
93D399F244BB522A317811BB /* MPFixable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPFixable.h; sourceTree = "<group>"; };
|
93D399F244BB522A317811BB /* MPFixable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPFixable.h; sourceTree = "<group>"; };
|
||||||
93D39A1DDFA09AE2E14D26DC /* UIResponder+PearlFirstResponder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIResponder+PearlFirstResponder.m"; sourceTree = "<group>"; };
|
93D39A1DDFA09AE2E14D26DC /* UIResponder+PearlFirstResponder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIResponder+PearlFirstResponder.m"; sourceTree = "<group>"; };
|
||||||
@@ -2790,6 +2794,8 @@
|
|||||||
93D39F9106F2CCFB94283188 /* NSError+PearlFullDescription.m */,
|
93D39F9106F2CCFB94283188 /* NSError+PearlFullDescription.m */,
|
||||||
93D398C95847261903D781D3 /* NSError+PearlFullDescription.h */,
|
93D398C95847261903D781D3 /* NSError+PearlFullDescription.h */,
|
||||||
93D391AA32F24290C424438E /* NSNotificationCenter+PearlEasyCleanup.h */,
|
93D391AA32F24290C424438E /* NSNotificationCenter+PearlEasyCleanup.h */,
|
||||||
|
93D399C2F3D48E57C4803BDC /* NSPersistentStore+PearlMigration.m */,
|
||||||
|
93D397F4BAFFF7CF3F1B21A4 /* NSPersistentStore+PearlMigration.h */,
|
||||||
);
|
);
|
||||||
path = Pearl;
|
path = Pearl;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -3013,6 +3019,7 @@
|
|||||||
93D393DB5325820241BA90A7 /* PearlSizedTextView.h in Headers */,
|
93D393DB5325820241BA90A7 /* PearlSizedTextView.h in Headers */,
|
||||||
93D392A8777DC30C11361647 /* UITextView+PearlAttributes.h in Headers */,
|
93D392A8777DC30C11361647 /* UITextView+PearlAttributes.h in Headers */,
|
||||||
93D39A53D76CA70786423458 /* UICollectionView+PearlReloadFromArray.h in Headers */,
|
93D39A53D76CA70786423458 /* UICollectionView+PearlReloadFromArray.h in Headers */,
|
||||||
|
93D39AA4A0BE66A872CCC02E /* NSPersistentStore+PearlMigration.h in Headers */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -3147,7 +3154,7 @@
|
|||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
CLASSPREFIX = MP;
|
CLASSPREFIX = MP;
|
||||||
LastUpgradeCheck = 0600;
|
LastUpgradeCheck = 0610;
|
||||||
ORGANIZATIONNAME = Lyndir;
|
ORGANIZATIONNAME = Lyndir;
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
DA32D01F19D111C6004F3F0E = {
|
DA32D01F19D111C6004F3F0E = {
|
||||||
@@ -3483,8 +3490,8 @@
|
|||||||
outputPaths = (
|
outputPaths = (
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = "/bin/bash -e";
|
shellPath = "/bin/sh -e";
|
||||||
shellScript = "PATH+=:/usr/libexec\n\naddPlistWithKey() {\n local key=$1 type=$2 value=$3 plist=${4:-\"$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH\"}\n \n PlistBuddy -c \"Delete :'$key'\" \"$plist\" 2>/dev/null || true\n PlistBuddy -c \"Add :'$key' '$type' '$value'\" \"$plist\"\n}\nsetPlistWithKey() {\n local key=$1 value=$2 plist=${3:-\"$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH\"}\n \n PlistBuddy -c \"Set :'$key' '$value'\" \"$plist\"\n}\ngetPlistWithKey() {\n local key=$1 plist=${2:-\"$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH\"}\n \n PlistBuddy -c \"Print :'$key'\" \"$plist\"\n}\nsetSettingWithTitle() {\n local i title=$1 value=$2 plist=${3:-\"$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Settings.bundle/Root.plist\"}\n \n for (( i=0; 1; ++i )); do\n PlistBuddy -c \"Print :PreferenceSpecifiers:$i\" \"$plist\" &>/dev/null || break\n echo \"Checking preference specifier $i\"\n \n [[ $(PlistBuddy -c \"Print :PreferenceSpecifiers:$i:Title\" \"$plist\" 2>/dev/null) = $title ]] || continue\n \n echo \"Correct title, setting value.\"\n PlistBuddy -c \"Set :PreferenceSpecifiers:$i:DefaultValue $value\" \"$plist\"\n break\n done\n}\n\ndescription=$(git describe --always --dirty --long)\nversion=${description%-g*}\nIFS=- read major minor <<< \"$version\"\nprintf -v version '%s.%02d' \"$major\" \"$minor\"\nprintf -v commit '%09d' \"$((16#${description##*-g}))\"\n\naddPlistWithKey GITDescription string \"$description\"\nsetPlistWithKey CFBundleVersion \"${version//.}$commit\" # No separator between version and commit because I had already submitted a CFBundleVersion with a really high major. Cry.\nsetPlistWithKey CFBundleShortVersionString \"$version\"\n\nsetSettingWithTitle \"Build\" \"$commit\"\nsetSettingWithTitle \"Version\" \"$version\"\nsetSettingWithTitle \"Copyright\" \"$(getPlistWithKey NSHumanReadableCopyright)\"\n\nif [[ $DEPLOYMENT_LOCATION = YES ]]; then\n # This build is a release. Do some release checks.\n passed=1\n [[ $description != *-dirty ]] || \\\n { passed=0; echo >&2 \"ERROR: Cannot release a dirty version, first commit any changes.\"; }\n [[ $(PlistBuddy -c \"Print :'API Key'\" \"$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Crashlytics.plist\") ]] || \\\n { passed=0; echo >&2 \"ERROR: Cannot release: Crashlytics API key is missing.\"; }\n (( passed )) || \\\n { echo >&2 \"Failed to pass release checks. Fix the above errors and re-try. Aborting.\"; exit 1; }\nfi";
|
shellScript = "exec ../../../Scripts/updatePlist";
|
||||||
};
|
};
|
||||||
DA8D88E019DA412A00B189D0 /* Run Script: genassets */ = {
|
DA8D88E019DA412A00B189D0 /* Run Script: genassets */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
@@ -3498,7 +3505,7 @@
|
|||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = "/bin/sh -e";
|
shellPath = "/bin/sh -e";
|
||||||
shellScript = "exec env PATH=\"/usr/local/bin:$PATH\" ../../../Scripts/genassets";
|
shellScript = "exec ../../../Scripts/genassets";
|
||||||
showEnvVarsInLog = 0;
|
showEnvVarsInLog = 0;
|
||||||
};
|
};
|
||||||
DAD3125D155288AA00A3F9ED /* Run Script: Crashlytics */ = {
|
DAD3125D155288AA00A3F9ED /* Run Script: Crashlytics */ = {
|
||||||
@@ -3679,6 +3686,7 @@
|
|||||||
93D391ECBD9BD2C64115B5DD /* PearlSizedTextView.m in Sources */,
|
93D391ECBD9BD2C64115B5DD /* PearlSizedTextView.m in Sources */,
|
||||||
93D39E34FD28D24FE3442C48 /* UITextView+PearlAttributes.m in Sources */,
|
93D39E34FD28D24FE3442C48 /* UITextView+PearlAttributes.m in Sources */,
|
||||||
93D39D47FC623E91FC39D20C /* UICollectionView+PearlReloadFromArray.m in Sources */,
|
93D39D47FC623E91FC39D20C /* UICollectionView+PearlReloadFromArray.m in Sources */,
|
||||||
|
93D3928D629EA563F9EC4909 /* NSPersistentStore+PearlMigration.m in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0600"
|
LastUpgradeVersion = "0610"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0600"
|
LastUpgradeVersion = "0610"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
|||||||
BIN
MasterPassword/Resources/Media/ios/icon.sketch
Normal file
BIN
MasterPassword/Resources/Media/mac/icon.sketch
Normal file
BIN
MasterPassword/Resources/Media/mac/icon/icon_128x128.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
MasterPassword/Resources/Media/mac/icon/icon_128x128@2x.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
MasterPassword/Resources/Media/mac/icon/icon_16x16.png
Normal file
|
After Width: | Height: | Size: 531 B |
BIN
MasterPassword/Resources/Media/mac/icon/icon_16x16@2x.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
MasterPassword/Resources/Media/mac/icon/icon_256x256.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
MasterPassword/Resources/Media/mac/icon/icon_256x256@2x.png
Normal file
|
After Width: | Height: | Size: 201 KiB |
BIN
MasterPassword/Resources/Media/mac/icon/icon_32x32.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
MasterPassword/Resources/Media/mac/icon/icon_32x32@2x.png
Normal file
|
After Width: | Height: | Size: 4.3 KiB |
BIN
MasterPassword/Resources/Media/mac/icon/icon_512x512.png
Normal file
|
After Width: | Height: | Size: 201 KiB |
BIN
MasterPassword/Resources/Media/mac/icon/icon_512x512@2x.png
Normal file
|
After Width: | Height: | Size: 742 KiB |
@@ -465,44 +465,6 @@ readwhile() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ___________________________________________________________________________
|
|
||||||
# |__ pushqueue ______________________________________________________________|
|
|
||||||
#
|
|
||||||
# pushqueue element ...
|
|
||||||
#
|
|
||||||
# Pushes the given arguments as elements onto the queue.
|
|
||||||
#
|
|
||||||
pushqueue() {
|
|
||||||
[[ $_queue ]] || {
|
|
||||||
coproc _queue {
|
|
||||||
while IFS= read -r -d ''; do
|
|
||||||
printf '%s\0' "$REPLY"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
printf '%s\0' "$@" >&"${_queue[1]}"
|
|
||||||
} # _____________________________________________________________________
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# __________________________________________________________________________
|
|
||||||
# |__ popqueue ______________________________________________________________|
|
|
||||||
#
|
|
||||||
# popqueue
|
|
||||||
#
|
|
||||||
# Pops one element off the queue.
|
|
||||||
# If no elements are available on the queue, this command fails with exit code 1.
|
|
||||||
#
|
|
||||||
popqueue() {
|
|
||||||
local REPLY
|
|
||||||
[[ $_queue ]] && read -t0 <&"${_queue[0]}" || return
|
|
||||||
IFS= read -r -d '' <&"${_queue[0]}"
|
|
||||||
printf %s "$REPLY"
|
|
||||||
} # _____________________________________________________________________
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ______________________________________________________________________
|
# ______________________________________________________________________
|
||||||
# |__ Latest ____________________________________________________________|
|
# |__ Latest ____________________________________________________________|
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -2,10 +2,24 @@
|
|||||||
# See https://developer.apple.com/library/ios/qa/qa1686/_index.html
|
# See https://developer.apple.com/library/ios/qa/qa1686/_index.html
|
||||||
cd "${BASH_SOURCE%/*}"
|
cd "${BASH_SOURCE%/*}"
|
||||||
source bashlib
|
source bashlib
|
||||||
|
set -e
|
||||||
cd ..
|
cd ..
|
||||||
|
export PATH+=/usr/local/bin
|
||||||
|
|
||||||
# icons format: [pixel size]@[scale]@[idiom]@[os]:[filename] -- if os is "anything lower", omit it
|
# icons format: [pixel size]@[scale]@[idiom]@[os]:[filename] -- if os is "anything lower", omit it
|
||||||
icons=(
|
icons=(
|
||||||
|
# Mac
|
||||||
|
16@1@mac@:
|
||||||
|
32@2@mac@:
|
||||||
|
32@1@mac@:
|
||||||
|
64@2@mac@:
|
||||||
|
128@1@mac@:
|
||||||
|
256@2@mac@:
|
||||||
|
256@1@mac@:
|
||||||
|
512@2@mac@:
|
||||||
|
512@1@mac@:
|
||||||
|
1024@2@mac@:
|
||||||
|
# iPhone
|
||||||
180@3@iphone@8.0:Icon-60@3x.png
|
180@3@iphone@8.0:Icon-60@3x.png
|
||||||
120@3@iphone@8.0:Icon-Small-40@3x.png
|
120@3@iphone@8.0:Icon-Small-40@3x.png
|
||||||
120@2@iphone@7.0:Icon-60@2x.png
|
120@2@iphone@7.0:Icon-60@2x.png
|
||||||
@@ -15,7 +29,7 @@ icons=(
|
|||||||
58@2@iphone@:Icon-Small@2x.png
|
58@2@iphone@:Icon-Small@2x.png
|
||||||
# 57@1@iphone@:Icon.png
|
# 57@1@iphone@:Icon.png
|
||||||
# 29@1@iphone@:Icon-Small.png
|
# 29@1@iphone@:Icon-Small.png
|
||||||
#
|
# iPad
|
||||||
76@1@ipad@7.0:Icon-76.png
|
76@1@ipad@7.0:Icon-76.png
|
||||||
152@2@ipad@7.0:Icon-76@2x.png
|
152@2@ipad@7.0:Icon-76@2x.png
|
||||||
40@1@ipad@7.0:Icon-Small-40.png
|
40@1@ipad@7.0:Icon-Small-40.png
|
||||||
@@ -64,8 +78,10 @@ appiconset="$xcassets/AppIcon.appiconset"
|
|||||||
launchimage="$xcassets/LaunchImage.launchimage"
|
launchimage="$xcassets/LaunchImage.launchimage"
|
||||||
ios_icon=MasterPassword/Resources/Media/ios/icon
|
ios_icon=MasterPassword/Resources/Media/ios/icon
|
||||||
ios_launch=MasterPassword/Resources/Media/ios/launch
|
ios_launch=MasterPassword/Resources/Media/ios/launch
|
||||||
|
mac_icon=MasterPassword/Resources/Media/mac/icon
|
||||||
|
|
||||||
if [[ "$(latest "$ios_icon"/*)" -nt "$appiconset/Contents.json" ]]; then
|
if [[ "$(latest "$ios_icon"/*)" -nt "$appiconset/Contents.json" ]] ||
|
||||||
|
[[ "$(latest "$mac_icon"/*)" -nt "$appiconset/Contents.json" ]]; then
|
||||||
rm -rf "$appiconset"; mkdir -p "$appiconset"
|
rm -rf "$appiconset"; mkdir -p "$appiconset"
|
||||||
{
|
{
|
||||||
comma=
|
comma=
|
||||||
@@ -75,7 +91,19 @@ if [[ "$(latest "$ios_icon"/*)" -nt "$appiconset/Contents.json" ]]; then
|
|||||||
IFS=@ read px scale idiom os <<< "$icon"
|
IFS=@ read px scale idiom os <<< "$icon"
|
||||||
pt=$(( px / scale ))
|
pt=$(( px / scale ))
|
||||||
|
|
||||||
if imageProps=$(copyImage "$ios_icon/$filename" "$appiconset/$filename"); then
|
suffix=
|
||||||
|
[[ $scale != 1 ]] && suffix=@${scale}x
|
||||||
|
[[ $filename ]] || filename="icon_${pt}x${pt}${suffix}.png"
|
||||||
|
source=$ios_icon/$filename
|
||||||
|
if [[ ! -e $source ]]; then
|
||||||
|
source=$mac_icon/$filename
|
||||||
|
if [[ ! -e $source ]]; then
|
||||||
|
err 'No icon for: %s' "$filename"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if imageProps=$(copyImage "$source" "$appiconset/$filename"); then
|
||||||
printf '%s{"size":"%dx%d","filename":"%s","scale":"%sx"' \
|
printf '%s{"size":"%dx%d","filename":"%s","scale":"%sx"' \
|
||||||
"$comma" "$pt" "$pt" "$filename" "$scale"
|
"$comma" "$pt" "$pt" "$filename" "$scale"
|
||||||
[[ $idiom ]] && printf ',"idiom":"%s"' "$idiom"
|
[[ $idiom ]] && printf ',"idiom":"%s"' "$idiom"
|
||||||
|
|||||||
@@ -280,7 +280,7 @@ passWord[i] = passChar</pre>
|
|||||||
|
|
||||||
<footer><div class="muted content">
|
<footer><div class="muted content">
|
||||||
|
|
||||||
<p><em>Master Password is a security product and algorithm by <a href="http://www.lhunath.com" onclick="_gaq.push(['_trackPageview', '/outbound/lhunath']);">Maarten Billemont</a>, <a href="http://www.lyndir.com" onclick="_gaq.push(['_trackPageview', '/outbound/lyndir']);">Lyndir</a> (© 2011-2013).</em></p>
|
<p><em>Master Password is a security product and algorithm by <a href="http://www.lhunath.com" onclick="_gaq.push(['_trackPageview', '/outbound/lhunath']);">Maarten Billemont</a>, <a href="http://www.lyndir.com" onclick="_gaq.push(['_trackPageview', '/outbound/lyndir']);">Lyndir</a> (© 2011-2014).</em><br>Usage implies agreement with our <a href="privacy.html">privacy policy and disclaimer</a>.</p>
|
||||||
<p><a href="http://gorillas.lyndir.com" onclick="_gaq.push(['_trackPageview', '/outbound/gorillas']);">Gorillas</a> ● <a href="http://deblock.lyndir.com" onclick="_gaq.push(['_trackPageview', '/outbound/deblock']);">DeBlock</a> ● <a href="http://github.com/Lyndir" onclick="_gaq.push(['_trackPageview', '/outbound/github']);">GitHub</a> ● <a href="http://thanks.lhunath.com" onclick="_gaq.push(['_trackPageview', '/outbound/thanks']);">Send Thanks</a></p>
|
<p><a href="http://gorillas.lyndir.com" onclick="_gaq.push(['_trackPageview', '/outbound/gorillas']);">Gorillas</a> ● <a href="http://deblock.lyndir.com" onclick="_gaq.push(['_trackPageview', '/outbound/deblock']);">DeBlock</a> ● <a href="http://github.com/Lyndir" onclick="_gaq.push(['_trackPageview', '/outbound/github']);">GitHub</a> ● <a href="http://thanks.lhunath.com" onclick="_gaq.push(['_trackPageview', '/outbound/thanks']);">Send Thanks</a></p>
|
||||||
|
|
||||||
</div></footer>
|
</div></footer>
|
||||||
@@ -320,34 +320,6 @@ passWord[i] = passChar</pre>
|
|||||||
|
|
||||||
<!-- Tender -->
|
<!-- Tender -->
|
||||||
<script src="https://masterpassword.tenderapp.com/tender_widget.js" type="text/javascript"></script>
|
<script src="https://masterpassword.tenderapp.com/tender_widget.js" type="text/javascript"></script>
|
||||||
|
|
||||||
<!-- AdWords -->
|
|
||||||
<script type="text/javascript">
|
|
||||||
/* <![CDATA[ */
|
|
||||||
goog_snippet_vars = function() {
|
|
||||||
var w = window;
|
|
||||||
w.google_conversion_id = 1015576061;
|
|
||||||
w.google_conversion_label = "PcXqCPPz5AIQ_euh5AM";
|
|
||||||
w.google_conversion_value = 4;
|
|
||||||
}
|
|
||||||
goog_report_conversion = function(url) {
|
|
||||||
goog_snippet_vars();
|
|
||||||
window.google_conversion_format = "3";
|
|
||||||
window.google_is_call = true;
|
|
||||||
var opt = new Object();
|
|
||||||
opt.onload_callback = function() {
|
|
||||||
if (typeof(url) != 'undefined') {
|
|
||||||
window.location = url;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var conv_handler = window['google_trackConversion'];
|
|
||||||
if (typeof(conv_handler) == 'function') {
|
|
||||||
conv_handler(opt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* ]]> */
|
|
||||||
</script>
|
|
||||||
<script type="text/javascript" src="http://www.googleadservices.com/pagead/conversion_async.js"></script>
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -35,6 +35,9 @@ a .popup {
|
|||||||
margin-right: -100px;
|
margin-right: -100px;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
}
|
}
|
||||||
|
a .popup.border {
|
||||||
|
margin-bottom: 1em;
|
||||||
|
}
|
||||||
a:hover .popup {
|
a:hover .popup {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
@@ -108,6 +111,11 @@ img.block {
|
|||||||
margin: auto 1em;
|
margin: auto 1em;
|
||||||
width: 640px;
|
width: 640px;
|
||||||
}
|
}
|
||||||
|
img.border {
|
||||||
|
background: #AAA;
|
||||||
|
border: 1px solid #333;
|
||||||
|
padding: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
.thumb {
|
.thumb {
|
||||||
clear: both;
|
clear: both;
|
||||||
|
|||||||
@@ -226,7 +226,7 @@
|
|||||||
|
|
||||||
<footer><div class="muted content">
|
<footer><div class="muted content">
|
||||||
|
|
||||||
<p><em>Master Password is a security product and algorithm by <a href="http://www.lhunath.com" onclick="_gaq.push(['_trackPageview', '/outbound/lhunath']);">Maarten Billemont</a>, <a href="http://www.lyndir.com" onclick="_gaq.push(['_trackPageview', '/outbound/lyndir']);">Lyndir</a> (© 2011-2013).</em></p>
|
<p><em>Master Password is a security product and algorithm by <a href="http://www.lhunath.com" onclick="_gaq.push(['_trackPageview', '/outbound/lhunath']);">Maarten Billemont</a>, <a href="http://www.lyndir.com" onclick="_gaq.push(['_trackPageview', '/outbound/lyndir']);">Lyndir</a> (© 2011-2014).</em><br>Usage implies agreement with our <a href="privacy.html">privacy policy and disclaimer</a>.</p>
|
||||||
<p><a href="http://gorillas.lyndir.com" onclick="_gaq.push(['_trackPageview', '/outbound/gorillas']);">Gorillas</a> ● <a href="http://deblock.lyndir.com" onclick="_gaq.push(['_trackPageview', '/outbound/deblock']);">DeBlock</a> ● <a href="http://github.com/Lyndir" onclick="_gaq.push(['_trackPageview', '/outbound/github']);">GitHub</a> ● <a href="http://thanks.lhunath.com" onclick="_gaq.push(['_trackPageview', '/outbound/thanks']);">Send Thanks</a></p>
|
<p><a href="http://gorillas.lyndir.com" onclick="_gaq.push(['_trackPageview', '/outbound/gorillas']);">Gorillas</a> ● <a href="http://deblock.lyndir.com" onclick="_gaq.push(['_trackPageview', '/outbound/deblock']);">DeBlock</a> ● <a href="http://github.com/Lyndir" onclick="_gaq.push(['_trackPageview', '/outbound/github']);">GitHub</a> ● <a href="http://thanks.lhunath.com" onclick="_gaq.push(['_trackPageview', '/outbound/thanks']);">Send Thanks</a></p>
|
||||||
|
|
||||||
</div></footer>
|
</div></footer>
|
||||||
@@ -266,34 +266,6 @@
|
|||||||
|
|
||||||
<!-- Tender -->
|
<!-- Tender -->
|
||||||
<script src="https://masterpassword.tenderapp.com/tender_widget.js" type="text/javascript"></script>
|
<script src="https://masterpassword.tenderapp.com/tender_widget.js" type="text/javascript"></script>
|
||||||
|
|
||||||
<!-- AdWords -->
|
|
||||||
<script type="text/javascript">
|
|
||||||
/* <![CDATA[ */
|
|
||||||
goog_snippet_vars = function() {
|
|
||||||
var w = window;
|
|
||||||
w.google_conversion_id = 1015576061;
|
|
||||||
w.google_conversion_label = "PcXqCPPz5AIQ_euh5AM";
|
|
||||||
w.google_conversion_value = 4;
|
|
||||||
}
|
|
||||||
goog_report_conversion = function(url) {
|
|
||||||
goog_snippet_vars();
|
|
||||||
window.google_conversion_format = "3";
|
|
||||||
window.google_is_call = true;
|
|
||||||
var opt = new Object();
|
|
||||||
opt.onload_callback = function() {
|
|
||||||
if (typeof(url) != 'undefined') {
|
|
||||||
window.location = url;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var conv_handler = window['google_trackConversion'];
|
|
||||||
if (typeof(conv_handler) == 'function') {
|
|
||||||
conv_handler(opt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* ]]> */
|
|
||||||
</script>
|
|
||||||
<script type="text/javascript" src="http://www.googleadservices.com/pagead/conversion_async.js"></script>
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
BIN
Site/2013-05/img/about.png
Normal file
|
After Width: | Height: | Size: 3.4 MiB |
|
Before Width: | Height: | Size: 262 KiB After Width: | Height: | Size: 306 KiB |
|
Before Width: | Height: | Size: 245 KiB After Width: | Height: | Size: 284 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.7 KiB |
BIN
Site/2013-05/img/glyphicons-halflings-white.png
Executable file → Normal file
|
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 156 KiB After Width: | Height: | Size: 173 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 151 KiB |
|
Before Width: | Height: | Size: 175 KiB After Width: | Height: | Size: 203 KiB |
|
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 111 KiB |
6
Site/2013-05/img/loading-spin.svg
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="white">
|
||||||
|
<path opacity=".25" d="M16 0 A16 16 0 0 0 16 32 A16 16 0 0 0 16 0 M16 4 A12 12 0 0 1 16 28 A12 12 0 0 1 16 4"/>
|
||||||
|
<path d="M16 0 A16 16 0 0 1 32 16 L28 16 A12 12 0 0 0 16 4z">
|
||||||
|
<animateTransform attributeName="transform" type="rotate" from="0 16 16" to="360 16 16" dur="0.8s" repeatCount="indefinite" />
|
||||||
|
</path>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 423 B |
|
Before Width: | Height: | Size: 261 KiB After Width: | Height: | Size: 366 KiB |
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 264 KiB After Width: | Height: | Size: 295 KiB |