Revision: 29784
          http://sourceforge.net/p/bibdesk/svn/29784
Author:   hofman
Date:     2025-11-12 17:43:31 +0000 (Wed, 12 Nov 2025)
Log Message:
-----------
upgrade NSCoding to NSSecureCoding

Modified Paths:
--------------
    trunk/bibdesk/BDSKAddressTextField.m
    trunk/bibdesk/BDSKCategoryGroup.m
    trunk/bibdesk/BDSKColorLabelWell.m
    trunk/bibdesk/BDSKComplexString.m
    trunk/bibdesk/BDSKCondition.h
    trunk/bibdesk/BDSKCondition.m
    trunk/bibdesk/BDSKEdgeView.m
    trunk/bibdesk/BDSKEditorTextField.m
    trunk/bibdesk/BDSKFileSearchIndex.m
    trunk/bibdesk/BDSKFilter.h
    trunk/bibdesk/BDSKFilter.m
    trunk/bibdesk/BDSKFontWell.m
    trunk/bibdesk/BDSKGroup.h
    trunk/bibdesk/BDSKGroup.m
    trunk/bibdesk/BDSKImagePopUpButtonCell.m
    trunk/bibdesk/BDSKLinkedFile.h
    trunk/bibdesk/BDSKLinkedFile.m
    trunk/bibdesk/BDSKParentGroup.m
    trunk/bibdesk/BDSKScriptGroup.m
    trunk/bibdesk/BDSKSearchGroup.m
    trunk/bibdesk/BDSKSecureTextField.m
    trunk/bibdesk/BDSKServerInfo.h
    trunk/bibdesk/BDSKServerInfo.m
    trunk/bibdesk/BDSKSmartGroup.m
    trunk/bibdesk/BDSKStaticGroup.m
    trunk/bibdesk/BDSKStringNode.h
    trunk/bibdesk/BDSKStringNode.m
    trunk/bibdesk/BDSKToken.h
    trunk/bibdesk/BDSKToken.m
    trunk/bibdesk/BDSKTreeNode.h
    trunk/bibdesk/BDSKTreeNode.m
    trunk/bibdesk/BDSKURLGroup.m
    trunk/bibdesk/BibAuthor.h
    trunk/bibdesk/BibAuthor.m
    trunk/bibdesk/BibItem.h
    trunk/bibdesk/BibItem.m

Modified: trunk/bibdesk/BDSKAddressTextField.m
===================================================================
--- trunk/bibdesk/BDSKAddressTextField.m        2025-11-12 16:48:42 UTC (rev 
29783)
+++ trunk/bibdesk/BDSKAddressTextField.m        2025-11-12 17:43:31 UTC (rev 
29784)
@@ -123,8 +123,8 @@
             
             [self setCell:myCell];
         }
-        imageView = [aDecoder decodeObjectForKey:@"imageView"];
-        button = [aDecoder decodeObjectForKey:@"button"];
+        imageView = [aDecoder decodeObjectOfClass:[NSImageView class] 
forKey:@"imageView"];
+        button = [aDecoder decodeObjectOfClass:[NSButton class] 
forKey:@"button"];
         [self commonInit];
     }
     return self;

Modified: trunk/bibdesk/BDSKCategoryGroup.m
===================================================================
--- trunk/bibdesk/BDSKCategoryGroup.m   2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKCategoryGroup.m   2025-11-12 17:43:31 UTC (rev 29784)
@@ -84,7 +84,7 @@
 - (instancetype)initWithCoder:(NSCoder *)decoder {
     self = [super initWithCoder:decoder];
     if (self) {
-        key = [decoder decodeObjectForKey:@"key"];
+        key = [decoder decodeObjectOfClass:[NSString class] forKey:@"key"];
     }
     return self;
 }

Modified: trunk/bibdesk/BDSKColorLabelWell.m
===================================================================
--- trunk/bibdesk/BDSKColorLabelWell.m  2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKColorLabelWell.m  2025-11-12 17:43:31 UTC (rev 29784)
@@ -115,14 +115,14 @@
     if (self) {
         NSMutableArray *array = [NSMutableArray array];
         for (NSUInteger i = 0; i < 9; i++) {
-            NSButton *button = [coder decodeObjectForKey:[NSString 
stringWithFormat:@"button%lu", i]];
+            NSButton *button = [coder decodeObjectOfClass:[NSButton class] 
forKey:[NSString stringWithFormat:@"button%lu", i]];
             if (button)
                 [array addObject:button];
         }
         buttons = [array copy];
         suppressSelection = [coder decodeBoolForKey:@"suppressSelection"];
-        titleCell = [coder decodeObjectForKey:@"titleCell"];
-        labelCell = [coder decodeObjectForKey:@"labelCell"];
+        titleCell = [coder decodeObjectOfClass:[NSTextFieldCell class] 
forKey:@"titleCell"];
+        labelCell = [coder decodeObjectOfClass:[NSTextFieldCell class] 
forKey:@"labelCell"];
         [self commonInit];
     }
     return self;

