Conversation
# Why Several SwiftUI modifiers paint an area with a `ShapeStyle`: `foregroundStyle`, `background`, shape fills. Expo UI described that vocabulary once, inside `ForegroundStyleModifier`, in a form nothing else could reuse – a flat record plus two near-identical `switch` statements, one returning a `View` and one a `Text`. Adding the same styles to `background` meant copying both. # How `ShapeStyleValue` resolves a style into a single `AnyShapeStyle`. The erasure is what makes sharing possible: an opaque `some ShapeStyle` has to be one concrete type across every branch, and an existential `any ShapeStyle` cannot escape into the result of `background(_:)` or `foregroundStyle(_:)`, so a style chosen at runtime cannot be returned any other way. `AnyShapeStyle` is available since iOS 15, below the package's 16.4 minimum. `foregroundStyle` now delegates to it and shrinks from 125 lines to 34. Its public union is unchanged except for a new `material` variant, so existing calls keep working; the payload nests under a `style` key, which is what the two updated tests assert. Materials cover the five thickness levels and `bar`. `bar` has no tvOS counterpart and `quinary` needs tvOS 17; both leave the view untouched there rather than failing, since the same JS runs on every platform and the modifier array is rebuilt on each render. # Test Plan Added a "Material foreground style" section to the modifiers screen in native-component-list: text painted with a material over a gradient-filled rectangle. Verified in bare-expo on the iOS simulator. `et check-packages @expo/ui` passes, the app builds (`BUILD SUCCEEDED`) and the package tests pass (24 suites, 129 tests). # Checklist - [x] I added a `changelog.md` entry and rebuilt the package sources - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build - [x] Conforms with the Documentation Writing Style Guide Co-authored-by: nishan (o^▽^o) <nishanbende@gmail.com>
…` headers (#49203) # Why A prebuilt pod's headers only exist inside its XCFramework. CocoaPods populates `Pods/Headers/Public/<Pod>` only while a pod builds from source. This can cause errors with `headers not found` when combining source built and prebuilt pods. This is an addition and complimentary fix to #49147. # How Walk the CocoaPods dependency graph and append each prebuilt dependency's XCFramework header directories to the HEADER_SEARCH_PATHS of the source-built pods that depend on it. Add skip list to avoid injecting header search paths for pods that gets their search paths injected by other mechanisms (ExpoModulesCore, React**). # Reproduction - Create Expo app with expo-router - Use prebuilt 3rd party xcframeworks like we do in EAS build (EXPO_PRECOMPILED_MODULES_BASE_URL) - Set RNGH to build as source (causes it to try to look for header files in the `Pods/Headers/Public` for Worklets which is prebuilt **Observe**: Result: exit 65, 'worklets/Compat/StableApi.h' file not found at RNGHRuntimeDecorator.cpp:11 # Test Plan ✅ Run the same as the reproduction above ✅ Run the reproduction above - with `use_frameworks!` (dynamic/static) # Checklist - [x] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [x] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com> Co-authored-by: Expo Bot <34669131+expo-bot@users.noreply.github.com>
…eplacing them (#49504) # Why Follow up from the review of #49458 assets.key is unique, and addNewAssets inserted with INSERT OR REPLACE. On a key conflict, the REPLACE deletes the existing row before inserting, and we run with foreign keys enforced, so the delete cascades. Any update using that asset as its launch asset is deleted through updates.launch_asset_id ON DELETE CASCADE, and every other update sharing the asset loses its updates_assets rows. One registration can silently erase or gut updates it has nothing to do with. # How When registering a new asset whose key already exists, adopt the existing row instead of replacing it. addNewAssetsInternal now calls the existing addExistingAsset first, which links the join row and sets launch_asset_id when flagged, and only falls through to the insert when the key is absent. The check runs inside the registration transaction, so it cannot race. The insert itself drops OR REPLACE, so any conflict that could still occur aborts the transaction rather than deleting rows. # Test Plan New tests in UpdatesDatabaseTests
…of replacing them (#49505) # Why Same issue as the pr below but for android # How insertAssets already runs as a @transaction, so it now calls the existing addExistingAssetToUpdate first, which adopts the row, links it, and sets the launch asset when flagged # Test Plan New tests in UpdatesDatabaseTest
…ing the layer hierarchy (#49372)
…s, other) (#49581) Automated upstream sync of generated reference content. | Generator | Status | | --- | --- | | App config schema | ➖ No changes | | Expo Skills | ✅ Synced | | EAS CLI reference | ✅ Synced | | Android permissions | ➖ No changes | ## Files - `docs/pages/eas/cli.mdx` - `docs/ui/components/EASCLIReference/data/eas-cli-commands.json` - `docs/ui/components/ExpoSkillsTable/data/expo-skills.json` Co-authored-by: Expo Bot <expo-bot@users.noreply.github.com>
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )