diff --git a/External/UbiquityStoreManager b/External/UbiquityStoreManager
index 75d59bda..da3e69ad 160000
--- a/External/UbiquityStoreManager
+++ b/External/UbiquityStoreManager
@@ -1 +1 @@
-Subproject commit 75d59bdac65a08a0bf415dcaf5aca9f809909040
+Subproject commit da3e69adf5e861dab59bf936e6582c08e43c26c9
diff --git a/MasterPassword/ObjC/Mac/MPAppsViewController.xib b/MasterPassword/ObjC/Mac/MPAppsViewController.xib
new file mode 100644
index 00000000..085316eb
--- /dev/null
+++ b/MasterPassword/ObjC/Mac/MPAppsViewController.xib
@@ -0,0 +1,121 @@
+
+
+
+ 1070
+ 11C42
+ 1938
+ 1138.17
+ 567.00
+
+
+ NSWindowTemplate
+ NSView
+ NSCustomObject
+
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+ -2
+
+
+ File's Owner
+
+
+ -1
+
+
+ First Responder
+
+
+ -3
+
+
+ Application
+
+
+ 1
+
+
+
+
+
+
+
+ 2
+
+
+
+
+
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ {{357, 418}, {480, 270}}
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+
+
+
+ 2
+
+
+ 0
+ IBCocoaFramework
+ YES
+ 3
+ YES
+
+
diff --git a/MasterPassword/ObjC/Mac/MPAppsWindow.xib b/MasterPassword/ObjC/Mac/MPAppsWindow.xib
new file mode 100644
index 00000000..8163ac7d
--- /dev/null
+++ b/MasterPassword/ObjC/Mac/MPAppsWindow.xib
@@ -0,0 +1,977 @@
+
+
+
+ 1080
+ 12D78
+ 3084
+ 1187.37
+ 626.00
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ 3084
+
+
+ IBNSLayoutConstraint
+ NSButton
+ NSButtonCell
+ NSCustomObject
+ NSImageCell
+ NSImageView
+ NSTextField
+ NSTextFieldCell
+ NSView
+ NSWindowTemplate
+
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+ PluginDependencyRecalculationVersion
+
+
+
+
+ MPMacAppDelegate
+
+
+ FirstResponder
+
+
+ NSApplication
+
+
+ 3
+ 2
+ {{196, 240}, {1000, 600}}
+ 544735232
+
+ NSWindow
+
+
+ {1000, 600}
+ {1000, 600}
+
+
+ 256
+
+
+
+ 268
+
+
+ Apple PDF pasteboard type
+ Apple PICT pasteboard type
+ Apple PNG pasteboard type
+ NSFilenamesPboardType
+ NeXT Encapsulated PostScript v1.2 pasteboard type
+ NeXT TIFF v4.0 pasteboard type
+
+ {1000, 600}
+
+
+
+ _NS:9
+ YES
+
+ 134217728
+ 33554432
+
+ NSImage
+ shot-laptop-leaning-iphone
+
+ _NS:9
+ 0
+ 0
+ 0
+ NO
+
+ NO
+ YES
+
+
+
+ 268
+
+ {{18, 18}, {964, 18}}
+
+
+ _NS:9
+ YES
+
+ -2080374784
+ 0
+ Don't Show Again
+
+ LucidaGrande
+ 13
+ 1044
+
+ _NS:9
+
+ 1211912448
+ 2
+
+ NSImage
+ NSSwitch
+
+
+ NSSwitch
+
+
+
+ 200
+ 25
+
+ NO
+
+
+
+ 268
+
+ {{425, 42}, {150, 44}}
+
+
+ _NS:9
+ YES
+
+ 67108864
+ 0
+
+
+ _NS:9
+
+ -2039201792
+ 6
+
+ NSImage
+ appstore
+
+
+
+ 200
+ 25
+
+ NO
+
+
+
+ 268
+ {{17, 508}, {966, 72}}
+
+
+
+ _NS:1535
+ YES
+
+ 68157504
+ 272630784
+ QWNjZXNzIHlvdXIgcGFzc3dvcmRzCmZyb20gYW55d2hlcmUuA
+
+ MyriadPro-Bold
+ 36
+ 16
+
+ _NS:1535
+
+
+ 6
+ System
+ controlColor
+
+ 3
+ MC42NjY2NjY2NjY3AA
+
+
+
+ 1
+ MSAxIDEAA
+
+
+ NO
+
+
+
+ 268
+ {{357, 94}, {286, 24}}
+
+
+
+ _NS:1535
+ YES
+
+ 68157504
+ 138413056
+ Master Password for iPhone
+
+ MyriadPro-Regular
+ 24
+ 16
+
+ _NS:1535
+
+
+
+
+ NO
+
+
+ {1000, 600}
+
+
+
+
+ {{0, 0}, {1920, 1058}}
+ {1000, 622}
+ {1000, 622}
+ YES
+
+
+
+
+
+
+ iphoneAppStore:
+
+
+
+ 206
+
+
+
+ appWindowDontShow
+
+
+
+ 207
+
+
+
+
+
+ 0
+
+
+
+
+
+ -2
+
+
+ File's Owner
+
+
+ -1
+
+
+ First Responder
+
+
+ -3
+
+
+ Application
+
+
+ 1
+
+
+
+
+
+
+
+ 2
+
+
+
+
+ 3
+ 0
+
+ 4
+ 1
+
+ 8
+
+ 1000
+
+ 6
+ 24
+ 3
+
+
+
+ 9
+ 0
+
+ 9
+ 1
+
+ 0.0
+
+ 1000
+
+ 9
+ 40
+ 2
+
+
+
+ 9
+ 0
+
+ 9
+ 1
+
+ 0.0
+
+ 1000
+
+ 6
+ 24
+ 2
+
+
+
+ 3
+ 0
+
+ 4
+ 1
+
+ 8
+
+ 1000
+
+ 6
+ 24
+ 3
+
+
+
+ 6
+ 0
+
+ 6
+ 1
+
+ 20
+
+ 1000
+
+ 8
+ 29
+ 3
+
+
+
+ 4
+ 0
+
+ 4
+ 1
+
+ 20
+
+ 1000
+
+ 8
+ 29
+ 3
+
+
+
+ 5
+ 0
+
+ 5
+ 1
+
+ 20
+
+ 1000
+
+ 8
+ 29
+ 3
+
+
+
+ 6
+ 0
+
+ 6
+ 1
+
+ 20
+
+ 1000
+
+ 8
+ 29
+ 3
+
+
+
+ 5
+ 0
+
+ 5
+ 1
+
+ 20
+
+ 1000
+
+ 8
+ 29
+ 3
+
+
+
+ 3
+ 0
+
+ 3
+ 1
+
+ 20
+
+ 1000
+
+ 8
+ 29
+ 3
+
+
+
+ 4
+ 0
+
+ 4
+ 1
+
+ 0.0
+
+ 1000
+
+ 9
+ 40
+ 3
+
+
+
+ 3
+ 0
+
+ 3
+ 1
+
+ 0.0
+
+ 1000
+
+ 9
+ 40
+ 3
+
+
+
+ 6
+ 0
+
+ 6
+ 1
+
+ 0.0
+
+ 1000
+
+ 9
+ 40
+ 3
+
+
+
+ 5
+ 0
+
+ 5
+ 1
+
+ 0.0
+
+ 1000
+
+ 9
+ 40
+ 3
+
+
+
+ 3
+ 0
+
+ 3
+ 1
+
+ 0.0
+
+ 1000
+
+ 9
+ 40
+ 3
+
+
+
+ 9
+ 0
+
+ 9
+ 1
+
+ 0.0
+
+ 1000
+
+ 9
+ 40
+ 2
+
+
+
+
+
+
+
+
+ Container
+
+
+ 3
+
+
+
+
+
+ 8
+ 0
+
+ 0
+ 1
+
+ 600
+
+ 1000
+
+ 9
+ 40
+ 1
+
+
+
+ 7
+ 0
+
+ 0
+ 1
+
+ 1000
+
+ 1000
+
+ 9
+ 40
+ 1
+
+
+
+ Image
+
+
+ 4
+
+
+
+
+ 59
+
+
+
+
+
+ 8
+ 0
+
+ 0
+ 1
+
+ 14
+
+ 1000
+
+ 9
+ 40
+ 1
+
+
+
+ Check
+
+
+ 60
+
+
+
+
+ 77
+
+
+
+
+ 149
+
+
+
+
+ 173
+
+
+
+
+
+ Store
+
+
+ 174
+
+
+
+
+ 219
+
+
+
+
+ 220
+
+
+
+
+ 226
+
+
+
+
+ 227
+
+
+
+
+ 268
+
+
+
+
+
+
+
+ 269
+
+
+
+
+ 280
+
+
+
+
+ 281
+
+
+
+
+ 283
+
+
+
+
+
+
+
+ 284
+
+
+
+
+ 231
+
+
+
+
+ 298
+
+
+
+
+ 299
+
+
+
+
+ 230
+
+
+
+
+ 265
+
+
+
+
+ 266
+
+
+
+
+ 229
+
+
+
+
+ 267
+
+
+
+
+ 264
+
+
+
+
+ 260
+
+
+
+
+ 291
+
+
+
+
+
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ {{357, 418}, {480, 270}}
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+
+
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+
+
+
+ 337
+
+
+
+
+ MPAppDelegate_Shared
+ PearlAppDelegate
+
+ IBProjectSource
+ ./Classes/MPAppDelegate_Shared.h
+
+
+
+ MPMacAppDelegate
+ MPAppDelegate_Shared
+
+ id
+ id
+ NSMenuItem
+ id
+ id
+ id
+ NSMenuItem
+
+
+
+ iphoneAppStore:
+ id
+
+
+ lock:
+ id
+
+
+ newUser:
+ NSMenuItem
+
+
+ rebuildCloud:
+ id
+
+
+ showPasswordWindow:
+ id
+
+
+ terminate:
+ id
+
+
+ togglePreference:
+ NSMenuItem
+
+
+
+ NSButton
+ NSMenuItem
+ NSMenuItem
+ NSMenuItem
+ NSMenuItem
+ NSMenuItem
+ NSMenuItem
+ NSMenuItem
+ NSMenu
+ NSMenuItem
+ NSMenuItem
+
+
+
+ appWindowDontShow
+ NSButton
+
+
+ createUserItem
+ NSMenuItem
+
+
+ dialogStyleHUD
+ NSMenuItem
+
+
+ dialogStyleRegular
+ NSMenuItem
+
+
+ lockItem
+ NSMenuItem
+
+
+ rememberPasswordItem
+ NSMenuItem
+
+
+ savePasswordItem
+ NSMenuItem
+
+
+ showItem
+ NSMenuItem
+
+
+ statusMenu
+ NSMenu
+
+
+ useICloudItem
+ NSMenuItem
+
+
+ usersItem
+ NSMenuItem
+
+
+
+ IBProjectSource
+ ./Classes/MPMacAppDelegate.h
+
+
+
+ NSLayoutConstraint
+ NSObject
+
+ IBProjectSource
+ ./Classes/NSLayoutConstraint.h
+
+
+
+
+ 0
+ IBCocoaFramework
+ YES
+ 3
+
+ {15, 15}
+ {150, 44}
+ {1000, 600}
+
+ YES
+
+
diff --git a/MasterPassword/ObjC/Mac/MPMacAppDelegate.h b/MasterPassword/ObjC/Mac/MPMacAppDelegate.h
index 7dd2d338..34bf5e28 100644
--- a/MasterPassword/ObjC/Mac/MPMacAppDelegate.h
+++ b/MasterPassword/ObjC/Mac/MPMacAppDelegate.h
@@ -24,11 +24,14 @@
@property(nonatomic, weak) IBOutlet NSMenuItem *usersItem;
@property(nonatomic, weak) IBOutlet NSMenuItem *dialogStyleRegular;
@property(nonatomic, weak) IBOutlet NSMenuItem *dialogStyleHUD;
+@property(nonatomic, weak) IBOutlet NSButton *appWindowDontShow;
- (IBAction)showPasswordWindow:(id)sender;
- (IBAction)togglePreference:(NSMenuItem *)sender;
- (IBAction)newUser:(NSMenuItem *)sender;
- (IBAction)lock:(id)sender;
- (IBAction)rebuildCloud:(id)sender;
+- (IBAction)terminate:(id)sender;
+- (IBAction)iphoneAppStore:(id)sender;
@end
diff --git a/MasterPassword/ObjC/Mac/MPMacAppDelegate.m b/MasterPassword/ObjC/Mac/MPMacAppDelegate.m
index f1e49940..db1856b5 100644
--- a/MasterPassword/ObjC/Mac/MPMacAppDelegate.m
+++ b/MasterPassword/ObjC/Mac/MPMacAppDelegate.m
@@ -11,6 +11,11 @@
#import "MPAppDelegate_Store.h"
#import
+@interface MPMacAppDelegate()
+
+@property(nonatomic, strong) NSWindowController *appsWindow;
+@end
+
@implementation MPMacAppDelegate
#pragma clang diagnostic push
@@ -188,6 +193,22 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
[self.storeManager rebuildCloudContentFromCloudStoreOrLocalStore:NO];
}
+- (IBAction)terminate:(id)sender {
+
+ [self.passwordWindow close];
+ self.passwordWindow = nil;
+
+ [NSApp terminate:nil];
+}
+
+- (IBAction)iphoneAppStore:(id)sender {
+
+ [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"http://itunes.apple.com/app/id510296984"]];
+
+ [self.appWindowDontShow.window close];
+ self.appWindowDontShow = nil;
+}
+
- (void)didUpdateConfigForKey:(SEL)configKey fromValue:(id)oldValue {
[[NSNotificationCenter defaultCenter]
@@ -198,7 +219,6 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
- [[NSUbiquitousKeyValueStore defaultStore] setString:@"0B3CA2DF-5796-44DF-B5E0-121EC3846464" forKey:@"USMStoreUUIDKey"];
// Setup delegates and listeners.
[MPConfig get].delegate = self;
__weak id weakSelf = self;
@@ -248,8 +268,7 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
EventHotKeyRef hotKeyRef;
EventTypeSpec hotKeyEvents[1] = { { .eventClass = kEventClassKeyboard, .eventKind = kEventHotKeyPressed } };
OSStatus status = InstallApplicationEventHandler(NewEventHandlerUPP( MPHotKeyHander ), GetEventTypeCount( hotKeyEvents ),
- hotKeyEvents,
- (__bridge void *)self, NULL);
+ hotKeyEvents, (__bridge void *)self, NULL);
if (status != noErr)
err(@"Error installing application event handler: %d", status);
status = RegisterEventHotKey( 35 /* p */, controlKey + cmdKey, MPShowHotKey, GetApplicationEventTarget(), 0, &hotKeyRef );
@@ -258,6 +277,15 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
status = RegisterEventHotKey( 35 /* p */, controlKey + optionKey + cmdKey, MPLockHotKey, GetApplicationEventTarget(), 0, &hotKeyRef );
if (status != noErr)
err(@"Error registering 'lock' hotkey: %d", status);
+
+ // iOS App window
+ if ([[MPMacConfig get].showAppWindow boolValue]) {
+ [self.appsWindow = [[NSWindowController alloc] initWithWindowNibName:@"MPAppsWindow" owner:self] showWindow:self];
+ [[NSNotificationCenter defaultCenter] addObserverForName:NSWindowWillCloseNotification object:self.appsWindow.window queue:nil
+ usingBlock:^(NSNotification *note) {
+ [MPMacConfig get].showAppWindow = @(self.appWindowDontShow.state == NSOffState);
+ }];
+ }
}
- (void)setActiveUser:(MPUserEntity *)activeUser {
@@ -341,11 +369,6 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
}
}
-- (void)applicationDidBecomeActive:(NSNotification *)notification {
-
-// [self showPasswordWindow];
-}
-
- (IBAction)showPasswordWindow:(id)sender {
// If no user, can't activate.
diff --git a/MasterPassword/ObjC/Mac/MPMacConfig.h b/MasterPassword/ObjC/Mac/MPMacConfig.h
index 9540e648..a2e1c58e 100644
--- a/MasterPassword/ObjC/Mac/MPMacConfig.h
+++ b/MasterPassword/ObjC/Mac/MPMacConfig.h
@@ -12,5 +12,6 @@
@property(nonatomic, retain) NSString *usedUserName;
@property(nonatomic, retain) NSNumber *dialogStyleHUD;
+@property(nonatomic, strong) NSNumber *showAppWindow;
@end
diff --git a/MasterPassword/ObjC/Mac/MPMacConfig.m b/MasterPassword/ObjC/Mac/MPMacConfig.m
index 6e1e0e20..a6aad9f0 100644
--- a/MasterPassword/ObjC/Mac/MPMacConfig.m
+++ b/MasterPassword/ObjC/Mac/MPMacConfig.m
@@ -10,6 +10,7 @@
@dynamic usedUserName;
@dynamic dialogStyleHUD;
+@dynamic showAppWindow;
- (id)init {
@@ -18,7 +19,8 @@
[self.defaults registerDefaults:@{
NSStringFromSelector( @selector(iTunesID) ) : @"510296984",
- NSStringFromSelector( @selector(dialogStyleHUD) ) : @NO
+ NSStringFromSelector( @selector(dialogStyleHUD) ) : @NO,
+ NSStringFromSelector( @selector(showAppWindow) ) : @YES
}];
return self;
diff --git a/MasterPassword/ObjC/Mac/MPPasswordWindowController.m b/MasterPassword/ObjC/Mac/MPPasswordWindowController.m
index 338e3bd5..7cff0432 100644
--- a/MasterPassword/ObjC/Mac/MPPasswordWindowController.m
+++ b/MasterPassword/ObjC/Mac/MPPasswordWindowController.m
@@ -60,6 +60,7 @@
}];
[[NSNotificationCenter defaultCenter]
addObserverForName:NSWindowWillCloseNotification object:self.window queue:nil usingBlock:^(NSNotification *note) {
+ [NSApp endSheet:[self.window attachedSheet]];
[[NSApplication sharedApplication] hide:nil];
}];
[[NSNotificationCenter defaultCenter]
diff --git a/MasterPassword/ObjC/Mac/MPPasswordWindowController.xib b/MasterPassword/ObjC/Mac/MPPasswordWindowController.xib
index 5726caf1..f871f799 100644
--- a/MasterPassword/ObjC/Mac/MPPasswordWindowController.xib
+++ b/MasterPassword/ObjC/Mac/MPPasswordWindowController.xib
@@ -12,8 +12,6 @@
IBNSLayoutConstraint
- NSButton
- NSButtonCell
NSCustomObject
NSCustomView
NSProgressIndicator
@@ -48,8 +46,8 @@
NSPanel
- {480, 320}
- {480, 134}
+ {480, 200}
+ {480, 199}
256
@@ -58,35 +56,6 @@
268
-
-
- 268
-
- {{10, 134}, {122, 19}}
-
-
- _NS:9
- YES
-
- -2080374784
- 134217728
- Round Rect Button
-
- LucidaGrande
- 12
- 16
-
- _NS:9
-
- -2038153216
- 164
-
-
- 400
- 75
-
- NO
-
268
@@ -97,9 +66,9 @@
1
1
-
+
3
- MCAwLjYAA
+ MCAwLjkAA
_NS:1535
@@ -124,7 +93,7 @@
MC42NjY2NjY2NjY3AA
-
+
1
MSAxIDEAA
@@ -137,13 +106,13 @@
{{17, 20}, {446, 17}}
-
+
1
1
-
+
3
- MCAwLjYAA
+ MCAwLjkAA
_NS:1505
@@ -160,15 +129,7 @@
_NS:1505
-
- 6
- System
- controlLightHighlightColor
-
- 3
- MQA
-
-
+
NO
@@ -198,7 +159,10 @@
6
System
textBackgroundColor
-
+
+ 3
+ MQA
+
6
@@ -218,7 +182,7 @@
{{17, 45}, {446, 80}}
-
+
1
1
@@ -234,7 +198,7 @@
-
+
YES
@@ -261,6 +225,17 @@
NO
+
+
+ 268
+ {{224, 84}, {32, 32}}
+
+
+
+ _NS:945
+ 28682
+ 100
+
{480, 200}
@@ -269,16 +244,6 @@
_NS:9
NSView
-
-
- 268
- {{224, 84}, {32, 32}}
-
-
- _NS:945
- 28682
- 100
-
{480, 200}
@@ -288,8 +253,8 @@
_NS:21
{{0, 0}, {1920, 1058}}
- {480, 156}
- {480, 342}
+ {480, 221}
+ {480, 222}
YES
@@ -311,14 +276,6 @@
214
-
-
- progressView
-
-
-
- 215
-
userLabel
@@ -352,12 +309,12 @@
226
-
- reload:
+
+ progressView
-
+
- 236
+ 215
@@ -414,38 +371,6 @@
23
-
-
- 9
- 0
-
- 9
- 1
-
- 0.0
-
- 1000
-
- 6
- 24
- 2
-
-
-
- 10
- 0
-
- 10
- 1
-
- 0.0
-
- 1000
-
- 6
- 24
- 2
-
3
@@ -510,21 +435,62 @@
29
3
-
-
- 96
-
-
-
-
143
+
+
+ 9
+ 0
+
+ 9
+ 1
+
+ 0.0
+
+ 1000
+
+ 6
+ 24
+ 2
+
+
+
+ 10
+ 0
+
+ 10
+ 1
+
+ 0.0
+
+ 1000
+
+ 5
+ 22
+ 2
+
+
+
+ 9
+ 0
+
+ 9
+ 1
+
+ 0.0
+
+ 1000
+
+ 6
+ 24
+ 2
+
4
@@ -573,22 +539,6 @@
29
3
-
-
- 5
- 0
-
- 6
- 1
-
- 8
-
- 1000
-
- 6
- 24
- 3
-
3
@@ -605,22 +555,6 @@
24
3
-
-
- 9
- 0
-
- 9
- 1
-
- 0.0
-
- 1000
-
- 6
- 24
- 2
-
9
@@ -701,27 +635,11 @@
29
3
-
-
- 10
- 0
-
- 10
- 1
-
- 0.0
-
- 1000
-
- 6
- 24
- 2
-
-
+
@@ -841,16 +759,6 @@
-
- 207
-
-
-
-
- 208
-
-
-
209
@@ -889,37 +797,29 @@
-
- 210
-
-
-
231
- 232
-
-
-
-
+ 96
+
- 233
-
-
-
-
- 234
-
+ 237
+
- 235
-
+ 238
+
+
+
+
+ 239
+
@@ -928,19 +828,19 @@
com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
-
-
+
-
-
+
+
+
com.apple.InterfaceBuilder.CocoaPlugin
@@ -969,7 +869,7 @@
com.apple.InterfaceBuilder.CocoaPlugin
-
+
com.apple.InterfaceBuilder.CocoaPlugin
@@ -980,14 +880,11 @@
com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
-
+
com.apple.InterfaceBuilder.CocoaPlugin
@@ -999,21 +896,17 @@
com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
-
+
-
-
com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
-
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
@@ -1021,7 +914,7 @@
- 236
+ 239
diff --git a/MasterPassword/ObjC/Mac/MasterPassword-Info.plist b/MasterPassword/ObjC/Mac/MasterPassword-Info.plist
index 02a9d3af..efc860f3 100644
--- a/MasterPassword/ObjC/Mac/MasterPassword-Info.plist
+++ b/MasterPassword/ObjC/Mac/MasterPassword-Info.plist
@@ -34,5 +34,7 @@
MainMenu
NSPrincipalClass
NSApplication
+ ATSApplicationFontsPath
+ .
diff --git a/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/project.pbxproj b/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/project.pbxproj
index 3146ea3d..2ab7fd05 100644
--- a/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/project.pbxproj
+++ b/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/project.pbxproj
@@ -11,6 +11,9 @@
93D395F08A087F8A24689347 /* NSArray+Indexing.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39067C0AFDC581794E2B8 /* NSArray+Indexing.m */; };
93D39C34FE35830EF5BE1D2A /* NSArray+Indexing.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D396D04E57792A54D437AC /* NSArray+Indexing.h */; };
93D39E281E3658B30550CB55 /* NSDictionary+Indexing.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39AA1EE2E1E7B81372240 /* NSDictionary+Indexing.m */; };
+ DA0933CA1747A56A00DE1CEF /* MPAppsWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = DA0933C91747A56A00DE1CEF /* MPAppsWindow.xib */; };
+ DA0933CC1747AD2D00DE1CEF /* shot-laptop-leaning-iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = DA0933CB1747AD2D00DE1CEF /* shot-laptop-leaning-iphone.png */; };
+ DA0933D01747B91B00DE1CEF /* appstore.png in Resources */ = {isa = PBXBuildFile; fileRef = DA0933CF1747B91B00DE1CEF /* appstore.png */; };
DA16B33F170661D4000A0EAB /* libUbiquityStoreManager.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA4425CB1557BED40052177D /* libUbiquityStoreManager.a */; };
DA16B341170661DB000A0EAB /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA16B340170661DB000A0EAB /* Carbon.framework */; };
DA16B342170661E0000A0EAB /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC632871486D95D0075AEA5 /* Security.framework */; };
@@ -30,6 +33,8 @@
DA4C45F4173B57B700745CC5 /* NSURL+UbiquityStoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DA4C45F2173B57B700745CC5 /* NSURL+UbiquityStoreManager.h */; };
DA4C45F5173B57B700745CC5 /* NSURL+UbiquityStoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DA4C45F3173B57B700745CC5 /* NSURL+UbiquityStoreManager.m */; };
DA4DA1D91564471A00F6F596 /* libjrswizzle.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC6326C148680650075AEA5 /* libjrswizzle.a */; };
+ DA531D051748610100121B83 /* video.png in Resources */ = {isa = PBXBuildFile; fileRef = DA531D031748610000121B83 /* video.png */; };
+ DA531D061748610100121B83 /* video@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA531D041748610100121B83 /* video@2x.png */; };
DA5E5C8817248AA1003798D8 /* crypto_aesctr.h in Headers */ = {isa = PBXBuildFile; fileRef = DA5E5C7B17248AA1003798D8 /* crypto_aesctr.h */; };
DA5E5C8917248AA1003798D8 /* crypto_scrypt.h in Headers */ = {isa = PBXBuildFile; fileRef = DA5E5C7C17248AA1003798D8 /* crypto_scrypt.h */; };
DA5E5C8A17248AA1003798D8 /* memlimit.h in Headers */ = {isa = PBXBuildFile; fileRef = DA5E5C7D17248AA1003798D8 /* memlimit.h */; };
@@ -190,6 +195,9 @@
93D393B97158D7BE9332EA53 /* NSDictionary+Indexing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+Indexing.h"; sourceTree = ""; };
93D396D04E57792A54D437AC /* NSArray+Indexing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+Indexing.h"; sourceTree = ""; };
93D39AA1EE2E1E7B81372240 /* NSDictionary+Indexing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+Indexing.m"; sourceTree = ""; };
+ DA0933C91747A56A00DE1CEF /* MPAppsWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MPAppsWindow.xib; sourceTree = ""; };
+ DA0933CB1747AD2D00DE1CEF /* shot-laptop-leaning-iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "shot-laptop-leaning-iphone.png"; sourceTree = ""; };
+ DA0933CF1747B91B00DE1CEF /* appstore.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = appstore.png; sourceTree = ""; };
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; };
DA30E9CB15722ECA00A68B4C /* NSBundle+PearlMutableInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSBundle+PearlMutableInfo.h"; sourceTree = ""; };
@@ -205,7 +213,9 @@
DA4425CB1557BED40052177D /* libUbiquityStoreManager.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libUbiquityStoreManager.a; sourceTree = BUILT_PRODUCTS_DIR; };
DA4C45F2173B57B700745CC5 /* NSURL+UbiquityStoreManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSURL+UbiquityStoreManager.h"; sourceTree = ""; };
DA4C45F3173B57B700745CC5 /* NSURL+UbiquityStoreManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSURL+UbiquityStoreManager.m"; sourceTree = ""; };
- DA5BFA44147E415C00F98B1E /* MasterPassword.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MasterPassword.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ DA531D031748610000121B83 /* video.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = video.png; sourceTree = ""; };
+ DA531D041748610100121B83 /* video@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "video@2x.png"; sourceTree = ""; };
+ 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; };
DA5BFA4C147E415C00F98B1E /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
DA5BFA4E147E415C00F98B1E /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
@@ -444,7 +454,7 @@
DA5BFA45147E415C00F98B1E /* Products */ = {
isa = PBXGroup;
children = (
- DA5BFA44147E415C00F98B1E /* MasterPassword.app */,
+ DA5BFA44147E415C00F98B1E /* Master Password.app */,
DAC77CAD148291A600BCF976 /* libPearl.a */,
DAC6326C148680650075AEA5 /* libjrswizzle.a */,
DA4425CB1557BED40052177D /* libUbiquityStoreManager.a */,
@@ -552,6 +562,7 @@
DA5E5CC21724A667003798D8 /* InfoPlist.strings */,
DA5E5CC41724A667003798D8 /* MainMenu.xib */,
DA5E5CC61724A667003798D8 /* main.m */,
+ DA0933C91747A56A00DE1CEF /* MPAppsWindow.xib */,
);
path = Mac;
sourceTree = "";
@@ -607,6 +618,10 @@
DACA23B51705DF7D002C6C22 /* Media */ = {
isa = PBXGroup;
children = (
+ DA531D031748610000121B83 /* video.png */,
+ DA531D041748610100121B83 /* video@2x.png */,
+ DA0933CF1747B91B00DE1CEF /* appstore.png */,
+ DA0933CB1747AD2D00DE1CEF /* shot-laptop-leaning-iphone.png */,
DA5E5D541724F9C8003798D8 /* MasterPassword.iconset */,
DACA24161705DF7D002C6C22 /* Background */,
DACA24311705DF7D002C6C22 /* Avatars */,
@@ -900,9 +915,9 @@
productReference = DA4425CB1557BED40052177D /* libUbiquityStoreManager.a */;
productType = "com.apple.product-type.library.static";
};
- DA5BFA43147E415C00F98B1E /* MasterPassword */ = {
+ DA5BFA43147E415C00F98B1E /* Master Password */ = {
isa = PBXNativeTarget;
- buildConfigurationList = DA5BFA6D147E415C00F98B1E /* Build configuration list for PBXNativeTarget "MasterPassword" */;
+ buildConfigurationList = DA5BFA6D147E415C00F98B1E /* Build configuration list for PBXNativeTarget "Master Password" */;
buildPhases = (
DA5BFA40147E415C00F98B1E /* Sources */,
DA5BFA41147E415C00F98B1E /* Frameworks */,
@@ -914,9 +929,9 @@
);
dependencies = (
);
- name = MasterPassword;
+ name = "Master Password";
productName = MasterPassword;
- productReference = DA5BFA44147E415C00F98B1E /* MasterPassword.app */;
+ productReference = DA5BFA44147E415C00F98B1E /* Master Password.app */;
productType = "com.apple.product-type.application";
};
DAC6326B148680650075AEA5 /* jrswizzle */ = {
@@ -978,7 +993,7 @@
projectDirPath = "";
projectRoot = "";
targets = (
- DA5BFA43147E415C00F98B1E /* MasterPassword */,
+ DA5BFA43147E415C00F98B1E /* Master Password */,
DAC77CAC148291A600BCF976 /* Pearl */,
DAC6326B148680650075AEA5 /* jrswizzle */,
DA4425CA1557BED40052177D /* UbiquityStoreManager */,
@@ -1058,6 +1073,11 @@
DA5E5D0A1724A667003798D8 /* InfoPlist.strings in Resources */,
DA5E5D0B1724A667003798D8 /* MainMenu.xib in Resources */,
DA5E5D551724F9C8003798D8 /* MasterPassword.iconset in Resources */,
+ DA0933CA1747A56A00DE1CEF /* MPAppsWindow.xib in Resources */,
+ DA0933CC1747AD2D00DE1CEF /* shot-laptop-leaning-iphone.png in Resources */,
+ DA0933D01747B91B00DE1CEF /* appstore.png in Resources */,
+ DA531D051748610100121B83 /* video.png in Resources */,
+ DA531D061748610100121B83 /* video@2x.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1198,7 +1218,7 @@
/* Begin PBXTargetDependency section */
DA3EF19E15A47AEB003ABF4E /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = DA5BFA43147E415C00F98B1E /* MasterPassword */;
+ target = DA5BFA43147E415C00F98B1E /* Master Password */;
targetProxy = DA3EF19D15A47AEB003ABF4E /* PBXContainerItemProxy */;
};
DAC63286148681200075AEA5 /* PBXTargetDependency */ = {
@@ -1725,7 +1745,7 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = "AdHoc-Mac";
};
- DA5BFA6D147E415C00F98B1E /* Build configuration list for PBXNativeTarget "MasterPassword" */ = {
+ DA5BFA6D147E415C00F98B1E /* Build configuration list for PBXNativeTarget "Master Password" */ = {
isa = XCConfigurationList;
buildConfigurations = (
DA5BFA6E147E415C00F98B1E /* Debug-Mac */,
diff --git a/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/xcshareddata/xcschemes/MasterPassword Mac (App Store).xcscheme b/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/xcshareddata/xcschemes/MasterPassword Mac (App Store).xcscheme
index be135976..52a0ed1d 100644
--- a/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/xcshareddata/xcschemes/MasterPassword Mac (App Store).xcscheme
+++ b/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/xcshareddata/xcschemes/MasterPassword Mac (App Store).xcscheme
@@ -15,8 +15,8 @@
@@ -43,8 +43,8 @@
@@ -61,8 +61,8 @@
diff --git a/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/xcshareddata/xcschemes/MasterPassword Mac (Development).xcscheme b/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/xcshareddata/xcschemes/MasterPassword Mac (Development).xcscheme
index 9c5719a9..dcf4dc80 100644
--- a/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/xcshareddata/xcschemes/MasterPassword Mac (Development).xcscheme
+++ b/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/xcshareddata/xcschemes/MasterPassword Mac (Development).xcscheme
@@ -15,8 +15,8 @@
@@ -43,11 +43,17 @@
+
+
+
+
diff --git a/MasterPassword/ObjC/Mac/en.lproj/MainMenu.xib b/MasterPassword/ObjC/Mac/en.lproj/MainMenu.xib
index e94c1898..beaa3894 100644
--- a/MasterPassword/ObjC/Mac/en.lproj/MainMenu.xib
+++ b/MasterPassword/ObjC/Mac/en.lproj/MainMenu.xib
@@ -284,14 +284,6 @@
-
-
- terminate:
-
-
-
- 734
-
delegate
@@ -452,6 +444,14 @@
783
+
+
+ terminate:
+
+
+
+ 784
+
@@ -709,7 +709,7 @@
- 783
+ 784
@@ -729,6 +729,7 @@
NSMenuItem
id
id
+ id
NSMenuItem
@@ -748,6 +749,10 @@
showPasswordWindow:
id
+
+ terminate:
+ id
+
togglePreference:
NSMenuItem
diff --git a/MasterPassword/Resources/Media/appstore.png b/MasterPassword/Resources/Media/appstore.png
new file mode 100644
index 00000000..1f946e8e
Binary files /dev/null and b/MasterPassword/Resources/Media/appstore.png differ
diff --git a/MasterPassword/Resources/Media/appstore.svg b/MasterPassword/Resources/Media/appstore.svg
new file mode 100644
index 00000000..ad9cff93
--- /dev/null
+++ b/MasterPassword/Resources/Media/appstore.svg
@@ -0,0 +1,118 @@
+
+
+
+
diff --git a/MasterPassword/Resources/Media/shot-laptop-leaning-iphone.png b/MasterPassword/Resources/Media/shot-laptop-leaning-iphone.png
new file mode 100644
index 00000000..b1778a3e
Binary files /dev/null and b/MasterPassword/Resources/Media/shot-laptop-leaning-iphone.png differ