Modified: trunk/bibdesk/BDSKComplexString.m
===================================================================
--- trunk/bibdesk/BDSKComplexString.m   2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKComplexString.m   2025-11-12 17:43:31 UTC (rev 29784)
@@ -367,7 +367,7 @@
         self = [super init];
         if (self) {
             BDSKASSERT([coder isKindOfClass:[NSKeyedUnarchiver class]]);
-            nodes = [coder decodeObjectForKey:@"nodes"];
+            nodes = [coder decodeObjectOfClass:[NSArray class] 
forKey:@"nodes"];
             isComplex = [coder decodeBoolForKey:@"complex"];
             isInherited = [coder decodeBoolForKey:@"inherited"];
             macroResolver = [[self class] macroResolverForUnarchiving];

Modified: trunk/bibdesk/BDSKCondition.h
===================================================================
--- trunk/bibdesk/BDSKCondition.h       2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKCondition.h       2025-11-12 17:43:31 UTC (rev 29784)
@@ -97,7 +97,7 @@
 @protocol BDSKSmartGroup;
 @class BibItem, BibAuthor;
 
-@interface BDSKCondition : NSObject <NSCopying, NSCoding> {
+@interface BDSKCondition : NSObject <NSCopying, NSSecureCoding> {
        NSString *key;
        BDSKStringComparison stringComparison;
        BDSKAttachmentComparison attachmentComparison;

Modified: trunk/bibdesk/BDSKCondition.m
===================================================================
--- trunk/bibdesk/BDSKCondition.m       2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKCondition.m       2025-11-12 17:43:31 UTC (rev 29784)
@@ -139,7 +139,7 @@
 - (instancetype)initWithCoder:(NSCoder *)decoder {
     self = [super init];
     if (self) {
-        key = [decoder decodeObjectForKey:@"key"] ?: @"";
+        key = [decoder decodeObjectOfClass:[NSString class] forKey:@"key"] ?: 
@"";
         stringValue = @"";
         stringComparison = BDSKContain;
         attachmentComparison = BDSKCountNotEqual;
@@ -158,7 +158,7 @@
                [self setComparison:[decoder 
decodeIntegerForKey:@"comparison"]];
         if ([self isDateCondition] || [self isAttachmentCondition])
             [self setDefaultValue];
-               [self setValue:[decoder decodeObjectForKey:@"value"]];
+               [self setValue:[decoder decodeObjectOfClass:[NSString class] 
forKey:@"value"]];
                BDSKASSERT([self value] != nil);
        }
        return self;
@@ -170,6 +170,8 @@
        [coder encodeObject:[self value] forKey:@"value"];
 }
 
++ (BOOL)supportsSecureCoding { return YES; }
+
 - (void)dealloc {
        //NSLog(@"dealloc condition");
     [cacheTimer invalidate];

Modified: trunk/bibdesk/BDSKEdgeView.m
===================================================================
--- trunk/bibdesk/BDSKEdgeView.m        2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKEdgeView.m        2025-11-12 17:43:31 UTC (rev 29784)
@@ -96,12 +96,12 @@
     self = [super initWithCoder:decoder];
     if (self) {
         // this decodes only the reference, the actual view should already be 
decoded as a subview
-        contentView = [decoder decodeObjectForKey:@"contentView"];
+        contentView = [decoder decodeObjectOfClass:[NSView class] 
forKey:@"contentView"];
         wantsSubviews = NO;
-               edgeColors = [[decoder decodeObjectForKey:@"edgeColors"] 
mutableCopy];
+               edgeColors = [[decoder decodeObjectOfClass:[NSArray class] 
forKey:@"edgeColors"] mutableCopy];
                edges = [decoder decodeIntegerForKey:@"edges"];
-        backgroundColors = [decoder decodeObjectForKey:@"backgroundColors"];
-        backgroundView = [decoder decodeObjectForKey:@"backgroundView"];
+        backgroundColors = [decoder decodeObjectOfClass:[NSArray class] 
forKey:@"backgroundColors"];
+        backgroundView = [decoder decodeObjectOfClass:[NSView class] 
forKey:@"backgroundView"];
         if (@available(macOS 10.14, *))
             reflectViewEnabled = YES;
         else

Modified: trunk/bibdesk/BDSKEditorTextField.m
===================================================================
--- trunk/bibdesk/BDSKEditorTextField.m 2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKEditorTextField.m 2025-11-12 17:43:31 UTC (rev 29784)
@@ -73,8 +73,8 @@
             
             [self setCell:myCell];
         }
-        button = [decoder decodeObjectForKey:@"button"];
-        buttonAction = NSSelectorFromString([decoder 
decodeObjectForKey:@"buttonAction"]);
+        button = [decoder decodeObjectOfClass:[NSButton class] 
forKey:@"button"];
+        buttonAction = NSSelectorFromString([decoder 
decodeObjectOfClass:[NSString class] forKey:@"buttonAction"]);
     }
     return self;
 }

Modified: trunk/bibdesk/BDSKFileSearchIndex.m
===================================================================
--- trunk/bibdesk/BDSKFileSearchIndex.m 2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKFileSearchIndex.m 2025-11-12 17:43:31 UTC (rev 29784)
@@ -191,7 +191,7 @@
 
 #pragma mark Caching
 
-// this can return any object conforming to NSCoding
+// this can return any object conforming to NSSecureCoding
 static inline id signatureForURL(NSURL *aURL) {
     // Use the SHA1 signature if we can get it
     id signature = [NSData sha1SignatureForFile:[aURL path]];
@@ -224,7 +224,7 @@
     NSData *data = [NSData dataWithContentsOfURL:aURL 
options:NSDataReadingMapped error:NULL];
     if (data) {
         NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] 
initForReadingWithData:data];
-        isIndexCache = [[unarchiver decodeObjectForKey:@"documentURL"] 
isEqual:documentURL];
+        isIndexCache = [[unarchiver decodeObjectOfClass:[NSURL class] 
forKey:@"documentURL"] isEqual:documentURL];
         [unarchiver finishDecoding];
     }
     return isIndexCache;
@@ -496,11 +496,11 @@
     if (indexCacheURL) {
         
         NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] 
initForReadingWithData:[NSData dataWithContentsOfURL:indexCacheURL]];
-        indexData = [[unarchiver decodeObjectForKey:@"indexData"] mutableCopy];
+        indexData = [[unarchiver decodeObjectOfClass:[NSData class] 
forKey:@"indexData"] mutableCopy];
         if (indexData != NULL) {
             tmpIndex = SKIndexOpenWithMutableData((__bridge 
CFMutableDataRef)indexData, NULL);
             if (tmpIndex) {
-                [signatures setDictionary:[unarchiver 
decodeObjectForKey:@"signatures"]];
+                [signatures setDictionary:[unarchiver 
decodeObjectOfClass:[NSDictionary class] forKey:@"signatures"]];
             } else {
                 indexData = nil;
             }

Modified: trunk/bibdesk/BDSKFilter.h
===================================================================
--- trunk/bibdesk/BDSKFilter.h  2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKFilter.h  2025-11-12 17:43:31 UTC (rev 29784)
@@ -48,7 +48,7 @@
 @protocol BDSKSmartGroup;
 @class BDSKCondition, BibItem;
 
-@interface BDSKFilter : NSObject <NSCopying, NSCoding> {
+@interface BDSKFilter : NSObject <NSCopying, NSSecureCoding> {
        NSMutableArray *conditions;
        BDSKConjunction conjunction;
     __weak id<BDSKSmartGroup> group;

Modified: trunk/bibdesk/BDSKFilter.m
===================================================================
--- trunk/bibdesk/BDSKFilter.m  2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKFilter.m  2025-11-12 17:43:31 UTC (rev 29784)
@@ -84,7 +84,7 @@
 - (instancetype)initWithCoder:(NSCoder *)decoder {
     self = [super init];
     if (self) {
-               conditions = [[NSMutableArray alloc] initWithArray:[decoder 
decodeObjectForKey:@"conditions"]];
+        conditions = [[NSMutableArray alloc] initWithArray:[decoder 
decodeObjectOfClass:[NSArray class] forKey:@"conditions"]];
                conjunction = [decoder decodeIntegerForKey:@"conjunction"];
                group = nil;
        }
@@ -96,6 +96,8 @@
        [coder encodeInteger:conjunction forKey:@"conjunction"];
 }
 
++ (BOOL)supportsSecureCoding { return YES; }
+
 - (void)dealloc {
     if (group)
         BDSKENSURE_MAIN_THREAD(

Modified: trunk/bibdesk/BDSKFontWell.m
===================================================================
--- trunk/bibdesk/BDSKFontWell.m        2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKFontWell.m        2025-11-12 17:43:31 UTC (rev 29784)
@@ -100,8 +100,8 @@
                        [newCell setAction:[oldCell action]];
                        [self setCell:newCell];
                }
-        action = NSSelectorFromString([decoder decodeObjectForKey:ACTION_KEY]);
-        target = [decoder decodeObjectForKey:TARGET_KEY];
+        action = NSSelectorFromString([decoder decodeObjectOfClass:[NSString 
class] forKey:ACTION_KEY]);
+        target = [decoder decodeObjectOfClass:[NSObject class] 
forKey:TARGET_KEY];
         [self commonInit];
     }
     return self;

Modified: trunk/bibdesk/BDSKGroup.h
===================================================================
--- trunk/bibdesk/BDSKGroup.h   2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKGroup.h   2025-11-12 17:43:31 UTC (rev 29784)
@@ -64,10 +64,10 @@
 
 @class BibItem, BibDocument, BDSKMacroResolver, BDSKParentGroup;
 
-// NSCoding is used only to save the group selection of non-external groups
-// NSCoding support is presently limited, in particular it is not supported 
for external groups
+// NSSecureCoding is used only to save the group selection of non-external 
groups
+// NSSecureCoding support is presently limited, in particular it is not 
supported for external groups
 
-@interface BDSKGroup : NSObject <NSCopying, NSCoding> {
+@interface BDSKGroup : NSObject <NSCopying, NSSecureCoding> {
        id name;
        NSInteger count;
     __weak BDSKParentGroup *parent;

Modified: trunk/bibdesk/BDSKGroup.m
===================================================================
--- trunk/bibdesk/BDSKGroup.m   2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKGroup.m   2025-11-12 17:43:31 UTC (rev 29784)
@@ -81,12 +81,12 @@
     return [NSDictionary dictionaryWithObjectsAndKeys:aName, @"group name", 
nil];
 }
 
-// NSCoding protocol, used to remember group selection, but only for 
non-external groups
+// NSSecureCoding protocol, used to remember group selection, but only for 
non-external groups
 
 - (instancetype)initWithCoder:(NSCoder *)decoder {
     self = [super init];
     if (self) {
-        name = [decoder decodeObjectForKey:@"name"];
+        name = [decoder decodeObjectOfClass:[NSString class] forKey:@"name"];
         count = [decoder decodeIntegerForKey:@"count"];
         uniqueID = [NSString uniqueString];
     }
@@ -98,6 +98,8 @@
     [coder encodeInteger:count forKey:@"count"];
 }
 
++ (BOOL)supportsSecureCoding { return YES; }
+
 // NSCopying protocol, used by the duplicate action
 
 - (id)copyWithZone:(NSZone *)aZone {

Modified: trunk/bibdesk/BDSKImagePopUpButtonCell.m
===================================================================
--- trunk/bibdesk/BDSKImagePopUpButtonCell.m    2025-11-12 16:48:42 UTC (rev 
29783)
+++ trunk/bibdesk/BDSKImagePopUpButtonCell.m    2025-11-12 17:43:31 UTC (rev 
29784)
@@ -67,7 +67,7 @@
 - (instancetype)initWithCoder:(NSCoder *)coder{
     self = [super initWithCoder:coder];
     if (self) {
-        buttonCell = [coder decodeObjectForKey:@"buttonCell"];
+        buttonCell = [coder decodeObjectOfClass:[NSButtonCell class] 
forKey:@"buttonCell"];
         [self setBordered:NO];
         if (buttonCell == nil)
             [self makeButtonCell];

Modified: trunk/bibdesk/BDSKLinkedFile.h
===================================================================
--- trunk/bibdesk/BDSKLinkedFile.h      2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKLinkedFile.h      2025-11-12 17:43:31 UTC (rev 29784)
@@ -48,7 +48,7 @@
 @end
 
 
-@interface BDSKLinkedFile : NSObject <NSCopying, NSCoding>
+@interface BDSKLinkedFile : NSObject <NSCopying, NSSecureCoding>
 
 @property (nonatomic, nullable, readonly) NSURL *URL;
 @property (nonatomic, readonly, getter=isFile) BOOL file;

Modified: trunk/bibdesk/BDSKLinkedFile.m
===================================================================
--- trunk/bibdesk/BDSKLinkedFile.m      2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKLinkedFile.m      2025-11-12 17:43:31 UTC (rev 29784)
@@ -201,6 +201,8 @@
     BDSKRequestConcreteImplementation(self, _cmd);
 }
 
++ (BOOL)supportsSecureCoding { return YES; }
+
 - (NSString *)description {
     return [NSString stringWithFormat:@"<%@: URL=%@>", [self class], [self 
URL]];
 }
@@ -379,8 +381,8 @@
     id anAlias = nil;
     NSString *relPath = nil;
     if ([coder allowsKeyedCoding]) {
-        anAlias = [coder decodeObjectForKey:BOOKMARK_KEY] ?: [BDSKAlias 
aliasWithData:[coder decodeObjectForKey:ALIASDATA_KEY]];
-        relPath = [coder decodeObjectForKey:RELATIVEPATH_KEY];
+        anAlias = [coder decodeObjectOfClass:[NSData class] 
forKey:BOOKMARK_KEY] ?: [BDSKAlias aliasWithData:[coder 
decodeObjectOfClass:[NSData class] forKey:ALIASDATA_KEY]];
+        relPath = [coder decodeObjectOfClass:[NSString class] 
forKey:RELATIVEPATH_KEY];
     } else {
         anAlias = [BDSKAlias aliasWithData:[coder decodeObject]];
         relPath = [coder decodeObject];
@@ -1000,7 +1002,7 @@
     self = [super init];
     if (self) {
         if ([coder allowsKeyedCoding]) {
-            URL = [coder decodeObjectForKey:@"URL"];
+            URL = [coder decodeObjectOfClass:[NSURL class] forKey:@"URL"];
         } else {
             URL = [coder decodeObject];
         }

Modified: trunk/bibdesk/BDSKParentGroup.m
===================================================================
--- trunk/bibdesk/BDSKParentGroup.m     2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKParentGroup.m     2025-11-12 17:43:31 UTC (rev 29784)
@@ -342,7 +342,7 @@
 - (instancetype)initWithCoder:(NSCoder *)decoder {
     self = [super initWithCoder:decoder];
     if (self) {
-        key = [decoder decodeObjectForKey:@"key"];
+        key = [decoder decodeObjectOfClass:[NSString class] forKey:@"key"];
     }
     return self;
 }

Modified: trunk/bibdesk/BDSKScriptGroup.m
===================================================================
--- trunk/bibdesk/BDSKScriptGroup.m     2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKScriptGroup.m     2025-11-12 17:43:31 UTC (rev 29784)
@@ -135,8 +135,8 @@
 - (instancetype)initWithCoder:(NSCoder *)decoder {
     self = [super initWithCoder:decoder];
     if (self) {
-        scriptPath = [decoder decodeObjectForKey:@"scriptPath"];
-        scriptArguments = [decoder decodeObjectForKey:@"scriptArguments"];
+        scriptPath = [decoder decodeObjectOfClass:[NSString class] 
forKey:@"scriptPath"];
+        scriptArguments = [decoder decodeObjectOfClass:[NSString class] 
forKey:@"scriptArguments"];
         scriptType = [decoder decodeIntegerForKey:@"scriptType"];
         [self commonInit];
     }

Modified: trunk/bibdesk/BDSKSearchGroup.m
===================================================================
--- trunk/bibdesk/BDSKSearchGroup.m     2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKSearchGroup.m     2025-11-12 17:43:31 UTC (rev 29784)
@@ -163,11 +163,11 @@
 - (instancetype)initWithCoder:(NSCoder *)decoder {
     self = [super initWithCoder:decoder];
     if (self) {
-        searchTerm = [decoder decodeObjectForKey:@"searchTerm"];
+        searchTerm = [decoder decodeObjectOfClass:[NSString class] 
forKey:@"searchTerm"];
         
         history = nil;
         
-        server = [[self class] copyServerWithGroup:self serverInfo:[decoder 
decodeObjectForKey:@"serverInfo"]];
+        server = [[self class] copyServerWithGroup:self serverInfo:[decoder 
decodeObjectOfClass:[BDSKServerInfo class] forKey:@"serverInfo"]];
         
         [[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(applicationWillTerminate:) 
name:NSApplicationWillTerminateNotification object:nil];
     }

Modified: trunk/bibdesk/BDSKSecureTextField.m
===================================================================
--- trunk/bibdesk/BDSKSecureTextField.m 2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKSecureTextField.m 2025-11-12 17:43:31 UTC (rev 29784)
@@ -153,7 +153,7 @@
 - (instancetype)initWithCoder:(NSCoder *)coder {
     self = [super initWithCoder:coder];
     if (self) {
-        button = [coder decodeObjectForKey:@"button"];
+        button = [coder decodeObjectOfClass:[NSButton class] forKey:@"button"];
         showsText = [coder decodeBoolForKey:@"showsText"];
         
         Class cellClass = [self cellClass];

Modified: trunk/bibdesk/BDSKServerInfo.h
===================================================================
--- trunk/bibdesk/BDSKServerInfo.h      2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKServerInfo.h      2025-11-12 17:43:31 UTC (rev 29784)
@@ -50,7 +50,7 @@
 
 @class BDSKReadWriteLock;
 
-@interface BDSKServerInfo : NSObject <NSCopying, NSMutableCopying, NSCoding> {
+@interface BDSKServerInfo : NSObject <NSCopying, NSMutableCopying, 
NSSecureCoding> {
     NSString *type;
     NSString *name;
     NSString *database;

Modified: trunk/bibdesk/BDSKServerInfo.m
===================================================================
--- trunk/bibdesk/BDSKServerInfo.m      2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKServerInfo.m      2025-11-12 17:43:31 UTC (rev 29784)
@@ -149,22 +149,22 @@
 - (instancetype)initWithCoder:(NSCoder *)decoder {
     self = [super init];
     if (self) {
-        type = [decoder decodeObjectForKey:TYPE_KEY];
-        name = [decoder decodeObjectForKey:NAME_KEY];
-        database = [decoder decodeObjectForKey:DATABASE_KEY];
+        type = [decoder decodeObjectOfClass:[NSString class] forKey:TYPE_KEY];
+        name = [decoder decodeObjectOfClass:[NSString class] forKey:NAME_KEY];
+        database = [decoder decodeObjectOfClass:[NSString class] 
forKey:DATABASE_KEY];
         passwordInKeychain = NO;
         if ([self isEntrez] || [self isISI] || [self isDBLP]) {
             host = nil;
             port = nil;
-            options = [[decoder decodeObjectForKey:OPTIONS_KEY] mutableCopy];
+            options = [[decoder decodeObjectOfClass:[NSDictionary class] 
forKey:OPTIONS_KEY] mutableCopy];
             if ([options count] == 0)
                 options = nil;
             password = [[options objectForKey:PASSWORD_KEY] copy];
             [options removeObjectForKey:PASSWORD_KEY];
         } else if ([self isZoom] || [self isSRU]) {
-            host = [decoder decodeObjectForKey:HOST_KEY];
-            port = [decoder decodeObjectForKey:PORT_KEY];
-            options = [[decoder decodeObjectForKey:OPTIONS_KEY] mutableCopy];
+            host = [decoder decodeObjectOfClass:[NSString class] 
forKey:HOST_KEY];
+            port = [decoder decodeObjectOfClass:[NSString class] 
forKey:PORT_KEY];
+            options = [[decoder decodeObjectOfClass:[NSDictionary class] 
forKey:OPTIONS_KEY] mutableCopy];
             password = [[options objectForKey:PASSWORD_KEY] copy];
             [options removeObjectForKey:PASSWORD_KEY];
         } else {
@@ -183,6 +183,8 @@
     [coder encodeObject:options forKey:OPTIONS_KEY];
 }
 
++ (BOOL)supportsSecureCoding { return YES; }
+
 - (id)copyWithZone:(NSZone *)aZone {
     [passwordLock lockForReading];
     id copy = [[BDSKServerInfo alloc] initWithType:[self type] name:[self 
name] database:[self database] host:[self host] port:[self port] 
options:options password:password passwordInKeychain:passwordInKeychain];

Modified: trunk/bibdesk/BDSKSmartGroup.m
===================================================================
--- trunk/bibdesk/BDSKSmartGroup.m      2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKSmartGroup.m      2025-11-12 17:43:31 UTC (rev 29784)
@@ -94,7 +94,7 @@
 - (instancetype)initWithCoder:(NSCoder *)decoder {
     self = [super initWithCoder:decoder];
     if (self) {
-        filter = [decoder decodeObjectForKey:@"filter"];
+        filter = [decoder decodeObjectOfClass:[BDSKFilter class] 
forKey:@"filter"];
         [filter setGroup:self];
     }
     return self;

Modified: trunk/bibdesk/BDSKStaticGroup.m
===================================================================
--- trunk/bibdesk/BDSKStaticGroup.m     2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKStaticGroup.m     2025-11-12 17:43:31 UTC (rev 29784)
@@ -90,7 +90,7 @@
     return [NSDictionary dictionaryWithObjectsAndKeys:aName, @"group name", 
[keys componentsJoinedByString:@","], @"keys", nil];
 }
 
-// we don't really care about the publications for unarchoving, as we only use 
NSCoding to remember group selection
+// we don't really care about the publications for unarchoving, as we only use 
NSSecureCoding to remember group selection
 - (instancetype)initWithCoder:(NSCoder *)decoder {
     self = [super initWithCoder:decoder];
     if (self) {

Modified: trunk/bibdesk/BDSKStringNode.h
===================================================================
--- trunk/bibdesk/BDSKStringNode.h      2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKStringNode.h      2025-11-12 17:43:31 UTC (rev 29784)
@@ -46,7 +46,7 @@
     BDSKStringNodeMacro = 2
 };
 
-@interface BDSKStringNode : NSObject <NSCopying, NSCoding>{
+@interface BDSKStringNode : NSObject <NSCopying, NSSecureCoding>{
     @public
     BDSKStringNodeType type; 
     NSString *value;

Modified: trunk/bibdesk/BDSKStringNode.m
===================================================================
--- trunk/bibdesk/BDSKStringNode.m      2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKStringNode.m      2025-11-12 17:43:31 UTC (rev 29784)
@@ -78,7 +78,7 @@
         self = [super init];
         if (self) {
             type = [coder decodeIntegerForKey:@"type"];
-            value = [coder decodeObjectForKey:@"value"];
+            value = [coder decodeObjectOfClass:[NSString class] 
forKey:@"value"];
         }
     } else {       
         self = [NSKeyedUnarchiver unarchiveObjectWithData:[coder 
decodeDataObject]];
@@ -95,6 +95,8 @@
     }
 }
 
++ (BOOL)supportsSecureCoding { return YES; }
+
 - (id)replacementObjectForPortCoder:(NSPortCoder *)encoder
 {
     return [encoder isByref] ? [super replacementObjectForPortCoder:encoder] : 
self;

Modified: trunk/bibdesk/BDSKToken.h
===================================================================
--- trunk/bibdesk/BDSKToken.h   2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKToken.h   2025-11-12 17:43:31 UTC (rev 29784)
@@ -52,7 +52,7 @@
 
 extern NSString * const BDSKRichTextString;
 
-@interface BDSKToken : NSObject <NSCopying, NSCoding> {
+@interface BDSKToken : NSObject <NSCopying, NSSecureCoding> {
     NSString *title;
     BOOL inRepository;
     NSString *fontName;

Modified: trunk/bibdesk/BDSKToken.m
===================================================================
--- trunk/bibdesk/BDSKToken.m   2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKToken.m   2025-11-12 17:43:31 UTC (rev 29784)
@@ -132,8 +132,8 @@
 - (instancetype)initWithCoder:(NSCoder *)decoder {
     self = [super init];
     if (self) {
-        title = [decoder decodeObjectForKey:TITLE_KEY];
-        fontName = [decoder decodeObjectForKey:FONTNAME_KEY];
+        title = [decoder decodeObjectOfClass:[NSString class] 
forKey:TITLE_KEY];
+        fontName = [decoder decodeObjectOfClass:[NSString class] 
forKey:FONTNAME_KEY];
         fontSize = [decoder decodeDoubleForKey:FONTSIZE_KEY];
         bold = [decoder decodeIntegerForKey:BOLD_KEY];
         italic = [decoder decodeIntegerForKey:ITALIC_KEY];
@@ -149,6 +149,8 @@
     [encoder encodeInteger:italic forKey:ITALIC_KEY];
 }
 
++ (BOOL)supportsSecureCoding { return YES; }
+
 - (id)copyWithZone:(NSZone *)aZone {
     BDSKToken *copy = [[[self class] alloc] initWithTitle:title];
     [copy setFontName:fontName];
@@ -247,7 +249,7 @@
 - (instancetype)initWithCoder:(NSCoder *)decoder {
     self = [super initWithCoder:decoder];
     if (self) {
-        key = [decoder decodeObjectForKey:KEY_KEY];
+        key = [decoder decodeObjectOfClass:[NSString class] forKey:KEY_KEY];
     }
     return self;
 }
@@ -316,9 +318,9 @@
 - (instancetype)initWithCoder:(NSCoder *)decoder {
     self = [super initWithCoder:decoder];
     if (self) {
-        appendingKey = [decoder decodeObjectForKey:APPENDINGKEY_KEY];
-        prefix = [decoder decodeObjectForKey:PREFIX_KEY];
-        suffix = [decoder decodeObjectForKey:SUFFIX_KEY];
+        appendingKey = [decoder decodeObjectOfClass:[NSString class] 
forKey:APPENDINGKEY_KEY];
+        prefix = [decoder decodeObjectOfClass:[NSString class] 
forKey:PREFIX_KEY];
+        suffix = [decoder decodeObjectOfClass:[NSString class] 
forKey:SUFFIX_KEY];
     }
     return self;
 }
@@ -421,8 +423,8 @@
 - (instancetype)initWithCoder:(NSCoder *)decoder {
     self = [super initWithCoder:decoder];
     if (self) {
-        casingKey = [decoder decodeObjectForKey:CASINGKEY_KEY];
-        cleaningKey = [decoder decodeObjectForKey:CLEANINGKEY_KEY];
+        casingKey = [decoder decodeObjectOfClass:[NSString class] 
forKey:CASINGKEY_KEY];
+        cleaningKey = [decoder decodeObjectOfClass:[NSString class] 
forKey:CLEANINGKEY_KEY];
     }
     return self;
 }
@@ -527,7 +529,7 @@
 - (instancetype)initWithCoder:(NSCoder *)decoder {
     self = [super initWithCoder:decoder];
     if (self) {
-        urlFormatKey = [decoder decodeObjectForKey:URLFORMATKEY_KEY];
+        urlFormatKey = [decoder decodeObjectOfClass:[NSString class] 
forKey:URLFORMATKEY_KEY];
     }
     return self;
 }
@@ -608,8 +610,8 @@
 - (instancetype)initWithCoder:(NSCoder *)decoder {
     self = [super initWithCoder:decoder];
     if (self) {
-        nameStyleKey = [decoder decodeObjectForKey:NAMESTYLEKEY_KEY];
-        joinStyleKey = [decoder decodeObjectForKey:JOINSTYLEKEY_KEY];
+        nameStyleKey = [decoder decodeObjectOfClass:[NSString class] 
forKey:NAMESTYLEKEY_KEY];
+        joinStyleKey = [decoder decodeObjectOfClass:[NSString class] 
forKey:JOINSTYLEKEY_KEY];
     }
     return self;
 }
@@ -696,8 +698,8 @@
 - (instancetype)initWithCoder:(NSCoder *)decoder {
     self = [super initWithCoder:decoder];
     if (self) {
-        linkedFileFormatKey = [decoder 
decodeObjectForKey:LINKEDFILEFORMATKEY_KEY];
-        linkedFileJoinStyleKey = [decoder 
decodeObjectForKey:LINKEDFILEJOINSTYLEKEY_KEY];
+        linkedFileFormatKey = [decoder decodeObjectOfClass:[NSString class] 
forKey:LINKEDFILEFORMATKEY_KEY];
+        linkedFileJoinStyleKey = [decoder decodeObjectOfClass:[NSString class] 
forKey:LINKEDFILEJOINSTYLEKEY_KEY];
     }
     return self;
 }
@@ -780,7 +782,7 @@
 - (instancetype)initWithCoder:(NSCoder *)decoder {
     self = [super initWithCoder:decoder];
     if (self) {
-        dateFormatKey = [decoder decodeObjectForKey:DATEFORMATKEY_KEY];
+        dateFormatKey = [decoder decodeObjectOfClass:[NSString class] 
forKey:DATEFORMATKEY_KEY];
     }
     return self;
 }
@@ -861,8 +863,8 @@
 - (instancetype)initWithCoder:(NSCoder *)decoder {
     self = [super initWithCoder:decoder];
     if (self) {
-        counterStyleKey = [decoder decodeObjectForKey:COUNTERSTYLEKEY_KEY];
-        counterCasingKey = [decoder decodeObjectForKey:COUNTERCASINGKEY_KEY];
+        counterStyleKey = [decoder decodeObjectOfClass:[NSString class] 
forKey:COUNTERSTYLEKEY_KEY];
+        counterCasingKey = [decoder decodeObjectOfClass:[NSString class] 
forKey:COUNTERCASINGKEY_KEY];
     }
     return self;
 }
@@ -956,8 +958,8 @@
 - (instancetype)initWithCoder:(NSCoder *)decoder {
     self = [super initWithCoder:decoder];
     if (self) {
-        field = [decoder decodeObjectForKey:FIELD_KEY];
-        altText = [decoder decodeObjectForKey:ALTTEXT_KEY];
+        field = [decoder decodeObjectOfClass:[NSString class] 
forKey:FIELD_KEY];
+        altText = [decoder decodeObjectOfClass:[NSString class] 
forKey:ALTTEXT_KEY];
     }
     return self;
 }

Modified: trunk/bibdesk/BDSKTreeNode.h
===================================================================
--- trunk/bibdesk/BDSKTreeNode.h        2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKTreeNode.h        2025-11-12 17:43:31 UTC (rev 29784)
@@ -40,7 +40,7 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface BDSKTreeNode : NSObject <NSCoding, NSCopying>
+@interface BDSKTreeNode : NSObject <NSSecureCoding, NSCopying>
 {
     NSMutableArray *children;
     NSMutableDictionary *columnValues;

Modified: trunk/bibdesk/BDSKTreeNode.m
===================================================================
--- trunk/bibdesk/BDSKTreeNode.m        2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKTreeNode.m        2025-11-12 17:43:31 UTC (rev 29784)
@@ -68,9 +68,9 @@
 - (instancetype)initWithCoder:(NSCoder *)coder;
 {
     if(self = [super init]){
-        children = [[NSMutableArray alloc] initWithArray:[coder 
decodeObjectForKey:@"children"]];
-        columnValues = [[NSMutableDictionary alloc] initWithDictionary:[coder 
decodeObjectForKey:@"columnValues"]];
-        parent = [coder decodeObjectForKey:@"parent"];
+        children = [[NSMutableArray alloc] initWithArray:[coder 
decodeObjectOfClass:[NSArray class] forKey:@"children"]];
+        columnValues = [[NSMutableDictionary alloc] initWithDictionary:[coder 
decodeObjectOfClass:[NSDictionary class] forKey:@"columnValues"]];
+        parent = [coder decodeObjectOfClass:[BDSKTreeNode class] 
forKey:@"parent"];
     }
     return self;
 }
@@ -82,6 +82,8 @@
     [coder encodeConditionalObject:parent forKey:@"parent"];
 }
 
++ (BOOL)supportsSecureCoding { return YES; }
+
 - (id)copyWithZone:(NSZone *)aZone;
 {
     // deep copy the array of children, since the copy could modify the 
original

Modified: trunk/bibdesk/BDSKURLGroup.m
===================================================================
--- trunk/bibdesk/BDSKURLGroup.m        2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BDSKURLGroup.m        2025-11-12 17:43:31 UTC (rev 29784)
@@ -100,7 +100,7 @@
 - (instancetype)initWithCoder:(NSCoder *)decoder {
     self = [super initWithCoder:decoder];
     if (self) {
-        URL = [decoder decodeObjectForKey:@"URL"];
+        URL = [decoder decodeObjectOfClass:[NSURL class] forKey:@"URL"];
         
         isRetrieving = NO;
         failedDownload = NO;

Modified: trunk/bibdesk/BibAuthor.h
===================================================================
--- trunk/bibdesk/BibAuthor.h   2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BibAuthor.h   2025-11-12 17:43:31 UTC (rev 29784)
@@ -54,7 +54,7 @@
     @abstract Modeling authors as objects that can have interesting 
relationships
     @discussion none.
 */
-@interface BibAuthor : NSObject <NSCopying, NSCoding> {
+@interface BibAuthor : NSObject <NSCopying, NSSecureCoding> {
     NSString *originalName;
     NSString *name;
     NSString *firstName;

Modified: trunk/bibdesk/BibAuthor.m
===================================================================
--- trunk/bibdesk/BibAuthor.m   2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BibAuthor.m   2025-11-12 17:43:31 UTC (rev 29784)
@@ -120,8 +120,8 @@
 - (instancetype)initWithCoder:(NSCoder *)coder{
     if([coder allowsKeyedCoding]){
         self = [super init];
-        publication = [coder decodeObjectForKey:@"publication"];
-        originalName = [coder decodeObjectForKey:@"name"];
+        publication = [coder decodeObjectOfClass:[BibItem class] 
forKey:@"publication"];
+        originalName = [coder decodeObjectOfClass:[NSString class] 
forKey:@"name"];
         // this should take care of the rest of the ivars
         [self setupNames];
     } else {
@@ -139,6 +139,8 @@
     }  
 }
 
++ (BOOL)supportsSecureCoding { return YES; }
+
 - (id)replacementObjectForPortCoder:(NSPortCoder *)encoder
 {
     return [encoder isByref] ? [super replacementObjectForPortCoder:encoder] : 
self;

Modified: trunk/bibdesk/BibItem.h
===================================================================
--- trunk/bibdesk/BibItem.h     2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BibItem.h     2025-11-12 17:43:31 UTC (rev 29784)
@@ -93,7 +93,7 @@
 @discussion This is the data model class that encapsulates each Bibtex entry. 
BibItems are created for each entry in a file, and a BibDocument keeps 
collections of BibItems. They are also created in response to drag-in or paste 
operations containing BibTeX source. Their textvalue method is used to provide 
the text that is written to a file on saves.
 
 */
-@interface BibItem : NSObject <NSCopying, NSCoding, BDSKParseableItem, 
BDSKLinkedFileDelegate, BDSKItemDownloadDelegate> {
+@interface BibItem : NSObject <NSCopying, NSSecureCoding, BDSKParseableItem, 
BDSKLinkedFileDelegate, BDSKItemDownloadDelegate> {
     NSString *citeKey;
        NSString *pubType;
     NSMutableDictionary *pubFields;

Modified: trunk/bibdesk/BibItem.m
===================================================================
--- trunk/bibdesk/BibItem.m     2025-11-12 16:48:42 UTC (rev 29783)
+++ trunk/bibdesk/BibItem.m     2025-11-12 17:43:31 UTC (rev 29784)
@@ -278,12 +278,12 @@
 - (instancetype)initWithCoder:(NSCoder *)coder{
     if([coder allowsKeyedCoding]){
         if(self = [super init]){
-            pubFields = [[NSMutableDictionary alloc] initWithDictionary:[coder 
decodeObjectForKey:@"pubFields"]];
-            [self setCiteKeyString:[coder decodeObjectForKey:@"citeKey"]];
-            [self setPubTypeString:[coder decodeObjectForKey:@"pubType"]];
+            pubFields = [[NSMutableDictionary alloc] initWithDictionary:[coder 
decodeObjectOfClass:[NSDictionary class] forKey:@"pubFields"]];
+            [self setCiteKeyString:[coder decodeObjectOfClass:[NSString class] 
forKey:@"citeKey"]];
+            [self setPubTypeString:[coder decodeObjectOfClass:[NSString class] 
forKey:@"pubType"]];
             groups = [[NSMutableDictionary alloc] initWithCapacity:5];
             URLs = [[NSMutableDictionary alloc] initWithCapacity:5];
-            files = [[NSMutableArray alloc] initWithArray:[coder 
decodeObjectForKey:@"files"]];
+            files = [[NSMutableArray alloc] initWithArray:[coder 
decodeObjectOfClass:[NSArray class] forKey:@"files"]];
             [files setValue:self forKey:@"delegate"];
             // set by the document, which we don't archive
             owner = nil;
@@ -321,6 +321,8 @@
     }        
 }
 
++ (BOOL)supportsSecureCoding { return YES; }
+
 - (id)replacementObjectForPortCoder:(NSPortCoder *)encoder
 {
     return [encoder isByref] ? [super replacementObjectForPortCoder:encoder] : 
self;
@@ -502,7 +504,7 @@
     
     [NSString setMacroResolverForUnarchiving:aMacroResolver];
     
-    NSArray *pubs = [unarchiver decodeObjectForKey:@"publications"];
+    NSArray *pubs = [unarchiver decodeObjectOfClass:[NSArray class] 
forKey:@"publications"];
     [unarchiver finishDecoding];
     
     [NSString setMacroResolverForUnarchiving:nil];

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit

Reply via email to