From 7c404aa2ca78db57dedaee54927b42e6972ce50b Mon Sep 17 00:00:00 2001 From: Saad Najmi Date: Tue, 21 May 2024 11:18:38 -0700 Subject: [PATCH] [CI] Update Build Matrix (#2104) * Replace `--frozen-lockfile` with --immutable * Remove `apple-install-dependencies * Update apple-xcode-select * Use macos-13-arm64 * Build Debug only * Use custom Xcodebuild template * Separate build & test * Use Codeql v2 * Update template syntax * try major refactor * rename apple-job-publish * try big 2 * Fix Hermes * Comment out test temporarily * Fix visionOS + New Arch + JSC * Move iOS down, visionOS -> xrOS * Comment out failing jobs * Update build-test-rntester.yml * Move scripts to scripts folder * Update RNTA script for RNM use * Update VM image per notice * Update gitignore * Don't test on visionOS * fix use out-of-scope memory warning (#41441) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/41441 changelog: [internal] Reviewed By: cipolleschi Differential Revision: D51233760 fbshipit-source-id: 5fc7ab22220e3d80729243e715e22e85e3ba7afa * Retry xcode tests on failure --------- Co-authored-by: Samuel Susla --- .ado/Brewfile | 1 + .ado/apple-pr.yml | 240 +---------- .ado/jobs/build-test-rntester.yml | 164 ++++++++ .ado/jobs/npm-publish-dry-run.yml | 18 + .../react-native-test-app-integration.yml} | 27 +- .ado/jobs/test-javascript.yml | 26 ++ .ado/jobs/test-react-native-macos-init.yml | 62 +++ .ado/publish.yml | 6 +- .ado/{ => scripts}/ado-test-cleanup.sh | 0 .ado/{ => scripts}/ado-test-setup.sh | 0 .ado/scripts/xcodebuild.sh | 77 ++++ .ado/templates/apple-install-dependencies.yml | 12 - .ado/templates/apple-job-javascript.yml | 28 -- .ado/templates/apple-job-react-native.yml | 77 ---- ...ob-publish.yml => apple-steps-publish.yml} | 7 +- .ado/templates/apple-tools-setup.yml | 14 +- .ado/templates/apple-xcode-select.yml | 12 +- .ado/templates/react-native-macos-init.yml | 59 --- .ado/variables/vars.yml | 4 +- .github/workflows/codeql-analysis.yml | 4 +- .gitignore | 6 +- docs/Releases.md | 4 +- .../core/ConcreteComponentDescriptor.h | 5 +- .../react/renderer/core/ShadowNodeFamily.h | 5 +- .../react/renderer/mounting/ShadowTree.cpp | 4 +- .../react/renderer/uimanager/UIManager.cpp | 5 +- .../scripts/cocoapods/jsengine.rb | 2 +- .../sdks/hermes-engine/hermes-engine.podspec | 2 +- .../third-party-podspecs/libevent.podspec | 395 ++++++++++++++++++ .../RNTester-macOS/RNTester-macOS.xctestplan | 1 + .../rn-tester/RNTester/RNTester.xctestplan | 1 + .../RNTesterPods.xcodeproj/project.pbxproj | 8 + 32 files changed, 802 insertions(+), 474 deletions(-) create mode 100644 .ado/jobs/build-test-rntester.yml create mode 100644 .ado/jobs/npm-publish-dry-run.yml rename .ado/{apple-integration.yml => jobs/react-native-test-app-integration.yml} (90%) create mode 100644 .ado/jobs/test-javascript.yml create mode 100644 .ado/jobs/test-react-native-macos-init.yml rename .ado/{ => scripts}/ado-test-cleanup.sh (100%) rename .ado/{ => scripts}/ado-test-setup.sh (100%) create mode 100755 .ado/scripts/xcodebuild.sh delete mode 100644 .ado/templates/apple-install-dependencies.yml delete mode 100644 .ado/templates/apple-job-javascript.yml delete mode 100644 .ado/templates/apple-job-react-native.yml rename .ado/templates/{apple-job-publish.yml => apple-steps-publish.yml} (89%) delete mode 100644 .ado/templates/react-native-macos-init.yml create mode 100644 packages/react-native/third-party-podspecs/libevent.podspec diff --git a/.ado/Brewfile b/.ado/Brewfile index fe53a9df8fa83a..bfe131072dcace 100644 --- a/.ado/Brewfile +++ b/.ado/Brewfile @@ -1 +1,2 @@ brew "xcbeautify" +brew "ccache" diff --git a/.ado/apple-pr.yml b/.ado/apple-pr.yml index 5077c6795f1f1f..a998e70fd56059 100644 --- a/.ado/apple-pr.yml +++ b/.ado/apple-pr.yml @@ -2,7 +2,7 @@ name: $(Date:yyyyMMdd).$(Rev:.r) variables: - - template: variables/vars.yml + - template: /.ado/variables/vars.yml@self trigger: none # will disable CI builds entirely @@ -15,229 +15,23 @@ pr: exclude: - '*.md' -jobs: - - job: JavaScriptPR - displayName: Javascript PR - pool: - vmImage: $(VmImageApple) - demands: ['xcode', 'sh', 'npm'] - steps: - - template: templates/apple-job-javascript.yml - parameters: - slice_name: $(slice_name) - xcode_version: $(xcode_version) +stages: + - stage: Build_And_Test + displayName: 'Build and Test' + dependsOn: [] + jobs: + - template: /.ado/jobs/build-test-rntester.yml@self - - job: ApplePR - displayName: PR - strategy: - matrix: - 'iOS Paper Debug JSC': - packager_platform: 'ios' - xcode_sdk: iphonesimulator - xcode_scheme: 'RNTester' - xcode_configuration: 'Debug' - xcode_destination: 'platform=iOS Simulator,OS=$(ios_version),name=$(ios_simulator)' - xcode_actions: 'build test' - xcode_extraArgs: '-xcconfig $(Build.Repository.LocalPath)/.ado/xcconfig/debug_overrides.xcconfig' - new_arch_enabled: '0' - use_hermes: '0' - 'iOS Paper Release JSC': - packager_platform: 'ios' - xcode_sdk: iphonesimulator - xcode_scheme: 'RNTester' - xcode_configuration: 'Release' - xcode_destination: 'platform=iOS Simulator,OS=$(ios_version),name=$(ios_simulator)' - xcode_actions: 'build' - xcode_extraArgs: '-xcconfig $(Build.Repository.LocalPath)/.ado/xcconfig/release_overrides.xcconfig' - new_arch_enabled: '0' - use_hermes: '0' - 'macOS Paper Debug JSC': - packager_platform: 'macos' - xcode_sdk: macosx - xcode_scheme: 'RNTester-macOS' - xcode_configuration: 'Debug' - xcode_destination: 'platform=macOS,arch=x86_64' - xcode_actions: 'build test' - xcode_extraArgs: '-xcconfig $(Build.Repository.LocalPath)/.ado/xcconfig/debug_overrides.xcconfig' - new_arch_enabled: '0' - use_hermes: '0' - 'macOS Paper Release JSC': - packager_platform: 'macos' - xcode_sdk: macosx - xcode_scheme: 'RNTester-macOS' - xcode_configuration: 'Release' - xcode_destination: 'platform=macOS,arch=x86_64' - xcode_actions: 'build' - xcode_extraArgs: '-xcconfig $(Build.Repository.LocalPath)/.ado/xcconfig/release_overrides.xcconfig' - new_arch_enabled: '0' - use_hermes: '0' - 'iOS Fabric Debug JSC': - packager_platform: 'ios' - xcode_sdk: iphonesimulator - xcode_scheme: 'RNTester' - xcode_configuration: 'Debug' - xcode_destination: 'platform=iOS Simulator,OS=$(ios_version),name=$(ios_simulator)' - xcode_actions: 'build' # https://github.com/facebook/react-native/issues/39719 Tests fail on RNTester with `RCT_NEW_ARCH_ENABLED` - xcode_extraArgs: '-xcconfig $(Build.Repository.LocalPath)/.ado/xcconfig/debug_overrides.xcconfig' - new_arch_enabled: '1' - use_hermes: '0' - 'iOS Fabric Release JSC': - packager_platform: 'ios' - xcode_sdk: iphonesimulator - xcode_scheme: 'RNTester' - xcode_configuration: 'Release' - xcode_destination: 'platform=iOS Simulator,OS=$(ios_version),name=$(ios_simulator)' - xcode_actions: 'build' - xcode_extraArgs: '-xcconfig $(Build.Repository.LocalPath)/.ado/xcconfig/release_overrides.xcconfig' - new_arch_enabled: '1' - use_hermes: '0' - 'macOS Fabric Debug JSC': - packager_platform: 'macos' - xcode_sdk: macosx - xcode_scheme: 'RNTester-macOS' - xcode_configuration: 'Debug' - xcode_destination: 'platform=macOS,arch=x86_64' - xcode_actions: 'build' # https://github.com/facebook/react-native/issues/39719 Tests fail on RNTester with `RCT_NEW_ARCH_ENABLED` - xcode_extraArgs: '-xcconfig $(Build.Repository.LocalPath)/.ado/xcconfig/debug_overrides.xcconfig' - new_arch_enabled: '1' - use_hermes: '0' - 'macOS Fabric Release JSC': - packager_platform: 'macos' - xcode_sdk: macosx - xcode_scheme: 'RNTester-macOS' - xcode_configuration: 'Release' - xcode_destination: 'platform=macOS,arch=x86_64' - xcode_actions: 'build' - xcode_extraArgs: '-xcconfig $(Build.Repository.LocalPath)/.ado/xcconfig/release_overrides.xcconfig' - new_arch_enabled: '1' - use_hermes: '0' - # Disable Hermes Jobs for now - # 'iOS Paper Debug Hermes': - # packager_platform: 'ios' - # xcode_sdk: iphonesimulator - # xcode_scheme: 'RNTester' - # xcode_configuration: 'Debug' - # xcode_destination: 'platform=iOS Simulator,OS=$(ios_version),name=$(ios_simulator)' - # xcode_actions: 'build test' - # xcode_extraArgs: '-xcconfig $(Build.Repository.LocalPath)/.ado/xcconfig/debug_overrides.xcconfig' - # new_arch_enabled: '0' - # use_hermes: '1' - # 'iOS Paper Release Hermes': - # packager_platform: 'ios' - # xcode_sdk: iphonesimulator - # xcode_scheme: 'RNTester' - # xcode_configuration: 'Release' - # xcode_destination: 'platform=iOS Simulator,OS=$(ios_version),name=$(ios_simulator)' - # xcode_extraArgs: '-xcconfig $(Build.Repository.LocalPath)/.ado/xcconfig/release_overrides.xcconfig' - # xcode_actions: 'build' - # new_arch_enabled: '0' - # use_hermes: '1' - # 'macOS Paper Debug Hermes': - # packager_platform: 'macos' - # xcode_sdk: macosx - # xcode_scheme: 'RNTester-macOS' - # xcode_configuration: 'Debug' - # xcode_destination: 'platform=macOS,arch=x86_64' - # xcode_actions: 'build test' - # xcode_extraArgs: '-xcconfig $(Build.Repository.LocalPath)/.ado/xcconfig/debug_overrides.xcconfig' - # new_arch_enabled: '0' - # use_hermes: '1' - # 'macOS Paper Release Hermes': - # packager_platform: 'macos' - # xcode_sdk: macosx - # xcode_scheme: 'RNTester-macOS' - # xcode_configuration: 'Release' - # xcode_destination: 'platform=macOS,arch=x86_64' - # xcode_actions: 'build' - # xcode_extraArgs: '-xcconfig $(Build.Repository.LocalPath)/.ado/xcconfig/release_overrides.xcconfig' - # new_arch_enabled: '0' - # use_hermes: '1' - # 'iOS Fabric Debug Hermes': - # packager_platform: 'ios' - # xcode_sdk: iphonesimulator - # xcode_scheme: 'RNTester' - # xcode_configuration: 'Debug' - # xcode_destination: 'platform=iOS Simulator,OS=$(ios_version),name=$(ios_simulator)' - # xcode_actions: 'build' # https://github.com/facebook/react-native/issues/39719 Tests fail on RNTester with `RCT_NEW_ARCH_ENABLED` - # xcode_extraArgs: '-xcconfig $(Build.Repository.LocalPath)/.ado/xcconfig/debug_overrides.xcconfig' - # new_arch_enabled: '1' - # use_hermes: '1' - # 'iOS Fabric Release Hermes': - # packager_platform: 'ios' - # xcode_sdk: iphonesimulator - # xcode_scheme: 'RNTester' - # xcode_configuration: 'Release' - # xcode_destination: 'platform=iOS Simulator,OS=$(ios_version),name=$(ios_simulator)' - # xcode_actions: 'build' - # xcode_extraArgs: '-xcconfig $(Build.Repository.LocalPath)/.ado/xcconfig/release_overrides.xcconfig' - # new_arch_enabled: '1' - # use_hermes: '0' - # 'macOS Fabric Debug Hermes': - # packager_platform: 'macos' - # xcode_sdk: macosx - # xcode_scheme: 'RNTester-macOS' - # xcode_configuration: 'Debug' - # xcode_destination: 'platform=macOS,arch=x86_64' - # xcode_actions: 'build' # https://github.com/facebook/react-native/issues/39719 Tests fail on RNTester with `RCT_NEW_ARCH_ENABLED` - # xcode_extraArgs: '-xcconfig $(Build.Repository.LocalPath)/.ado/xcconfig/debug_overrides.xcconfig' - # new_arch_enabled: '1' - # use_hermes: '1' - # 'macOS Fabric Release Hermes': - # packager_platform: 'macos' - # xcode_sdk: macosx - # xcode_scheme: 'RNTester-macOS' - # xcode_configuration: 'Release' - # xcode_destination: 'platform=macOS,arch=x86_64' - # xcode_actions: 'build' - # xcode_extraArgs: '-xcconfig $(Build.Repository.LocalPath)/.ado/xcconfig/release_overrides.xcconfig' - # new_arch_enabled: '1' - # use_hermes: '1' - pool: - vmImage: $(VmImageApple) - demands: ['xcode', 'sh', 'npm'] - timeoutInMinutes: 90 # how long to run the job before automatically cancelling - cancelTimeoutInMinutes: 5 # how much time to give 'run always even if cancelled tasks' before killing them - steps: - - template: templates/apple-job-react-native.yml - parameters: - packager_platform: $(packager_platform) - xcode_sdk: $(xcode_sdk) - xcode_configuration: $(xcode_configuration) - xcode_scheme: $(xcode_scheme) - xcode_actions: $(xcode_actions) - xcode_destination: $(xcode_destination) - slice_name: $(slice_name) - xcode_version: $(xcode_version) - xcode_extraArgs: $(xcode_extraArgs) + - stage: JSOnly + dependsOn: [] + jobs: + - template: /.ado/jobs/test-javascript.yml@self - - job: CliInit - displayName: Verify react-native-macos-init - strategy: - matrix: - MacDebug: - configuration: Debug - pool: - vmImage: $(VmImageApple) - demands: ['xcode', 'sh', 'npm'] - steps: - - template: templates/react-native-macos-init.yml - parameters: - configuration: $(configuration) + - template: /.ado/jobs/npm-publish-dry-run.yml@self - - job: NPMPublishDryRun - displayName: NPM Publish Dry Run - pool: - vmImage: $(VmImageApple) - timeoutInMinutes: 60 # how long to run the job before automatically cancelling - cancelTimeoutInMinutes: 5 # how much time to give 'run always even if cancelled tasks' before killing them - steps: - - checkout: self # self represents the repo where the initial Pipelines YAML file was found - clean: true # whether to fetch clean each time - # fetchDepth: 2 # the depth of commits to ask Git to fetch - lfs: false # whether to download Git-LFS files - submodules: recursive # set to 'true' for a single level of submodules or 'recursive' to get submodules of submodules - persistCredentials: true # set to 'true' to leave the OAuth token in the Git config after the initial fetch + - stage: Integration + dependsOn: [] + jobs: + - template: /.ado/jobs/test-react-native-macos-init.yml@self - - template: templates/apple-job-publish.yml - parameters: - build_type: 'dry-run' + # - template: /.ado/jobs/react-native-test-app-integration.yml@self \ No newline at end of file diff --git a/.ado/jobs/build-test-rntester.yml b/.ado/jobs/build-test-rntester.yml new file mode 100644 index 00000000000000..bfee842fac2946 --- /dev/null +++ b/.ado/jobs/build-test-rntester.yml @@ -0,0 +1,164 @@ +parameters: + - name: appleBuildMatrix + type: object + default: + - name: macos_oldarch_jsc + friendly_name: 'macOS, Old Arch, JSC' + sdk: macosx + scheme: RNTester-macOS + packager_platform: 'macos' + new_arch_enabled: '0' + use_hermes: '0' + - name: macos_newarch_jsc + friendly_name: 'macOS, New Arch, JSC' + sdk: macosx + scheme: RNTester-macOS + packager_platform: 'macos' + new_arch_enabled: '1' + use_hermes: '0' + # - name: macos_oldarch_hermes + # friendly_name: 'macOS, Old Arch, Hermes' + # sdk: macosx + # scheme: RNTester-macOS + # packager_platform: 'macos' + # new_arch_enabled: '1' + # use_hermes: '1' + # - name: macos_newarch_hermes + # friendly_name: 'macOS, New Arch, Hermes' + # sdk: macosx + # scheme: RNTester-macOS + # packager_platform: 'macos' + # new_arch_enabled: '1' + # use_hermes: '1' + - name: ios_oldarch_jsc + friendly_name: 'iOS, Old Arch, JSC' + sdk: iphonesimulator + scheme: RNTester + packager_platform: 'ios' + new_arch_enabled: '0' + use_hermes: '0' + - name: ios_newarch_jsc + friendly_name: 'iOS, New Arch, JSC' + sdk: iphonesimulator + scheme: RNTester + packager_platform: 'ios' + new_arch_enabled: '1' + use_hermes: '0' + # - name: ios_oldarch_hermes + # friendly_name: 'iOS, Old Arch, Hermes' + # sdk: iphonesimulator + # scheme: RNTester + # packager_platform: 'ios' + # new_arch_enabled: '1' + # use_hermes: '1' + # - name: ios_newarch_hermes + # friendly_name: 'iOS, New Arch, Hermes' + # sdk: iphonesimulator + # scheme: RNTester + # packager_platform: 'ios' + # new_arch_enabled: '1' + # use_hermes: '1' + - name: xros_oldarch_jsc + friendly_name: 'xrOS, Old Arch, JSC' + sdk: xrsimulator + scheme: RNTester-visionOS + packager_platform: 'ios' + new_arch_enabled: '0' + use_hermes: '0' + - name: xros_newarch_jsc + friendly_name: 'xrOS, New Arch, JSC' + sdk: xrsimulator + scheme: RNTester-visionOS + packager_platform: 'ios' + new_arch_enabled: '1' + use_hermes: '0' + # - name: xros_oldarch_hermes + # friendly_name: 'xrOS, Old Arch, Hermes' + # sdk: xrsimulator + # scheme: RNTester-visionOS + # packager_platform: 'ios' + # new_arch_enabled: '1' + # use_hermes: '1' + # - name: xros_newarch_hermes + # friendly_name: 'xrOS, New Arch, Hermes' + # sdk: xrsimulator + # scheme: RNTester-visionOS + # packager_platform: 'ios' + # new_arch_enabled: '1' + # use_hermes: '1' + +jobs: + - ${{ each slice in parameters.appleBuildMatrix }}: + - job: ${{ slice.name }} + displayName: ${{ slice.friendly_name }} + pool: + vmImage: $(vmImageApple) + timeoutInMinutes: 90 + cancelTimeoutInMinutes: 5 + steps: + - template: /.ado/templates/apple-tools-setup.yml@self + + - task: CmdLine@2 + displayName: yarn install + inputs: + script: | + set -eox pipefail + yarn install --immutable + + - task: CmdLine@2 + displayName: pod install + inputs: + script: | + set -eox pipefail + cd packages/rn-tester + bundle install + bundle exec pod install --verbose + env: + RCT_NEW_ARCH_ENABLED: ${{ slice.new_arch_enabled }} + USE_HERMES: ${{ slice.use_hermes }} + + - task: CmdLine@2 + displayName: Build ${{ slice.scheme }} + inputs: + script: | + set -eox pipefail + ./.ado/scripts/xcodebuild.sh packages/rn-tester/RNTesterPods.xcworkspace ${{ slice.sdk }} ${{ slice.scheme }} build + env: + CCACHE_DISABLE: 1 + + # Skip testing on visionOS via the conditions below + + - ${{ if ne(slice.scheme, 'RNTester-visionOS') }}: + - task: ShellScript@2 + displayName: 'Setup packager and WebSocket test server' + inputs: + scriptPath: '.ado/scripts/ado-test-setup.sh' + disableAutoCwd: true + cwd: '' + + - bash: | + echo Preparing the packager for platform $PLATFORM + curl --retry-connrefused --connect-timeout 5 --max-time 10 --retry 10 --retry-delay 5 --retry-max-time 120 "http://localhost:8081/packages/rn-tester/js/RNTesterApp.${PLATFORM}.bundle?platform=${PLATFORM}&dev=true" -o /dev/null + curl --retry-connrefused --connect-timeout 5 --max-time 10 --retry 10 --retry-delay 5 --retry-max-time 120 "http://localhost:8081/packages/rn-tester/js/RNTesterApp.${PLATFORM}.bundle?platform=${PLATFORM}&dev=true&minify=false" -o /dev/null + curl --retry-connrefused --connect-timeout 5 --max-time 10 --retry 10 --retry-delay 5 --retry-max-time 120 "http://localhost:8081/IntegrationTests/IntegrationTestsApp.bundle?platform=${PLATFORM}&dev=true" -o /dev/null + curl --retry-connrefused --connect-timeout 5 --max-time 10 --retry 10 --retry-delay 5 --retry-max-time 120 "http://localhost:8081/IntegrationTests/RCTRootViewIntegrationTestApp.bundle?platform=${PLATFORM}&dev=true" -o /dev/null + env: + PLATFORM: ${{ slice.packager_platform }} + displayName: 'curl the packager' + + - task: CmdLine@2 + displayName: Test ${{ slice.scheme }} + inputs: + script: | + set -eox pipefail + ./.ado/scripts/xcodebuild.sh packages/rn-tester/RNTesterPods.xcworkspace ${{ slice.sdk }} ${{ slice.scheme }} test + env: + CCACHE_DISABLE: 1 + + - task: ShellScript@2 + displayName: 'Cleanup packager and WebSocket test server' + inputs: + scriptPath: '.ado/scripts/ado-test-cleanup.sh' + disableAutoCwd: true + cwd: '' + condition: always() diff --git a/.ado/jobs/npm-publish-dry-run.yml b/.ado/jobs/npm-publish-dry-run.yml new file mode 100644 index 00000000000000..9f8e267b3e7d12 --- /dev/null +++ b/.ado/jobs/npm-publish-dry-run.yml @@ -0,0 +1,18 @@ +jobs: +- job: NPMPublishDryRun + displayName: NPM Publish Dry Run + pool: + vmImage: $(VmImageApple) + timeoutInMinutes: 60 # how long to run the job before automatically cancelling + cancelTimeoutInMinutes: 5 # how much time to give 'run always even if cancelled tasks' before killing them + steps: + - checkout: self # self represents the repo where the initial Pipelines YAML file was found + clean: true # whether to fetch clean each time + # fetchDepth: 2 # the depth of commits to ask Git to fetch + lfs: false # whether to download Git-LFS files + submodules: recursive # set to 'true' for a single level of submodules or 'recursive' to get submodules of submodules + persistCredentials: true # set to 'true' to leave the OAuth token in the Git config after the initial fetch + + - template: /.ado/templates/apple-steps-publish.yml@self + parameters: + build_type: 'dry-run' diff --git a/.ado/apple-integration.yml b/.ado/jobs/react-native-test-app-integration.yml similarity index 90% rename from .ado/apple-integration.yml rename to .ado/jobs/react-native-test-app-integration.yml index 81b20b0ffbff5f..45d8abfba8a89a 100644 --- a/.ado/apple-integration.yml +++ b/.ado/jobs/react-native-test-app-integration.yml @@ -1,37 +1,14 @@ -name: Integrate $(Date:yyyyMMdd).$(Rev:.r) -variables: - - template: variables/vars.yml -trigger: - branches: - include: - - main - - '*-stable' - paths: - exclude: - - '*.md' -pr: - branches: - include: - - main - - '*-stable' - paths: - exclude: - - '*.md' jobs: - job: react_native_test_app displayName: react-native-test-app pool: vmImage: $(VmImageApple) - demands: ['npm', 'sh', 'xcode'] workspace: clean: all timeoutInMinutes: 60 cancelTimeoutInMinutes: 5 steps: - - template: templates/apple-tools-setup.yml - parameters: - slice_name: $(slice_name) - xcode_version: $(xcode_version) + - template: /.ado/templates/apple-tools-setup.yml@self - bash: | echo "##vso[task.setvariable variable=package_version]$(cat package.json | jq .version | awk '{ print substr($0, 2, length($0) - 2) }')" echo "##vso[task.setvariable variable=react_version]$(cat package.json | jq .peerDependencies.react)" @@ -74,7 +51,7 @@ jobs: cat package.json | jq .devDependencies displayName: Modify example app dependencies workingDirectory: react-native-test-app/example - - template: templates/verdaccio-init.yml + - template: /.ado/templates/verdaccio-init.yml@self - bash: | npx beachball publish --branch origin/$(System.PullRequest.TargetBranch) --no-push --registry http://localhost:4873 --yes --access public displayName: Publish beachball packages to verdaccio diff --git a/.ado/jobs/test-javascript.yml b/.ado/jobs/test-javascript.yml new file mode 100644 index 00000000000000..df02960074d1be --- /dev/null +++ b/.ado/jobs/test-javascript.yml @@ -0,0 +1,26 @@ +jobs: + - job: JavaScriptPR + displayName: Javascript PR + pool: + vmImage: $(VmImageApple) + steps: + - template: /.ado/templates/apple-tools-setup.yml@self + + - task: CmdLine@2 + displayName: yarn install + inputs: + script: yarn install --immutable + + - task: CmdLine@2 + displayName: yarn test-ci [test] + inputs: + script: 'yarn test-ci' + + - script: 'yarn flow-check' + displayName: 'yarn flow-check' + + - script: 'yarn lint' + displayName: 'yarn lint' + + - script: 'yarn format-check' + displayName: 'yarn format-check' diff --git a/.ado/jobs/test-react-native-macos-init.yml b/.ado/jobs/test-react-native-macos-init.yml new file mode 100644 index 00000000000000..f9e510126fa613 --- /dev/null +++ b/.ado/jobs/test-react-native-macos-init.yml @@ -0,0 +1,62 @@ +jobs: + - job: CliInit + displayName: Verify react-native-macos-init + pool: + vmImage: $(VmImageApple) + steps: + - checkout: self # self represents the repo where the initial Pipelines YAML file was found + clean: true # whether to fetch clean each time + # fetchDepth: 2 # the depth of commits to ask Git to fetch + lfs: false # whether to download Git-LFS files + submodules: false # set to 'true' for a single level of submodules or 'recursive' to get submodules of submodules + persistCredentials: false # set to 'true' to leave the OAuth token in the Git config after the initial fetch + + - template: /.ado/templates/apple-tools-setup.yml@self + + - template: /.ado/templates/verdaccio-init.yml@self + + - template: /.ado/templates/verdaccio-publish.yml@self + + # First do a build of the local package, since we point the cli at the local files, it needs to be pre-built + - task: CmdLine@2 + displayName: yarn install (local react-native-macos) + inputs: + script: yarn install --immutable + + - task: CmdLine@2 + displayName: yarn install (local react-native-macos-init) + inputs: + script: | + cd packages/react-native-macos-init + yarn install --immutable + + - task: CmdLine@2 + displayName: yarn build (local react-native-macos-init) + inputs: + script: | + cd packages/react-native-macos-init + yarn build + + - task: CmdLine@2 + displayName: Init new project + inputs: + script: npx --yes react-native@0.71.5 init testcli --template react-native@0.71.5 --skip-install + workingDirectory: $(Agent.BuildDirectory) + + - task: CmdLine@2 + displayName: yarn install (local react-native-macos-init) + inputs: + script: yarn install --immutable + workingDirectory: $(Agent.BuildDirectory)/testcli + + - task: CmdLine@2 + displayName: Apply macos template + inputs: + script: npx react-native-macos-init --version latest --overwrite --prerelease + workingDirectory: $(Agent.BuildDirectory)/testcli + + - task: CmdLine@2 + displayName: Run macos [test] + inputs: + script: npx react-native run-macos + workingDirectory: $(Agent.BuildDirectory)/testcli diff --git a/.ado/publish.yml b/.ado/publish.yml index d54a966c511242..b1ff1fea73e895 100644 --- a/.ado/publish.yml +++ b/.ado/publish.yml @@ -16,7 +16,7 @@ trigger: pr: none variables: - - template: variables/vars.yml + - template: /.ado/variables/vars.yml@self - group: React-native-macos Secrets - group: InfoSec-SecurityResults - name: tags @@ -79,11 +79,11 @@ extends: # - Skipping the actual `git tag`, `git push`, and `npm publish steps as we do that here instead - ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/main') }}: - - template: .ado/templates/apple-job-publish.yml@self + - template: .ado/templates/apple-steps-publish.yml@self parameters: build_type: nightly - ${{ elseif endsWith(variables['Build.SourceBranchName'], '-stable') }}: - - template: .ado/templates/apple-job-publish.yml@self + - template: .ado/templates/apple-steps-publish.yml@self parameters: build_type: release - ${{ else }}: diff --git a/.ado/ado-test-cleanup.sh b/.ado/scripts/ado-test-cleanup.sh similarity index 100% rename from .ado/ado-test-cleanup.sh rename to .ado/scripts/ado-test-cleanup.sh diff --git a/.ado/ado-test-setup.sh b/.ado/scripts/ado-test-setup.sh similarity index 100% rename from .ado/ado-test-setup.sh rename to .ado/scripts/ado-test-setup.sh diff --git a/.ado/scripts/xcodebuild.sh b/.ado/scripts/xcodebuild.sh new file mode 100755 index 00000000000000..243cd0fd8e38e2 --- /dev/null +++ b/.ado/scripts/xcodebuild.sh @@ -0,0 +1,77 @@ +#!/bin/bash +set -eox pipefail + +workspace=$1 +sdk=$2 +scheme=$3 +action=$4 + +shift 4 + + +if [[ $sdk == iphoneos || $sdk == iphonesimulator ]]; then + if [[ $action == 'test' || $action == 'test-without-building' ]]; then + device=$(xcrun simctl list devices iPhone available) + re='iPhone [0-9]+ \(([-0-9A-Fa-f]+)\)' + [[ $device =~ $re ]] || exit 1 + shift || true + destination="-destination \"platform=iOS Simulator,id=${BASH_REMATCH[1]}\"" + else + destination='-destination "generic/platform=iOS Simulator"' + fi +elif [[ $sdk == macosx ]]; then + destination='' +elif [[ $sdk == xros || $sdk == xrsimulator ]]; then + if [[ $action == 'test' || $action == 'test-without-building' ]]; then + device=$(xcrun simctl list devices visionOS available) + re='Apple Vision Pro \(([-0-9A-Fa-f]+)\)' + [[ $device =~ $re ]] || exit 1 + shift || true + destination="-destination \"platform=visionOS Simulator,id=${BASH_REMATCH[1]}\"" + else + destination='-destination "generic/platform=visionOS Simulator"' + fi +else + echo "Cannot detect sdk: $sdk" + exit 1 +fi + +build_cmd=$( + echo xcodebuild \ + -workspace "$workspace" \ + -scheme "$scheme" \ + -sdk "$sdk" \ + "$destination" \ + -derivedDataPath $(dirname $workspace)/build \ + CODE_SIGNING_ALLOWED=NO \ + COMPILER_INDEX_STORE_ENABLE=NO \ + "$action" \ + "$@" \ + +) + +if [[ "$CCACHE_DISABLE" != "1" ]]; then + if ! command -v ccache 1> /dev/null; then + brew install ccache + fi + + CCACHE_HOME=$(dirname $(dirname $(which ccache)))/opt/ccache + + export CCACHE_DIR="$(git rev-parse --show-toplevel)/.ccache" + + export CC="${CCACHE_HOME}/libexec/clang" + export CXX="${CCACHE_HOME}/libexec/clang++" + export CMAKE_C_COMPILER_LAUNCHER=$(which ccache) + export CMAKE_CXX_COMPILER_LAUNCHER=$(which ccache) + + ccache --zero-stats 1> /dev/null +fi +if ! command -v xcbeautify 1> /dev/null; then + brew install xcbeautify +fi + +eval "$build_cmd" | xcbeautify --report junit + +if [[ "$CCACHE_DISABLE" != "1" ]]; then + ccache --show-stats --verbose +fi diff --git a/.ado/templates/apple-install-dependencies.yml b/.ado/templates/apple-install-dependencies.yml deleted file mode 100644 index 77b38323cb23e8..00000000000000 --- a/.ado/templates/apple-install-dependencies.yml +++ /dev/null @@ -1,12 +0,0 @@ -steps: - - task: CmdLine@2 - displayName: yarn install - inputs: - script: yarn install --frozen-lockfile - - - task: CmdLine@2 - displayName: bundle install - inputs: - script: | - cd packages/rn-tester - bundle install diff --git a/.ado/templates/apple-job-javascript.yml b/.ado/templates/apple-job-javascript.yml deleted file mode 100644 index 149edc15c422d3..00000000000000 --- a/.ado/templates/apple-job-javascript.yml +++ /dev/null @@ -1,28 +0,0 @@ -parameters: - slice_name: '' - xcode_version: '' - -steps: - - template: apple-tools-setup.yml - parameters: - slice_name: ${{ parameters.slice_name }} - xcode_version: ${{ parameters.xcode_version }} - - - task: CmdLine@2 - displayName: yarn install - inputs: - script: yarn install --frozen-lockfile - - - task: CmdLine@2 - displayName: yarn test-ci [test] - inputs: - script: 'yarn test-ci' - - - script: 'yarn flow-check' - displayName: 'yarn flow-check' - - - script: 'yarn lint' - displayName: 'yarn lint' - - - script: 'yarn format-check' - displayName: 'yarn format-check' diff --git a/.ado/templates/apple-job-react-native.yml b/.ado/templates/apple-job-react-native.yml deleted file mode 100644 index f97bcc2332bbe7..00000000000000 --- a/.ado/templates/apple-job-react-native.yml +++ /dev/null @@ -1,77 +0,0 @@ -parameters: - packager_platform: '' - xcode_sdk: '' - xcode_configuration: '' - xcode_scheme: '' - xcode_actions: '' - xcode_destination: '' - xcode_extraArgs: '' - xcode_version: '' - new_arch_enabled: '' - use_hermes: '' - -steps: - - template: apple-tools-setup.yml - parameters: - slice_name: ${{ parameters.slice_name }} - xcode_version: ${{ parameters.xcode_version }} - - - task: CmdLine@2 - displayName: yarn install - inputs: - script: yarn install --frozen-lockfile - - - task: CmdLine@2 - displayName: pod install - inputs: - script: | - cd packages/rn-tester - bundle install - bundle exec pod install - env: - RCT_NEW_ARCH_ENABLED: $(new_arch_enabled) - USE_HERMES: $(use_hermes) - - - task: ShellScript@2 - displayName: 'Setup packager and WebSocket test server' - inputs: - scriptPath: '.ado/ado-test-setup.sh' - disableAutoCwd: true - cwd: '' - - - bash: | - echo Preparing the packager for platform $PLATFORM - curl --retry-connrefused --connect-timeout 5 --max-time 10 --retry 10 --retry-delay 5 --retry-max-time 120 "http://localhost:8081/packages/rn-tester/js/RNTesterApp.${PLATFORM}.bundle?platform=${PLATFORM}&dev=true" -o /dev/null - curl --retry-connrefused --connect-timeout 5 --max-time 10 --retry 10 --retry-delay 5 --retry-max-time 120 "http://localhost:8081/packages/rn-tester/js/RNTesterApp.${PLATFORM}.bundle?platform=${PLATFORM}&dev=true&minify=false" -o /dev/null - curl --retry-connrefused --connect-timeout 5 --max-time 10 --retry 10 --retry-delay 5 --retry-max-time 120 "http://localhost:8081/IntegrationTests/IntegrationTestsApp.bundle?platform=${PLATFORM}&dev=true" -o /dev/null - curl --retry-connrefused --connect-timeout 5 --max-time 10 --retry 10 --retry-delay 5 --retry-max-time 120 "http://localhost:8081/IntegrationTests/RCTRootViewIntegrationTestApp.bundle?platform=${PLATFORM}&dev=true" -o /dev/null - env: - PLATFORM: ${{ parameters.packager_platform }} - displayName: 'curl the packager' - - - task: Xcode@5 - displayName: 'Xcode ${{ parameters.xcode_actions }} ${{ parameters.xcode_configuration }} ${{ parameters.xcode_sdk }} ${{ parameters.xcode_scheme }}' - inputs: - actions: '${{ parameters.xcode_actions }}' - configuration: ${{ parameters.xcode_configuration }} - sdk: ${{ parameters.xcode_sdk }} - xcWorkspacePath: packages/rn-tester/RNTesterPods.xcworkspace - scheme: ${{ parameters.xcode_scheme }} - xcodeVersion: specifyPath - xcodeDeveloperDir: ${{ parameters.xcode_version }} - signingOption: auto - packageApp: false - teamId: '$(XCodeSigningMicrosoftTeamID)' - args: '-destination "${{ parameters.xcode_destination }}" -verbose -derivedDataPath DerivedData ${{ parameters.xcode_extraArgs }}' - exportPath: '$(agent.builddirectory)/output/${{ parameters.xcode_sdk }}/${{ parameters.xcode_configuration }}' - useXcpretty: true - publishJUnitResults: true - xctoolReporter: 'junit:test-results.xml' - - - task: ShellScript@2 - displayName: 'Cleanup packager and WebSocket test server' - inputs: - scriptPath: '.ado/ado-test-cleanup.sh' - disableAutoCwd: true - cwd: '' - condition: always() diff --git a/.ado/templates/apple-job-publish.yml b/.ado/templates/apple-steps-publish.yml similarity index 89% rename from .ado/templates/apple-job-publish.yml rename to .ado/templates/apple-steps-publish.yml index 20549e00ac1222..a2dc3987245491 100644 --- a/.ado/templates/apple-job-publish.yml +++ b/.ado/templates/apple-steps-publish.yml @@ -2,9 +2,12 @@ parameters: build_type: '' steps: - - template: apple-tools-setup.yml + - template: /.ado/templates/apple-tools-setup.yml@self - - template: apple-install-dependencies.yml + - task: CmdLine@2 + displayName: yarn install (local react-native-macos) + inputs: + script: yarn install --immutable # Extra steps needed for *-stable releases - ${{ if eq( parameters['build_type'], 'release') }}: diff --git a/.ado/templates/apple-tools-setup.yml b/.ado/templates/apple-tools-setup.yml index 9b826746d2814b..c1b840f7ac9460 100644 --- a/.ado/templates/apple-tools-setup.yml +++ b/.ado/templates/apple-tools-setup.yml @@ -10,16 +10,4 @@ steps: brew bundle --file .ado/Brewfile cat .ado/Brewfile.lock.json - - ${{ if ne(parameters.xcode_version, '')}}: - - template: apple-xcode-select.yml - parameters: - slice_name: ${{ parameters.slice_name }} - xcode_version: ${{ parameters.xcode_version }} - - - script: | - xcrun simctl list - displayName: 'List Simulators' - - - script: | - xcrun --sdk iphonesimulator --show-sdk-version - displayName: 'Determine iOS SDK version' \ No newline at end of file + - template: /.ado/templates/apple-xcode-select.yml@self \ No newline at end of file diff --git a/.ado/templates/apple-xcode-select.yml b/.ado/templates/apple-xcode-select.yml index ddbb8f5d29203c..5cbc4e4301b047 100644 --- a/.ado/templates/apple-xcode-select.yml +++ b/.ado/templates/apple-xcode-select.yml @@ -1,13 +1,5 @@ -# -# Task Group: Xcode select proper version -# - -parameters: - slice_name: '' - xcode_version: '' - steps: - bash: | - sudo xcode-select --switch '${{ parameters.xcode_version }}' - displayName: Switch Xcode version ${{ parameters.xcode_version }} for ${{ parameters.slice_name }} + sudo xcode-select --switch $(xcode_version) + displayName: Use $(xcode_friendly_name) failOnStderr: true diff --git a/.ado/templates/react-native-macos-init.yml b/.ado/templates/react-native-macos-init.yml deleted file mode 100644 index 02b0a1931c6f70..00000000000000 --- a/.ado/templates/react-native-macos-init.yml +++ /dev/null @@ -1,59 +0,0 @@ -parameters: - configuration: - -steps: - - checkout: self # self represents the repo where the initial Pipelines YAML file was found - clean: true # whether to fetch clean each time - # fetchDepth: 2 # the depth of commits to ask Git to fetch - lfs: false # whether to download Git-LFS files - submodules: false # set to 'true' for a single level of submodules or 'recursive' to get submodules of submodules - persistCredentials: false # set to 'true' to leave the OAuth token in the Git config after the initial fetch - - - template: apple-tools-setup.yml - - - template: verdaccio-init.yml - - template: verdaccio-publish.yml - - # First do a build of the local package, since we point the cli at the local files, it needs to be pre-built - - task: CmdLine@2 - displayName: yarn install (local react-native-macos) - inputs: - script: yarn install --frozen-lockfile - - - task: CmdLine@2 - displayName: yarn install (local react-native-macos-init) - inputs: - script: | - cd packages/react-native-macos-init - yarn install --frozen-lockfile - - - task: CmdLine@2 - displayName: yarn build (local react-native-macos-init) - inputs: - script: | - cd packages/react-native-macos-init - yarn build - - - task: CmdLine@2 - displayName: Init new project - inputs: - script: npx --yes react-native@0.71.5 init testcli --template react-native@0.71.5 --skip-install - workingDirectory: $(Agent.BuildDirectory) - - - task: CmdLine@2 - displayName: yarn install (local react-native-macos-init) - inputs: - script: yarn install --frozen-lockfile - workingDirectory: $(Agent.BuildDirectory)/testcli - - - task: CmdLine@2 - displayName: Apply macos template - inputs: - script: npx react-native-macos-init --version latest --overwrite --prerelease - workingDirectory: $(Agent.BuildDirectory)/testcli - - - task: CmdLine@2 - displayName: Run macos [test] - inputs: - script: npx react-native run-macos - workingDirectory: $(Agent.BuildDirectory)/testcli diff --git a/.ado/variables/vars.yml b/.ado/variables/vars.yml index 422df9f0049115..e976033d97f3a4 100644 --- a/.ado/variables/vars.yml +++ b/.ado/variables/vars.yml @@ -1,6 +1,6 @@ variables: - VmImageApple: macOS-13 - slice_name: 'Xcode_15.2' + VmImageApple: macos-latest-internal + xcode_friendly_name: 'Xcode 15.2' xcode_version: '/Applications/Xcode_15.2.app' ios_version: '17.2' ios_simulator: 'iPhone 15' diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index bae0e2efed51f9..b94dad7fccea29 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -42,7 +42,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v1 + uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -67,4 +67,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + uses: github/codeql-action/analyze@v2 diff --git a/.gitignore b/.gitignore index d4d860c3f30018..48989b4527a75c 100644 --- a/.gitignore +++ b/.gitignore @@ -160,9 +160,13 @@ package-lock.json .circleci/generated_config.yml #[macOS -#Yarn +# Yarn .yarn/* !.yarn/patches/ !.yarn/plugins/ !.yarn/releases/ + +# Ccache +.ccache + # macOS] \ No newline at end of file diff --git a/docs/Releases.md b/docs/Releases.md index 184014a0beb766..0dbec130385e7f 100644 --- a/docs/Releases.md +++ b/docs/Releases.md @@ -53,13 +53,13 @@ The Publish flow does the following: An attempt was made to simplify the steps above and re-use more of the scripts that React Native Core uses. Namely: - Use more of the RN scripts to handle preparing the build. The intention is to leverage new features that have been added to those scripts, like the ability to build nightlies and dry runs, along with increased safety via checks on the version number. - Don't bother with manually removing and restoring workspace config. We don't need the `private` field set anyway since we don't have beachball auto-publishing or anything. -- Extract all the steps to a template `apple-job-publish` with a parameter to switch between nightlies, dry runs, and releases. This was done so that we can now add a new "NPM Publish Dry Run" step to our PR checks. +- Extract all the steps to a template `apple-steps-publish` with a parameter to switch between nightlies, dry runs, and releases. This was done so that we can now add a new "NPM Publish Dry Run" step to our PR checks. We don't however use the scripts from upstream to publish to NPM or Github: we still keep that as separate steps in Azure Pipelines. In the future, we can look into removing these steps and just using the scripts directly. The Publish flow does the following: -1. Call the template `apple-job-publish` with either nightly or release as the build type based on branch name. +1. Call the template `apple-steps-publish` with either nightly or release as the build type based on branch name. 2. The template will do the following steps based on build type: - If we're a *nightly* or *dry run* - Just call `publish-npm.js`, as this will take care of bumping versions, and publishing and no pushing back to Github is needed diff --git a/packages/react-native/ReactCommon/react/renderer/core/ConcreteComponentDescriptor.h b/packages/react-native/ReactCommon/react/renderer/core/ConcreteComponentDescriptor.h index a57c3b1318f9bd..9ed2c8ed7f66b5 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/ConcreteComponentDescriptor.h +++ b/packages/react-native/ReactCommon/react/renderer/core/ConcreteComponentDescriptor.h @@ -156,10 +156,7 @@ class ConcreteComponentDescriptor : public ComponentDescriptor { ShadowNodeFamily::Shared createFamily( const ShadowNodeFamilyFragment& fragment) const override { return std::make_shared( - ShadowNodeFamilyFragment{ - fragment.tag, fragment.surfaceId, fragment.instanceHandle}, - eventDispatcher_, - *this); + fragment, eventDispatcher_, *this); } SharedEventEmitter createEventEmitter( diff --git a/packages/react-native/ReactCommon/react/renderer/core/ShadowNodeFamily.h b/packages/react-native/ReactCommon/react/renderer/core/ShadowNodeFamily.h index ff7e1e67bab21e..1fefb9532eae45 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/ShadowNodeFamily.h +++ b/packages/react-native/ReactCommon/react/renderer/core/ShadowNodeFamily.h @@ -28,14 +28,11 @@ class State; * about a `ShadowNodeFamily`. Pelase define specific purpose containers in * those cases. * - * Note: All of the fields are `const &` references (essentially just raw - * pointers) which means that the Fragment does not copy/store them nor - * retain ownership of them. */ struct ShadowNodeFamilyFragment { const Tag tag; const SurfaceId surfaceId; - const InstanceHandle::Shared& instanceHandle; + const std::shared_ptr instanceHandle; }; /* diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp index d802f24b3a9d3b..1b98aac8ce046b 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp +++ b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp @@ -291,8 +291,8 @@ ShadowTree::ShadowTree( layoutConstraints, layoutContext); - const auto fragment = ShadowNodeFamilyFragment{surfaceId, surfaceId, nullptr}; - auto family = globalRootComponentDescriptor->createFamily(fragment); + auto family = globalRootComponentDescriptor->createFamily( + {surfaceId, surfaceId, nullptr}); auto rootShadowNode = std::static_pointer_cast( globalRootComponentDescriptor->createShadowNode( diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp index 4a434560a4fe7d..a3a13faa055841 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp @@ -77,9 +77,8 @@ ShadowNode::Shared UIManager::createNode( PropsParserContext propsParserContext{surfaceId, *contextContainer_.get()}; - const auto fragment = - ShadowNodeFamilyFragment{tag, surfaceId, instanceHandle}; - auto family = componentDescriptor.createFamily(fragment); + auto family = + componentDescriptor.createFamily({tag, surfaceId, instanceHandle}); const auto props = componentDescriptor.cloneProps(propsParserContext, nullptr, rawProps); const auto state = componentDescriptor.createInitialState(props, family); diff --git a/packages/react-native/scripts/cocoapods/jsengine.rb b/packages/react-native/scripts/cocoapods/jsengine.rb index 12f8cd65674943..f68537db8365b8 100644 --- a/packages/react-native/scripts/cocoapods/jsengine.rb +++ b/packages/react-native/scripts/cocoapods/jsengine.rb @@ -30,5 +30,5 @@ def setup_hermes!(react_native_path: "../node_modules/react-native") hermestag = File.exist?(hermestag_file) ? File.read(hermestag_file).strip : '' pod 'hermes-engine', :podspec => "#{react_native_path}/sdks/hermes-engine/hermes-engine.podspec", :tag => hermestag pod 'React-hermes', :path => "#{react_native_path}/ReactCommon/hermes" - pod 'libevent', '~> 2.1.12' + pod 'libevent', :podspec => "#{react_native_path}/third-party-podspecs/libevent.podspec" # [visionOS] end diff --git a/packages/react-native/sdks/hermes-engine/hermes-engine.podspec b/packages/react-native/sdks/hermes-engine/hermes-engine.podspec index a4a617f5208c3d..e93303767e10d1 100644 --- a/packages/react-native/sdks/hermes-engine/hermes-engine.podspec +++ b/packages/react-native/sdks/hermes-engine/hermes-engine.podspec @@ -27,7 +27,7 @@ Pod::Spec.new do |spec| spec.license = package['license'] spec.author = "Facebook" spec.source = source - spec.platforms = { :osx => "10.13", :ios => "13.4" } + spec.platforms = { :osx => "10.13", :ios => "13.4", :visionos => "1.0" } spec.preserve_paths = '**/*.*' spec.source_files = '' diff --git a/packages/react-native/third-party-podspecs/libevent.podspec b/packages/react-native/third-party-podspecs/libevent.podspec new file mode 100644 index 00000000000000..5bfe218630c7ee --- /dev/null +++ b/packages/react-native/third-party-podspecs/libevent.podspec @@ -0,0 +1,395 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# +# This source code is licensed under the MIT license found in the +# LICENSE file in the root directory of this source tree. + +# Generated with: +# +# $ mkdir build && cd build +# $ cmake -G Ninja .. \ +# -DEVENT__DISABLE_OPENSSL:BOOL=ON \ +# -DEVENT__DISABLE_BENCHMARK:BOOL=ON \ +# -DEVENT__DISABLE_TESTS:BOOL=ON \ +# -DEVENT__DISABLE_REGRESS:BOOL=ON \ +# -DEVENT__DISABLE_SAMPLES:BOOL=ON +# $ cat include/event2/event-config.h +# +CONFIG_WITHOUT_OPENSSL = <<-END_OF_CONFIG +/* event-config.h + * + * This file was generated by cmake when the makefiles were generated. + * + * DO NOT EDIT THIS FILE. + * + * Do not rely on macros in this file existing in later versions. + */ +#ifndef EVENT2_EVENT_CONFIG_H_INCLUDED_ +#define EVENT2_EVENT_CONFIG_H_INCLUDED_ +/* Numeric representation of the version */ +#define EVENT__NUMERIC_VERSION 0x02020001 +#define EVENT__PACKAGE_VERSION "2.2.0" +#define EVENT__VERSION_MAJOR 2 +#define EVENT__VERSION_MINOR 2 +#define EVENT__VERSION_PATCH 0 +/* Version number of package */ +#define EVENT__VERSION "2.2.0-alpha-dev" +/* Name of package */ +#define EVENT__PACKAGE "libevent" +/* Define to the address where bug reports for this package should be sent. */ +#define EVENT__PACKAGE_BUGREPORT "" +/* Define to the full name of this package. */ +#define EVENT__PACKAGE_NAME "" +/* Define to the full name and version of this package. */ +#define EVENT__PACKAGE_STRING "" +/* Define to the one symbol short name of this package. */ +#define EVENT__PACKAGE_TARNAME "" +/* Define if libevent should build without support for a debug mode */ +/* #undef EVENT__DISABLE_DEBUG_MODE */ +/* Define if libevent should not allow replacing the mm functions */ +/* #undef EVENT__DISABLE_MM_REPLACEMENT */ +/* Define if libevent should not be compiled with thread support */ +/* #undef EVENT__DISABLE_THREAD_SUPPORT */ +/* Define to 1 if you have the `accept4' function. */ +/* #undef EVENT__HAVE_ACCEPT4 */ +/* Define to 1 if you have the `arc4random' function. */ +#define EVENT__HAVE_ARC4RANDOM 1 +/* Define to 1 if you have the `arc4random_buf' function. */ +#define EVENT__HAVE_ARC4RANDOM_BUF 1 +/* Define to 1 if you have the `arc4random_addrandom' function. */ +#define EVENT__HAVE_ARC4RANDOM_ADDRANDOM 1 +/* Define if clock_gettime is available in libc */ +#define EVENT__DNS_USE_CPU_CLOCK_FOR_ID 1 +/* Define is no secure id variant is available */ +/* #undef EVENT__DNS_USE_GETTIMEOFDAY_FOR_ID */ +/* #undef EVENT__DNS_USE_FTIME_FOR_ID */ +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_ARPA_INET_H 1 +/* Define to 1 if you have the `clock_gettime' function. */ +#define EVENT__HAVE_CLOCK_GETTIME 1 +/* Define to 1 if you have the declaration of `CTL_KERN'. */ +#define EVENT__HAVE_DECL_CTL_KERN 1 +/* Define to 1 if you have the declaration of `KERN_ARND'. */ +#define EVENT__HAVE_DECL_KERN_ARND 0 +/* Define to 1 if you have `getrandom' function. */ +/* #undef EVENT__HAVE_GETRANDOM */ +/* Define if /dev/poll is available */ +/* #undef EVENT__HAVE_DEVPOLL */ +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_NETDB_H 1 +/* Define to 1 if fd_mask type is defined */ +#define EVENT__HAVE_FD_MASK 1 +/* Define to 1 if the header file defines TAILQ_FOREACH. */ +#define EVENT__HAVE_TAILQFOREACH 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_DLFCN_H 1 +/* Define if your system supports the epoll system calls */ +/* #undef EVENT__HAVE_EPOLL */ +/* Define to 1 if you have the `epoll_create1' function. */ +/* #undef EVENT__HAVE_EPOLL_CREATE1 */ +/* Define to 1 if you have the `epoll_ctl' function. */ +/* #undef EVENT__HAVE_EPOLL_CTL */ +/* Define if your system supports the wepoll module */ +/* #undef EVENT__HAVE_WEPOLL */ +/* Define to 1 if you have the `eventfd' function. */ +/* #undef EVENT__HAVE_EVENTFD */ +/* Define if your system supports event ports */ +/* #undef EVENT__HAVE_EVENT_PORTS */ +/* Define to 1 if you have the `fcntl' function. */ +#define EVENT__HAVE_FCNTL 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_FCNTL_H 1 +/* Define to 1 if you have the `getaddrinfo' function. */ +#define EVENT__HAVE_GETADDRINFO 1 +/* Define to 1 if you have the `getegid' function. */ +#define EVENT__HAVE_GETEGID 1 +/* Define to 1 if you have the `geteuid' function. */ +#define EVENT__HAVE_GETEUID 1 +/* TODO: Check for different gethostname argument counts. CheckPrototypeDefinition.cmake can be used. */ +/* Define this if you have any gethostbyname_r() */ +/* #undef EVENT__HAVE_GETHOSTBYNAME_R */ +/* Define this if gethostbyname_r takes 3 arguments */ +/* #undef EVENT__HAVE_GETHOSTBYNAME_R_3_ARG */ +/* Define this if gethostbyname_r takes 5 arguments */ +/* #undef EVENT__HAVE_GETHOSTBYNAME_R_5_ARG */ +/* Define this if gethostbyname_r takes 6 arguments */ +/* #undef EVENT__HAVE_GETHOSTBYNAME_R_6_ARG */ +/* Define to 1 if you have the `getifaddrs' function. */ +#define EVENT__HAVE_GETIFADDRS 1 +/* Define to 1 if you have the `getnameinfo' function. */ +#define EVENT__HAVE_GETNAMEINFO 1 +/* Define to 1 if you have the `getprotobynumber' function. */ +#define EVENT__HAVE_GETPROTOBYNUMBER 1 +/* Define to 1 if you have the `getservbyname' function. */ +#define EVENT__HAVE_GETSERVBYNAME 1 +/* Define to 1 if you have the `gettimeofday' function. */ +#define EVENT__HAVE_GETTIMEOFDAY 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_IFADDRS_H 1 +/* Define to 1 if you have the `inet_ntop' function. */ +#define EVENT__HAVE_INET_NTOP 1 +/* Define to 1 if you have the `inet_pton' function. */ +#define EVENT__HAVE_INET_PTON 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_INTTYPES_H 1 +/* Define to 1 if you have the `issetugid' function. */ +#define EVENT__HAVE_ISSETUGID 1 +/* Define to 1 if you have the `kqueue' function. */ +#define EVENT__HAVE_KQUEUE 1 +/* Define if the system has zlib */ +/* #undef EVENT__HAVE_LIBZ */ +/* Define to 1 if you have the `mach_absolute_time' function. */ +#define EVENT__HAVE_MACH_ABSOLUTE_TIME 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_MACH_MACH_TIME_H 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_MACH_MACH_H 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_MEMORY_H 1 +/* Define to 1 if you have the `mmap' function. */ +#define EVENT__HAVE_MMAP 1 +/* Define to 1 if you have the `nanosleep' function. */ +#define EVENT__HAVE_NANOSLEEP 1 +/* Define to 1 if you have the `usleep' function. */ +#define EVENT__HAVE_USLEEP 1 +/* Define to 1 if you have the header file. */ +/* #undef EVENT__HAVE_NETINET_IN6_H */ +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_NETINET_IN_H 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_NETINET_TCP_H 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_UN_H 1 +/* Define to 1 if you have the header file. */ +/* #undef EVENT__HAVE_AFUNIX_H */ +/* Define if the system has openssl */ +/* #undef EVENT__HAVE_OPENSSL */ +/* Define to 1 if you have the `pipe' function. */ +#define EVENT__HAVE_PIPE 1 +/* Define to 1 if you have the `pipe2' function. */ +/* #undef EVENT__HAVE_PIPE2 */ +/* Define to 1 if you have the `poll' function. */ +#define EVENT__HAVE_POLL 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_POLL_H 1 +/* Define to 1 if you have the `port_create' function. */ +/* #undef EVENT__HAVE_PORT_CREATE */ +/* Define to 1 if you have the header file. */ +/* #undef EVENT__HAVE_PORT_H */ +/* Define if we have pthreads on this system */ +#define EVENT__HAVE_PTHREADS 1 +/* Define to 1 if you have the `putenv' function. */ +#define EVENT__HAVE_PUTENV 1 +/* Define to 1 if the system has the type `sa_family_t'. */ +#define EVENT__HAVE_SA_FAMILY_T 1 +/* Define to 1 if you have the `select' function. */ +#define EVENT__HAVE_SELECT 1 +/* Define to 1 if you have the `setenv' function. */ +#define EVENT__HAVE_SETENV 1 +/* Define if F_SETFD is defined in */ +#define EVENT__HAVE_SETFD 1 +/* Define to 1 if you have the `setrlimit' function. */ +#define EVENT__HAVE_SETRLIMIT 1 +/* Define to 1 if you have the `sendfile' function. */ +#define EVENT__HAVE_SENDFILE 1 +/* Define to 1 if you have the `sigaction' function. */ +#define EVENT__HAVE_SIGACTION 1 +/* Define to 1 if you have the `signal' function. */ +#define EVENT__HAVE_SIGNAL 1 +/* Define to 1 if you have the `strsignal' function. */ +#define EVENT__HAVE_STRSIGNAL 1 +/* Define to 1 if you have the `splice' function. */ +/* #undef EVENT__HAVE_SPLICE */ +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_STDARG_H 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_STDDEF_H 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_STDINT_H 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_STDLIB_H 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_STRING_H 1 +/* Define to 1 if you have the `strlcpy' function. */ +#define EVENT__HAVE_STRLCPY 1 +/* Define to 1 if you have the `strsep' function. */ +#define EVENT__HAVE_STRSEP 1 +/* Define to 1 if you have the `strtok_r' function. */ +#define EVENT__HAVE_STRTOK_R 1 +/* Define to 1 if you have the `strtoll' function. */ +#define EVENT__HAVE_STRTOLL 1 +/* Define to 1 if you have the `_gmtime64_s' function. */ +/* #undef EVENT__HAVE__GMTIME64_S */ +/* Define to 1 if you have the `_gmtime64' function. */ +/* #undef EVENT__HAVE__GMTIME64 */ +/* Define to 1 if the system has the type `struct addrinfo'. */ +#define EVENT__HAVE_STRUCT_ADDRINFO 1 +/* Define to 1 if the system has the type `struct in6_addr'. */ +#define EVENT__HAVE_STRUCT_IN6_ADDR 1 +/* Define to 1 if `s6_addr16' is member of `struct in6_addr'. */ +/* #undef EVENT__HAVE_STRUCT_IN6_ADDR_S6_ADDR16 */ +/* Define to 1 if `s6_addr32' is member of `struct in6_addr'. */ +/* #undef EVENT__HAVE_STRUCT_IN6_ADDR_S6_ADDR32 */ +/* Define to 1 if the system has the type `struct sockaddr_in6'. */ +#define EVENT__HAVE_STRUCT_SOCKADDR_IN6 1 +/* Define to 1 if `sin6_len' is member of `struct sockaddr_in6'. */ +#define EVENT__HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN 1 +/* Define to 1 if `sin_len' is member of `struct sockaddr_in'. */ +/* #undef EVENT__HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */ +/* Define to 1 if the system has the type `struct sockaddr_un'. */ +#define EVENT__HAVE_STRUCT_SOCKADDR_UN 1 +/* Define to 1 if the system has the type `struct sockaddr_storage'. */ +#define EVENT__HAVE_STRUCT_SOCKADDR_STORAGE 1 +/* Define to 1 if `ss_family' is a member of `struct sockaddr_storage'. */ +#define EVENT__HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY 1 +/* Define to 1 if `__ss_family' is a member of `struct sockaddr_storage'. */ +/* #undef EVENT__HAVE_STRUCT_SOCKADDR_STORAGE___SS_FAMILY */ +/* Define to 1 if the system has the type `struct linger'. */ +#define EVENT__HAVE_STRUCT_LINGER 1 +/* Define to 1 if you have the `sysctl' function. */ +#define EVENT__HAVE_SYSCTL 1 +/* Define to 1 if you have the header file. */ +/* #undef EVENT__HAVE_SYS_EPOLL_H */ +/* Define to 1 if you have the header file. */ +/* #undef EVENT__HAVE_SYS_EVENTFD_H */ +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_EVENT_H 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_IOCTL_H 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_MMAN_H 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_PARAM_H 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_QUEUE_H 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_RESOURCE_H 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_SELECT_H 1 +/* Define to 1 if you have the header file. */ +/* #undef EVENT__HAVE_SYS_SENDFILE_H */ +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_SOCKET_H 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_STAT_H 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_RANDOM_H 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_SYSCTL_H 1 +/* Define to 1 if you have the header file. */ +/* #undef EVENT__HAVE_SYS_TIMERFD_H */ +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_TIME_H 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_TYPES_H 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_UIO_H 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_SYS_WAIT_H 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_ERRNO_H 1 +/* Define if TAILQ_FOREACH is defined in */ +#define EVENT__HAVE_TAILQFOREACH 1 +/* Define if timeradd is defined in */ +#define EVENT__HAVE_TIMERADD 1 +/* Define if timerclear is defined in */ +#define EVENT__HAVE_TIMERCLEAR 1 +/* Define if timercmp is defined in */ +#define EVENT__HAVE_TIMERCMP 1 +/* Define to 1 if you have the `timerfd_create' function. */ +/* #undef EVENT__HAVE_TIMERFD_CREATE */ +/* Define if timerisset is defined in */ +#define EVENT__HAVE_TIMERISSET 1 +/* Define to 1 if the system has the type `uint8_t'. */ +#define EVENT__HAVE_UINT8_T 1 +/* Define to 1 if the system has the type `uint16_t'. */ +#define EVENT__HAVE_UINT16_T 1 +/* Define to 1 if the system has the type `uint32_t'. */ +#define EVENT__HAVE_UINT32_T 1 +/* Define to 1 if the system has the type `uint64_t'. */ +#define EVENT__HAVE_UINT64_T 1 +/* Define to 1 if the system has the type `uintptr_t'. */ +#define EVENT__HAVE_UINTPTR_T 1 +/* Define to 1 if you have the `umask' function. */ +#define EVENT__HAVE_UMASK 1 +/* Define to 1 if you have the header file. */ +#define EVENT__HAVE_UNISTD_H 1 +/* Define to 1 if you have the `unsetenv' function. */ +#define EVENT__HAVE_UNSETENV 1 +/* Define to 1 if you have the `vasprintf' function. */ +#define EVENT__HAVE_VASPRINTF 1 +/* Define if kqueue works correctly with pipes */ +#define EVENT__HAVE_WORKING_KQUEUE 1 +#ifdef __USE_UNUSED_DEFINITIONS__ +/* Define to necessary symbol if this constant uses a non-standard name on your system. */ +/* XXX: Hello, this isn't even used, nor is it defined anywhere... - Ellzey */ +#define EVENT__PTHREAD_CREATE_JOINABLE +#endif +/* The size of `pthread_t', as computed by sizeof. */ +#define EVENT__SIZEOF_PTHREAD_T 8 +/* The size of a `int', as computed by sizeof. */ +#define EVENT__SIZEOF_INT 4 +/* The size of a `long', as computed by sizeof. */ +#define EVENT__SIZEOF_LONG 8 +/* The size of a `long long', as computed by sizeof. */ +#define EVENT__SIZEOF_LONG_LONG 8 +/* The size of `off_t', as computed by sizeof. */ +#define EVENT__SIZEOF_OFF_T 8 +#define EVENT__SIZEOF_SSIZE_T 8 +/* The size of a `short', as computed by sizeof. */ +#define EVENT__SIZEOF_SHORT 2 +/* The size of `size_t', as computed by sizeof. */ +#define EVENT__SIZEOF_SIZE_T 8 +/* Define to 1 if you can safely include both and . */ +/* #undef EVENT__TIME_WITH_SYS_TIME */ +/* The size of `socklen_t', as computed by sizeof. */ +#define EVENT__SIZEOF_SOCKLEN_T 4 +/* The size of 'void *', as computer by sizeof */ +#define EVENT__SIZEOF_VOID_P 8 +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +/* why not c++? + * + * and are we really expected to use EVENT__inline everywhere, + * shouldn't we just do: + * ifdef EVENT__inline + * define inline EVENT__inline + * + * - Ellzey + */ +#define EVENT__inline inline +#endif +#define EVENT__HAVE___func__ 1 +#define EVENT__HAVE___FUNCTION__ 1 +/* Define to `unsigned' if does not define. */ +#define EVENT__size_t size_t +/* Define to unsigned int if you dont have it */ +#define EVENT__socklen_t socklen_t +/* Define to `int' if does not define. */ +#define EVENT__ssize_t ssize_t +#endif /* \EVENT2_EVENT_CONFIG_H_INCLUDED_ */ +END_OF_CONFIG + +Pod::Spec.new do |spec| + spec.name = "libevent" + spec.version = "2.1.12" + spec.summary = "Event notification library" + spec.description = "The libevent API provides a mechanism to execute a callback function when a specific event occurs on a file descriptor or after a timeout has been reached. Furthermore, libevent also support callbacks due to signals or regular timeouts." + spec.homepage = "https://libevent.org" + spec.license = { :type => "BSD 3-Clause", :file => "LICENSE" } + spec.author = "Niels Provos and Nick Mathewson" + spec.platforms = min_supported_versions # [visionOS] + spec.source = { :git => "https://github.com/libevent/libevent.git", :tag => "release-2.1.12-stable" } + spec.prepare_command = "echo 'executing libevent prepare command'; touch evconfig-private.h; echo -e #{Shellwords.escape(CONFIG_WITHOUT_OPENSSL)} > include/event2/event-config.h; ls include/event2/" + spec.source_files = + "include/*.h", "*-{internal,private}.h", + "buffer.c", "bufferevent.c", "bufferevent_filter.c", "bufferevent_pair.c", "bufferevent_ratelim.c", "bufferevent_sock.c", + "event.c", "evmap.c", "evthread.c", "evutil.c", "evutil_rand.c", "evutil_time.c", + "kqueue.c", "listener.c", "log.c", "poll.c", "select.c", "signal.c", "strlcpy.c", "watch.c", + "evdns.c", "event_tagging.c", "evrpc.c", "http.c" + spec.private_header_files = "*-{internal,private}.h" + spec.public_header_files = "include/*.h" + spec.preserve_paths = "include/event2/*.h" + spec.xcconfig = { "HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)/include/\"" } +end + diff --git a/packages/rn-tester/RNTester-macOS/RNTester-macOS.xctestplan b/packages/rn-tester/RNTester-macOS/RNTester-macOS.xctestplan index e4d16c7c2ae154..b4aa08079c2e10 100644 --- a/packages/rn-tester/RNTester-macOS/RNTester-macOS.xctestplan +++ b/packages/rn-tester/RNTester-macOS/RNTester-macOS.xctestplan @@ -24,6 +24,7 @@ "identifier" : "ACC52F3D299ECB7A002A2B0B", "name" : "RNTester-macOS" }, + "testRepetitionMode" : "retryOnFailure", "undefinedBehaviorSanitizerEnabled" : true }, "testTargets" : [ diff --git a/packages/rn-tester/RNTester/RNTester.xctestplan b/packages/rn-tester/RNTester/RNTester.xctestplan index 29cd4c0a06b94b..ae2384e822eff3 100644 --- a/packages/rn-tester/RNTester/RNTester.xctestplan +++ b/packages/rn-tester/RNTester/RNTester.xctestplan @@ -24,6 +24,7 @@ "identifier" : "13B07F861A680F5B00A75B9A", "name" : "RNTester" }, + "testRepetitionMode" : "retryOnFailure", "undefinedBehaviorSanitizerEnabled" : true }, "testTargets" : [ diff --git a/packages/rn-tester/RNTesterPods.xcodeproj/project.pbxproj b/packages/rn-tester/RNTesterPods.xcodeproj/project.pbxproj index a87a508200c199..b53e804171b500 100644 --- a/packages/rn-tester/RNTesterPods.xcodeproj/project.pbxproj +++ b/packages/rn-tester/RNTesterPods.xcodeproj/project.pbxproj @@ -1549,6 +1549,10 @@ ENABLE_PREVIEWS = YES; GCC_C_LANGUAGE_STANDARD = gnu17; GENERATE_INFOPLIST_FILE = YES; + HEADER_SEARCH_PATHS = ( + "${PODS_ROOT}/Headers/Private/Yoga", + "$(inherited)", + ); INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -1591,6 +1595,10 @@ ENABLE_PREVIEWS = YES; GCC_C_LANGUAGE_STANDARD = gnu17; GENERATE_INFOPLIST_FILE = YES; + HEADER_SEARCH_PATHS = ( + "${PODS_ROOT}/Headers/Private/Yoga", + "$(inherited)", + ); INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)",