Skip to content

Comments

fix(cli): Compilation errors when a static framework contains resources#9141

Merged
pepicrft merged 1 commit intomainfrom
fix/static-framework-embedding
Jan 16, 2026
Merged

fix(cli): Compilation errors when a static framework contains resources#9141
pepicrft merged 1 commit intomainfrom
fix/static-framework-embedding

Conversation

@pepicrft
Copy link
Contributor

@pepicrft pepicrft commented Jan 16, 2026

Problem

A regression in 4.122.2 causes iOS 26 simulator installs to fail when a static framework with resources is embedded in the app bundle. The simulator reports:

Info.plist from bundle …/Frameworks/.framework had none of the keys that we expect

Static frameworks are not valid runtime-embedded frameworks; iOS 26’s installer now validates embedded frameworks more strictly and rejects these bundles. This appears when a static framework includes resources and Tuist decides to embed it.

Reproduction

  1. Generate the sample: /Users/pepicrft/Downloads/CLImageEditorTuistSample
    CLImageEditorTuistSample.zip

  2. Build the app.

  3. Install on iOS 26 simulator:
    xcrun simctl install <device> <app>.app

On 4.122.2, install fails with the Info.plist validation error because the static framework is copied into .app/Frameworks.

Root cause

GraphTraverser.embeddableFrameworks treated static frameworks that contain resources as embeddable, which drives the “Embed Frameworks” phase. That embeds the static framework into the app, and iOS 26 refuses to install it.

Fix

Stop embedding static frameworks just because they contain resources. Static frameworks should only be embedded when they have Metal sources (because Metal generates default.metallib that must be packaged). This keeps the existing Metal exception but prevents invalid static framework embedding for resources.

Tests

  • Unable to run unit tests via xcodebuild: schemes in Tuist.xcworkspace are not configured with the test action.
  • mise run cli:lint --fix

Verification

Rebuilt Tuist, regenerated the sample, built the app, and installed on iOS 26 simulator. The app no longer contains .app/Frameworks, and install succeeds.

@dosubot dosubot bot added size:M For issues that take a handful of hours to implement type:bug Something isn't working labels Jan 16, 2026
@pepicrft pepicrft changed the title Fix static framework embedding for resources fix(cli): Compilation errors when a static framework contains resources Jan 16, 2026
@tuist
Copy link

tuist bot commented Jan 16, 2026

🛠️ Tuist Run Report 🛠️

Tests 🧪

Scheme Status Cache hit rate Tests Skipped Ran Commit
TuistAutomationAcceptanceTests 61 % 34 0 34 938d99384
TuistCacheEEAcceptanceTests 60 % 10 0 10 938d99384
TuistDependenciesAcceptanceTests 61 % 16 0 16 938d99384
TuistKitAcceptanceTests 61 % 46 0 46 938d99384
TuistUnitTests 61 % 2198 0 2198 938d99384

Builds 🔨

Scheme Status Duration Commit
TuistAutomationAcceptanceTests 1m 54s 938d99384
TuistCacheEEAcceptanceTests 50.3s 938d99384
TuistDependenciesAcceptanceTests 1m 55s 938d99384
TuistGeneratorAcceptanceTests 2m 46s 938d99384
TuistKitAcceptanceTests 4m 28s 938d99384
TuistUnitTests 59.0s 938d99384

@dosubot dosubot bot added the lgtm This PR has been approved by a maintainer label Jan 16, 2026
@pepicrft pepicrft merged commit ee74ac6 into main Jan 16, 2026
17 of 21 checks passed
@pepicrft pepicrft deleted the fix/static-framework-embedding branch January 16, 2026 15:22
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lgtm This PR has been approved by a maintainer size:M For issues that take a handful of hours to implement type:bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants