From acd0cb0024e28c0aede870f25fcf0c026dfb399e Mon Sep 17 00:00:00 2001 From: Valentin Date: Wed, 10 Jun 2026 10:12:38 +0300 Subject: [PATCH 1/3] feat: add expo 56 support beta testing --- .github/workflows/expo-beta-road-test.yml | 156 +++++++++ apps/AndroidApp/app/build.gradle.kts | 4 + apps/AndroidApp/gradle/libs.versions.toml | 1 + apps/AndroidApp/package.json | 1 + .../project.pbxproj | 311 +++++++++++++++++- .../Brownfield Apple App Expo 56.xcscheme | 52 +++ apps/AppleApp/package.json | 1 + apps/ExpoApp56/.gitignore | 43 +++ apps/ExpoApp56/BrownfieldStore.brownie.ts | 21 ++ apps/ExpoApp56/README.md | 50 +++ apps/ExpoApp56/RNApp.tsx | 70 ++++ .../__tests__/brownfield.example.test.tsx | 12 + apps/ExpoApp56/app.json | 65 ++++ .../assets/expo.icon/Assets/expo-symbol 2.svg | 3 + .../assets/expo.icon/Assets/grid.png | Bin 0 -> 53681 bytes apps/ExpoApp56/assets/expo.icon/icon.json | 40 +++ .../assets/images/android-icon-background.png | Bin 0 -> 17549 bytes .../assets/images/android-icon-foreground.png | Bin 0 -> 78796 bytes .../assets/images/android-icon-monochrome.png | Bin 0 -> 4140 bytes .../assets/images/expo-badge-white.png | Bin 0 -> 4129 bytes apps/ExpoApp56/assets/images/expo-badge.png | Bin 0 -> 4137 bytes apps/ExpoApp56/assets/images/expo-logo.png | Bin 0 -> 3317 bytes apps/ExpoApp56/assets/images/favicon.png | Bin 0 -> 1129 bytes apps/ExpoApp56/assets/images/icon.png | Bin 0 -> 799005 bytes apps/ExpoApp56/assets/images/logo-glow.png | Bin 0 -> 331624 bytes apps/ExpoApp56/assets/images/react-logo.png | Bin 0 -> 6341 bytes .../ExpoApp56/assets/images/react-logo@2x.png | Bin 0 -> 14225 bytes .../ExpoApp56/assets/images/react-logo@3x.png | Bin 0 -> 21252 bytes apps/ExpoApp56/assets/images/splash-icon.png | Bin 0 -> 3317 bytes .../assets/images/tabIcons/explore.png | Bin 0 -> 215 bytes .../assets/images/tabIcons/explore@2x.png | Bin 0 -> 347 bytes .../assets/images/tabIcons/explore@3x.png | Bin 0 -> 468 bytes .../ExpoApp56/assets/images/tabIcons/home.png | Bin 0 -> 253 bytes .../assets/images/tabIcons/home@2x.png | Bin 0 -> 343 bytes .../assets/images/tabIcons/home@3x.png | Bin 0 -> 479 bytes apps/ExpoApp56/assets/images/tutorial-web.png | Bin 0 -> 58959 bytes apps/ExpoApp56/brownfield.navigation.ts | 25 ++ apps/ExpoApp56/entry.tsx | 12 + apps/ExpoApp56/eslint.config.js | 18 + apps/ExpoApp56/jest.config.js | 13 + apps/ExpoApp56/jest.setup.js | 1 + apps/ExpoApp56/jest/cssMock.js | 2 + apps/ExpoApp56/package.json | 69 ++++ apps/ExpoApp56/src/app/_layout.tsx | 20 ++ apps/ExpoApp56/src/app/explore.tsx | 181 ++++++++++ apps/ExpoApp56/src/app/index.tsx | 101 ++++++ apps/ExpoApp56/src/app/postMessage.tsx | 105 ++++++ .../src/components/animated-icon.module.css | 6 + .../src/components/animated-icon.tsx | 132 ++++++++ .../src/components/animated-icon.web.tsx | 108 ++++++ apps/ExpoApp56/src/components/app-tabs.tsx | 37 +++ .../ExpoApp56/src/components/app-tabs.web.tsx | 116 +++++++ .../src/components/counter/index.tsx | 33 ++ .../src/components/external-link.tsx | 25 ++ apps/ExpoApp56/src/components/hint-row.tsx | 35 ++ .../src/components/postMessage/Message.ts | 6 + .../components/postMessage/MessageBubble.tsx | 74 +++++ apps/ExpoApp56/src/components/themed-text.tsx | 73 ++++ apps/ExpoApp56/src/components/themed-view.tsx | 16 + .../src/components/ui/collapsible.tsx | 65 ++++ apps/ExpoApp56/src/components/web-badge.tsx | 44 +++ apps/ExpoApp56/src/constants/theme.ts | 65 ++++ apps/ExpoApp56/src/global.css | 9 + apps/ExpoApp56/src/hooks/use-color-scheme.ts | 1 + .../src/hooks/use-color-scheme.web.ts | 21 ++ apps/ExpoApp56/src/hooks/use-theme.ts | 14 + apps/ExpoApp56/src/utils/expo-rn-updates.ts | 25 ++ apps/ExpoApp56/tsconfig.json | 20 ++ apps/README.md | 4 +- scripts/__tests__/check-expo-beta.test.ts | 43 +++ scripts/check-expo-beta.ts | 208 ++++++++++++ yarn.lock | 48 +++ 72 files changed, 2599 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/expo-beta-road-test.yml create mode 100644 apps/AppleApp/Brownfield Apple App.xcodeproj/xcshareddata/xcschemes/Brownfield Apple App Expo 56.xcscheme create mode 100644 apps/ExpoApp56/.gitignore create mode 100644 apps/ExpoApp56/BrownfieldStore.brownie.ts create mode 100644 apps/ExpoApp56/README.md create mode 100644 apps/ExpoApp56/RNApp.tsx create mode 100644 apps/ExpoApp56/__tests__/brownfield.example.test.tsx create mode 100644 apps/ExpoApp56/app.json create mode 100644 apps/ExpoApp56/assets/expo.icon/Assets/expo-symbol 2.svg create mode 100644 apps/ExpoApp56/assets/expo.icon/Assets/grid.png create mode 100644 apps/ExpoApp56/assets/expo.icon/icon.json create mode 100644 apps/ExpoApp56/assets/images/android-icon-background.png create mode 100644 apps/ExpoApp56/assets/images/android-icon-foreground.png create mode 100644 apps/ExpoApp56/assets/images/android-icon-monochrome.png create mode 100644 apps/ExpoApp56/assets/images/expo-badge-white.png create mode 100644 apps/ExpoApp56/assets/images/expo-badge.png create mode 100644 apps/ExpoApp56/assets/images/expo-logo.png create mode 100644 apps/ExpoApp56/assets/images/favicon.png create mode 100644 apps/ExpoApp56/assets/images/icon.png create mode 100644 apps/ExpoApp56/assets/images/logo-glow.png create mode 100644 apps/ExpoApp56/assets/images/react-logo.png create mode 100644 apps/ExpoApp56/assets/images/react-logo@2x.png create mode 100644 apps/ExpoApp56/assets/images/react-logo@3x.png create mode 100644 apps/ExpoApp56/assets/images/splash-icon.png create mode 100644 apps/ExpoApp56/assets/images/tabIcons/explore.png create mode 100644 apps/ExpoApp56/assets/images/tabIcons/explore@2x.png create mode 100644 apps/ExpoApp56/assets/images/tabIcons/explore@3x.png create mode 100644 apps/ExpoApp56/assets/images/tabIcons/home.png create mode 100644 apps/ExpoApp56/assets/images/tabIcons/home@2x.png create mode 100644 apps/ExpoApp56/assets/images/tabIcons/home@3x.png create mode 100644 apps/ExpoApp56/assets/images/tutorial-web.png create mode 100644 apps/ExpoApp56/brownfield.navigation.ts create mode 100644 apps/ExpoApp56/entry.tsx create mode 100644 apps/ExpoApp56/eslint.config.js create mode 100644 apps/ExpoApp56/jest.config.js create mode 100644 apps/ExpoApp56/jest.setup.js create mode 100644 apps/ExpoApp56/jest/cssMock.js create mode 100644 apps/ExpoApp56/package.json create mode 100644 apps/ExpoApp56/src/app/_layout.tsx create mode 100644 apps/ExpoApp56/src/app/explore.tsx create mode 100644 apps/ExpoApp56/src/app/index.tsx create mode 100644 apps/ExpoApp56/src/app/postMessage.tsx create mode 100644 apps/ExpoApp56/src/components/animated-icon.module.css create mode 100644 apps/ExpoApp56/src/components/animated-icon.tsx create mode 100644 apps/ExpoApp56/src/components/animated-icon.web.tsx create mode 100644 apps/ExpoApp56/src/components/app-tabs.tsx create mode 100644 apps/ExpoApp56/src/components/app-tabs.web.tsx create mode 100644 apps/ExpoApp56/src/components/counter/index.tsx create mode 100644 apps/ExpoApp56/src/components/external-link.tsx create mode 100644 apps/ExpoApp56/src/components/hint-row.tsx create mode 100644 apps/ExpoApp56/src/components/postMessage/Message.ts create mode 100644 apps/ExpoApp56/src/components/postMessage/MessageBubble.tsx create mode 100644 apps/ExpoApp56/src/components/themed-text.tsx create mode 100644 apps/ExpoApp56/src/components/themed-view.tsx create mode 100644 apps/ExpoApp56/src/components/ui/collapsible.tsx create mode 100644 apps/ExpoApp56/src/components/web-badge.tsx create mode 100644 apps/ExpoApp56/src/constants/theme.ts create mode 100644 apps/ExpoApp56/src/global.css create mode 100644 apps/ExpoApp56/src/hooks/use-color-scheme.ts create mode 100644 apps/ExpoApp56/src/hooks/use-color-scheme.web.ts create mode 100644 apps/ExpoApp56/src/hooks/use-theme.ts create mode 100644 apps/ExpoApp56/src/utils/expo-rn-updates.ts create mode 100644 apps/ExpoApp56/tsconfig.json create mode 100644 scripts/__tests__/check-expo-beta.test.ts create mode 100644 scripts/check-expo-beta.ts diff --git a/.github/workflows/expo-beta-road-test.yml b/.github/workflows/expo-beta-road-test.yml new file mode 100644 index 00000000..c5a66711 --- /dev/null +++ b/.github/workflows/expo-beta-road-test.yml @@ -0,0 +1,156 @@ +name: Expo beta road test +run-name: Expo beta road test + +on: + schedule: + - cron: '0 6 */2 * *' + workflow_dispatch: + +permissions: + actions: read + contents: read + +jobs: + prepare: + name: Detect Expo beta to test + runs-on: ubuntu-latest + outputs: + latest_version: ${{ steps.finalize.outputs.latest_version }} + should_test: ${{ steps.finalize.outputs.should_test }} + steps: + - name: Checkout + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6 + + - name: Detect latest Expo beta + id: detect + run: node --experimental-strip-types --no-warnings ./scripts/check-expo-beta.ts --github-output "$GITHUB_OUTPUT" --github-step-summary "$GITHUB_STEP_SUMMARY" + + - name: Check whether this Expo beta was already tested + id: tested + if: steps.detect.outputs.latest_version != '' + env: + GH_TOKEN: ${{ github.token }} + run: | + artifact_id=$(gh api \ + "/repos/${{ github.repository }}/actions/artifacts?per_page=100" \ + --jq '.artifacts[] | select(.expired == false) | select(.name == "expo-beta-tested-${{ steps.detect.outputs.latest_version }}") | .id' \ + | head -n 1) + + if [ -n "$artifact_id" ]; then + echo "already_tested=true" >> "$GITHUB_OUTPUT" + else + echo "already_tested=false" >> "$GITHUB_OUTPUT" + fi + + - name: Finalize test decision + id: finalize + run: | + should_test="${{ steps.detect.outputs.should_test }}" + + if [ "${{ steps.tested.outputs.already_tested || 'false' }}" = 'true' ]; then + should_test='false' + fi + + echo "latest_version=${{ steps.detect.outputs.latest_version }}" >> "$GITHUB_OUTPUT" + echo "should_test=${should_test}" >> "$GITHUB_OUTPUT" + { + echo "- Already tested successfully: ${{ steps.tested.outputs.already_tested || 'false' }}" + echo "- Final should run road tests: ${should_test}" + echo + } >> "$GITHUB_STEP_SUMMARY" + + android: + name: Android road test (Expo beta) + runs-on: ubuntu-latest + needs: prepare + if: needs.prepare.outputs.should_test == 'true' + steps: + - name: Checkout + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6 + + - name: Apply Expo beta to ExpoApp56 + run: node --experimental-strip-types --no-warnings ./scripts/check-expo-beta.ts --expo-version "${{ needs.prepare.outputs.latest_version }}" --apply --github-step-summary "$GITHUB_STEP_SUMMARY" + + - name: Install Expo beta dependencies + run: | + cd apps/ExpoApp56 + npx expo install --fix + + - name: Run ExpoApp56 -> AndroidApp road test + uses: ./.github/actions/androidapp-road-test + with: + flavor: expo56 + rn-project-path: apps/ExpoApp56 + rn-project-maven-path: com/callstack/rnbrownfield/demo/expoapp56/brownfieldlib + + ios: + name: iOS road test (Expo beta) + runs-on: macos-26 + needs: prepare + if: needs.prepare.outputs.should_test == 'true' + steps: + - name: Checkout + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6 + + - name: Apply Expo beta to ExpoApp56 + run: node --experimental-strip-types --no-warnings ./scripts/check-expo-beta.ts --expo-version "${{ needs.prepare.outputs.latest_version }}" --apply --github-step-summary "$GITHUB_STEP_SUMMARY" + + - name: Install Expo beta dependencies + run: | + cd apps/ExpoApp56 + npx expo install --fix + + - name: Run ExpoApp56 -> AppleApp road test + uses: ./.github/actions/appleapp-road-test + with: + variant: expo56 + rn-project-path: apps/ExpoApp56 + + record-success: + name: Record tested Expo beta + runs-on: ubuntu-latest + needs: [prepare, android, ios] + if: | + needs.prepare.outputs.should_test == 'true' && + needs.android.result == 'success' && + needs.ios.result == 'success' + steps: + - name: Create Expo beta success marker + run: | + mkdir -p expo-beta-test-result + printf '%s\n' '${{ needs.prepare.outputs.latest_version }}' > expo-beta-test-result/version.txt + + - name: Upload Expo beta success marker + uses: actions/upload-artifact@v4 + with: + name: expo-beta-tested-${{ needs.prepare.outputs.latest_version }} + path: expo-beta-test-result/version.txt + retention-days: 90 + + summarize: + name: Summarize Expo beta road test + runs-on: ubuntu-latest + needs: [prepare, android, ios, record-success] + if: always() + steps: + - name: Write workflow summary + run: | + { + echo "## Expo beta road test results" + echo + echo "- Expo beta version: ${{ needs.prepare.outputs.latest_version || 'not found' }}" + echo "- Android result: ${{ needs.android.result || 'skipped' }}" + echo "- iOS result: ${{ needs.ios.result || 'skipped' }}" + echo + if [ "${{ needs.prepare.outputs.should_test }}" != "true" ]; then + echo "No new untested Expo beta required testing." + else + echo "- Success marker uploaded: ${{ needs.record-success.result == 'success' && 'yes' || 'no' }}" + fi + } >> "$GITHUB_STEP_SUMMARY" + + - name: Fail if road test failed + if: | + needs.prepare.outputs.should_test == 'true' && + (needs.android.result == 'failure' || needs.ios.result == 'failure') + run: exit 1 diff --git a/apps/AndroidApp/app/build.gradle.kts b/apps/AndroidApp/app/build.gradle.kts index 7d11b815..c1a5e775 100644 --- a/apps/AndroidApp/app/build.gradle.kts +++ b/apps/AndroidApp/app/build.gradle.kts @@ -35,6 +35,9 @@ android { create("expo55") { dimension = "app" } + create("expo56") { + dimension = "app" + } create("vanilla") { dimension = "app" } @@ -72,6 +75,7 @@ dependencies { implementation(libs.androidx.compose.material3) implementation(libs.androidx.appcompat) add("expo55Implementation", libs.brownfieldlib.expo55) + add("expo56Implementation", libs.brownfieldlib.expo56) add("expo54Implementation", libs.brownfieldlib.expo54) add("vanillaImplementation", libs.brownfieldlib.vanilla) diff --git a/apps/AndroidApp/gradle/libs.versions.toml b/apps/AndroidApp/gradle/libs.versions.toml index 973d4ce6..1c148b99 100644 --- a/apps/AndroidApp/gradle/libs.versions.toml +++ b/apps/AndroidApp/gradle/libs.versions.toml @@ -17,6 +17,7 @@ gson = "2.13.2" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } brownfieldlib-expo55 = { module = "com.callstack.rnbrownfield.demo.expoapp55:brownfieldlib", version.ref = "brownfieldlib" } +brownfieldlib-expo56 = { module = "com.callstack.rnbrownfield.demo.expoapp56:brownfieldlib", version.ref = "brownfieldlib" } brownfieldlib-expo54 = { module = "com.callstack.rnbrownfield.demo.expoapp54:brownfieldlib", version.ref = "brownfieldlib" } brownfieldlib-vanilla = { module = "com.rnapp:brownfieldlib", version.ref = "brownfieldlib" } junit = { group = "junit", name = "junit", version.ref = "junit" } diff --git a/apps/AndroidApp/package.json b/apps/AndroidApp/package.json index ec42f314..39dede66 100644 --- a/apps/AndroidApp/package.json +++ b/apps/AndroidApp/package.json @@ -5,6 +5,7 @@ "scripts": { "build:example:android-consumer:expo": "./gradlew assembleExpo55Release", "build:example:android-consumer:expo55": "./gradlew assembleExpo55Release", + "build:example:android-consumer:expo56": "./gradlew assembleExpo56Release", "build:example:android-consumer:expo54": "./gradlew assembleExpo54Release", "build:example:android-consumer:vanilla": "./gradlew assembleVanillaRelease" } diff --git a/apps/AppleApp/Brownfield Apple App.xcodeproj/project.pbxproj b/apps/AppleApp/Brownfield Apple App.xcodeproj/project.pbxproj index 7b9e9c19..9138f94b 100644 --- a/apps/AppleApp/Brownfield Apple App.xcodeproj/project.pbxproj +++ b/apps/AppleApp/Brownfield Apple App.xcodeproj/project.pbxproj @@ -45,6 +45,20 @@ 79B8BE932FB7273600B94C6F /* hermesvm.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 79B1D99C2FB4A61400A5F42B /* hermesvm.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 79B8BE942FB7273600B94C6F /* BrownfieldLib.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 79B1D9992FB4A61400A5F42B /* BrownfieldLib.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 79B8BE952FB7273600B94C6F /* React.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 79B1D99D2FB4A61400A5F42B /* React.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 7A1B2C3D4E5F60718293A101 /* Brownie.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 79B1D99B2FB4A61400A5F42B /* Brownie.xcframework */; }; + 7A1B2C3D4E5F60718293A102 /* BrownfieldNavigation.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 79B1D99A2FB4A61400A5F42B /* BrownfieldNavigation.xcframework */; }; + 7A1B2C3D4E5F60718293A103 /* ReactNativeDependencies.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 79B1D99F2FB4A61400A5F42B /* ReactNativeDependencies.xcframework */; }; + 7A1B2C3D4E5F60718293A104 /* hermesvm.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 79B1D99C2FB4A61400A5F42B /* hermesvm.xcframework */; }; + 7A1B2C3D4E5F60718293A105 /* ReactBrownfield.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 79B1D99E2FB4A61400A5F42B /* ReactBrownfield.xcframework */; }; + 7A1B2C3D4E5F60718293A106 /* BrownfieldLib.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 79B1D9992FB4A61400A5F42B /* BrownfieldLib.xcframework */; }; + 7A1B2C3D4E5F60718293A107 /* React.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 79B1D99D2FB4A61400A5F42B /* React.xcframework */; }; + 7A1B2C3D4E5F60718293A108 /* Brownie.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 79B1D99B2FB4A61400A5F42B /* Brownie.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 7A1B2C3D4E5F60718293A109 /* ReactBrownfield.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 79B1D99E2FB4A61400A5F42B /* ReactBrownfield.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 7A1B2C3D4E5F60718293A10A /* ReactNativeDependencies.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 79B1D99F2FB4A61400A5F42B /* ReactNativeDependencies.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 7A1B2C3D4E5F60718293A10B /* BrownfieldNavigation.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 79B1D99A2FB4A61400A5F42B /* BrownfieldNavigation.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 7A1B2C3D4E5F60718293A10C /* hermesvm.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 79B1D99C2FB4A61400A5F42B /* hermesvm.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 7A1B2C3D4E5F60718293A10D /* BrownfieldLib.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 79B1D9992FB4A61400A5F42B /* BrownfieldLib.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 7A1B2C3D4E5F60718293A10E /* React.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 79B1D99D2FB4A61400A5F42B /* React.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -97,6 +111,23 @@ name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; + 7A1B2C3D4E5F60718293A201 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 7A1B2C3D4E5F60718293A108 /* Brownie.xcframework in Embed Frameworks */, + 7A1B2C3D4E5F60718293A109 /* ReactBrownfield.xcframework in Embed Frameworks */, + 7A1B2C3D4E5F60718293A10A /* ReactNativeDependencies.xcframework in Embed Frameworks */, + 7A1B2C3D4E5F60718293A10B /* BrownfieldNavigation.xcframework in Embed Frameworks */, + 7A1B2C3D4E5F60718293A10C /* hermesvm.xcframework in Embed Frameworks */, + 7A1B2C3D4E5F60718293A10D /* BrownfieldLib.xcframework in Embed Frameworks */, + 7A1B2C3D4E5F60718293A10E /* React.xcframework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ @@ -110,6 +141,7 @@ 79B1D99F2FB4A61400A5F42B /* ReactNativeDependencies.xcframework */ = {isa = PBXFileReference; expectedSignature = "SelfSigned:BEEAE960B121B398BB228BD547298BD461DFFFD862BD3AD794A38F6D426F6741"; lastKnownFileType = wrapper.xcframework; name = ReactNativeDependencies.xcframework; path = package/ReactNativeDependencies.xcframework; sourceTree = ""; }; 79B8BE802FB7270E00B94C6F /* Brownfield Apple App (ExpoApp54).app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Brownfield Apple App (ExpoApp54).app"; sourceTree = BUILT_PRODUCTS_DIR; }; 79B8BE9B2FB7273600B94C6F /* Brownfield Apple App (ExpoApp55).app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Brownfield Apple App (ExpoApp55).app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 7A1B2C3D4E5F60718293A202 /* Brownfield Apple App (ExpoApp56).app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Brownfield Apple App (ExpoApp56).app"; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ @@ -143,6 +175,21 @@ ); target = 79B8BE832FB7273600B94C6F /* Brownfield Apple App (ExpoApp55) */; }; + 7A1B2C3D4E5F60718293A203 /* Exceptions for "Brownfield Apple App" folder in "Brownfield Apple App (ExpoApp56)" target */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Assets.xcassets, + BrownfieldAppleApp.swift, + components/ContentView.swift, + components/GreetingCard.swift, + components/MaterialCard.swift, + components/MessagesView.swift, + components/ReferralsScreen.swift, + components/SettingsScreen.swift, + components/Toast.swift, + ); + target = 7A1B2C3D4E5F60718293A301 /* Brownfield Apple App (ExpoApp56) */; + }; /* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ /* Begin PBXFileSystemSynchronizedRootGroup section */ @@ -151,6 +198,7 @@ exceptions = ( 79B8BE822FB7270F00B94C6F /* Exceptions for "Brownfield Apple App" folder in "Brownfield Apple App (ExpoApp54)" target */, 79B8BE9C2FB7273600B94C6F /* Exceptions for "Brownfield Apple App" folder in "Brownfield Apple App (ExpoApp55)" target */, + 7A1B2C3D4E5F60718293A203 /* Exceptions for "Brownfield Apple App" folder in "Brownfield Apple App (ExpoApp56)" target */, ); path = "Brownfield Apple App"; sourceTree = ""; @@ -198,6 +246,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 7A1B2C3D4E5F60718293A204 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7A1B2C3D4E5F60718293A101 /* Brownie.xcframework in Frameworks */, + 7A1B2C3D4E5F60718293A102 /* BrownfieldNavigation.xcframework in Frameworks */, + 7A1B2C3D4E5F60718293A103 /* ReactNativeDependencies.xcframework in Frameworks */, + 7A1B2C3D4E5F60718293A104 /* hermesvm.xcframework in Frameworks */, + 7A1B2C3D4E5F60718293A105 /* ReactBrownfield.xcframework in Frameworks */, + 7A1B2C3D4E5F60718293A106 /* BrownfieldLib.xcframework in Frameworks */, + 7A1B2C3D4E5F60718293A107 /* React.xcframework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -230,6 +292,7 @@ 793C76A72EEBF938008A2A34 /* Brownfield Apple App (RNApp).app */, 79B8BE802FB7270E00B94C6F /* Brownfield Apple App (ExpoApp54).app */, 79B8BE9B2FB7273600B94C6F /* Brownfield Apple App (ExpoApp55).app */, + 7A1B2C3D4E5F60718293A202 /* Brownfield Apple App (ExpoApp56).app */, ); name = Products; sourceTree = ""; @@ -306,6 +369,29 @@ productReference = 79B8BE9B2FB7273600B94C6F /* Brownfield Apple App (ExpoApp55).app */; productType = "com.apple.product-type.application"; }; + 7A1B2C3D4E5F60718293A301 /* Brownfield Apple App (ExpoApp56) */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7A1B2C3D4E5F60718293A405 /* Build configuration list for PBXNativeTarget "Brownfield Apple App (ExpoApp56)" */; + buildPhases = ( + 7A1B2C3D4E5F60718293A302 /* Sources */, + 7A1B2C3D4E5F60718293A204 /* Frameworks */, + 7A1B2C3D4E5F60718293A303 /* Resources */, + 7A1B2C3D4E5F60718293A201 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + 793C76A92EEBF938008A2A34 /* Brownfield Apple App */, + ); + name = "Brownfield Apple App (ExpoApp56)"; + packageProductDependencies = ( + ); + productName = "Brownfield Apple App"; + productReference = 7A1B2C3D4E5F60718293A202 /* Brownfield Apple App (ExpoApp56).app */; + productType = "com.apple.product-type.application"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -334,11 +420,13 @@ productRefGroup = 793C76A82EEBF938008A2A34 /* Products */; projectDirPath = ""; projectRoot = ""; - targets = ( - 793C76A62EEBF938008A2A34 /* Brownfield Apple App (RNApp) */, - 79B8BE682FB7270E00B94C6F /* Brownfield Apple App (ExpoApp54) */, - 79B8BE832FB7273600B94C6F /* Brownfield Apple App (ExpoApp55) */, - ); + targets = ( + 793C76A62EEBF938008A2A34 /* Brownfield Apple App (RNApp) */, + 79B8BE682FB7270E00B94C6F /* Brownfield Apple App (ExpoApp54) */, + 79B8BE832FB7273600B94C6F /* Brownfield Apple App (ExpoApp55) */, + 7A1B2C3D4E5F60718293A301 /* Brownfield Apple App (ExpoApp56) */, + ); + }; /* End PBXProject section */ @@ -364,6 +452,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 7A1B2C3D4E5F60718293A303 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -388,6 +483,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 7A1B2C3D4E5F60718293A302 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ @@ -1191,6 +1293,194 @@ }; name = "Release Vanilla"; }; + 7A1B2C3D4E5F60718293A501 /* Debug Expo */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; + ENABLE_APP_SANDBOX = YES; + ENABLE_PREVIEWS = YES; + ENABLE_USER_SELECTED_FILES = readonly; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "Brownfield-Apple-App-Info.plist"; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UIViewControllerBasedStatusBarAppearance = "$(USE_EXPO_HOST_STATUS_BAR_APPEARANCE)"; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 14.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.callstack.brownfield.ios.example.Brownfield-iOS-App"; + PRODUCT_NAME = "$(TARGET_NAME)"; + REGISTER_APP_GROUPS = YES; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) USE_EXPO_HOST"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,7"; + USE_EXPO_HOST_STATUS_BAR_APPEARANCE = NO; + XROS_DEPLOYMENT_TARGET = 2.0; + }; + name = "Debug Expo"; + }; + 7A1B2C3D4E5F60718293A502 /* Release Expo */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; + ENABLE_APP_SANDBOX = YES; + ENABLE_PREVIEWS = YES; + ENABLE_USER_SELECTED_FILES = readonly; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "Brownfield-Apple-App-Info.plist"; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UIViewControllerBasedStatusBarAppearance = "$(USE_EXPO_HOST_STATUS_BAR_APPEARANCE)"; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 14.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.callstack.brownfield.ios.example.Brownfield-iOS-App"; + PRODUCT_NAME = "$(TARGET_NAME)"; + REGISTER_APP_GROUPS = YES; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) USE_EXPO_HOST"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,7"; + USE_EXPO_HOST_STATUS_BAR_APPEARANCE = NO; + XROS_DEPLOYMENT_TARGET = 2.0; + }; + name = "Release Expo"; + }; + 7A1B2C3D4E5F60718293A503 /* Debug Vanilla */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; + ENABLE_APP_SANDBOX = YES; + ENABLE_PREVIEWS = YES; + ENABLE_USER_SELECTED_FILES = readonly; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "Brownfield-Apple-App-Info.plist"; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UIViewControllerBasedStatusBarAppearance = "$(USE_EXPO_HOST_STATUS_BAR_APPEARANCE)"; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 14.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.callstack.brownfield.ios.example.Brownfield-iOS-App"; + PRODUCT_NAME = "$(TARGET_NAME)"; + REGISTER_APP_GROUPS = YES; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,7"; + USE_EXPO_HOST_STATUS_BAR_APPEARANCE = YES; + XROS_DEPLOYMENT_TARGET = 2.0; + }; + name = "Debug Vanilla"; + }; + 7A1B2C3D4E5F60718293A504 /* Release Vanilla */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; + ENABLE_APP_SANDBOX = YES; + ENABLE_PREVIEWS = YES; + ENABLE_USER_SELECTED_FILES = readonly; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "Brownfield-Apple-App-Info.plist"; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UIViewControllerBasedStatusBarAppearance = "$(USE_EXPO_HOST_STATUS_BAR_APPEARANCE)"; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 14.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.callstack.brownfield.ios.example.Brownfield-iOS-App"; + PRODUCT_NAME = "$(TARGET_NAME)"; + REGISTER_APP_GROUPS = YES; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,7"; + USE_EXPO_HOST_STATUS_BAR_APPEARANCE = YES; + XROS_DEPLOYMENT_TARGET = 2.0; + }; + name = "Release Vanilla"; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -1238,6 +1528,17 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = "Release Expo"; }; + 7A1B2C3D4E5F60718293A405 /* Build configuration list for PBXNativeTarget "Brownfield Apple App (ExpoApp56)" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7A1B2C3D4E5F60718293A501 /* Debug Expo */, + 7A1B2C3D4E5F60718293A502 /* Release Expo */, + 7A1B2C3D4E5F60718293A503 /* Debug Vanilla */, + 7A1B2C3D4E5F60718293A504 /* Release Vanilla */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = "Release Expo"; + }; /* End XCConfigurationList section */ }; rootObject = 793C769F2EEBF938008A2A34 /* Project object */; diff --git a/apps/AppleApp/Brownfield Apple App.xcodeproj/xcshareddata/xcschemes/Brownfield Apple App Expo 56.xcscheme b/apps/AppleApp/Brownfield Apple App.xcodeproj/xcshareddata/xcschemes/Brownfield Apple App Expo 56.xcscheme new file mode 100644 index 00000000..df018693 --- /dev/null +++ b/apps/AppleApp/Brownfield Apple App.xcodeproj/xcshareddata/xcschemes/Brownfield Apple App Expo 56.xcscheme @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + diff --git a/apps/AppleApp/package.json b/apps/AppleApp/package.json index 832bdbee..8985ac31 100644 --- a/apps/AppleApp/package.json +++ b/apps/AppleApp/package.json @@ -7,6 +7,7 @@ "build:example:ios-consumer:expo": "yarn build:example:ios-consumer:expo55", "build:example:ios-consumer:expo54": "node prepareXCFrameworks.js --appName ExpoApp54 && yarn internal::build::common -scheme \"Brownfield Apple App Expo 54\" -configuration Release", "build:example:ios-consumer:expo55": "node prepareXCFrameworks.js --appName ExpoApp55 && yarn internal::build::common -scheme \"Brownfield Apple App Expo 55\" -configuration Release", + "build:example:ios-consumer:expo56": "node prepareXCFrameworks.js --appName ExpoApp56 && yarn internal::build::common -scheme \"Brownfield Apple App Expo 56\" -configuration Release", "build:example:ios-consumer:vanilla": "node prepareXCFrameworks.js --appName RNApp && yarn internal::build::common -scheme \"Brownfield Apple App Vanilla\" -configuration \"Release Vanilla\"", "internal::build::common": "xcodebuild -project \"Brownfield Apple App.xcodeproj\" -sdk iphonesimulator build CODE_SIGNING_ALLOWED=NO -derivedDataPath ./build" }, diff --git a/apps/ExpoApp56/.gitignore b/apps/ExpoApp56/.gitignore new file mode 100644 index 00000000..f8c6c2e8 --- /dev/null +++ b/apps/ExpoApp56/.gitignore @@ -0,0 +1,43 @@ +# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files + +# dependencies +node_modules/ + +# Expo +.expo/ +dist/ +web-build/ +expo-env.d.ts + +# Native +.kotlin/ +*.orig.* +*.jks +*.p8 +*.p12 +*.key +*.mobileprovision + +# Metro +.metro-health-check* + +# debug +npm-debug.* +yarn-debug.* +yarn-error.* + +# macOS +.DS_Store +*.pem + +# local env files +.env*.local + +# typescript +*.tsbuildinfo + +app-example + +# generated native folders +/ios +/android diff --git a/apps/ExpoApp56/BrownfieldStore.brownie.ts b/apps/ExpoApp56/BrownfieldStore.brownie.ts new file mode 100644 index 00000000..94e22c72 --- /dev/null +++ b/apps/ExpoApp56/BrownfieldStore.brownie.ts @@ -0,0 +1,21 @@ +import type { BrownieStore } from '@callstack/brownie'; + +export interface BrownfieldStore extends BrownieStore { + counter: number; + user: { + name: string; + }; +} + +export interface SettingsStore extends BrownieStore { + theme: 'light' | 'dark'; + notificationsEnabled: boolean; + privacyMode: boolean; +} + +declare module '@callstack/brownie' { + interface BrownieStores { + BrownfieldStore: BrownfieldStore; + SettingsStore: SettingsStore; + } +} diff --git a/apps/ExpoApp56/README.md b/apps/ExpoApp56/README.md new file mode 100644 index 00000000..48dd63ff --- /dev/null +++ b/apps/ExpoApp56/README.md @@ -0,0 +1,50 @@ +# Welcome to your Expo app 👋 + +This is an [Expo](https://expo.dev) project created with [`create-expo-app`](https://www.npmjs.com/package/create-expo-app). + +## Get started + +1. Install dependencies + + ```bash + npm install + ``` + +2. Start the app + + ```bash + npx expo start + ``` + +In the output, you'll find options to open the app in a + +- [development build](https://docs.expo.dev/develop/development-builds/introduction/) +- [Android emulator](https://docs.expo.dev/workflow/android-studio-emulator/) +- [iOS simulator](https://docs.expo.dev/workflow/ios-simulator/) +- [Expo Go](https://expo.dev/go), a limited sandbox for trying out app development with Expo + +You can start developing by editing the files inside the **app** directory. This project uses [file-based routing](https://docs.expo.dev/router/introduction). + +## Get a fresh project + +When you're ready, run: + +```bash +npm run reset-project +``` + +This command will move the starter code to the **app-example** directory and create a blank **app** directory where you can start developing. + +## Learn more + +To learn more about developing your project with Expo, look at the following resources: + +- [Expo documentation](https://docs.expo.dev/): Learn fundamentals, or go into advanced topics with our [guides](https://docs.expo.dev/guides). +- [Learn Expo tutorial](https://docs.expo.dev/tutorial/introduction/): Follow a step-by-step tutorial where you'll create a project that runs on Android, iOS, and the web. + +## Join the community + +Join our community of developers creating universal apps. + +- [Expo on GitHub](https://github.com/expo/expo): View our open source platform and contribute. +- [Discord community](https://chat.expo.dev): Chat with Expo users and ask questions. diff --git a/apps/ExpoApp56/RNApp.tsx b/apps/ExpoApp56/RNApp.tsx new file mode 100644 index 00000000..bb470700 --- /dev/null +++ b/apps/ExpoApp56/RNApp.tsx @@ -0,0 +1,70 @@ +import { SafeAreaView } from 'react-native-safe-area-context'; +import { Button, StyleSheet, Text, View } from 'react-native'; +import BrownfieldNavigation from '@callstack/brownfield-navigation'; +import { checkAndFetchUpdate } from './src/utils/expo-rn-updates'; + +import Counter from './src/components/counter'; + +type RNAppProps = { + nativeOsVersionLabel?: string; +}; + +export default function RNApp({ nativeOsVersionLabel }: RNAppProps) { + return ( + + Expo React Native Brownfield + + {nativeOsVersionLabel ? ( + + {nativeOsVersionLabel} + + ) : null} + + + + +