fix: Previews crash when accessing resources from cached XCFrameworks #6028
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.
This is continuation of #6008.
Short description 📝
SPM has the
#if DEBUG
guard within whichProcessInfo
is used. It works because SPM doesn't precompile anything, so compiling the bundle accessor happens with debug configuration.However, if you run
tuist cache
for all dependencies and thentuist generate SomeFramework
, it will cause a crash when running Previews astuist cache
builds for release mode and resulting code will bypass this check. It still works with the previous implementation if runningtuist generate SomeFramework DependencyWithResources
, but that defeats the point of caching and makes using Previews less predictable.While I wanted to stay as close to the original SPM implementation as possible, I don't think there is any harm in checking for this environment variable in release configuration either. It will simply be not set.
How to test the changes locally 🧐
cd fixtures/app_with_previews
tuist install
tuist cache
tuist generate PreviewsFramework
TestView.swift
and tap on the button in Previews and it will crashContributor checklist ✅
mise run lint:fix
Reviewer checklist ✅
changelog:added
,changelog:fixed
, orchangelog:changed
, and the title is usable as a changelog entry