From fb27d330d60a73427d15632b7707b845c0f452a1 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Thu, 28 Oct 2021 01:12:22 +0200 Subject: [PATCH] Fixed deprecation warning on 10.14 an higher on NSUnarchiveFromDataTransformerName --- MacPass/Base.lproj/EntryInspectorView.xib | 2 +- MacPass/MPEntryViewController.m | 16 ++- MacPass/MPSettingsHelper.h | 1 + MacPass/MPSettingsHelper.m | 119 ++++++++++++---------- 4 files changed, 78 insertions(+), 60 deletions(-) diff --git a/MacPass/Base.lproj/EntryInspectorView.xib b/MacPass/Base.lproj/EntryInspectorView.xib index 400464cb..e56d828f 100644 --- a/MacPass/Base.lproj/EntryInspectorView.xib +++ b/MacPass/Base.lproj/EntryInspectorView.xib @@ -589,7 +589,7 @@ - + diff --git a/MacPass/MPEntryViewController.m b/MacPass/MPEntryViewController.m index 3c73e20d..15576aa3 100644 --- a/MacPass/MPEntryViewController.m +++ b/MacPass/MPEntryViewController.m @@ -206,10 +206,18 @@ NSString *const _MPTableSecurCellView = @"PasswordCell"; // bind NSArrayController sorting so that sort order gets auto-saved // see: http://simx.me/technonova/software_development/sort_descriptors_nstableview_bindings_a.html - [self.entryArrayController bind:NSSortDescriptorsBinding - toObject:[NSUserDefaultsController sharedUserDefaultsController] - withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyEntryTableSortDescriptors] - options:@{ NSValueTransformerNameBindingOption: NSUnarchiveFromDataTransformerName }]; + if(@available(macOS 10.14, *)) { + [self.entryArrayController bind:NSSortDescriptorsBinding + toObject:[NSUserDefaultsController sharedUserDefaultsController] + withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyEntryTableSortDescriptors] + options:@{ NSValueTransformerNameBindingOption: NSSecureUnarchiveFromDataTransformerName }]; + } + else { + [self.entryArrayController bind:NSSortDescriptorsBinding + toObject:[NSUserDefaultsController sharedUserDefaultsController] + withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPDepricatedSettingsKeyEntryTableSortDescriptors] + options:@{ NSValueTransformerNameBindingOption: NSUnarchiveFromDataTransformerName }]; + } [self _setupHeaderMenu]; /* Move index and parent column to dedicated places if it was moved by the user before */ diff --git a/MacPass/MPSettingsHelper.h b/MacPass/MPSettingsHelper.h index 8db6f3ba..1a07ca67 100644 --- a/MacPass/MPSettingsHelper.h +++ b/MacPass/MPSettingsHelper.h @@ -47,6 +47,7 @@ APPKIT_EXTERN NSString *const kMPSettingskeyLockOnScreenSleep; /* Autosaving states */ APPKIT_EXTERN NSString *const kMPSettingsKeyShowInspector; APPKIT_EXTERN NSString *const kMPSettingsKeyEntryTableSortDescriptors; +APPKIT_EXTERN NSString *const kMPDepricatedSettingsKeyEntryTableSortDescriptors; /* Kdb Hide/Show settings */ APPKIT_EXTERN NSString *const kMPSettingsKeyLegacyHideTitle; diff --git a/MacPass/MPSettingsHelper.m b/MacPass/MPSettingsHelper.m index 9e9c0111..8ba2efc6 100644 --- a/MacPass/MPSettingsHelper.m +++ b/MacPass/MPSettingsHelper.m @@ -40,8 +40,8 @@ NSString *const kMPSettingskeyLockOnLogout = @"Lo NSString *const kMPSettingskeyLockOnScreenSleep = @"LockOnScreenSleep"; NSString *const kMPSettingsKeyIdleLockTimeOut = @"IdleLockTimeOut"; NSString *const kMPSettingsKeyShowInspector = @"ShowInspector"; -NSString *const kMPSettingsKeyEntryTableSortDescriptors = @"EntryTableSortDescriptors"; - +NSString *const kMPSettingsKeyEntryTableSortDescriptors = @"EntryTableSortDescriptors2"; + NSString *const kMPSettingsKeyLegacyHideTitle = @"LegacyHideTitle"; NSString *const kMPSettingsKeyLegacyHideUsername = @"LegacyHideUsername "; NSString *const kMPSettingsKeyLegacyHidePassword = @"LegacyHidePassword"; @@ -104,6 +104,7 @@ NSString *const kMPDeprecatedSettingsKeyShowMenuItem = @"Sh NSString *const kMPDeprecatedSettingsKeyDefaultPasswordRounds = @"KeyDefaultPasswordRounds"; NSString *const kMPDepricatedSettingsKeyLoadUnsecurePlugins = @"MPLoadUnsecurePlugins"; NSString *const kMPDepricatedSettingsKeyAutotypeHideAccessibiltyWarning = @"AutotypeHideAccessibiltyWarning"; +NSString *const kMPDepricatedSettingsKeyEntryTableSortDescriptors = @"EntryTableSortDescriptors"; @implementation MPSettingsHelper @@ -129,52 +130,52 @@ NSString *const kMPDepricatedSettingsKeyAutotypeHideAccessibiltyWarning = @"Au static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ standardDefaults = @{ - kMPSettingsKeyShowInspector: @YES, // Show the Inspector by default - kMPSettingsKeyPasteboardClearTimeout: @30, // 30 seconds - kMPSettingsKeyClearPasteboardOnQuit: @YES, // Clear Clipboard on quit - kMPSettingsKeyPreventUniversalClipboard: @YES, // Disable Universal Clipboard by default - kMPSettingsKeyOpenEmptyDatabaseOnLaunch: @NO, - kMPSettingsKeyReopenLastDatabaseOnLaunch: @YES, - kMPSettingsKeyFileChangeStrategy: @(MPFileChangeStrategyAsk), // Ask what to do on a file change! - kMPSettingsKeyLockOnSleep: @YES, - kMPSettingskeyLockOnLogout: @NO, - kMPSettingskeyLockOnScreenSleep: @NO, - kMPSettingsKeyIdleLockTimeOut: @0, // Do not lock while idle by default - kMPSettingsKeyLegacyHideNotes: @NO, - kMPSettingsKeyLegacyHidePassword: @YES, - kMPSettingsKeyLegacyHideTitle: @NO, - kMPSettingsKeyLegacyHideURL: @NO, - kMPSettingsKeyLegacyHideUsername: @NO, - kMPSettingsKeyRememberKeyFilesForDatabases: @NO, - kMPSettingsKeySendCommandForControlKey: @YES, // translate Ctrl to Cmd by default - kMPSettingsKeyEnableGlobalAutotype: @NO, // Keep global autotype disabled by default - kMPSettingsKeyGlobalAutotypeKeyDataKey: DDHotKey.defaultHotKeyData, // Cmd + Alt + M - kMPSettingsKeyDefaultGlobalAutotypeSequence: @"{USERNAME}{TAB}{PASSWORD}{ENTER}", - kMPSettingsKeyAutotypeMatchTitle: @YES, - kMPSettingsKeyAutotypeMatchURL: @NO, - kMPSettingsKeyAutotypeMatchHost: @NO, - kMPSettingsKeyAutotypeMatchTags: @NO, - kMPSettingsKeyEnableQuicklookPreview: @NO, - kMPSettingsKeyCopyGeneratedPasswordToClipboard: @NO, - kMPSettingsKeyDefaultPasswordLength: @12, - kMPSettingsKeyPasswordCharacterFlags: @(MPPasswordCharactersAll), - kMPSettingsKeyPasswordUseCustomString: @NO, - kMPSettingsKeyPasswordCustomString: @"", - kMPSettingsKeyPasswordEnsureOccurance: @NO, - kMPSettingsKeyDoubleClickURLAction: @(MPDoubleClickURLActionCopy), - kMPSettingsKeyDoubleClickTitleAction: @(MPDoubleClickTitleActionInspect), - kMPSettingsKeyLoadUnsecurePlugins: @NO, - kMPSettingsKeyUpdatePasswordOnTemplateEntries: @YES, - kMPSettingsKeyGeneratePasswordForNewEntires: @YES, - kMPSettingsKeyDisabledPlugins: @[], - kMPSettingsKeyLoadIncompatiblePlugins: @NO, - kMPSettingsKeyQuitOnLastWindowClose: @NO, - kMPSettingsKeyEnableAutosave: @YES, - kMPSettingsKeyHideAfterCopyToClipboard: @NO, - kMPSettingsKeyFaviconDownloadMethod: @(MPFaviconDownloadMethodDirect), // Download directly from host - kMPSettingsKeyGloablAutotypeAlwaysShowCandidateSelection: @NO, - kMPSettingsKeyUseUnifiedToolbar: @NO // Do not use unified toolbar under Big Sur and above - }; + kMPSettingsKeyShowInspector: @YES, // Show the Inspector by default + kMPSettingsKeyPasteboardClearTimeout: @30, // 30 seconds + kMPSettingsKeyClearPasteboardOnQuit: @YES, // Clear Clipboard on quit + kMPSettingsKeyPreventUniversalClipboard: @YES, // Disable Universal Clipboard by default + kMPSettingsKeyOpenEmptyDatabaseOnLaunch: @NO, + kMPSettingsKeyReopenLastDatabaseOnLaunch: @YES, + kMPSettingsKeyFileChangeStrategy: @(MPFileChangeStrategyAsk), // Ask what to do on a file change! + kMPSettingsKeyLockOnSleep: @YES, + kMPSettingskeyLockOnLogout: @NO, + kMPSettingskeyLockOnScreenSleep: @NO, + kMPSettingsKeyIdleLockTimeOut: @0, // Do not lock while idle by default + kMPSettingsKeyLegacyHideNotes: @NO, + kMPSettingsKeyLegacyHidePassword: @YES, + kMPSettingsKeyLegacyHideTitle: @NO, + kMPSettingsKeyLegacyHideURL: @NO, + kMPSettingsKeyLegacyHideUsername: @NO, + kMPSettingsKeyRememberKeyFilesForDatabases: @NO, + kMPSettingsKeySendCommandForControlKey: @YES, // translate Ctrl to Cmd by default + kMPSettingsKeyEnableGlobalAutotype: @NO, // Keep global autotype disabled by default + kMPSettingsKeyGlobalAutotypeKeyDataKey: DDHotKey.defaultHotKeyData, // Cmd + Alt + M + kMPSettingsKeyDefaultGlobalAutotypeSequence: @"{USERNAME}{TAB}{PASSWORD}{ENTER}", + kMPSettingsKeyAutotypeMatchTitle: @YES, + kMPSettingsKeyAutotypeMatchURL: @NO, + kMPSettingsKeyAutotypeMatchHost: @NO, + kMPSettingsKeyAutotypeMatchTags: @NO, + kMPSettingsKeyEnableQuicklookPreview: @NO, + kMPSettingsKeyCopyGeneratedPasswordToClipboard: @NO, + kMPSettingsKeyDefaultPasswordLength: @12, + kMPSettingsKeyPasswordCharacterFlags: @(MPPasswordCharactersAll), + kMPSettingsKeyPasswordUseCustomString: @NO, + kMPSettingsKeyPasswordCustomString: @"", + kMPSettingsKeyPasswordEnsureOccurance: @NO, + kMPSettingsKeyDoubleClickURLAction: @(MPDoubleClickURLActionCopy), + kMPSettingsKeyDoubleClickTitleAction: @(MPDoubleClickTitleActionInspect), + kMPSettingsKeyLoadUnsecurePlugins: @NO, + kMPSettingsKeyUpdatePasswordOnTemplateEntries: @YES, + kMPSettingsKeyGeneratePasswordForNewEntires: @YES, + kMPSettingsKeyDisabledPlugins: @[], + kMPSettingsKeyLoadIncompatiblePlugins: @NO, + kMPSettingsKeyQuitOnLastWindowClose: @NO, + kMPSettingsKeyEnableAutosave: @YES, + kMPSettingsKeyHideAfterCopyToClipboard: @NO, + kMPSettingsKeyFaviconDownloadMethod: @(MPFaviconDownloadMethodDirect), // Download directly from host + kMPSettingsKeyGloablAutotypeAlwaysShowCandidateSelection: @NO, + kMPSettingsKeyUseUnifiedToolbar: @NO // Do not use unified toolbar under Big Sur and above + }; }); return standardDefaults; } @@ -195,9 +196,17 @@ NSString *const kMPDepricatedSettingsKeyAutotypeHideAccessibiltyWarning = @"Au kMPDeprecatedSettingsKeyShowMenuItem, kMPDepricatedSettingsKeyLoadUnsecurePlugins, kMPDepricatedSettingsKeyAutotypeHideAccessibiltyWarning - ]; - }); - return deprecatedSettings; + ]; + /* + On 10.13 we have to use NSUnarchiveFromDataTransformerName as binding option + NSSecureUnarchiveFromDataTransformerName is only available since 10.14 + Hence remove the depricated settings key since we use a newer on + */ + if (@available(macOS 10.14, *)) { + deprecatedSettings = [deprecatedSettings arrayByAddingObject:kMPDepricatedSettingsKeyEntryTableSortDescriptors]; + } +}); +return deprecatedSettings; } @@ -212,17 +221,17 @@ NSString *const kMPDepricatedSettingsKeyAutotypeHideAccessibiltyWarning = @"Au /* MacPass < 0.4 did use compare: for the entry table view, this was changed in 0.4 to localizedCaseInsensitiveCompare: - + MacPass < 0.5.2 did use parent.name for group names, this was changed in 0.6. to parent.title - + */ NSData *descriptorData = [NSUserDefaults.standardUserDefaults dataForKey:kMPSettingsKeyEntryTableSortDescriptors]; if(!descriptorData) { return; // No user defaults } NSArray *sortDescriptors = [NSKeyedUnarchiver unarchiveObjectWithData:descriptorData]; - + for(NSSortDescriptor *descriptor in sortDescriptors) { /* Brute force, just kill the settings if they might cause trouble */ if(descriptor.selector == @selector(compare:) @@ -300,7 +309,7 @@ NSString *const kMPDepricatedSettingsKeyAutotypeHideAccessibiltyWarning = @"Au if(oldValue != [[self _standardDefaults][kMPDepricatedSettingsKeyLoadUnsecurePlugins] boolValue]) { [NSUserDefaults.standardUserDefaults setBool:oldValue forKey:kMPSettingsKeyLoadUnsecurePlugins]; } - + } @end