diff --git a/.github/workflows/test-suite-brownfield-isolated.yml b/.github/workflows/test-suite-brownfield-isolated.yml index f3ecace4b08667..9f61f006ac0bfb 100644 --- a/.github/workflows/test-suite-brownfield-isolated.yml +++ b/.github/workflows/test-suite-brownfield-isolated.yml @@ -206,7 +206,7 @@ jobs: - name: 🍏 Build iOS artifacts (apps/brownfield-tester/expo-app) run: | npx expo prebuild --clean -p ios - npx expo-brownfield build:ios --${{ matrix.build-type }} --verbose -a ../../../artifacts + npx expo-brownfield build:ios --${{ matrix.build-type }} --verbose -a ../../../artifacts -p BrownfieldPackage working-directory: apps/brownfield-tester/expo-app - name: 💾 Save ccache if: always() @@ -214,7 +214,7 @@ jobs: with: path: ${{ runner.temp }}/.ccache key: ${{ steps.ccache-restore.outputs.cache-primary-key }} - - name: 🔨 Add XCFrameworks to SwiftUI project + - name: 🔨 Add brownfield Swift Package to the app run: ruby packages/expo-brownfield/e2e/scripts/add_xcframeworks.rb - name: 🍺 Install Maestro run: | diff --git a/apps/bare-expo/e2e/expo-video/playback-test.yaml b/apps/bare-expo/e2e/expo-video/playback-test.yaml index 871755cba9eebf..c780f57e19f321 100644 --- a/apps/bare-expo/e2e/expo-video/playback-test.yaml +++ b/apps/bare-expo/e2e/expo-video/playback-test.yaml @@ -8,7 +8,7 @@ jsEngine: graaljs - assertVisible: 'source = Big Buck Bunny' - assertVisible: 'isPlaying = false' - assertVisible: 'isAtStart = true' -- assertVisible: 'duration = 596' +- assertVisible: 'duration = 634' - assertVisible: 'currentTime = 0' - assertVisible: 'mimeType = video/avc' - assertVisible: 'isSupported = true' diff --git a/apps/bare-expo/e2e/expo-video/screenshots/pip-1/pip-view.base.android.png b/apps/bare-expo/e2e/expo-video/screenshots/pip-1/pip-view.base.android.png index 84f17163f5e00e..b7b80173a91dc5 100644 Binary files a/apps/bare-expo/e2e/expo-video/screenshots/pip-1/pip-view.base.android.png and b/apps/bare-expo/e2e/expo-video/screenshots/pip-1/pip-view.base.android.png differ diff --git a/apps/bare-expo/e2e/expo-video/screenshots/playback-test-1/video-view.base.android.png b/apps/bare-expo/e2e/expo-video/screenshots/playback-test-1/video-view.base.android.png index d8e17b62e9f583..a9593351fcd2ee 100644 Binary files a/apps/bare-expo/e2e/expo-video/screenshots/playback-test-1/video-view.base.android.png and b/apps/bare-expo/e2e/expo-video/screenshots/playback-test-1/video-view.base.android.png differ diff --git a/apps/bare-expo/e2e/expo-video/screenshots/playback-test-1/video-view.base.ios.png b/apps/bare-expo/e2e/expo-video/screenshots/playback-test-1/video-view.base.ios.png index c15e422c0719a3..e47564e9bd6183 100644 Binary files a/apps/bare-expo/e2e/expo-video/screenshots/playback-test-1/video-view.base.ios.png and b/apps/bare-expo/e2e/expo-video/screenshots/playback-test-1/video-view.base.ios.png differ diff --git a/apps/bare-expo/e2e/expo-video/screenshots/player-output-1/view-player-output.base.android.png b/apps/bare-expo/e2e/expo-video/screenshots/player-output-1/view-player-output.base.android.png index c4f6e170788d68..7b7da57bd8ba2d 100644 Binary files a/apps/bare-expo/e2e/expo-video/screenshots/player-output-1/view-player-output.base.android.png and b/apps/bare-expo/e2e/expo-video/screenshots/player-output-1/view-player-output.base.android.png differ diff --git a/apps/bare-expo/e2e/expo-video/screenshots/player-output-1/view-player-output.base.ios.png b/apps/bare-expo/e2e/expo-video/screenshots/player-output-1/view-player-output.base.ios.png index ac73f44415ce4c..696f2e69e20f25 100644 Binary files a/apps/bare-expo/e2e/expo-video/screenshots/player-output-1/view-player-output.base.ios.png and b/apps/bare-expo/e2e/expo-video/screenshots/player-output-1/view-player-output.base.ios.png differ diff --git a/apps/bare-expo/e2e/expo-video/screenshots/player-output-2/view-player-output.base.android.png b/apps/bare-expo/e2e/expo-video/screenshots/player-output-2/view-player-output.base.android.png index 6ef080f50863f6..7d5962d3606b32 100644 Binary files a/apps/bare-expo/e2e/expo-video/screenshots/player-output-2/view-player-output.base.android.png and b/apps/bare-expo/e2e/expo-video/screenshots/player-output-2/view-player-output.base.android.png differ diff --git a/apps/bare-expo/e2e/expo-video/screenshots/player-output-2/view-player-output.base.ios.png b/apps/bare-expo/e2e/expo-video/screenshots/player-output-2/view-player-output.base.ios.png index 1fc2985feb49f6..7adaf7a7c091b3 100644 Binary files a/apps/bare-expo/e2e/expo-video/screenshots/player-output-2/view-player-output.base.ios.png and b/apps/bare-expo/e2e/expo-video/screenshots/player-output-2/view-player-output.base.ios.png differ diff --git a/apps/bare-expo/e2e/expo-video/screenshots/player-output-4/view-player-output.base.android.png b/apps/bare-expo/e2e/expo-video/screenshots/player-output-4/view-player-output.base.android.png index 9f0537517f528c..1d9d6e2b2ba79f 100644 Binary files a/apps/bare-expo/e2e/expo-video/screenshots/player-output-4/view-player-output.base.android.png and b/apps/bare-expo/e2e/expo-video/screenshots/player-output-4/view-player-output.base.android.png differ diff --git a/apps/bare-expo/e2e/expo-video/screenshots/player-output-4/view-player-output.base.ios.png b/apps/bare-expo/e2e/expo-video/screenshots/player-output-4/view-player-output.base.ios.png index f6f09c73f1dd60..4bfc469a33140d 100644 Binary files a/apps/bare-expo/e2e/expo-video/screenshots/player-output-4/view-player-output.base.ios.png and b/apps/bare-expo/e2e/expo-video/screenshots/player-output-4/view-player-output.base.ios.png differ diff --git a/apps/bare-expo/e2e/expo-video/screenshots/surface-type-1/surface-type-test.base.android.png b/apps/bare-expo/e2e/expo-video/screenshots/surface-type-1/surface-type-test.base.android.png index 103489b492e246..6cdcb4c082024c 100644 Binary files a/apps/bare-expo/e2e/expo-video/screenshots/surface-type-1/surface-type-test.base.android.png and b/apps/bare-expo/e2e/expo-video/screenshots/surface-type-1/surface-type-test.base.android.png differ diff --git a/apps/brownfield-tester/expo-app/app.json b/apps/brownfield-tester/expo-app/app.json index efb848dd2c5f74..21367bac72939a 100644 --- a/apps/brownfield-tester/expo-app/app.json +++ b/apps/brownfield-tester/expo-app/app.json @@ -37,7 +37,14 @@ } } ], - "expo-brownfield" + [ + "expo-brownfield", + { + "ios": { + "usePrebuiltReactNative": true + } + } + ] ], "experiments": { "typedRoutes": true, diff --git a/apps/native-component-list/src/screens/Audio/AudioControlsScreen.tsx b/apps/native-component-list/src/screens/Audio/AudioControlsScreen.tsx index bda50992a9a231..2fa41818ae0d1a 100644 --- a/apps/native-component-list/src/screens/Audio/AudioControlsScreen.tsx +++ b/apps/native-component-list/src/screens/Audio/AudioControlsScreen.tsx @@ -17,8 +17,7 @@ const artworkUrl1 = 'https://images.unsplash.com/photo-1549138144-42ff3cdd2bf8?q=80&w=3504&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D'; const artworkUrl2 = 'https://images.unsplash.com/photo-1549228167-511375f69159?q=80&w=3676&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D'; -const remoteSource = - 'https://p.scdn.co/mp3-preview/f7a8ab9c5768009b65a30e9162555e8f21046f46?cid=162b7dc01f3a4a2ca32ed3cec83d1e02'; +const remoteSource = 'https://expo-test-media.com/audio/por_una_cabeza.mp3'; const localSource = require('../../../assets/sounds/polonez.mp3'); enum LockScreenButton { diff --git a/apps/native-component-list/src/screens/Audio/AudioPlayer.tsx b/apps/native-component-list/src/screens/Audio/AudioPlayer.tsx index 664514d9d33c85..9c26984f234e22 100644 --- a/apps/native-component-list/src/screens/Audio/AudioPlayer.tsx +++ b/apps/native-component-list/src/screens/Audio/AudioPlayer.tsx @@ -13,8 +13,7 @@ type AudioPlayerProps = { }; const localSource = require('../../../assets/sounds/polonez.mp3'); -const remoteSource = - 'https://p.scdn.co/mp3-preview/f7a8ab9c5768009b65a30e9162555e8f21046f46?cid=162b7dc01f3a4a2ca32ed3cec83d1e02'; +const remoteSource = 'https://expo-test-media.com/audio/por_una_cabeza.mp3'; export default function AudioPlayer({ source, diff --git a/apps/native-component-list/src/screens/Audio/AudioPlayerScreen.tsx b/apps/native-component-list/src/screens/Audio/AudioPlayerScreen.tsx index 2e0fec7cd3e62d..1cfca3fef0c551 100644 --- a/apps/native-component-list/src/screens/Audio/AudioPlayerScreen.tsx +++ b/apps/native-component-list/src/screens/Audio/AudioPlayerScreen.tsx @@ -24,7 +24,7 @@ export default function AudioScreen(props: any) { HTTP player Remote asset with downloadFirst }) { diff --git a/apps/native-component-list/src/screens/Video/videoSources.ts b/apps/native-component-list/src/screens/Video/videoSources.ts index d613af08c85c51..c8829137abe22d 100644 --- a/apps/native-component-list/src/screens/Video/videoSources.ts +++ b/apps/native-component-list/src/screens/Video/videoSources.ts @@ -17,38 +17,47 @@ export const seekOptimizedSource: VideoSource = { metadata: { title: 'Tola running (seek optimized)', artist: - "This video has been optimized for seeking by exoirting all of it's frames as keyframes", + "This video has been optimized for seeking by exporting all of it's frames as keyframes", }, }; +// Fallback: https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 const bigBuckBunnySource: VideoSource = { - // backup at https://github.com/vonovak/expo-video-tests/releases/tag/v0 - uri: 'https://archive.org/download/BigBuckBunny_124/Content/big_buck_bunny_720p_surround.mp4', + uri: 'https://expo-test-media.com/big_buck_bunny/bbb_720p.mp4', metadata: { title: 'Big Buck Bunny', artist: 'The Open Movie Project', - artwork: - 'https://upload.wikimedia.org/wikipedia/commons/thumb/c/c5/Big_buck_bunny_poster_big.jpg/1200px-Big_buck_bunny_poster_big.jpg', + artwork: 'https://expo-test-media.com/big_buck_bunny/artwork.jpg', }, }; +// Fallback: https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4 const elephantsDreamSource: VideoSource = { - // backup at https://github.com/vonovak/expo-video-tests/releases/tag/v0 - uri: 'https://archive.org/download/ElephantsDream/ed_1024.mp4', + uri: 'https://expo-test-media.com/elephants_dream/ed_720p.mp4', metadata: { title: 'Elephants Dream', artist: 'Blender Foundation', - artwork: 'https://upload.wikimedia.org/wikipedia/commons/0/0c/ElephantsDreamPoster.jpg', + artwork: 'https://expo-test-media.com/elephants_dream/artwork.jpg', }, }; +// Fallback https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/hls/TearsOfSteel.m3u8 export const hlsSource: VideoSource = { - uri: 'https://devstreaming-cdn.apple.com/videos/streaming/examples/adv_dv_atmos/main.m3u8', + uri: 'https://expo-test-media.com/tos_hls/master.m3u8', metadata: { - title: 'Becoming You Trailer', - artist: 'Apple', - artwork: - 'https://www.apple.com/tv-pr/shows-and-films/b/becoming-you/images/show-home-graphic-header/4x1/Apple_TV_Becoming_You_key_art_graphic_header_4_1_show_home.jpg.og.jpg?1659052681724', + title: 'Tears Of Steel', + artist: 'Blender Foundation', + artwork: 'https://expo-test-media.com/tos_hls/artwork.jpg', + }, +}; + +// Fallback: https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/dash/TearsOfSteel.mpd +export const dashSource: VideoSource = { + uri: 'https://expo-test-media.com/tos_dash/manifest.mpd', + metadata: { + title: 'Tears Of Steel', + artist: 'Blender Foundation', + artwork: 'https://expo-test-media.com/tos_dash/artwork.jpg', }, }; @@ -103,14 +112,18 @@ const forBiggerBlazesSource: VideoSource = { // source: https://reference.dashif.org/dash.js/latest/samples/drm/widevine.html const androidDrmSource: VideoSource = { - uri: 'https://bitmovin-a.akamaihd.net/content/sintel/hls/playlist.m3u8', + uri: 'https://expo-test-media.com/tos_widevine/manifest.mpd', + drm: { + licenseServer: 'https://cwip-shaka-proxy.appspot.com/no_auth', + type: 'widevine', + }, }; const videoLabels: string[] = [ 'Big Buck Bunny', 'Elephants Dream', 'For Bigger Blazes', - 'Becoming You (HLS)', + 'Tears Of Steel (HLS)', 'Cute Doggo (local video)', 'Null Source', 'Audio Track', diff --git a/docs/pages/additional-resources/index.mdx b/docs/pages/additional-resources/index.mdx index b21aae78176689..17d4a6baa8eed4 100644 --- a/docs/pages/additional-resources/index.mdx +++ b/docs/pages/additional-resources/index.mdx @@ -1,5 +1,5 @@ --- -modificationDate: February 2, 2026 +modificationDate: March 2, 2026 title: Additional resources description: A reference of resources that are useful to learn about Expo tooling and services. --- diff --git a/docs/pages/deploy/build-project.mdx b/docs/pages/deploy/build-project.mdx index 37b9033167558b..bb49e24e8b8223 100644 --- a/docs/pages/deploy/build-project.mdx +++ b/docs/pages/deploy/build-project.mdx @@ -123,7 +123,7 @@ The workflow above will create Android and iOS builds on every commit to your pr -Learn more about common patterns with the [workflows examples guide](/eas/workflows/examples). +Learn more about common patterns with the [workflows examples guide](/eas/workflows/examples/introduction). ## Release builds locally diff --git a/docs/pages/deploy/send-over-the-air-updates.mdx b/docs/pages/deploy/send-over-the-air-updates.mdx index 55944bf38b1d0b..bd4251e707f821 100644 --- a/docs/pages/deploy/send-over-the-air-updates.mdx +++ b/docs/pages/deploy/send-over-the-air-updates.mdx @@ -50,7 +50,7 @@ The workflow above will send an over-the-air update for the `production` update -Learn more about common patterns with the [workflows examples guide](/eas/workflows/examples). +Learn more about common patterns with the [workflows examples guide](/eas/workflows/examples/introduction). ## Learn more diff --git a/docs/pages/deploy/submit-to-app-stores.mdx b/docs/pages/deploy/submit-to-app-stores.mdx index 32222ac29ca98f..c70580e743ee71 100644 --- a/docs/pages/deploy/submit-to-app-stores.mdx +++ b/docs/pages/deploy/submit-to-app-stores.mdx @@ -159,7 +159,7 @@ The workflow above will create Android and iOS builds on every commit to your pr -Learn more about common patterns with the [workflows examples guide](/eas/workflows/examples). +Learn more about common patterns with the [workflows examples guide](/eas/workflows/examples/introduction). ## Manual submission to app stores diff --git a/docs/pages/deploy/web.mdx b/docs/pages/deploy/web.mdx index 8ad545e4bafe48..f197f6aa90c011 100644 --- a/docs/pages/deploy/web.mdx +++ b/docs/pages/deploy/web.mdx @@ -61,7 +61,7 @@ The workflow above will create a web deployment on every commit to your project' -Learn more about common patterns with the [workflows examples guide](/eas/workflows/examples). +Learn more about common patterns with the [workflows examples guide](/eas/workflows/examples/introduction). ## Learn more diff --git a/docs/pages/eas/workflows/automating-eas-cli.mdx b/docs/pages/eas/workflows/automating-eas-cli.mdx index 4772a0928a7005..679f678305ea9b 100644 --- a/docs/pages/eas/workflows/automating-eas-cli.mdx +++ b/docs/pages/eas/workflows/automating-eas-cli.mdx @@ -119,7 +119,7 @@ You can provide parameters to update specific branches or channels, and configur Workflows are a powerful way to automate your development and release processes. Learn how to create development builds, publish preview updates, and create production builds with the workflows examples guide: -Learn more about common patterns with the [workflows examples guide](/eas/workflows/examples). +Learn more about common patterns with the [workflows examples guide](/eas/workflows/examples/introduction). ## Learn more diff --git a/docs/pages/versions/v55.0.0/sdk/navigation-bar.mdx b/docs/pages/versions/v55.0.0/sdk/navigation-bar.mdx index bed1b04a693d67..0393f9250ef7d1 100644 --- a/docs/pages/versions/v55.0.0/sdk/navigation-bar.mdx +++ b/docs/pages/versions/v55.0.0/sdk/navigation-bar.mdx @@ -16,8 +16,6 @@ import { `expo-navigation-bar` enables you to modify and observe the native navigation bar on Android devices. Due to some Android platform restrictions, parts of this API overlap with the `expo-status-bar` API. -Properties are named after style properties; visibility, position, backgroundColor, borderColor, and so on. - The APIs in this package have no impact when "Gesture Navigation" is enabled on the Android device. There is currently no native Android API to detect if "Gesture Navigation" is enabled or not. ## Installation @@ -37,12 +35,9 @@ You can configure `expo-navigation-bar` using its built-in [config plugin](/conf [ "expo-navigation-bar", { - "backgroundColor": "#0f172a", + "enforceContrast": true, "barStyle": "light", - "borderColor": "#1f2937", - "visibility": "visible", - "behavior": "inset-swipe", - "position": "relative" + "visibility": "visible" } ] ] @@ -55,10 +50,10 @@ You can configure `expo-navigation-bar` using its built-in [config plugin](/conf