Prevent cached frameworks from crashing in Previews after deleting derived data #6035
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 fixes another crash in Previews when using frameworks with resources after deleting derived data.
Short description π
This crash happens when the framework has never been built from sources by Previews. In this scenario the resource bundles are only contained within the framework that is being previewed. The solution proposal here does shallow enumeration of the contents of
PACKAGE_RESOURCE_BUNDLE_PATH
and adds all.framework
directories to candidates as we don't know which framework is the one being previewed.The worst case here is that we look into a few unnecessary directories when running Previews.
Hopefully this is the final fix for these obscure crashes. π
How to test the changes locally π§
rm -rf ~/Library/Developer/Xcode/DerivedData
cd fixtures/app_with_previews
tuist install
tuist cache
tuist generate PreviewsFramework
TestView.swift
in Previews and tap the button and it will crash as it cannot find the bundle forResourcesFramework
Contributor checklist β
mise run lint:fix
Reviewer checklist β
changelog:added
,changelog:fixed
, orchangelog:changed
, and the title is usable as a changelog entry