diff --git a/.github/codemention.yml b/.github/codemention.yml index d49b71057a6ed8..32e087bedcb9d1 100644 --- a/.github/codemention.yml +++ b/.github/codemention.yml @@ -93,7 +93,7 @@ rules: - patterns: ['packages/expo-constants/**'] mentions: ['wschurman', 'brentvatne'] - patterns: ['packages/expo-contacts/**'] - mentions: ['EvanBacon'] + mentions: ['Wenszel'] - patterns: ['packages/expo-crypto/**'] mentions: ['EvanBacon', 'barthap'] - patterns: ['packages/expo-dev-client/**'] @@ -147,7 +147,7 @@ rules: - patterns: ['packages/expo-manifests/**'] mentions: ['wschurman'] - patterns: ['packages/expo-media-library/**'] - mentions: ['behenate', 'alanjhughes'] + mentions: ['Wenszel', 'alanjhughes'] - patterns: ['packages/expo-mesh-gradient/**'] mentions: ['jakex7'] - patterns: ['packages/expo-module-scripts/**'] diff --git a/.github/workflows/brownfield.yml b/.github/workflows/brownfield.yml index b4359e9826c3d4..ef798151ce816a 100644 --- a/.github/workflows/brownfield.yml +++ b/.github/workflows/brownfield.yml @@ -291,6 +291,51 @@ jobs: with: bundler-cache: true ruby-version: 3.2.2 + - name: 🔄 Setup ccache + run: | + brew install ccache + + # In order to use ccache with Xcode, unlike on Android, we can't just change env variables - we need to change PATH. + MKDIR_PATH=$HOME/.ccache_bin + mkdir -p $MKDIR_PATH + ln -sf $(which ccache) $MKDIR_PATH/clang + ln -sf $(which ccache) $MKDIR_PATH/clang++ + ln -sf $(which ccache) $MKDIR_PATH/cc + ln -sf $(which ccache) $MKDIR_PATH/c++ + echo "$MKDIR_PATH" >> $GITHUB_PATH + echo "CC=$MKDIR_PATH/clang" >> $GITHUB_ENV + echo "CXX=$MKDIR_PATH/clang++" >> $GITHUB_ENV + echo "LD=$MKDIR_PATH/clang++" >> $GITHUB_ENV + echo "LDPLUSPLUS=$MKDIR_PATH/clang++" >> $GITHUB_ENV + + # By default ccache includes mtime of a compiler in hashes, for each CI run mtime varies. + echo "CCACHE_COMPILERCHECK=content" >> $GITHUB_ENV + + # It must be the same as in .github/actions/expo-caches/action.yml + echo "CCACHE_DIR=${{ runner.temp }}/.ccache" >> $GITHUB_ENV + + # Sloppiness options disable some of the ccache checks to increase hit rate. + # We exclude ctime and mtime so the cache is hit based on file content. + # time_macros might help if in included modules there are macros like __TIME__ which would trigger a cache miss. + # modules, clang_index_store, system_headers, and ivfsoverlay are Xcode-specific options. + echo "CCACHE_SLOPPINESS=include_file_mtime,include_file_ctime,time_macros,modules,clang_index_store,system_headers,ivfsoverlay" >> $GITHUB_ENV + + # Speeds up the process on cache misses by skipping the preprocessing step. + echo "CCACHE_DEPEND=true" >> $GITHUB_ENV + + # Speeds up copying files on cache hits; natively supported by macOS APFS. + echo "CCACHE_FILECLONE=true" >> $GITHUB_ENV + - name: ♻️ Restore ccache + id: ccache-restore + uses: actions/cache/restore@v4 + with: + path: ${{ runner.temp }}/.ccache + key: ccache-ios-brownfield-${{ hashFiles('yarn.lock', '**/Podfile.lock') }}-${{ github.sha }} + restore-keys: | + ccache-ios-brownfield-${{ hashFiles('yarn.lock', '**/Podfile.lock') }}- + ccache-ios-brownfield- + - name: 🔄 Reset ccache statistics + run: ccache -z - name: ♻️ Restore caches uses: ./.github/actions/expo-caches id: expo-caches @@ -310,6 +355,14 @@ jobs: - name: 🍏 Build iOS artifacts (Debug) run: npx expo-brownfield build:ios --debug --verbose working-directory: apps/brownfield-tester/expo-app + - name: 💾 Save ccache + if: always() + uses: actions/cache/save@v4 + with: + path: ${{ runner.temp }}/.ccache + key: ${{ steps.ccache-restore.outputs.cache-primary-key }} + - name: Show ccache stats + run: ccache -s -v - name: 🔔 Notify on Slack uses: ./.github/actions/slack-notify if: failure() && (github.event.ref == 'refs/heads/main' || startsWith(github.event.ref, 'refs/heads/sdk-')) diff --git a/apps/bare-expo/ios/Podfile.lock b/apps/bare-expo/ios/Podfile.lock index e0337023b94de9..7a0ec5fed663a9 100644 --- a/apps/bare-expo/ios/Podfile.lock +++ b/apps/bare-expo/ios/Podfile.lock @@ -2947,7 +2947,7 @@ PODS: - ReactNativeDependencies - RNWorklets - Yoga - - RNScreens (4.23.0): + - RNScreens (4.24.0): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2969,9 +2969,9 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - ReactNativeDependencies - - RNScreens/common (= 4.23.0) + - RNScreens/common (= 4.24.0) - Yoga - - RNScreens/common (4.23.0): + - RNScreens/common (4.24.0): - hermes-engine - RCTRequired - RCTTypeSafety @@ -3885,7 +3885,7 @@ SPEC CHECKSUMS: EXUpdates: bb7f327834c1663bb138a44e4b9e03b1c4acd657 EXUpdatesInterface: 29d3993072380e2d91188335ffef666bb2bfd650 FBLazyVector: 32e9ed0301d0fcbc1b2b341dd7fcbf291f51eb83 - hermes-engine: 1566042511e927d64254f2efe08ae744a5eb9a00 + hermes-engine: 32f15eb56763138f43fea0c89fe160318f47f5b5 libavif: 84bbb62fb232c3018d6f1bab79beea87e35de7b7 libdav1d: 23581a4d8ec811ff171ed5e2e05cd27bad64c39f libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 @@ -3903,7 +3903,7 @@ SPEC CHECKSUMS: React: f4edc7518ccb0b54a6f580d89dd91471844b4990 React-callinvoker: 79ef4e3f1c021571f6d2dafbe45ca432b2f3a146 React-Core: 469995a2b6ef0ffff38ed123ccd202287703939e - React-Core-prebuilt: e71199b350bcaeade83eea6e463e818dcc46d718 + React-Core-prebuilt: 3ad7030e5e3f741d62bbfc5c8cf9eabb96310a10 React-CoreModules: db3b65cb984dfc7e0b00db517712cff8d938fc3f React-cxxreact: 8551bebcc6bc624ce774dccae20c383844aa9d06 React-debug: 4f6739c820d7da9c20f48caa985573b6a847e5f5 @@ -3973,14 +3973,14 @@ SPEC CHECKSUMS: ReactAppDependencyProvider: 1976cdf5076a7e34718a56ead2f2069c7f54ebe9 ReactCodegen: 4e2863f450e4aec6b66a7e91d41a209aa4601c97 ReactCommon: 696163beb1630cf1f7590dbc8bfc542e40bdbe76 - ReactNativeDependencies: d804b447c01215d21137868e3b5b5a920fc9f7f4 + ReactNativeDependencies: fc06a98e1cc602a110da5a24971e0fce1ddece5e RNCAsyncStorage: e85a99325df9eb0191a6ee2b2a842644c7eb29f4 RNCMaskedView: 3c9d7586e2b9bbab573591dcb823918bc4668005 RNCPicker: e0149590451d5eae242cf686014a6f6d808f93c7 RNDateTimePicker: 5e0666de98f1edfac67ee7dde6be8a5415e487a0 RNGestureHandler: 8e4a9372425d4caa9e3da5072a8dda7a54ed1097 RNReanimated: 61462806110686a6f5d7c45c6f910cf73cd57dd9 - RNScreens: fb11b7412bcbdc0ffafcaf9174938d998d4e2bc4 + RNScreens: 088d923c4327c63c9f8c942cae17a9d038f47d97 RNSVG: b5bd4454de003a99d3130a3c6a1b1c949c89d37d RNWorklets: 87faff8e75d34d1240c75189e490e92901dd3544 SDWebImage: f29024626962457f3470184232766516dee8dfea diff --git a/apps/bare-expo/package.json b/apps/bare-expo/package.json index 08337bb843da0e..6e8d0d0a9fc093 100644 --- a/apps/bare-expo/package.json +++ b/apps/bare-expo/package.json @@ -76,7 +76,7 @@ "react-native-reanimated": "4.2.1", "react-native-safe-area-context": "5.6.2", "react-native-svg": "15.15.3", - "react-native-screens": "4.23.0", + "react-native-screens": "4.24.0", "react-native-view-shot": "4.0.3", "react-native-webview": "13.16.0", "react-native-worklets": "0.7.2", diff --git a/apps/brownfield-tester/expo-app/package.json b/apps/brownfield-tester/expo-app/package.json index 28a97b76afc005..9c2043a5d1d1f9 100644 --- a/apps/brownfield-tester/expo-app/package.json +++ b/apps/brownfield-tester/expo-app/package.json @@ -35,7 +35,7 @@ "react-native-worklets": "0.7.2", "react-native-reanimated": "~4.2.1", "react-native-safe-area-context": "~5.6.2", - "react-native-screens": "~4.23.0", + "react-native-screens": "~4.24.0", "react-native-web": "~0.21.0" }, "devDependencies": { diff --git a/apps/expo-go/ios/Podfile.lock b/apps/expo-go/ios/Podfile.lock index 4b50976605083b..03134d9806aa1a 100644 --- a/apps/expo-go/ios/Podfile.lock +++ b/apps/expo-go/ios/Podfile.lock @@ -3732,7 +3732,7 @@ PODS: - RNWorklets - SocketRocket - Yoga - - RNScreens (4.23.0): + - RNScreens (4.24.0): - boost - DoubleConversion - fast_float @@ -3759,10 +3759,10 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNScreens/common (= 4.23.0) + - RNScreens/common (= 4.24.0) - SocketRocket - Yoga - - RNScreens/common (4.23.0): + - RNScreens/common (4.24.0): - boost - DoubleConversion - fast_float @@ -4759,7 +4759,7 @@ SPEC CHECKSUMS: GoogleAppMeasurement: 8a82b93a6400c8e6551c0bcd66a9177f2e067aed GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d - hermes-engine: d59202edb9173c808259b0945bb161d1e24963f0 + hermes-engine: 4fd957b81383719d07171a90988b689b845cb9c5 libavif: 84bbb62fb232c3018d6f1bab79beea87e35de7b7 libdav1d: 23581a4d8ec811ff171ed5e2e05cd27bad64c39f libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 @@ -4857,7 +4857,7 @@ SPEC CHECKSUMS: RNDateTimePicker: e9e210197c267461f70f3f47bec705401ff72077 RNGestureHandler: 77eecab5fd636666ca73a55bb61e2f1a685b7e84 RNReanimated: 31da8d5f1605f5367e2392748ba9f4ba6eaf1178 - RNScreens: ec8bdc9f024d5828e5adf4f5e8870d5260cff616 + RNScreens: 7179cc1ba31b4e18ed29f10abf20c24a7961cf4c RNSVG: 8744ec9d5c0ca0f51cdd7a577c30ce01cd3d76b0 RNWorklets: 8e934a6b6d5a2710b9250e63a18a2d2f8b875a18 SDWebImage: f29024626962457f3470184232766516dee8dfea diff --git a/apps/expo-go/package.json b/apps/expo-go/package.json index b6f360afe2e335..2f12167371aaf4 100644 --- a/apps/expo-go/package.json +++ b/apps/expo-go/package.json @@ -78,7 +78,7 @@ "react-native-reanimated": "4.2.1", "react-native-safe-area-context": "5.6.2", "react-native-svg": "15.15.3", - "react-native-screens": "4.23.0", + "react-native-screens": "4.24.0", "react-native-view-shot": "4.0.3", "react-native-webview": "13.16.0", "react-native-worklets": "0.7.2", diff --git a/apps/native-component-list/package.json b/apps/native-component-list/package.json index c7ad34cebc4249..12e453bcae36fd 100644 --- a/apps/native-component-list/package.json +++ b/apps/native-component-list/package.json @@ -153,7 +153,7 @@ "react-native-reanimated": "4.2.1", "react-native-safe-area-context": "5.6.2", "react-native-svg": "15.15.3", - "react-native-screens": "4.23.0", + "react-native-screens": "4.24.0", "react-native-view-shot": "4.0.3", "react-native-web": "~0.21.0", "react-native-webview": "13.16.0", diff --git a/apps/native-component-list/src/screens/NavigationBarScreen.tsx b/apps/native-component-list/src/screens/NavigationBarScreen.tsx index 54f4b8bbe9ab77..efd985c38a8640 100644 --- a/apps/native-component-list/src/screens/NavigationBarScreen.tsx +++ b/apps/native-component-list/src/screens/NavigationBarScreen.tsx @@ -1,41 +1,9 @@ import * as NavigationBar from 'expo-navigation-bar'; import * as React from 'react'; import { Platform, ScrollView, Text } from 'react-native'; -import { useSafeAreaFrame, useSafeAreaInsets } from 'react-native-safe-area-context'; import Button from '../components/Button'; import { Page, Section } from '../components/Page'; -import { getRandomColor } from '../utilities/getRandomColor'; - -function usePosition(): [ - NavigationBar.NavigationBarPosition | null, - (position: NavigationBar.NavigationBarPosition) => void, -] { - const [position, setPosition] = React.useState(null); - - React.useEffect(() => { - let isMounted = true; - NavigationBar.unstable_getPositionAsync().then((position) => { - if (isMounted) { - setPosition(position); - } - }); - - return () => { - isMounted = false; - }; - }, []); - - const setNewPosition = React.useCallback( - (position: NavigationBar.NavigationBarPosition) => { - NavigationBar.setPositionAsync(position); - setPosition(position); - }, - [setPosition] - ); - - return [position, setNewPosition]; -} export default function NavigationBarScreen() { return ( @@ -50,18 +18,6 @@ export default function NavigationBarScreen() {
-
- -
-
- -
-
- -
-
- -
); @@ -84,76 +40,16 @@ function VisibilityExample() { ); } -function BackgroundColorExample() { - return ( -