Chyba "[obecné] *** -[NSKeyedUnarchiver validateAllowedClass:forKey:] povoleno rozbalování ..."

0

Otázka

Jsem na macOS Monterey (12.0.1), iOS, objective-c, XCode 13

Přijímám tuto zprávu záznamu po budování své aplikace pro arm64:

[general] *** -[NSKeyedUnarchiver validateAllowedClass:forKey:] allowed unarchiving safe plist type ''NSString' (0x1dcb1c848) [/System/Library/Frameworks/Foundation.framework]' for key 'NS.objects', even though it was not explicitly included in the client allowed classes set: '{(
    "'NSDictionary' (0x1dcaee5d0) [/System/Library/Frameworks/CoreFoundation.framework]"
)}'. This will be disallowed in the future.

Nějaký nápad co to způsobuje a jak se toho zbavit?

Edit: zdá se stane s každou aplikaci sestaven na arm64 počínaje macOS Monterey. Takže by to mohlo být obecný apple bug

apple-m1 arm macos macos-monterey
2021-11-20 21:30:36
1

Nejlepší odpověď

0

Díky @OI Sen to měl blíže podívat na NSUnarchiver. V první řadě NSKeyedUnarchiver by měly být přiděleny a inicializována takto:

NSError* err;

NSKeyedUnarchiver* unarchiver = [[NSKeyedUnarchiver alloc] initForReadingFromData:someData error:&err];

V mém konkrétním případě jsem použít NSSecure kódování. Proto musíte zadat tříd na dekódování objektů. V mém případě to vypadalo takhle

NSDictionary* someDict = [unarchiver decodeObjectOfClass:[NSDictionary class] forKey:NSKeyedArchiveRootObjectKey];

Ale NSDictionary obsažené další řetězce. To bylo příčinou zprávu záznamu. Přidáním NSString dekódované třídy seznamu, chyba je pryč.

NSDictionary* someDict = [unarchiver decodeObjectOfClasses:[[NSSet alloc] initWithArray:@[[NSDictionary class],[NSString class]]] forKey:NSKeyedArchiveRootObjectKey];
2021-11-21 19:20:28

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................