Runtime error. "NSSecureCoding allowed classes list contains [NSObject class], which bypasses security by allowing any Objective-C class to be implicitly decoded." #520
*** -[NSKeyedUnarchiver validateAllowedClass:forKey:]: NSSecureCoding allowed classes list contains [NSObject class], which bypasses security by allowing any Objective-C class to be implicitly decoded. Consider reducing the scope of allowed classes during decoding by listing only the classes you expect to decode, or a more specific base class than NSObject. This will become an error in the future. Allowed class list: {(
"'NSObject' (0x10e5222e8) [/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib]"
)}
The offending method
+ (id)unarchiveFromFile:(NSString *)filePath asClass:(Class)class
{
id unarchivedData = nil;
@try {
if (@available(iOS 11, macOS 10.13, tvOS 11, watchOS 4, *)) {
NSError *error = nil;
NSData *data = [NSData dataWithContentsOfFile:filePath];
unarchivedData = [NSKeyedUnarchiver unarchivedObjectOfClass:[NSObject class] fromData:data error:&error];
if (error) {
MPLogError(@"%@ got error while unarchiving data in %@: %@", self, filePath, error);
}
} else {
unarchivedData = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
}
// this check is inside the try-catch as the unarchivedData may be a non-NSObject, not responding to `isKindOfClass:` or `respondsToSelector:`
if (![unarchivedData isKindOfClass:class]) {
unarchivedData = nil;
}
MPLogInfo(@"%@ unarchived data from %@: %@", self, filePath, unarchivedData);
}
@catch (NSException *exception) {
MPLogError(@"%@ unable to unarchive data in %@, starting fresh", self, filePath);
// Reset un archived data
unarchivedData = nil;
// Remove the (possibly) corrupt data from the disk
NSError *error = NULL;
BOOL removed = [[NSFileManager defaultManager] removeItemAtPath:filePath error:&error];
if (!removed) {
MPLogWarning(@"%@ unable to remove archived file at %@ - %@", self, filePath, error);
}
}
return unarchivedData;
}
I recently hit a runtime error in our project.
A bit about my environment.
The error in question
The offending method
Screenshot of the error