Conversation
🛠️ Tuist Run Report 🛠️Tests 🧪
Builds 🔨
|
fortmarek
approved these changes
Feb 9, 2026
Member
fortmarek
left a comment
There was a problem hiding this comment.
This caused external static frameworks to generate separate resource bundles, moving xcassets away from the framework target. Xcode's GenerateAssetSymbols only runs for targets that directly contain asset catalogs, so the ImageResource extensions were never generated.
I believe you mentioned that SwiftPM also generates a separate bundle – how does it work in their case? I'm also curious why this issue is only coming up now although we had that support forever.
But feel free to go ahead.
7 tasks
154405d to
a0d0fde
Compare
Static frameworks (including external ones) now keep resources inside the framework instead of generating a separate resource bundle. This lets Xcode's GenerateAssetSymbols build phase work correctly so packages using Image(.name) syntax compile as expected. Three changes make this work end to end: 1. ResourcesProjectMapper: static frameworks no longer generate a separate .bundle target. Both Swift and ObjC bundle accessors search inside the .framework first, then fall back to .bundle. 2. GraphTraverser: direct static XCFrameworks with .framework library bundles are now embedded in the app so their resources are accessible at runtime. This handles the cache path where tuist cache replaces a static framework target with a precompiled XCFramework. 3. Cache version bumped from 1.0.0 to 1.1.0 to force a rebuild of cached artifacts. Closes #9336
a0d0fde to
dd38b10
Compare
pepicrft
added a commit
that referenced
this pull request
Feb 13, 2026
This reverts the static framework resource embedding feature that was introduced across multiple PRs (#9081, #9141, #9210, #9240, #9317, #9382, #9419 and related fixes). Resources for static frameworks go back to being placed in separate .bundle targets instead of being embedded inside the framework itself. The cache version is bumped to invalidate artifacts built with the old embedding approach.
2 tasks
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.
Summary
PR #9344 generated separate resource bundles for external static frameworks, which broke Xcode's
GenerateAssetSymbolsbuild phase. Packages usingImage(.name)syntax stopped compiling because the asset catalog was moved to the bundle target, and Xcode only generatesImageResourceextensions for targets that directly contain asset catalogs.This PR keeps resources inside the static framework itself (both for source builds and the cached XCFramework path), updates the Swift/ObjC bundle accessors to find resources there, and bumps the cache version so stale artifacts get rebuilt.
Changes
.bundletarget. The Swift accessor usesswiftStaticFrameworkBundleAccessorStringfor all static frameworks (local and external). The ObjC accessor tries loading the.frameworkcandidate directly before falling back to.bundle..frameworkbundles are now embedded in the app, so their resources are reachable at runtime aftertuist cache.Closes #9336