[GH-ISSUE #5693] [Bug] Compiled AppKit nib hierarchies omit top-level custom objects while reporting complete coverage #3443

Closed
opened 2026-10-31 00:40:32 +00:00 by bsakaguchi · 2 comments
Owner

Originally created by @coygeek on GitHub (Oct 20, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/5693

Before submitting

  • I searched the open and closed issues for a related report.
  • I removed credentials, tokens, private paths, and sensitive target data.

Area

Evidence, artifacts, or reconstruction

Observed behavior

decode-interface-builder retains Application and a top-level custom helper in the object inventory of a real compiled AppKit nib, but gives neither a hierarchy path. It reports hierarchy_complete: true and complete hierarchy coverage with zero omissions. The source XIB and an independent ordered-pair read of the compiled object-parent registry identify both as top-level entries. A nested view is correctly attached to its parent.

Reproduction

From a built source checkout with locked dependencies installed, run on macOS with Xcode's ibtool, a C compiler, Node.js, Python 3 and jq. This creates a disposable fixture and isolated writable directories; it inspects the app without launching it.

work_dir="$(mktemp -d)"
mkdir -p "$work_dir/home" "$work_dir/cfg" "$work_dir/data" "$work_dir/cache" "$work_dir/state" "$work_dir/tmp" "$work_dir/Fixture.app/Contents/MacOS" "$work_dir/Fixture.app/Contents/Resources"
cat > "$work_dir/Main.xib" <<'XML'
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="23094" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
  <dependencies><plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="23094"/></dependencies>
  <objects>
    <customObject id="-2" userLabel="File's Owner" customClass="NSViewController">
      <connections><outlet property="view" destination="view" id="view-outlet"/></connections>
    </customObject>
    <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
    <customObject id="-3" userLabel="Application" customClass="NSObject"/>
    <customObject id="helper" customClass="VerifierHelper"/>
    <view id="view" customClass="NSView">
      <rect key="frame" x="0" y="0" width="480" height="320"/>
      <subviews><view id="child" customClass="NSView"><rect key="frame" x="0" y="0" width="100" height="100"/></view></subviews>
    </view>
  </objects>
</document>
XML
xcrun ibtool --errors --warnings --compile "$work_dir/Fixture.app/Contents/Resources/Main.nib" "$work_dir/Main.xib" > "$work_dir/compile.plist"
cat > "$work_dir/Fixture.app/Contents/Info.plist" <<'XML'
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0"><dict><key>CFBundleExecutable</key><string>Fixture</string><key>CFBundleIdentifier</key><string>dev.rea.fixture</string></dict></plist>
XML
printf 'int main(void){return 0;}\n' > "$work_dir/fixture.c"
cc "$work_dir/fixture.c" -o "$work_dir/Fixture.app/Contents/MacOS/Fixture"
xcrun ibtool --objects --connections --hierarchy --output-format xml1 "$work_dir/Main.xib" > "$work_dir/oracle.plist"
env -i PATH="$PATH" HOME="$work_dir/home" XDG_CONFIG_HOME="$work_dir/cfg" XDG_DATA_HOME="$work_dir/data" XDG_CACHE_HOME="$work_dir/cache" XDG_STATE_HOME="$work_dir/state" TMPDIR="$work_dir/tmp" REA_LOG_LEVEL=silent node scripts/rea.mjs decode-interface-builder "$work_dir/Fixture.app" --json > "$work_dir/out.json"
jq '.normalized_result as $r | {
  document: ($r.documents[0] | {object_count, hierarchy_complete}),
  hierarchy: [$r.graph.coverage[] | select(.facet | startswith("hierarchy:"))],
  roots: [$r.graph.edges[] | select(.relation == "contains" and (.from | endswith(":root")))
    | .to as $id | $r.graph.nodes[] | select(.id == $id) | .name],
  application_and_helper: [$r.graph.nodes[]
    | select(.attributes.class_name == "NSCustomObject")
    | select(.name == "NSApplication" or .name == "VerifierHelper")
    | .id as $id | {name, object_id: .attributes.interface_builder_object_id,
      hierarchy_edges: [$r.graph.edges[] | select(.to == $id and (.id | contains(":hierarchy:")))]}]
}' "$work_dir/out.json"
python3 - "$work_dir/oracle.plist" <<'PY_ORACLE'
import plistlib, sys
with open(sys.argv[1], "rb") as stream:
    hierarchy = plistlib.load(stream)["com.apple.ibtool.document.hierarchy"]
print([entry["object-id"] for entry in hierarchy])
PY_ORACLE

An independent verifier executed this fixture at the baseline below and also observed the Application omission in the unchanged repository AppKit conformance fixture. The submitter reran the authored fixture after rebuilding current main; the result is recorded below.

Expected behavior

Account for serialized top-level Application and helper objects in the hierarchy, preserving the nested view's parent. If the object-parent registry cannot be represented, disclose the omitted structure with partial coverage and a reason. This does not require synthesizing a runtime object for the source-only First Responder placeholder.

Source contract at the baseline: docs/native-investigation.md:383-396 documents compiled nib decoding and :626-637 specifies per-document hierarchy coverage; docs/tool-design.md:171-176 requires completeness derived from examined records and exhaustiveness. The source-side ibtool hierarchy independently identifies the top-level entries.

Impact and scope

P2: supported compiled AppKit inputs return incomplete UI hierarchy evidence with a false completeness signal. Application and helper remain in the object inventory. Two inputs reproduced at the verified baseline; the authored fixture was rerun on current main. No target execution, data corruption or security impact was observed. Wider prevalence and MCP behavior were not tested. The source XIB permits the demonstrated ibtool oracle; no practical REA workaround for compiled-only bundles was verified.

REA version

rea-agents 6.7.0; verified baseline 9d8e7803326a382cbbb3ffdb900f5e93e5442d68. Rechecked with a rebuilt runtime at current main 949966712e68d8857a50a165ecddf04c2d7e6d3b (also 6.7.0): still reproduces. These are source-checkout reproductions.

Runtime and platform

Node.js v26.12.0; macOS 27.0.1 arm64; Xcode 27.1 (27A9275), ibtool 27.1 (25098). No optional deep-analysis provider was used.

Target and artifact context

A self-built Mach-O app bundle containing an actual ibtool-compiled MacOSX.Cocoa NIBArchive. The authored source has File's Owner, First Responder, Application, VerifierHelper, a root NSView and one nested NSView. No target launch or UI instantiation was performed.

Interface

CLI

Earliest failure stage

Native analysis or reconstruction

Relevant output or evidence

The fixture compilation, source oracle and isolated CLI exit 0. Relevant CLI result at both tested revisions:

object_count: 8
hierarchy_complete: true
hierarchy facet: status complete, reason null, examined 3, omitted 0
root children: NSViewController (archive object 2), NSView (8)
NSApplication (15): hierarchy_edges []
VerifierHelper (19): hierarchy_edges []
nested NSView (10): parent NSView (8)

The source oracle lists top-level IDs -2, -1, -3, helper, view. An independent verifier's ordered-pair inspection of the compiled NIBArchive found NSIBObjectData.NSRoot referencing owner 2; NSObjectsKeys contains [15,19,8,10] and the matching NSObjectsValues contains [2,2,2,8]. Application, helper and root view share owner 2; the child view has parent 8. The missing custom objects are serialized, rather than source-only placeholders. This archive inspection was performed by the verifier at baseline; the submission rerun checks the public CLI and source oracle.

Typed outcome or recovery expected

Proposed restoration check: decode the same fixture and retain hierarchy paths identifying Application and helper as top-level, with the child view still under view 8. Complete coverage must account for applicable serialized hierarchy entries; otherwise report partial coverage with an explicit reason. A helper-free control should remove only the helper and its relationship, without promoting the nested view, metadata or connectors to top-level UI objects. No repair or restoration was tested.

Analysis or suspected cause

Source-derived reasoning at the baseline: src/artifacts/apple/InterfaceBuilderAnalysis.ts:611-686 starts the legacy hierarchy at NSRoot and supplements view-parent links without consuming the object-parent registry. src/artifacts/apple/NibViewHierarchy.ts:166-202 recovers NSSuperview and NSWindowView only. src/domain/apple/interfaceBuilderGraph.ts:467-479,532-550 consequently derives complete coverage from a nonempty hierarchy without recorded omissions. The corresponding hierarchy logic remains in current main.

src/artifacts/apple/NibArchive.ts:128-145 also overwrites repeated array fields under one key. That is contributing representation loss, but preserving repeated members alone is not an established sufficient fix: the hierarchy projector must also account for the object-parent registry. Do not treat every NSObjectsKeys member as a root; its paired parent distinguishes nested view 10 from top-level objects. No bundled dependency was identified as the cause.

Additional context

This uncovered custom-object case still reproduces after #781 / merged integration #815. That earlier fix restores serialized NSSuperview and NSWindowView links; the nested view in this fixture already works. #3950 / #4162 concern a hierarchy-size cut. #5540 / #5563 concern reasons for budget omissions; #5541 / #5569 concern boolean polarity; #5590 concerns keyed-archive bindings; #5638 concerns UID dictionary identity. None supplies this object-parent hierarchy closure signal. PR #3502 explicitly leaves repeated-key array handling outside its connector fix.

Prepared with AI assistance and independently verified. No earlier known-good revision was established; broader archive and transport coverage remains untested.

Originally created by @coygeek on GitHub (Oct 20, 2026). Original GitHub issue: https://github.com/morluto/rea/issues/5693 ### Before submitting - [x] I searched the open and closed issues for a related report. - [x] I removed credentials, tokens, private paths, and sensitive target data. ### Area Evidence, artifacts, or reconstruction ### Observed behavior `decode-interface-builder` retains Application and a top-level custom helper in the object inventory of a real compiled AppKit nib, but gives neither a hierarchy path. It reports `hierarchy_complete: true` and complete hierarchy coverage with zero omissions. The source XIB and an independent ordered-pair read of the compiled object-parent registry identify both as top-level entries. A nested view is correctly attached to its parent. ### Reproduction From a built source checkout with locked dependencies installed, run on macOS with Xcode's ibtool, a C compiler, Node.js, Python 3 and jq. This creates a disposable fixture and isolated writable directories; it inspects the app without launching it. ```sh work_dir="$(mktemp -d)" mkdir -p "$work_dir/home" "$work_dir/cfg" "$work_dir/data" "$work_dir/cache" "$work_dir/state" "$work_dir/tmp" "$work_dir/Fixture.app/Contents/MacOS" "$work_dir/Fixture.app/Contents/Resources" cat > "$work_dir/Main.xib" <<'XML' <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="23094" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <dependencies><plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="23094"/></dependencies> <objects> <customObject id="-2" userLabel="File's Owner" customClass="NSViewController"> <connections><outlet property="view" destination="view" id="view-outlet"/></connections> </customObject> <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> <customObject id="-3" userLabel="Application" customClass="NSObject"/> <customObject id="helper" customClass="VerifierHelper"/> <view id="view" customClass="NSView"> <rect key="frame" x="0" y="0" width="480" height="320"/> <subviews><view id="child" customClass="NSView"><rect key="frame" x="0" y="0" width="100" height="100"/></view></subviews> </view> </objects> </document> XML xcrun ibtool --errors --warnings --compile "$work_dir/Fixture.app/Contents/Resources/Main.nib" "$work_dir/Main.xib" > "$work_dir/compile.plist" cat > "$work_dir/Fixture.app/Contents/Info.plist" <<'XML' <?xml version="1.0" encoding="UTF-8"?> <plist version="1.0"><dict><key>CFBundleExecutable</key><string>Fixture</string><key>CFBundleIdentifier</key><string>dev.rea.fixture</string></dict></plist> XML printf 'int main(void){return 0;}\n' > "$work_dir/fixture.c" cc "$work_dir/fixture.c" -o "$work_dir/Fixture.app/Contents/MacOS/Fixture" xcrun ibtool --objects --connections --hierarchy --output-format xml1 "$work_dir/Main.xib" > "$work_dir/oracle.plist" env -i PATH="$PATH" HOME="$work_dir/home" XDG_CONFIG_HOME="$work_dir/cfg" XDG_DATA_HOME="$work_dir/data" XDG_CACHE_HOME="$work_dir/cache" XDG_STATE_HOME="$work_dir/state" TMPDIR="$work_dir/tmp" REA_LOG_LEVEL=silent node scripts/rea.mjs decode-interface-builder "$work_dir/Fixture.app" --json > "$work_dir/out.json" jq '.normalized_result as $r | { document: ($r.documents[0] | {object_count, hierarchy_complete}), hierarchy: [$r.graph.coverage[] | select(.facet | startswith("hierarchy:"))], roots: [$r.graph.edges[] | select(.relation == "contains" and (.from | endswith(":root"))) | .to as $id | $r.graph.nodes[] | select(.id == $id) | .name], application_and_helper: [$r.graph.nodes[] | select(.attributes.class_name == "NSCustomObject") | select(.name == "NSApplication" or .name == "VerifierHelper") | .id as $id | {name, object_id: .attributes.interface_builder_object_id, hierarchy_edges: [$r.graph.edges[] | select(.to == $id and (.id | contains(":hierarchy:")))]}] }' "$work_dir/out.json" python3 - "$work_dir/oracle.plist" <<'PY_ORACLE' import plistlib, sys with open(sys.argv[1], "rb") as stream: hierarchy = plistlib.load(stream)["com.apple.ibtool.document.hierarchy"] print([entry["object-id"] for entry in hierarchy]) PY_ORACLE ``` An independent verifier executed this fixture at the baseline below and also observed the Application omission in the unchanged repository AppKit conformance fixture. The submitter reran the authored fixture after rebuilding current main; the result is recorded below. ### Expected behavior Account for serialized top-level Application and helper objects in the hierarchy, preserving the nested view's parent. If the object-parent registry cannot be represented, disclose the omitted structure with partial coverage and a reason. This does not require synthesizing a runtime object for the source-only First Responder placeholder. Source contract at the baseline: `docs/native-investigation.md:383-396` documents compiled nib decoding and `:626-637` specifies per-document hierarchy coverage; `docs/tool-design.md:171-176` requires completeness derived from examined records and exhaustiveness. The source-side ibtool hierarchy independently identifies the top-level entries. ### Impact and scope P2: supported compiled AppKit inputs return incomplete UI hierarchy evidence with a false completeness signal. Application and helper remain in the object inventory. Two inputs reproduced at the verified baseline; the authored fixture was rerun on current main. No target execution, data corruption or security impact was observed. Wider prevalence and MCP behavior were not tested. The source XIB permits the demonstrated ibtool oracle; no practical REA workaround for compiled-only bundles was verified. ### REA version `rea-agents` 6.7.0; verified baseline `9d8e7803326a382cbbb3ffdb900f5e93e5442d68`. Rechecked with a rebuilt runtime at current main `949966712e68d8857a50a165ecddf04c2d7e6d3b` (also 6.7.0): still reproduces. These are source-checkout reproductions. ### Runtime and platform Node.js v26.12.0; macOS 27.0.1 arm64; Xcode 27.1 (27A9275), ibtool 27.1 (25098). No optional deep-analysis provider was used. ### Target and artifact context A self-built Mach-O app bundle containing an actual ibtool-compiled MacOSX.Cocoa NIBArchive. The authored source has File's Owner, First Responder, Application, VerifierHelper, a root NSView and one nested NSView. No target launch or UI instantiation was performed. ### Interface CLI ### Earliest failure stage Native analysis or reconstruction ### Relevant output or evidence The fixture compilation, source oracle and isolated CLI exit 0. Relevant CLI result at both tested revisions: ```text object_count: 8 hierarchy_complete: true hierarchy facet: status complete, reason null, examined 3, omitted 0 root children: NSViewController (archive object 2), NSView (8) NSApplication (15): hierarchy_edges [] VerifierHelper (19): hierarchy_edges [] nested NSView (10): parent NSView (8) ``` The source oracle lists top-level IDs `-2`, `-1`, `-3`, `helper`, `view`. An independent verifier's ordered-pair inspection of the compiled NIBArchive found `NSIBObjectData.NSRoot` referencing owner 2; `NSObjectsKeys` contains `[15,19,8,10]` and the matching `NSObjectsValues` contains `[2,2,2,8]`. Application, helper and root view share owner 2; the child view has parent 8. The missing custom objects are serialized, rather than source-only placeholders. This archive inspection was performed by the verifier at baseline; the submission rerun checks the public CLI and source oracle. ### Typed outcome or recovery expected Proposed restoration check: decode the same fixture and retain hierarchy paths identifying Application and helper as top-level, with the child view still under view 8. Complete coverage must account for applicable serialized hierarchy entries; otherwise report partial coverage with an explicit reason. A helper-free control should remove only the helper and its relationship, without promoting the nested view, metadata or connectors to top-level UI objects. No repair or restoration was tested. ### Analysis or suspected cause Source-derived reasoning at the baseline: `src/artifacts/apple/InterfaceBuilderAnalysis.ts:611-686` starts the legacy hierarchy at NSRoot and supplements view-parent links without consuming the object-parent registry. `src/artifacts/apple/NibViewHierarchy.ts:166-202` recovers NSSuperview and NSWindowView only. `src/domain/apple/interfaceBuilderGraph.ts:467-479,532-550` consequently derives complete coverage from a nonempty hierarchy without recorded omissions. The corresponding hierarchy logic remains in current main. `src/artifacts/apple/NibArchive.ts:128-145` also overwrites repeated array fields under one key. That is contributing representation loss, but preserving repeated members alone is not an established sufficient fix: the hierarchy projector must also account for the object-parent registry. Do not treat every NSObjectsKeys member as a root; its paired parent distinguishes nested view 10 from top-level objects. No bundled dependency was identified as the cause. ### Additional context This uncovered custom-object case still reproduces after #781 / merged integration #815. That earlier fix restores serialized NSSuperview and NSWindowView links; the nested view in this fixture already works. #3950 / #4162 concern a hierarchy-size cut. #5540 / #5563 concern reasons for budget omissions; #5541 / #5569 concern boolean polarity; #5590 concerns keyed-archive bindings; #5638 concerns UID dictionary identity. None supplies this object-parent hierarchy closure signal. PR #3502 explicitly leaves repeated-key array handling outside its connector fix. Prepared with AI assistance and independently verified. No earlier known-good revision was established; broader archive and transport coverage remains untested.
Author
Owner

@matbrgz commented on GitHub (Oct 20, 2026):

Cross-referencing with canonical issue #5540 (decode-interface-builder misattributes object-limit omissions to the connection budget) and sibling NIB decoding reports #5541, #5590, #5692, #5695.

Consolidated under Cluster AX (Compiled Interface Builder / NIB Decoding & Object Limit Anomalies) in tracker #4330.

<!-- gh-comment-id:6304471812 --> @matbrgz commented on GitHub (Oct 20, 2026): Cross-referencing with canonical issue #5540 (`decode-interface-builder misattributes object-limit omissions to the connection budget`) and sibling NIB decoding reports #5541, #5590, #5692, #5695. Consolidated under **Cluster AX (Compiled Interface Builder / NIB Decoding & Object Limit Anomalies)** in tracker #4330.
Author
Owner

@coygeek commented on GitHub (Oct 21, 2026):

An additional trigger for the same unconsumed NSObjectsKeys/NSObjectsValues object-parent registry affects nested descendants. At baseline 9d8e7803326a382cbbb3ffdb900f5e93e5442d68, the fixture below produces 16 objects, but hierarchy edges stop at NSWindowTemplate (6) -> NSView (11) -> NSPopUpButton (13). Cell 17, menu 32 and items 21/34 exist as graph nodes without hierarchy parentage, while hierarchy_complete is true and coverage says complete, examined: 4, omitted: 0. Both the source oracle and an ordered-pair read of the compiled registry establish 13 -> 17 -> 32 -> {21,34}. Expected behavior is to retain those nested relationships or report partial coverage. Promoting every registry entry to a root would lose this parentage. Verified at baseline; main not re-run after fetching later changes, including InterfaceBuilderAnalysis.ts.

Replace Main.xib in the issue's app-bundle fixture with:

<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="23094" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies><deployment identifier="macosx"/><plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="23094"/></dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="NSWindowController"><connections><outlet property="window" destination="window" id="window-outlet"/></connections></customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<window title="Verifier Window" id="window">
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
<rect key="contentRect" x="100" y="100" width="320" height="200"/>
<rect key="screenRect" x="0" y="0" width="1920" height="1080"/>
<view key="contentView" id="content"><rect key="frame" x="0" y="0" width="320" height="200"/>
<subviews>
<popUpButton id="popup"><rect key="frame" x="20" y="120" width="140" height="25"/>
<popUpButtonCell key="cell" type="push" title="First" bezelStyle="rounded" alignment="left" borderStyle="borderAndBezel" inset="2" selectedItem="first" id="cell">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/><font key="font" metaFont="menu"/>
<menu key="menu" id="menu"><items><menuItem title="First" id="first"/><menuItem title="Second" id="second"/></items></menu>
</popUpButtonCell></popUpButton>
</subviews></view></window>
</objects></document>

Using the same bundle scaffolding and isolated directories from the issue, run from the built checkout:

xcrun ibtool --errors --warnings --compile "$work_dir/Fixture.app/Contents/Resources/Main.nib" "$work_dir/Main.xib"
xcrun ibtool --objects --connections --hierarchy --output-format xml1 "$work_dir/Main.xib" > "$work_dir/oracle.plist"
env -i PATH="$PATH" HOME="$work_dir/home" XDG_CONFIG_HOME="$work_dir/cfg" XDG_DATA_HOME="$work_dir/data" XDG_CACHE_HOME="$work_dir/cache" XDG_STATE_HOME="$work_dir/state" TMPDIR="$work_dir/tmp" REA_LOG_LEVEL=silent node scripts/rea.mjs decode-interface-builder "$work_dir/Fixture.app" --json > "$work_dir/out.json"

All three commands exit 0. The oracle includes window -> content -> popup -> cell -> menu -> first/second; REA includes only the window, content and popup chain, plus root links to owner/window. The app is never launched.

<!-- gh-comment-id:6305451030 --> @coygeek commented on GitHub (Oct 21, 2026): An additional trigger for the same unconsumed `NSObjectsKeys`/`NSObjectsValues` object-parent registry affects nested descendants. At baseline `9d8e7803326a382cbbb3ffdb900f5e93e5442d68`, the fixture below produces 16 objects, but hierarchy edges stop at `NSWindowTemplate (6) -> NSView (11) -> NSPopUpButton (13)`. Cell 17, menu 32 and items 21/34 exist as graph nodes without hierarchy parentage, while `hierarchy_complete` is `true` and coverage says `complete, examined: 4, omitted: 0`. Both the source oracle and an ordered-pair read of the compiled registry establish `13 -> 17 -> 32 -> {21,34}`. Expected behavior is to retain those nested relationships or report partial coverage. Promoting every registry entry to a root would lose this parentage. Verified at baseline; main not re-run after fetching later changes, including `InterfaceBuilderAnalysis.ts`. Replace `Main.xib` in the issue's app-bundle fixture with: ```xml <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="23094" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <dependencies><deployment identifier="macosx"/><plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="23094"/></dependencies> <objects> <customObject id="-2" userLabel="File's Owner" customClass="NSWindowController"><connections><outlet property="window" destination="window" id="window-outlet"/></connections></customObject> <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> <customObject id="-3" userLabel="Application" customClass="NSObject"/> <window title="Verifier Window" id="window"> <windowStyleMask key="styleMask" titled="YES" closable="YES"/> <rect key="contentRect" x="100" y="100" width="320" height="200"/> <rect key="screenRect" x="0" y="0" width="1920" height="1080"/> <view key="contentView" id="content"><rect key="frame" x="0" y="0" width="320" height="200"/> <subviews> <popUpButton id="popup"><rect key="frame" x="20" y="120" width="140" height="25"/> <popUpButtonCell key="cell" type="push" title="First" bezelStyle="rounded" alignment="left" borderStyle="borderAndBezel" inset="2" selectedItem="first" id="cell"> <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/><font key="font" metaFont="menu"/> <menu key="menu" id="menu"><items><menuItem title="First" id="first"/><menuItem title="Second" id="second"/></items></menu> </popUpButtonCell></popUpButton> </subviews></view></window> </objects></document> ``` Using the same bundle scaffolding and isolated directories from the issue, run from the built checkout: ```sh xcrun ibtool --errors --warnings --compile "$work_dir/Fixture.app/Contents/Resources/Main.nib" "$work_dir/Main.xib" xcrun ibtool --objects --connections --hierarchy --output-format xml1 "$work_dir/Main.xib" > "$work_dir/oracle.plist" env -i PATH="$PATH" HOME="$work_dir/home" XDG_CONFIG_HOME="$work_dir/cfg" XDG_DATA_HOME="$work_dir/data" XDG_CACHE_HOME="$work_dir/cache" XDG_STATE_HOME="$work_dir/state" TMPDIR="$work_dir/tmp" REA_LOG_LEVEL=silent node scripts/rea.mjs decode-interface-builder "$work_dir/Fixture.app" --json > "$work_dir/out.json" ``` All three commands exit 0. The oracle includes `window -> content -> popup -> cell -> menu -> first/second`; REA includes only the window, content and popup chain, plus root links to owner/window. The app is never launched.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#3443
No description provided.