NSSecureUnarchiveFromDataTransformer のクラス ヘッダーでは、NSSet が許可されたクラスであることが文書化されています。
/// A value transformer which transforms values to and from \c NSData by archiving and unarchiving using secure coding.
API_AVAILABLE(macos(10.14), ios(12.0), watchos(5.0), tvos(12.0))
@interface NSSecureUnarchiveFromDataTransformer : NSValueTransformer
/// The list of allowable classes which the top-level object in the archive must conform to on encoding and decoding.
///
/// Returns the result of \c +transformedValueClass if not \c Nil; otherwise, currently returns \c NSArray, \c NSDictionary, \c NSSet, \c NSString, \c NSNumber, \c NSDate, \c NSData, \c NSURL, \c NSUUID, and \c NSNull.
///
/// Can be overridden by subclasses to provide an expanded or different set of allowed transformation classes.
@property (class, readonly, copy) NSArray<Class> *allowedTopLevelClasses;
@end
ただし、このメソッドを呼び出すと、返された配列に NSSet が含まれていないことがわかります。
(lldb) po NSSecureUnarchiveFromDataTransformer.allowedTopLevelClasses
<__NSArrayI 0x600003a59fe0>(
NSArray,
NSDictionary,
NSString,
NSNumber,
NSDate,
NSData,
NSURL,
NSUUID,
NSNull
)
NSSet の内部 CoreData プロパティを使用していますが、これを使用するとクラッシュします。
これはバグですか、それとも何か変更されましたか?