fix(build): make the app bundle self-contained instead of reaching into the source tree - #2358
Merged
Conversation
…to the source tree Claude-Session: https://claude.ai/code/session_013MEaba8K1HQcyDNeq5wEFk
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
This was referenced Aug 21, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The root cause behind #2334. That PR restored
Libs/in the test jobs and asserted the two dylibs exist, which stops the symptom; this stops the app needing them from a source tree at all.What was wrong
project.ymlput$(SRCROOT)/Libs/dylibsonLD_RUNPATH_SEARCH_PATHS, which bakes an absolute path into the binary.TablePro.debug.dylibis the app's own code, loaded at launch, and it links@rpath/libssl.3.dyliband@rpath/libcrypto.3.dylib. Those are not copied into the bundle in a Debug build, so that absolute rpath was the only thing resolving them.A Debug app therefore only ran from a checkout that happened to have
Libs/dylibson disk. When the sharded test jobs stopped downloadingLibs, the host aborted with SIGABRT before XCTest could connect, reporting zero tests and naming neither the library nor the reason.A release build was already self-contained:
build-release.sh'sbundle_dylibs()copies them in and rewrites the install names.The fix
Both dylibs already carry an
@rpath/install name, set bycreate-openssl-dylibs.sh, so copying them intoContents/Frameworksis enough and noinstall_name_toolis needed. A copy-files phase does that, and@executable_path/../Frameworkswas already first on the rpath list.$(SRCROOT)/Libs/dylibsthen comes off the app target'sLD_RUNPATH_SEARCH_PATHS.LIBRARY_SEARCH_PATHSkeeps it, because that is link time and legitimate.Verified by building
Then the scenario that failed in #2334: products tarred, unpacked into a different directory, and the full unit suite run against them.
The host launches, no SIGABRT. The remaining absolute path is the DerivedData
PackageFrameworksentry, which is normal for a Debug build and travels inside the products tarball.Scope
The six plugin targets keep their
$(SRCROOT)/Libs/dylibsrpath entry. A plugin loaded into the app resolves through the app'sContents/Frameworksanyway, so the entry is inert there, and I cannot verify a registry plugin installed outside the bundle from here. Removing those is cosmetic and belongs with someone who can test that path.