mirror of
https://github.com/morluto/rea
synced 2026-10-26 06:16:17 -04:00
0344d578b2
* fix(apple): classify keyed-archive objects by declared superclasses Interface Builder keyed archives record each object's superclass chain in `$classes`, but the decoder classified objects by class-name substrings alone. UINavigationController, UITabBarController and UISearchController contain "control" but not "viewcontroller", so they were reported as controls. Classify keyed-archive objects by UIKit/AppKit view-controller, control and view bases in their declared chain first, falling back to the name heuristic only when the chain names none. The decoder now reads `$classes` through one helper shared with NSArray detection. Fixes #5218 * test(apple): cover each declared keyed-archive base with neutral class names Neutral names classify only through the archived superclass chain, so each UIKit and AppKit base entry and the control-before-view ordering now has a case that fails without it. * perf(apple): parse each keyed-archive class chain once Objects sharing one class descriptor reparsed and scanned its whole `$classes` array per object, so 20,000 objects sharing a 20,000-name chain took about 16 seconds to decode. Cache each descriptor's chain as a set by archive UID; the same archive decodes in about 3.5 seconds, matching main. --------- Co-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>