diff --git a/.github/workflows/build-dawn.yml b/.github/workflows/build-dawn.yml index 7b07bdccae..628019ea8f 100644 --- a/.github/workflows/build-dawn.yml +++ b/.github/workflows/build-dawn.yml @@ -236,9 +236,9 @@ jobs: - name: Create XCFramework run: | xcodebuild -create-xcframework \ - -library libs/apple/iphonesimulator/libwebgpu_dawn.a \ - -library artifacts/build-ios-arm64/libwebgpu_dawn.a \ - -library artifacts/build-macos-universal/libwebgpu_dawn.a \ + -library libs/apple/iphonesimulator/libwebgpu_dawn.a -headers dawn-headers/include \ + -library artifacts/build-ios-arm64/libwebgpu_dawn.a -headers dawn-headers/include \ + -library artifacts/build-macos-universal/libwebgpu_dawn.a -headers dawn-headers/include \ -output dawn-apple.xcframework - name: Package Android libraries @@ -256,8 +256,13 @@ jobs: run: | TAG="${{ needs.prepare-release.outputs.tag_name }}" tar -czf dawn-android-${TAG}.tar.gz dawn-android - tar -czf dawn-apple-${TAG}.xcframework.tar.gz dawn-apple.xcframework tar -czf dawn-headers-${TAG}.tar.gz dawn-headers + # Package.swift binaryTarget(url:checksum:) requires a zip archive, not a + # tarball, and `ditto` (unlike `zip`) preserves the xcframework's symlinks + # and resource forks losslessly. + ditto -c -k --sequesterRsrc --keepParent dawn-apple.xcframework dawn-apple-${TAG}.xcframework.zip + swift package compute-checksum dawn-apple-${TAG}.xcframework.zip > dawn-apple-${TAG}.xcframework.zip.checksum.txt + cat dawn-apple-${TAG}.xcframework.zip.checksum.txt - name: Upload to GitHub release uses: softprops/action-gh-release@v2 @@ -267,6 +272,7 @@ jobs: tag_name: ${{ needs.prepare-release.outputs.tag_name }} files: | dawn-android-${{ needs.prepare-release.outputs.tag_name }}.tar.gz - dawn-apple-${{ needs.prepare-release.outputs.tag_name }}.xcframework.tar.gz + dawn-apple-${{ needs.prepare-release.outputs.tag_name }}.xcframework.zip + dawn-apple-${{ needs.prepare-release.outputs.tag_name }}.xcframework.zip.checksum.txt dawn-headers-${{ needs.prepare-release.outputs.tag_name }}.tar.gz prerelease: true diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b7153d59da..aa0373f54f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -107,6 +107,42 @@ jobs: -disableAutomaticPackageResolution \ build | xcpretty + - name: Install CocoaPods (spm-example) + working-directory: apps/spm-example/ios + env: + RNWGPU_USE_SPM: "1" + run: pod install + + # Don't reuse "build" as -derivedDataPath for this app: React Native + # Codegen writes generated headers to apps/spm-example/ios/build/generated/ios, + # and CocoaPods symlinks them from Pods/Headers/Public/ReactCodegen/; + # deriving into the same "build" directory (as the example app step above + # does) deletes those symlink targets on a clean checkout. + # + # PODS_ROOT is deliberately not exported: xcodebuild never sets it, and + # Package.swift has to find the Pods directory from its own location. + # This step is what verifies that fallback. + # + # No -disableAutomaticPackageResolution here (unlike the example app + # build below): react-native-webgpu is a local Swift package added + # directly to the Xcode project (XCLocalSwiftPackageReference), not + # CocoaPods-vendored, and its WebGPUDawn binaryTarget resolves to a + # remote release zip + checksum with nothing cached ahead of time — this + # build's whole point is exercising that download-and-verify step. + - name: Build spm-example for iOS + working-directory: apps/spm-example/ios + run: | + set -o pipefail && xcodebuild \ + -workspace SpmExample.xcworkspace \ + -scheme SpmExample \ + -configuration Debug \ + -sdk iphonesimulator \ + -destination "generic/platform=iOS Simulator" \ + -derivedDataPath spm-build \ + COMPILER_INDEX_STORE_ENABLE=NO \ + DISABLE_MANUAL_TARGET_ORDER_BUILD_WARNING=YES \ + build | xcpretty + - name: Boot iPhone Simulator run: | if xcrun simctl list devices booted | grep -q "iPhone"; then diff --git a/.gitignore b/.gitignore index 60de60316a..c7fa1eb160 100644 --- a/.gitignore +++ b/.gitignore @@ -79,4 +79,8 @@ apps/example/**/Pods # Ruby apps/vendor/ +# Swift Package Manager +.swiftpm/ +Package.resolved + .turbo diff --git a/apps/docs/content/docs/getting-started/installation.mdx b/apps/docs/content/docs/getting-started/installation.mdx index 80d52c0910..7c34853bad 100644 --- a/apps/docs/content/docs/getting-started/installation.mdx +++ b/apps/docs/content/docs/getting-started/installation.mdx @@ -20,6 +20,26 @@ npm i react-native-webgpu Please note that this module does not work on the legacy architecture. +## iOS: Swift Package Manager + +By default, `react-native-webgpu` links on iOS/macOS through CocoaPods autolinking - no extra setup needed. As an alternative, the package also ships a `Package.swift` and can be linked through Swift Package Manager instead: + +1. Set `RNWGPU_USE_SPM=1` before running `pod install` (e.g. `RNWGPU_USE_SPM=1 pod install` from your app's `ios` directory, or export it in your shell). This tells the CocoaPods podspec to skip vendoring the native sources and Dawn binary itself, and only keep the small shim CocoaPods/Codegen still need - otherwise the app would link the native module twice. +2. In Xcode, add a local Swift Package dependency pointing at `node_modules/react-native-webgpu` (where `Package.swift` lives), then add the `react-native-webgpu` product to your app target's "Frameworks, Libraries, and Embedded Content". +3. Keep running `pod install` as usual for everything else - only `react-native-webgpu` itself moves to SPM. + +The Swift package reads React Native's headers from the static-library Pods layout (`Pods/Headers/Public`), so it cannot be combined with `use_frameworks!`; `pod install` refuses `RNWGPU_USE_SPM=1` when `USE_FRAMEWORKS` is set. If a Graphite build of `@shopify/react-native-skia` is installed alongside, the manifest also checks that both packages link the same Dawn release and fails package resolution on a mismatch (see [React Native Skia](/docs/integrations/react-native-skia)). + + +React Native 0.87 introduced SwiftPM autolinking, where a library shipping its own `Package.swift` is linked without CocoaPods and consumes React Native's headers as Swift package products. This manifest does not support that model yet: it still needs the CocoaPods install described above for React Native's headers, so keep CocoaPods for React Native on 0.87+ apps. + + +`Package.swift`'s `WebGPUDawn` binary target resolves to a prebuilt Dawn `.xcframework` published on GitHub Releases; Xcode downloads and checksum-verifies it the first time it resolves packages. + + +The Swift package targets iOS 15.1+ and macOS 11.0+ only - Android and visionOS still require the CocoaPods/Gradle autolinked path. See `apps/spm-example` in the [react-native-webgpu repo](https://github.com/wcandillon/react-native-webgpu) for a working reference project. + + ## Setup Once installed, the global `navigator.gpu` API is available - the same entry point as in Chrome or Safari: diff --git a/apps/docs/content/docs/integrations/react-native-skia.mdx b/apps/docs/content/docs/integrations/react-native-skia.mdx index 1212e0e737..22c68fd219 100644 --- a/apps/docs/content/docs/integrations/react-native-skia.mdx +++ b/apps/docs/content/docs/integrations/react-native-skia.mdx @@ -23,7 +23,8 @@ Both packages follow Chrome/Skia milestones: react-native-webgpu pins the Dawn r | Milestone | react-native-webgpu | Dawn release tag | `@shopify/react-native-skia` (Graphite `@next`) | | --- | --- | --- | --- | -| m152 | 0.8.2 | `dawn-chrome-m152` | 2.12.0-next.1 (Graphite `152.0.0`) | +| m154 | *unreleased* | `dawn-chrome-m154` | *unreleased* | +| m152 | 0.8.2 – 0.9.0 | `dawn-chrome-m152` | 2.12.0-next.1 (Graphite `152.0.0`) | | m150 | 0.7.0 – 0.8.1 | `dawn-chrome-m150` | 2.9.1-next.1 – 2.11.0-next.2 (Graphite `150.0.0`) | Default (Ganesh) releases of react-native-skia — 2.11.0 at the time of writing — are not part of this pairing: they do not link Dawn, so any version works alongside any version of react-native-webgpu. diff --git a/apps/spm-example/.eslintrc.js b/apps/spm-example/.eslintrc.js new file mode 100644 index 0000000000..187894b6af --- /dev/null +++ b/apps/spm-example/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: '@react-native', +}; diff --git a/apps/spm-example/.gitignore b/apps/spm-example/.gitignore new file mode 100644 index 0000000000..de99955957 --- /dev/null +++ b/apps/spm-example/.gitignore @@ -0,0 +1,75 @@ +# OSX +# +.DS_Store + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +**/.xcode.env.local + +# Android/IntelliJ +# +build/ +.idea +.gradle +local.properties +*.iml +*.hprof +.cxx/ +*.keystore +!debug.keystore +.kotlin/ + +# node.js +# +node_modules/ +npm-debug.log +yarn-error.log + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/ + +**/fastlane/report.xml +**/fastlane/Preview.html +**/fastlane/screenshots +**/fastlane/test_output + +# Bundle artifact +*.jsbundle + +# Ruby / CocoaPods +**/Pods/ +/vendor/bundle/ + +# Temporary files created by Metro to check the health of the file watcher +.metro-health-check* + +# testing +/coverage + +# Yarn +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions diff --git a/apps/spm-example/.prettierrc.js b/apps/spm-example/.prettierrc.js new file mode 100644 index 0000000000..06860c8d1b --- /dev/null +++ b/apps/spm-example/.prettierrc.js @@ -0,0 +1,5 @@ +module.exports = { + arrowParens: 'avoid', + singleQuote: true, + trailingComma: 'all', +}; diff --git a/apps/spm-example/.watchmanconfig b/apps/spm-example/.watchmanconfig new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/apps/spm-example/.watchmanconfig @@ -0,0 +1 @@ +{} diff --git a/apps/spm-example/App.tsx b/apps/spm-example/App.tsx new file mode 100644 index 0000000000..b810465dd7 --- /dev/null +++ b/apps/spm-example/App.tsx @@ -0,0 +1,84 @@ +/** + * Minimal app used to validate react-native-webgpu linked via Swift Package + * Manager (see packages/webgpu/Package.swift) instead of CocoaPods on iOS. + * Renders a plain animated clear color: enough to exercise adapter/device + * request, context configuration, command submission, and present() end to + * end without pulling in the full example app's dependencies. + * + * @format + */ + +import { useEffect, useRef } from 'react'; +import { StyleSheet, View } from 'react-native'; +import { Canvas, type CanvasRef } from 'react-native-webgpu'; + +function Scene() { + const ref = useRef(null); + + useEffect(() => { + let stopped = false; + let frame: number; + + const start = async () => { + const context = ref.current?.getContext('webgpu'); + if (!context) { + frame = requestAnimationFrame(start); + return; + } + const adapter = await navigator.gpu.requestAdapter(); + const device = await adapter?.requestDevice(); + if (!device) { + return; + } + const format = navigator.gpu.getPreferredCanvasFormat(); + context.configure({ device, format, alphaMode: 'opaque' }); + + const render = (t: number) => { + if (stopped) { + return; + } + const hue = (t / 1000) % 1; + const encoder = device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: context.getCurrentTexture().createView(), + loadOp: 'clear', + storeOp: 'store', + clearValue: { r: hue, g: 1 - hue, b: 0.5, a: 1 }, + }, + ], + }); + pass.end(); + device.queue.submit([encoder.finish()]); + context.present(); + frame = requestAnimationFrame(render); + }; + frame = requestAnimationFrame(render); + }; + + frame = requestAnimationFrame(start); + return () => { + stopped = true; + cancelAnimationFrame(frame); + }; + }, []); + + return ; +} + +function App() { + return ( + + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + }, +}); + +export default App; diff --git a/apps/spm-example/Gemfile b/apps/spm-example/Gemfile new file mode 100644 index 0000000000..6a4c5f1718 --- /dev/null +++ b/apps/spm-example/Gemfile @@ -0,0 +1,16 @@ +source 'https://rubygems.org' + +# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version +ruby ">= 2.6.10" + +# Exclude problematic versions of cocoapods and activesupport that causes build failures. +gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1' +gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0' +gem 'xcodeproj', '< 1.26.0' +gem 'concurrent-ruby', '< 1.3.4' + +# Ruby 3.4.0 has removed some libraries from the standard library. +gem 'bigdecimal' +gem 'logger' +gem 'benchmark' +gem 'mutex_m' diff --git a/apps/spm-example/README.md b/apps/spm-example/README.md new file mode 100644 index 0000000000..3e2c3f8505 --- /dev/null +++ b/apps/spm-example/README.md @@ -0,0 +1,97 @@ +This is a new [**React Native**](https://reactnative.dev) project, bootstrapped using [`@react-native-community/cli`](https://github.com/react-native-community/cli). + +# Getting Started + +> **Note**: Make sure you have completed the [Set Up Your Environment](https://reactnative.dev/docs/set-up-your-environment) guide before proceeding. + +## Step 1: Start Metro + +First, you will need to run **Metro**, the JavaScript build tool for React Native. + +To start the Metro dev server, run the following command from the root of your React Native project: + +```sh +# Using npm +npm start + +# OR using Yarn +yarn start +``` + +## Step 2: Build and run your app + +With Metro running, open a new terminal window/pane from the root of your React Native project, and use one of the following commands to build and run your Android or iOS app: + +### Android + +```sh +# Using npm +npm run android + +# OR using Yarn +yarn android +``` + +### iOS + +For iOS, remember to install CocoaPods dependencies (this only needs to be run on first clone or after updating native deps). + +The first time you create a new project, run the Ruby bundler to install CocoaPods itself: + +```sh +bundle install +``` + +Then, and every time you update your native dependencies, run: + +```sh +bundle exec pod install +``` + +For more information, please visit [CocoaPods Getting Started guide](https://guides.cocoapods.org/using/getting-started.html). + +```sh +# Using npm +npm run ios + +# OR using Yarn +yarn ios +``` + +If everything is set up correctly, you should see your new app running in the Android Emulator, iOS Simulator, or your connected device. + +This is one way to run your app — you can also build it directly from Android Studio or Xcode. + +## Step 3: Modify your app + +Now that you have successfully run the app, let's make changes! + +Open `App.tsx` in your text editor of choice and make some changes. When you save, your app will automatically update and reflect these changes — this is powered by [Fast Refresh](https://reactnative.dev/docs/fast-refresh). + +When you want to forcefully reload, for example to reset the state of your app, you can perform a full reload: + +- **Android**: Press the R key twice or select **"Reload"** from the **Dev Menu**, accessed via Ctrl + M (Windows/Linux) or Cmd ⌘ + M (macOS). +- **iOS**: Press R in iOS Simulator. + +## Congratulations! :tada: + +You've successfully run and modified your React Native App. :partying_face: + +### Now what? + +- If you want to add this new React Native code to an existing application, check out the [Integration guide](https://reactnative.dev/docs/integration-with-existing-apps). +- If you're curious to learn more about React Native, check out the [docs](https://reactnative.dev/docs/getting-started). + +# Troubleshooting + +If you're having issues getting the above steps to work, see the [Troubleshooting](https://reactnative.dev/docs/troubleshooting) page. + +# Learn More + +To learn more about React Native, take a look at the following resources: + +- [React Native Website](https://reactnative.dev) - learn more about React Native. +- [Getting Started](https://reactnative.dev/docs/environment-setup) - an **overview** of React Native and how setup your environment. +- [Learn the Basics](https://reactnative.dev/docs/getting-started) - a **guided tour** of the React Native **basics**. +- [Blog](https://reactnative.dev/blog) - read the latest official React Native **Blog** posts. +- [`@facebook/react-native`](https://github.com/facebook/react-native) - the Open Source; GitHub **repository** for React Native. diff --git a/apps/spm-example/app.json b/apps/spm-example/app.json new file mode 100644 index 0000000000..8a50fdcba5 --- /dev/null +++ b/apps/spm-example/app.json @@ -0,0 +1,4 @@ +{ + "name": "SpmExample", + "displayName": "SpmExample" +} diff --git a/apps/spm-example/babel.config.js b/apps/spm-example/babel.config.js new file mode 100644 index 0000000000..f7b3da3b33 --- /dev/null +++ b/apps/spm-example/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: ['module:@react-native/babel-preset'], +}; diff --git a/apps/spm-example/index.js b/apps/spm-example/index.js new file mode 100644 index 0000000000..9b73932914 --- /dev/null +++ b/apps/spm-example/index.js @@ -0,0 +1,9 @@ +/** + * @format + */ + +import { AppRegistry } from 'react-native'; +import App from './App'; +import { name as appName } from './app.json'; + +AppRegistry.registerComponent(appName, () => App); diff --git a/apps/spm-example/ios/.xcode.env b/apps/spm-example/ios/.xcode.env new file mode 100644 index 0000000000..3d5782c715 --- /dev/null +++ b/apps/spm-example/ios/.xcode.env @@ -0,0 +1,11 @@ +# This `.xcode.env` file is versioned and is used to source the environment +# used when running script phases inside Xcode. +# To customize your local environment, you can create an `.xcode.env.local` +# file that is not versioned. + +# NODE_BINARY variable contains the PATH to the node executable. +# +# Customize the NODE_BINARY variable here. +# For example, to use nvm with brew, add the following line +# . "$(brew --prefix nvm)/nvm.sh" --no-use +export NODE_BINARY=$(command -v node) diff --git a/apps/spm-example/ios/Podfile b/apps/spm-example/ios/Podfile new file mode 100644 index 0000000000..4e80df016d --- /dev/null +++ b/apps/spm-example/ios/Podfile @@ -0,0 +1,35 @@ +# Resolve react_native_pods.rb with node to allow for hoisting +require Pod::Executable.execute_command('node', ['-p', + 'require.resolve( + "react-native/scripts/react_native_pods.rb", + {paths: [process.argv[1]]}, + )', __dir__]).strip + +platform :ios, min_ios_version_supported +prepare_react_native_project! + +linkage = ENV['USE_FRAMEWORKS'] +if linkage != nil + Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green + use_frameworks! :linkage => linkage.to_sym +end + +target 'SpmExample' do + config = use_native_modules! + + use_react_native!( + :path => config[:reactNativePath], + # An absolute path to your application root. + :app_path => "#{Pod::Config.instance.installation_root}/.." + ) + + post_install do |installer| + # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202 + react_native_post_install( + installer, + config[:reactNativePath], + :mac_catalyst_enabled => false, + # :ccache_enabled => true + ) + end +end diff --git a/apps/spm-example/ios/Podfile.lock b/apps/spm-example/ios/Podfile.lock new file mode 100644 index 0000000000..28017842a9 --- /dev/null +++ b/apps/spm-example/ios/Podfile.lock @@ -0,0 +1,2591 @@ +PODS: + - boost (1.84.0) + - DoubleConversion (1.1.6) + - fast_float (8.0.0) + - FBLazyVector (0.81.4) + - fmt (12.1.0) + - glog (0.3.5) + - hermes-engine (0.81.4): + - hermes-engine/Pre-built (= 0.81.4) + - hermes-engine/Pre-built (0.81.4) + - RCT-Folly (2024.11.18.00): + - boost + - DoubleConversion + - fast_float (= 8.0.0) + - fmt (= 12.1.0) + - glog + - RCT-Folly/Default (= 2024.11.18.00) + - RCT-Folly/Default (2024.11.18.00): + - boost + - DoubleConversion + - fast_float (= 8.0.0) + - fmt (= 12.1.0) + - glog + - RCT-Folly/Fabric (2024.11.18.00): + - boost + - DoubleConversion + - fast_float (= 8.0.0) + - fmt (= 12.1.0) + - glog + - RCTDeprecation (0.81.4) + - RCTRequired (0.81.4) + - RCTTypeSafety (0.81.4): + - FBLazyVector (= 0.81.4) + - RCTRequired (= 0.81.4) + - React-Core (= 0.81.4) + - React (0.81.4): + - React-Core (= 0.81.4) + - React-Core/DevSupport (= 0.81.4) + - React-Core/RCTWebSocket (= 0.81.4) + - React-RCTActionSheet (= 0.81.4) + - React-RCTAnimation (= 0.81.4) + - React-RCTBlob (= 0.81.4) + - React-RCTImage (= 0.81.4) + - React-RCTLinking (= 0.81.4) + - React-RCTNetwork (= 0.81.4) + - React-RCTSettings (= 0.81.4) + - React-RCTText (= 0.81.4) + - React-RCTVibration (= 0.81.4) + - React-callinvoker (0.81.4) + - React-Core (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default (= 0.81.4) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/CoreModulesHeaders (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/Default (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/DevSupport (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default (= 0.81.4) + - React-Core/RCTWebSocket (= 0.81.4) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTActionSheetHeaders (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTAnimationHeaders (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTBlobHeaders (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTImageHeaders (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTLinkingHeaders (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTNetworkHeaders (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTSettingsHeaders (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTTextHeaders (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTVibrationHeaders (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTWebSocket (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default (= 0.81.4) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-CoreModules (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - RCTTypeSafety (= 0.81.4) + - React-Core/CoreModulesHeaders (= 0.81.4) + - React-jsi (= 0.81.4) + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectortracing + - React-NativeModulesApple + - React-RCTBlob + - React-RCTFBReactNativeSpec + - React-RCTImage (= 0.81.4) + - React-runtimeexecutor + - ReactCommon + - SocketRocket + - React-cxxreact (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker (= 0.81.4) + - React-debug (= 0.81.4) + - React-jsi (= 0.81.4) + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectortracing + - React-logger (= 0.81.4) + - React-perflogger (= 0.81.4) + - React-runtimeexecutor + - React-timing (= 0.81.4) + - SocketRocket + - React-debug (0.81.4) + - React-defaultsnativemodule (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-domnativemodule + - React-featureflagsnativemodule + - React-idlecallbacksnativemodule + - React-jsi + - React-jsiexecutor + - React-microtasksnativemodule + - React-RCTFBReactNativeSpec + - SocketRocket + - React-domnativemodule (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-Fabric + - React-Fabric/bridging + - React-FabricComponents + - React-graphics + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - React-runtimeexecutor + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-Fabric (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/animations (= 0.81.4) + - React-Fabric/attributedstring (= 0.81.4) + - React-Fabric/bridging (= 0.81.4) + - React-Fabric/componentregistry (= 0.81.4) + - React-Fabric/componentregistrynative (= 0.81.4) + - React-Fabric/components (= 0.81.4) + - React-Fabric/consistency (= 0.81.4) + - React-Fabric/core (= 0.81.4) + - React-Fabric/dom (= 0.81.4) + - React-Fabric/imagemanager (= 0.81.4) + - React-Fabric/leakchecker (= 0.81.4) + - React-Fabric/mounting (= 0.81.4) + - React-Fabric/observers (= 0.81.4) + - React-Fabric/scheduler (= 0.81.4) + - React-Fabric/telemetry (= 0.81.4) + - React-Fabric/templateprocessor (= 0.81.4) + - React-Fabric/uimanager (= 0.81.4) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/animations (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/attributedstring (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/bridging (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/componentregistry (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/componentregistrynative (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/components (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/components/legacyviewmanagerinterop (= 0.81.4) + - React-Fabric/components/root (= 0.81.4) + - React-Fabric/components/scrollview (= 0.81.4) + - React-Fabric/components/view (= 0.81.4) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/components/legacyviewmanagerinterop (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/components/root (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/components/scrollview (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/components/view (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-renderercss + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-Fabric/consistency (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/core (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/dom (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/imagemanager (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/leakchecker (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/mounting (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/observers (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/observers/events (= 0.81.4) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/observers/events (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/scheduler (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/observers/events + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-performancetimeline + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/telemetry (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/templateprocessor (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/uimanager (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/uimanager/consistency (= 0.81.4) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererconsistency + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/uimanager/consistency (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererconsistency + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-FabricComponents (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-FabricComponents/components (= 0.81.4) + - React-FabricComponents/textlayoutmanager (= 0.81.4) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-FabricComponents/components/inputaccessory (= 0.81.4) + - React-FabricComponents/components/iostextinput (= 0.81.4) + - React-FabricComponents/components/modal (= 0.81.4) + - React-FabricComponents/components/rncore (= 0.81.4) + - React-FabricComponents/components/safeareaview (= 0.81.4) + - React-FabricComponents/components/scrollview (= 0.81.4) + - React-FabricComponents/components/switch (= 0.81.4) + - React-FabricComponents/components/text (= 0.81.4) + - React-FabricComponents/components/textinput (= 0.81.4) + - React-FabricComponents/components/unimplementedview (= 0.81.4) + - React-FabricComponents/components/virtualview (= 0.81.4) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/inputaccessory (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/iostextinput (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/modal (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/rncore (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/safeareaview (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/scrollview (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/switch (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/text (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/textinput (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/unimplementedview (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/virtualview (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/textlayoutmanager (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricImage (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired (= 0.81.4) + - RCTTypeSafety (= 0.81.4) + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-jsiexecutor (= 0.81.4) + - React-logger + - React-rendererdebug + - React-utils + - ReactCommon + - SocketRocket + - Yoga + - React-featureflags (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - SocketRocket + - React-featureflagsnativemodule (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-featureflags + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - ReactCommon/turbomodule/core + - SocketRocket + - React-graphics (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-jsi + - React-jsiexecutor + - React-utils + - SocketRocket + - React-hermes (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-cxxreact (= 0.81.4) + - React-jsi + - React-jsiexecutor (= 0.81.4) + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectortracing + - React-perflogger (= 0.81.4) + - React-runtimeexecutor + - SocketRocket + - React-idlecallbacksnativemodule (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - React-runtimeexecutor + - React-runtimescheduler + - ReactCommon/turbomodule/core + - SocketRocket + - React-ImageManager (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-Core/Default + - React-debug + - React-Fabric + - React-graphics + - React-rendererdebug + - React-utils + - SocketRocket + - React-jserrorhandler (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-cxxreact + - React-debug + - React-featureflags + - React-jsi + - ReactCommon/turbomodule/bridging + - SocketRocket + - React-jsi (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - SocketRocket + - React-jsiexecutor (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-cxxreact (= 0.81.4) + - React-jsi (= 0.81.4) + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectortracing + - React-perflogger (= 0.81.4) + - React-runtimeexecutor + - SocketRocket + - React-jsinspector (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-featureflags + - React-jsi + - React-jsinspectorcdp + - React-jsinspectornetwork + - React-jsinspectortracing + - React-oscompat + - React-perflogger (= 0.81.4) + - React-runtimeexecutor + - SocketRocket + - React-jsinspectorcdp (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - SocketRocket + - React-jsinspectornetwork (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-featureflags + - React-jsinspectorcdp + - React-performancetimeline + - React-timing + - SocketRocket + - React-jsinspectortracing (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-oscompat + - React-timing + - SocketRocket + - React-jsitooling (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-cxxreact (= 0.81.4) + - React-jsi (= 0.81.4) + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectortracing + - React-runtimeexecutor + - SocketRocket + - React-jsitracing (0.81.4): + - React-jsi + - React-logger (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - SocketRocket + - React-Mapbuffer (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-debug + - SocketRocket + - React-microtasksnativemodule (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - ReactCommon/turbomodule/core + - SocketRocket + - react-native-webgpu (0.0.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-NativeModulesApple (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker + - React-Core + - React-cxxreact + - React-featureflags + - React-jsi + - React-jsinspector + - React-jsinspectorcdp + - React-runtimeexecutor + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - React-oscompat (0.81.4) + - React-perflogger (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - SocketRocket + - React-performancetimeline (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-featureflags + - React-jsinspectortracing + - React-perflogger + - React-timing + - SocketRocket + - React-RCTActionSheet (0.81.4): + - React-Core/RCTActionSheetHeaders (= 0.81.4) + - React-RCTAnimation (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - RCTTypeSafety + - React-Core/RCTAnimationHeaders + - React-featureflags + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - SocketRocket + - React-RCTAppDelegate (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-CoreModules + - React-debug + - React-defaultsnativemodule + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-jsitooling + - React-NativeModulesApple + - React-RCTFabric + - React-RCTFBReactNativeSpec + - React-RCTImage + - React-RCTNetwork + - React-RCTRuntime + - React-rendererdebug + - React-RuntimeApple + - React-RuntimeCore + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon + - SocketRocket + - React-RCTBlob (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-Core/RCTBlobHeaders + - React-Core/RCTWebSocket + - React-jsi + - React-jsinspector + - React-jsinspectorcdp + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - React-RCTNetwork + - ReactCommon + - SocketRocket + - React-RCTFabric (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-Core + - React-debug + - React-Fabric + - React-FabricComponents + - React-FabricImage + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectornetwork + - React-jsinspectortracing + - React-performancetimeline + - React-RCTAnimation + - React-RCTFBReactNativeSpec + - React-RCTImage + - React-RCTText + - React-rendererconsistency + - React-renderercss + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-RCTFBReactNativeSpec (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec/components (= 0.81.4) + - ReactCommon + - SocketRocket + - React-RCTFBReactNativeSpec/components (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-NativeModulesApple + - React-rendererdebug + - React-utils + - ReactCommon + - SocketRocket + - Yoga + - React-RCTImage (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - RCTTypeSafety + - React-Core/RCTImageHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - React-RCTNetwork + - ReactCommon + - SocketRocket + - React-RCTLinking (0.81.4): + - React-Core/RCTLinkingHeaders (= 0.81.4) + - React-jsi (= 0.81.4) + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - ReactCommon/turbomodule/core (= 0.81.4) + - React-RCTNetwork (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - RCTTypeSafety + - React-Core/RCTNetworkHeaders + - React-featureflags + - React-jsi + - React-jsinspectorcdp + - React-jsinspectornetwork + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - SocketRocket + - React-RCTRuntime (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-Core + - React-jsi + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectortracing + - React-jsitooling + - React-RuntimeApple + - React-RuntimeCore + - React-runtimeexecutor + - React-RuntimeHermes + - SocketRocket + - React-RCTSettings (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - RCTTypeSafety + - React-Core/RCTSettingsHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - SocketRocket + - React-RCTText (0.81.4): + - React-Core/RCTTextHeaders (= 0.81.4) + - Yoga + - React-RCTVibration (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-Core/RCTVibrationHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - SocketRocket + - React-rendererconsistency (0.81.4) + - React-renderercss (0.81.4): + - React-debug + - React-utils + - React-rendererdebug (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-debug + - SocketRocket + - React-RuntimeApple (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker + - React-Core/Default + - React-CoreModules + - React-cxxreact + - React-featureflags + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsitooling + - React-Mapbuffer + - React-NativeModulesApple + - React-RCTFabric + - React-RCTFBReactNativeSpec + - React-RuntimeCore + - React-runtimeexecutor + - React-RuntimeHermes + - React-runtimescheduler + - React-utils + - SocketRocket + - React-RuntimeCore (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-cxxreact + - React-Fabric + - React-featureflags + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsitooling + - React-performancetimeline + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - React-runtimeexecutor (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-debug + - React-featureflags + - React-jsi (= 0.81.4) + - React-utils + - SocketRocket + - React-RuntimeHermes (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-featureflags + - React-hermes + - React-jsi + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectortracing + - React-jsitooling + - React-jsitracing + - React-RuntimeCore + - React-runtimeexecutor + - React-utils + - SocketRocket + - React-runtimescheduler (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker + - React-cxxreact + - React-debug + - React-featureflags + - React-jsi + - React-jsinspectortracing + - React-performancetimeline + - React-rendererconsistency + - React-rendererdebug + - React-runtimeexecutor + - React-timing + - React-utils + - SocketRocket + - React-timing (0.81.4): + - React-debug + - React-utils (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-debug + - React-jsi (= 0.81.4) + - SocketRocket + - ReactAppDependencyProvider (0.81.4): + - ReactCodegen + - ReactCodegen (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-FabricImage + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-NativeModulesApple + - React-RCTAppDelegate + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - ReactCommon (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - ReactCommon/turbomodule (= 0.81.4) + - SocketRocket + - ReactCommon/turbomodule (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker (= 0.81.4) + - React-cxxreact (= 0.81.4) + - React-jsi (= 0.81.4) + - React-logger (= 0.81.4) + - React-perflogger (= 0.81.4) + - ReactCommon/turbomodule/bridging (= 0.81.4) + - ReactCommon/turbomodule/core (= 0.81.4) + - SocketRocket + - ReactCommon/turbomodule/bridging (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker (= 0.81.4) + - React-cxxreact (= 0.81.4) + - React-jsi (= 0.81.4) + - React-logger (= 0.81.4) + - React-perflogger (= 0.81.4) + - SocketRocket + - ReactCommon/turbomodule/core (0.81.4): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker (= 0.81.4) + - React-cxxreact (= 0.81.4) + - React-debug (= 0.81.4) + - React-featureflags (= 0.81.4) + - React-jsi (= 0.81.4) + - React-logger (= 0.81.4) + - React-perflogger (= 0.81.4) + - React-utils (= 0.81.4) + - SocketRocket + - SocketRocket (0.7.1) + - Yoga (0.0.0) + +DEPENDENCIES: + - boost (from `../../../node_modules/react-native/third-party-podspecs/boost.podspec`) + - DoubleConversion (from `../../../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) + - fast_float (from `../../../node_modules/react-native/third-party-podspecs/fast_float.podspec`) + - FBLazyVector (from `../../../node_modules/react-native/Libraries/FBLazyVector`) + - fmt (from `../../../node_modules/react-native/third-party-podspecs/fmt.podspec`) + - glog (from `../../../node_modules/react-native/third-party-podspecs/glog.podspec`) + - hermes-engine (from `../../../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) + - RCT-Folly (from `../../../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) + - RCTDeprecation (from `../../../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) + - RCTRequired (from `../../../node_modules/react-native/Libraries/Required`) + - RCTTypeSafety (from `../../../node_modules/react-native/Libraries/TypeSafety`) + - React (from `../../../node_modules/react-native/`) + - React-callinvoker (from `../../../node_modules/react-native/ReactCommon/callinvoker`) + - React-Core (from `../../../node_modules/react-native/`) + - React-Core/RCTWebSocket (from `../../../node_modules/react-native/`) + - React-CoreModules (from `../../../node_modules/react-native/React/CoreModules`) + - React-cxxreact (from `../../../node_modules/react-native/ReactCommon/cxxreact`) + - React-debug (from `../../../node_modules/react-native/ReactCommon/react/debug`) + - React-defaultsnativemodule (from `../../../node_modules/react-native/ReactCommon/react/nativemodule/defaults`) + - React-domnativemodule (from `../../../node_modules/react-native/ReactCommon/react/nativemodule/dom`) + - React-Fabric (from `../../../node_modules/react-native/ReactCommon`) + - React-FabricComponents (from `../../../node_modules/react-native/ReactCommon`) + - React-FabricImage (from `../../../node_modules/react-native/ReactCommon`) + - React-featureflags (from `../../../node_modules/react-native/ReactCommon/react/featureflags`) + - React-featureflagsnativemodule (from `../../../node_modules/react-native/ReactCommon/react/nativemodule/featureflags`) + - React-graphics (from `../../../node_modules/react-native/ReactCommon/react/renderer/graphics`) + - React-hermes (from `../../../node_modules/react-native/ReactCommon/hermes`) + - React-idlecallbacksnativemodule (from `../../../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks`) + - React-ImageManager (from `../../../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) + - React-jserrorhandler (from `../../../node_modules/react-native/ReactCommon/jserrorhandler`) + - React-jsi (from `../../../node_modules/react-native/ReactCommon/jsi`) + - React-jsiexecutor (from `../../../node_modules/react-native/ReactCommon/jsiexecutor`) + - React-jsinspector (from `../../../node_modules/react-native/ReactCommon/jsinspector-modern`) + - React-jsinspectorcdp (from `../../../node_modules/react-native/ReactCommon/jsinspector-modern/cdp`) + - React-jsinspectornetwork (from `../../../node_modules/react-native/ReactCommon/jsinspector-modern/network`) + - React-jsinspectortracing (from `../../../node_modules/react-native/ReactCommon/jsinspector-modern/tracing`) + - React-jsitooling (from `../../../node_modules/react-native/ReactCommon/jsitooling`) + - React-jsitracing (from `../../../node_modules/react-native/ReactCommon/hermes/executor/`) + - React-logger (from `../../../node_modules/react-native/ReactCommon/logger`) + - React-Mapbuffer (from `../../../node_modules/react-native/ReactCommon`) + - React-microtasksnativemodule (from `../../../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) + - react-native-webgpu (from `../../../node_modules/react-native-webgpu`) + - React-NativeModulesApple (from `../../../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) + - React-oscompat (from `../../../node_modules/react-native/ReactCommon/oscompat`) + - React-perflogger (from `../../../node_modules/react-native/ReactCommon/reactperflogger`) + - React-performancetimeline (from `../../../node_modules/react-native/ReactCommon/react/performance/timeline`) + - React-RCTActionSheet (from `../../../node_modules/react-native/Libraries/ActionSheetIOS`) + - React-RCTAnimation (from `../../../node_modules/react-native/Libraries/NativeAnimation`) + - React-RCTAppDelegate (from `../../../node_modules/react-native/Libraries/AppDelegate`) + - React-RCTBlob (from `../../../node_modules/react-native/Libraries/Blob`) + - React-RCTFabric (from `../../../node_modules/react-native/React`) + - React-RCTFBReactNativeSpec (from `../../../node_modules/react-native/React`) + - React-RCTImage (from `../../../node_modules/react-native/Libraries/Image`) + - React-RCTLinking (from `../../../node_modules/react-native/Libraries/LinkingIOS`) + - React-RCTNetwork (from `../../../node_modules/react-native/Libraries/Network`) + - React-RCTRuntime (from `../../../node_modules/react-native/React/Runtime`) + - React-RCTSettings (from `../../../node_modules/react-native/Libraries/Settings`) + - React-RCTText (from `../../../node_modules/react-native/Libraries/Text`) + - React-RCTVibration (from `../../../node_modules/react-native/Libraries/Vibration`) + - React-rendererconsistency (from `../../../node_modules/react-native/ReactCommon/react/renderer/consistency`) + - React-renderercss (from `../../../node_modules/react-native/ReactCommon/react/renderer/css`) + - React-rendererdebug (from `../../../node_modules/react-native/ReactCommon/react/renderer/debug`) + - React-RuntimeApple (from `../../../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) + - React-RuntimeCore (from `../../../node_modules/react-native/ReactCommon/react/runtime`) + - React-runtimeexecutor (from `../../../node_modules/react-native/ReactCommon/runtimeexecutor`) + - React-RuntimeHermes (from `../../../node_modules/react-native/ReactCommon/react/runtime`) + - React-runtimescheduler (from `../../../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) + - React-timing (from `../../../node_modules/react-native/ReactCommon/react/timing`) + - React-utils (from `../../../node_modules/react-native/ReactCommon/react/utils`) + - ReactAppDependencyProvider (from `build/generated/ios`) + - ReactCodegen (from `build/generated/ios`) + - ReactCommon/turbomodule/core (from `../../../node_modules/react-native/ReactCommon`) + - SocketRocket (~> 0.7.1) + - Yoga (from `../../../node_modules/react-native/ReactCommon/yoga`) + +SPEC REPOS: + trunk: + - SocketRocket + +EXTERNAL SOURCES: + boost: + :podspec: "../../../node_modules/react-native/third-party-podspecs/boost.podspec" + DoubleConversion: + :podspec: "../../../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" + fast_float: + :podspec: "../../../node_modules/react-native/third-party-podspecs/fast_float.podspec" + FBLazyVector: + :path: "../../../node_modules/react-native/Libraries/FBLazyVector" + fmt: + :podspec: "../../../node_modules/react-native/third-party-podspecs/fmt.podspec" + glog: + :podspec: "../../../node_modules/react-native/third-party-podspecs/glog.podspec" + hermes-engine: + :podspec: "../../../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" + :tag: hermes-2025-07-07-RNv0.81.0-e0fc67142ec0763c6b6153ca2bf96df815539782 + RCT-Folly: + :podspec: "../../../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" + RCTDeprecation: + :path: "../../../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" + RCTRequired: + :path: "../../../node_modules/react-native/Libraries/Required" + RCTTypeSafety: + :path: "../../../node_modules/react-native/Libraries/TypeSafety" + React: + :path: "../../../node_modules/react-native/" + React-callinvoker: + :path: "../../../node_modules/react-native/ReactCommon/callinvoker" + React-Core: + :path: "../../../node_modules/react-native/" + React-CoreModules: + :path: "../../../node_modules/react-native/React/CoreModules" + React-cxxreact: + :path: "../../../node_modules/react-native/ReactCommon/cxxreact" + React-debug: + :path: "../../../node_modules/react-native/ReactCommon/react/debug" + React-defaultsnativemodule: + :path: "../../../node_modules/react-native/ReactCommon/react/nativemodule/defaults" + React-domnativemodule: + :path: "../../../node_modules/react-native/ReactCommon/react/nativemodule/dom" + React-Fabric: + :path: "../../../node_modules/react-native/ReactCommon" + React-FabricComponents: + :path: "../../../node_modules/react-native/ReactCommon" + React-FabricImage: + :path: "../../../node_modules/react-native/ReactCommon" + React-featureflags: + :path: "../../../node_modules/react-native/ReactCommon/react/featureflags" + React-featureflagsnativemodule: + :path: "../../../node_modules/react-native/ReactCommon/react/nativemodule/featureflags" + React-graphics: + :path: "../../../node_modules/react-native/ReactCommon/react/renderer/graphics" + React-hermes: + :path: "../../../node_modules/react-native/ReactCommon/hermes" + React-idlecallbacksnativemodule: + :path: "../../../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks" + React-ImageManager: + :path: "../../../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" + React-jserrorhandler: + :path: "../../../node_modules/react-native/ReactCommon/jserrorhandler" + React-jsi: + :path: "../../../node_modules/react-native/ReactCommon/jsi" + React-jsiexecutor: + :path: "../../../node_modules/react-native/ReactCommon/jsiexecutor" + React-jsinspector: + :path: "../../../node_modules/react-native/ReactCommon/jsinspector-modern" + React-jsinspectorcdp: + :path: "../../../node_modules/react-native/ReactCommon/jsinspector-modern/cdp" + React-jsinspectornetwork: + :path: "../../../node_modules/react-native/ReactCommon/jsinspector-modern/network" + React-jsinspectortracing: + :path: "../../../node_modules/react-native/ReactCommon/jsinspector-modern/tracing" + React-jsitooling: + :path: "../../../node_modules/react-native/ReactCommon/jsitooling" + React-jsitracing: + :path: "../../../node_modules/react-native/ReactCommon/hermes/executor/" + React-logger: + :path: "../../../node_modules/react-native/ReactCommon/logger" + React-Mapbuffer: + :path: "../../../node_modules/react-native/ReactCommon" + React-microtasksnativemodule: + :path: "../../../node_modules/react-native/ReactCommon/react/nativemodule/microtasks" + react-native-webgpu: + :path: "../../../node_modules/react-native-webgpu" + React-NativeModulesApple: + :path: "../../../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" + React-oscompat: + :path: "../../../node_modules/react-native/ReactCommon/oscompat" + React-perflogger: + :path: "../../../node_modules/react-native/ReactCommon/reactperflogger" + React-performancetimeline: + :path: "../../../node_modules/react-native/ReactCommon/react/performance/timeline" + React-RCTActionSheet: + :path: "../../../node_modules/react-native/Libraries/ActionSheetIOS" + React-RCTAnimation: + :path: "../../../node_modules/react-native/Libraries/NativeAnimation" + React-RCTAppDelegate: + :path: "../../../node_modules/react-native/Libraries/AppDelegate" + React-RCTBlob: + :path: "../../../node_modules/react-native/Libraries/Blob" + React-RCTFabric: + :path: "../../../node_modules/react-native/React" + React-RCTFBReactNativeSpec: + :path: "../../../node_modules/react-native/React" + React-RCTImage: + :path: "../../../node_modules/react-native/Libraries/Image" + React-RCTLinking: + :path: "../../../node_modules/react-native/Libraries/LinkingIOS" + React-RCTNetwork: + :path: "../../../node_modules/react-native/Libraries/Network" + React-RCTRuntime: + :path: "../../../node_modules/react-native/React/Runtime" + React-RCTSettings: + :path: "../../../node_modules/react-native/Libraries/Settings" + React-RCTText: + :path: "../../../node_modules/react-native/Libraries/Text" + React-RCTVibration: + :path: "../../../node_modules/react-native/Libraries/Vibration" + React-rendererconsistency: + :path: "../../../node_modules/react-native/ReactCommon/react/renderer/consistency" + React-renderercss: + :path: "../../../node_modules/react-native/ReactCommon/react/renderer/css" + React-rendererdebug: + :path: "../../../node_modules/react-native/ReactCommon/react/renderer/debug" + React-RuntimeApple: + :path: "../../../node_modules/react-native/ReactCommon/react/runtime/platform/ios" + React-RuntimeCore: + :path: "../../../node_modules/react-native/ReactCommon/react/runtime" + React-runtimeexecutor: + :path: "../../../node_modules/react-native/ReactCommon/runtimeexecutor" + React-RuntimeHermes: + :path: "../../../node_modules/react-native/ReactCommon/react/runtime" + React-runtimescheduler: + :path: "../../../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" + React-timing: + :path: "../../../node_modules/react-native/ReactCommon/react/timing" + React-utils: + :path: "../../../node_modules/react-native/ReactCommon/react/utils" + ReactAppDependencyProvider: + :path: build/generated/ios + ReactCodegen: + :path: build/generated/ios + ReactCommon: + :path: "../../../node_modules/react-native/ReactCommon" + Yoga: + :path: "../../../node_modules/react-native/ReactCommon/yoga" + +SPEC CHECKSUMS: + boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 + DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb + fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 + FBLazyVector: 941bef1c8eeabd9fe1f501e30a5220beee913886 + fmt: 530618a01105dae0fa3a2f27c81ae11fa8f67eac + glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 + hermes-engine: 35c763d57c9832d0eef764316ca1c4d043581394 + RCT-Folly: b29feb752b08042c62badaef7d453f3bb5e6ae23 + RCTDeprecation: c0ed3249a97243002615517dff789bf4666cf585 + RCTRequired: 58719f5124f9267b5f9649c08bf23d9aea845b23 + RCTTypeSafety: 4aefa8328ab1f86da273f08517f1f6b343f6c2cc + React: 2073376f47c71b7e9a0af7535986a77522ce1049 + React-callinvoker: 751b6f2c83347a0486391c3f266f291f0f53b27e + React-Core: dff5d29973349b11dd6631c9498456d75f846d5e + React-CoreModules: c0ae04452e4c5d30e06f8e94692a49107657f537 + React-cxxreact: 376fd672c95dfb64ad5cc246e6a1e9edb78dec4c + React-debug: 7b56a0a7da432353287d2eedac727903e35278f5 + React-defaultsnativemodule: 393b81aaa6211408f50a6ef00a277847256dd881 + React-domnativemodule: 5fb5829baa7a7a0f217019cbad1eb226d94f7062 + React-Fabric: a17c4ae35503673b57b91c2d1388429e7cbee452 + React-FabricComponents: a76572ddeba78ebe4ec58615291e9db4a55cd46a + React-FabricImage: d806eb2695d7ef355ec28d1a21f5a14ac26b1cae + React-featureflags: 1690ec3c453920b6308e23a4e24eb9c3632f9c75 + React-featureflagsnativemodule: 7b7e8483fc671c5a33aefd699b7c7a3c0bdfdfec + React-graphics: ea146ee799dc816524a3a0922fc7be0b5a52dcc1 + React-hermes: fcbdc45ecf38259fe3b12642bd0757c52270a107 + React-idlecallbacksnativemodule: a353f9162eaa7ad787e68aba9f52a1cfa8154098 + React-ImageManager: ec5cf55ce9cc81719eb5f1f51d23d04db851c86c + React-jserrorhandler: 594c593f3d60f527be081e2cace7710c2bd9f524 + React-jsi: 59ec3190dd364cca86a58869e7755477d2468948 + React-jsiexecutor: b87d78a2e8dd7a6f56e9cdac038da45de98c944f + React-jsinspector: b9204adf1af622c98e78af96ec1bca615c2ce2bd + React-jsinspectorcdp: 4a356fa69e412d35d3a38c44d4a6cc555c5931e8 + React-jsinspectornetwork: 7820056773178f321cbf18689e1ffcd38276a878 + React-jsinspectortracing: b341c5ef6e031a33e0bd462d67fd397e8e9cd612 + React-jsitooling: 401655e05cb966b0081225c5201d90734a567cb9 + React-jsitracing: 67eff6dea0cb58a1e7bd8b49243012d88c0f511e + React-logger: a3cb5b29c32b8e447b5a96919340e89334062b48 + React-Mapbuffer: 9d2434a42701d6144ca18f0ca1c4507808ca7696 + React-microtasksnativemodule: 75b6604b667d297292345302cc5bfb6b6aeccc1b + react-native-webgpu: 41f889f6d41f4fd288c331371df55a9bbe806ba9 + React-NativeModulesApple: 879fbdc5dcff7136abceb7880fe8a2022a1bd7c3 + React-oscompat: 93b5535ea7f7dff46aaee4f78309a70979bdde9d + React-perflogger: 5536d2df3d18fe0920263466f7b46a56351c0510 + React-performancetimeline: 9041c53efa07f537164dcfe7670a36642352f4c2 + React-RCTActionSheet: 42195ae666e6d79b4af2346770f765b7c29435b9 + React-RCTAnimation: fa103ccc3503b1ed8dedca7e62e7823937748843 + React-RCTAppDelegate: 665d4baf19424cef08276e9ac0d8771eec4519f9 + React-RCTBlob: 0fa9530c255644db095f2c4fd8d89738d9d9ecc0 + React-RCTFabric: 1fcd8af6e25f92532f56b4ba092e58662c14d156 + React-RCTFBReactNativeSpec: db171247585774f9f0a30f75109cc51568686213 + React-RCTImage: ba824e61ce2e920a239a65d130b83c3a1d426dff + React-RCTLinking: d2dc199c37e71e6f505d9eca3e5c33be930014d4 + React-RCTNetwork: 87137d4b9bd77e5068f854dd5c1f30d4b072faf6 + React-RCTRuntime: 137fafaa808a8b7e76a510e8be45f9f827899daa + React-RCTSettings: 71f5c7fd7b5f4e725a4e2114a4b4373d0e46048f + React-RCTText: b94d4699b49285bee22b8ebf768924d607eccee3 + React-RCTVibration: 6e3993c4f6c36a3899059f9a9ead560ddaf5a7d7 + React-rendererconsistency: b4785e5ed837dc7c242bbc5fdd464b33ef5bfae7 + React-renderercss: e6fb0ba387b389c595ffa86b8b628716d31f58dc + React-rendererdebug: 60a03de5c7ea59bf2d39791eb43c4c0f5d8b24e3 + React-RuntimeApple: 3df6788cd9b938bb8cb28298d80b5fbd98a4d852 + React-RuntimeCore: fad8adb4172c414c00ff6980250caf35601a0f5d + React-runtimeexecutor: d2db7e72d97751855ea0bf5273d2ac84e5ea390c + React-RuntimeHermes: 04faa4cf9a285136a6d73738787fe36020170613 + React-runtimescheduler: f6a1c9555e7131b4a8b64cce01489ad0405f6e8d + React-timing: 1e6a8acb66e2b7ac9d418956617fd1fdb19322fd + React-utils: 52bbb03f130319ef82e4c3bc7a85eaacdb1fec87 + ReactAppDependencyProvider: 433ddfb4536948630aadd5bd925aff8a632d2fe3 + ReactCodegen: 64dbbed4e9e0264d799578ea78492479a66fba4a + ReactCommon: 394c6b92765cf6d211c2c3f7f6bc601dffb316a6 + SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 + Yoga: a3ed390a19db0459bd6839823a6ac6d9c6db198d + +PODFILE CHECKSUM: a0af4737af8418a1538a69209ed2232b2cadf9f5 + +COCOAPODS: 1.16.2 diff --git a/apps/spm-example/ios/SpmExample.xcodeproj/project.pbxproj b/apps/spm-example/ios/SpmExample.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..20d4aac90c --- /dev/null +++ b/apps/spm-example/ios/SpmExample.xcodeproj/project.pbxproj @@ -0,0 +1,501 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 0C80B921A6F3F58F76C31292 /* libPods-SpmExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-SpmExample.a */; }; + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; + 1CE5FBB8305C3C7C4F508244 /* react-native-webgpu in Frameworks */ = {isa = PBXBuildFile; productRef = 7710EF1317EBEC4B1855ECD5 /* react-native-webgpu */; }; + 55D361336311FCE96E5D8980 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */; }; + 761780ED2CA45674006654EE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761780EC2CA45674006654EE /* AppDelegate.swift */; }; + 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 13B07F961A680F5B00A75B9A /* SpmExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SpmExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = SpmExample/Images.xcassets; sourceTree = ""; }; + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = SpmExample/Info.plist; sourceTree = ""; }; + 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = PrivacyInfo.xcprivacy; path = SpmExample/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 3B4392A12AC88292D35C810B /* Pods-SpmExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SpmExample.debug.xcconfig"; path = "Target Support Files/Pods-SpmExample/Pods-SpmExample.debug.xcconfig"; sourceTree = ""; }; + 5709B34CF0A7D63546082F79 /* Pods-SpmExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SpmExample.release.xcconfig"; path = "Target Support Files/Pods-SpmExample/Pods-SpmExample.release.xcconfig"; sourceTree = ""; }; + 5DCACB8F33CDC322A6C60F78 /* libPods-SpmExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-SpmExample.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 761780EC2CA45674006654EE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = SpmExample/AppDelegate.swift; sourceTree = ""; }; + 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = SpmExample/LaunchScreen.storyboard; sourceTree = ""; }; + ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0C80B921A6F3F58F76C31292 /* libPods-SpmExample.a in Frameworks */, + 1CE5FBB8305C3C7C4F508244 /* react-native-webgpu in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 13B07FAE1A68108700A75B9A /* SpmExample */ = { + isa = PBXGroup; + children = ( + 13B07FB51A68108700A75B9A /* Images.xcassets */, + 761780EC2CA45674006654EE /* AppDelegate.swift */, + 13B07FB61A68108700A75B9A /* Info.plist */, + 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, + 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */, + ); + name = SpmExample; + sourceTree = ""; + }; + 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { + isa = PBXGroup; + children = ( + ED297162215061F000B7C4FE /* JavaScriptCore.framework */, + 5DCACB8F33CDC322A6C60F78 /* libPods-SpmExample.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 832341AE1AAA6A7D00B99B32 /* Libraries */ = { + isa = PBXGroup; + children = ( + ); + name = Libraries; + sourceTree = ""; + }; + 83CBB9F61A601CBA00E9B192 = { + isa = PBXGroup; + children = ( + 13B07FAE1A68108700A75B9A /* SpmExample */, + 832341AE1AAA6A7D00B99B32 /* Libraries */, + 83CBBA001A601CBA00E9B192 /* Products */, + 2D16E6871FA4F8E400B85C8A /* Frameworks */, + BBD78D7AC51CEA395F1C20DB /* Pods */, + ); + indentWidth = 2; + sourceTree = ""; + tabWidth = 2; + usesTabs = 0; + }; + 83CBBA001A601CBA00E9B192 /* Products */ = { + isa = PBXGroup; + children = ( + 13B07F961A680F5B00A75B9A /* SpmExample.app */, + ); + name = Products; + sourceTree = ""; + }; + BBD78D7AC51CEA395F1C20DB /* Pods */ = { + isa = PBXGroup; + children = ( + 3B4392A12AC88292D35C810B /* Pods-SpmExample.debug.xcconfig */, + 5709B34CF0A7D63546082F79 /* Pods-SpmExample.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 13B07F861A680F5B00A75B9A /* SpmExample */ = { + isa = PBXNativeTarget; + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "SpmExample" */; + buildPhases = ( + C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */, + 13B07F871A680F5B00A75B9A /* Sources */, + 13B07F8C1A680F5B00A75B9A /* Frameworks */, + 13B07F8E1A680F5B00A75B9A /* Resources */, + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, + 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */, + E235C05ADACE081382539298 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SpmExample; + packageProductDependencies = ( + 7710EF1317EBEC4B1855ECD5 /* react-native-webgpu */, + ); + productName = SpmExample; + productReference = 13B07F961A680F5B00A75B9A /* SpmExample.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 83CBB9F71A601CBA00E9B192 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1210; + TargetAttributes = { + 13B07F861A680F5B00A75B9A = { + LastSwiftMigration = 1120; + }; + }; + }; + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "SpmExample" */; + compatibilityVersion = "Xcode 12.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 83CBB9F61A601CBA00E9B192; + packageReferences = ( + DAD11D5FE492944CD3648B46 /* XCLocalSwiftPackageReference "webgpu" */, + ); + productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 13B07F861A680F5B00A75B9A /* SpmExample */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 13B07F8E1A680F5B00A75B9A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */, + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, + 55D361336311FCE96E5D8980 /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/.xcode.env.local", + "$(SRCROOT)/.xcode.env", + ); + name = "Bundle React Native code and images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "set -e\n\nWITH_ENVIRONMENT=\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"$REACT_NATIVE_PATH/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n"; + }; + 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-SpmExample/Pods-SpmExample-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-SpmExample/Pods-SpmExample-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SpmExample/Pods-SpmExample-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-SpmExample-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-SpmExample/Pods-SpmExample-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-SpmExample/Pods-SpmExample-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SpmExample/Pods-SpmExample-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 13B07F871A680F5B00A75B9A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 761780ED2CA45674006654EE /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 13B07F941A680F5B00A75B9A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-SpmExample.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = 1; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = SpmExample/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = SpmExample; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 13B07F951A680F5B00A75B9A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-SpmExample.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = 1; + INFOPLIST_FILE = SpmExample/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = SpmExample; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + 83CBBA201A601CBA00E9B192 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", + ); + LIBRARY_SEARCH_PATHS = ( + "\"$(SDKROOT)/usr/lib/swift\"", + "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", + "\"$(inherited)\"", + ); + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-DFOLLY_NO_CONFIG", + "-DFOLLY_MOBILE=1", + "-DFOLLY_USE_LIBCPP=1", + "-DFOLLY_CFG_NO_COROUTINES=1", + "-DFOLLY_HAVE_CLOCK_GETTIME=1", + ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../../../node_modules/react-native"; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; + USE_HERMES = true; + }; + name = Debug; + }; + 83CBBA211A601CBA00E9B192 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", + ); + LIBRARY_SEARCH_PATHS = ( + "\"$(SDKROOT)/usr/lib/swift\"", + "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", + "\"$(inherited)\"", + ); + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-DFOLLY_NO_CONFIG", + "-DFOLLY_MOBILE=1", + "-DFOLLY_USE_LIBCPP=1", + "-DFOLLY_CFG_NO_COROUTINES=1", + "-DFOLLY_HAVE_CLOCK_GETTIME=1", + ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../../../node_modules/react-native"; + SDKROOT = iphoneos; + USE_HERMES = true; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "SpmExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 13B07F941A680F5B00A75B9A /* Debug */, + 13B07F951A680F5B00A75B9A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "SpmExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 83CBBA201A601CBA00E9B192 /* Debug */, + 83CBBA211A601CBA00E9B192 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + DAD11D5FE492944CD3648B46 /* XCLocalSwiftPackageReference "webgpu" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = ../../../packages/webgpu; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 7710EF1317EBEC4B1855ECD5 /* react-native-webgpu */ = { + isa = XCSwiftPackageProductDependency; + package = DAD11D5FE492944CD3648B46 /* XCLocalSwiftPackageReference "webgpu" */; + productName = "react-native-webgpu"; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; +} diff --git a/apps/spm-example/ios/SpmExample.xcodeproj/xcshareddata/xcschemes/SpmExample.xcscheme b/apps/spm-example/ios/SpmExample.xcodeproj/xcshareddata/xcschemes/SpmExample.xcscheme new file mode 100644 index 0000000000..6e19aac3f1 --- /dev/null +++ b/apps/spm-example/ios/SpmExample.xcodeproj/xcshareddata/xcschemes/SpmExample.xcscheme @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/spm-example/ios/SpmExample.xcworkspace/contents.xcworkspacedata b/apps/spm-example/ios/SpmExample.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..691387f3b2 --- /dev/null +++ b/apps/spm-example/ios/SpmExample.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/apps/spm-example/ios/SpmExample/AppDelegate.swift b/apps/spm-example/ios/SpmExample/AppDelegate.swift new file mode 100644 index 0000000000..eefddcb3b0 --- /dev/null +++ b/apps/spm-example/ios/SpmExample/AppDelegate.swift @@ -0,0 +1,48 @@ +import UIKit +import React +import React_RCTAppDelegate +import ReactAppDependencyProvider + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + var window: UIWindow? + + var reactNativeDelegate: ReactNativeDelegate? + var reactNativeFactory: RCTReactNativeFactory? + + func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil + ) -> Bool { + let delegate = ReactNativeDelegate() + let factory = RCTReactNativeFactory(delegate: delegate) + delegate.dependencyProvider = RCTAppDependencyProvider() + + reactNativeDelegate = delegate + reactNativeFactory = factory + + window = UIWindow(frame: UIScreen.main.bounds) + + factory.startReactNative( + withModuleName: "SpmExample", + in: window, + launchOptions: launchOptions + ) + + return true + } +} + +class ReactNativeDelegate: RCTDefaultReactNativeFactoryDelegate { + override func sourceURL(for bridge: RCTBridge) -> URL? { + self.bundleURL() + } + + override func bundleURL() -> URL? { +#if DEBUG + RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index") +#else + Bundle.main.url(forResource: "main", withExtension: "jsbundle") +#endif + } +} diff --git a/apps/spm-example/ios/SpmExample/Images.xcassets/AppIcon.appiconset/Contents.json b/apps/spm-example/ios/SpmExample/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..81213230de --- /dev/null +++ b/apps/spm-example/ios/SpmExample/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,53 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/apps/spm-example/ios/SpmExample/Images.xcassets/Contents.json b/apps/spm-example/ios/SpmExample/Images.xcassets/Contents.json new file mode 100644 index 0000000000..2d92bd53fd --- /dev/null +++ b/apps/spm-example/ios/SpmExample/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/apps/spm-example/ios/SpmExample/Info.plist b/apps/spm-example/ios/SpmExample/Info.plist new file mode 100644 index 0000000000..dd14a6eea1 --- /dev/null +++ b/apps/spm-example/ios/SpmExample/Info.plist @@ -0,0 +1,53 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + SpmExample + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + NSAllowsLocalNetworking + + + NSLocationWhenInUseUsageDescription + + RCTNewArchEnabled + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + arm64 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/apps/spm-example/ios/SpmExample/LaunchScreen.storyboard b/apps/spm-example/ios/SpmExample/LaunchScreen.storyboard new file mode 100644 index 0000000000..8af2d8a45a --- /dev/null +++ b/apps/spm-example/ios/SpmExample/LaunchScreen.storyboard @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/spm-example/ios/SpmExample/PrivacyInfo.xcprivacy b/apps/spm-example/ios/SpmExample/PrivacyInfo.xcprivacy new file mode 100644 index 0000000000..41b8317f06 --- /dev/null +++ b/apps/spm-example/ios/SpmExample/PrivacyInfo.xcprivacy @@ -0,0 +1,37 @@ + + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPITypeReasons + + C617.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategorySystemBootTime + NSPrivacyAccessedAPITypeReasons + + 35F9.1 + + + + NSPrivacyCollectedDataTypes + + NSPrivacyTracking + + + diff --git a/apps/spm-example/metro.config.js b/apps/spm-example/metro.config.js new file mode 100644 index 0000000000..814ada0855 --- /dev/null +++ b/apps/spm-example/metro.config.js @@ -0,0 +1,18 @@ +const path = require('path'); +const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config'); + +// Workspace deps (react-native-webgpu, @babel/runtime, etc.) get hoisted to +// the monorepo root node_modules, so Metro needs to watch it too. +const root = path.resolve(__dirname, '../..'); + +/** + * Metro configuration + * https://reactnative.dev/docs/metro + * + * @type {import('@react-native/metro-config').MetroConfig} + */ +const config = { + watchFolders: [root], +}; + +module.exports = mergeConfig(getDefaultConfig(__dirname), config); diff --git a/apps/spm-example/package.json b/apps/spm-example/package.json new file mode 100644 index 0000000000..02db599be7 --- /dev/null +++ b/apps/spm-example/package.json @@ -0,0 +1,33 @@ +{ + "name": "spm-example", + "version": "0.0.1", + "private": true, + "scripts": { + "ios": "react-native run-ios", + "lint": "eslint .", + "start": "react-native start" + }, + "dependencies": { + "react": "19.1.0", + "react-native": "0.81.4", + "react-native-webgpu": "workspace:*" + }, + "devDependencies": { + "@babel/core": "^7.25.2", + "@babel/preset-env": "^7.25.3", + "@babel/runtime": "^7.25.0", + "@react-native-community/cli": "20.0.0", + "@react-native-community/cli-platform-ios": "20.0.0", + "@react-native/babel-preset": "0.81.4", + "@react-native/eslint-config": "0.81.4", + "@react-native/metro-config": "0.81.4", + "@react-native/typescript-config": "0.81.4", + "@types/react": "^19.1.0", + "eslint": "^8.19.0", + "prettier": "2.8.8", + "typescript": "^5.8.3" + }, + "engines": { + "node": ">=20" + } +} diff --git a/apps/spm-example/tsconfig.json b/apps/spm-example/tsconfig.json new file mode 100644 index 0000000000..c41b7e2014 --- /dev/null +++ b/apps/spm-example/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "@react-native/typescript-config", + "include": ["**/*.ts", "**/*.tsx"], + "exclude": ["**/node_modules", "**/Pods"] +} diff --git a/externals/dawn b/externals/dawn index 1e89727517..3d786993a7 160000 --- a/externals/dawn +++ b/externals/dawn @@ -1 +1 @@ -Subproject commit 1e897275172a23f27b0022fa6beae3084ed54a9b +Subproject commit 3d786993a7ded64c4ebb4884b9b079db9ad0e580 diff --git a/packages/webgpu/CONTRIBUTING.md b/packages/webgpu/CONTRIBUTING.md index ec871cbe0e..32d7b7aa52 100644 --- a/packages/webgpu/CONTRIBUTING.md +++ b/packages/webgpu/CONTRIBUTING.md @@ -13,7 +13,9 @@ Example app (from `apps/example/`): `yarn start` · `yarn ios` · `yarn android` From the repo root: `yarn lint` · `yarn tsc` · `yarn build:docs` -Tests (from `packages/webgpu/`): `yarn test:ref` (Chrome reference) · `yarn test` (E2E — open the example app on the E2E screen) · `yarn test:plugin` (Expo config plugin unit tests) +Tests (from `packages/webgpu/`): `yarn test:ref` (Chrome reference) · `yarn test` (E2E) · `yarn test:plugin` (Expo config plugin unit tests) + +`yarn test` needs the example app open on its "Tests" screen and connected to Metro first: start Metro with `CI=true yarn start` (from `apps/example/`) — `initialRouteName` in `apps/example/src/App.tsx` is `"Tests"` when `process.env.CI === "true"`, inlined at bundle time via the `transform-inline-environment-variables` babel plugin — then launch the app (`yarn ios` / `yarn android`, or install+launch an existing build). The screen shows "Connecting to localhost..." once it's ready; `yarn test` then picks it up automatically. If a run fails mid-suite, reload the app (`curl -X POST http://localhost:8081/reload`) before the next run — a broken `GPUDevice` from the failed run makes unrelated later tests fail too. Other `packages/webgpu` scripts: `yarn clean-dawn` · `yarn build-dawn` @@ -54,4 +56,6 @@ Steps to bump to a new Dawn version (new Skia milestone `m`): 6. **Update the compatibility table** in `apps/docs/content/docs/integrations/react-native-skia.mdx` with the new milestone row, so users can pair react-native-webgpu and `@shopify/react-native-skia` versions. -7. **Verify and commit.** Build and run the example app, then commit the submodule bump together with the updated `package.json`. \ No newline at end of file +7. **Build both platforms.** A milestone can also change Dawn's C++ API surface, not just add features — e.g. `chrome-m154` turned `SharedTextureMemory::BeginAccess`/`EndAccess`, `Adapter::GetLimits`, `Device::GetLimits`, and `SharedTextureMemory::GetProperties` from a bool-ish return into `wgpu::Status` (no implicit bool conversion), breaking every `if (!result)` / `if (result)` call site in `cpp/rnwgpu/api/*.cpp`. Building iOS and Android is the way these surface; fix by comparing explicitly (`result == wgpu::Status::Success`). + +8. **Verify and commit.** Build and run the example app (see "Development workflow" above for reaching the Tests screen), then commit the submodule bump together with the updated `package.json`. \ No newline at end of file diff --git a/packages/webgpu/Package.swift b/packages/webgpu/Package.swift new file mode 100644 index 0000000000..9760bf4bca --- /dev/null +++ b/packages/webgpu/Package.swift @@ -0,0 +1,191 @@ +// swift-tools-version: 5.9 +// Generated by scripts/generate-package-swift.ts — do not edit by hand. +// Re-run that script after a new Dawn release to update the URL/checksum below. +import Foundation +import PackageDescription + +// Integration model: a local Swift package next to a CocoaPods install. +// +// This manifest targets React Native 0.81+ (the package's peer range), where +// React Native's own headers and the RNWgpuViewSpec codegen output only exist +// inside the consuming app's CocoaPods install. Add this package as a local +// Swift Package dependency in place of the react-native-webgpu pod (export +// RNWGPU_USE_SPM=1 for `pod install`) and keep running `pod install` for +// everything else. The header search paths below point into that Pods +// directory. They can only be expressed as `unsafeFlags`, and SwiftPM rejects +// unsafeFlags in anything but a path dependency, so this package can only be +// consumed locally, never by URL and version. +// +// React Native 0.87 added SwiftPM autolinking. There, a dependency shipping +// its own Package.swift is treated as self-managed and referenced directly, +// and it consumes React Native's headers as SwiftPM products (ReactHeaders, +// ReactNativeHeaders, ReactNativeDependenciesHeaders, plus ReactAppHeaders +// from the app's generated codegen package) with no CocoaPods at all. This +// manifest does not implement that model yet: on a 0.87+ app that has opted +// into SwiftPM autolinking it is picked up as self-managed but cannot find +// React Native's headers. Keep CocoaPods for React Native on those apps. + +// Absolute location of this package. Xcode may hand over a symlink (React +// Native 0.87's autolinker does), so resolve it before deriving sibling paths. +let packageRoot = URL(fileURLWithPath: Context.packageDirectory) + .resolvingSymlinksInPath().path +let sibling = { (relative: String) -> String in + URL(fileURLWithPath: "\(packageRoot)/\(relative)").standardized.path +} + +// Where the consuming app's Pods live. PODS_ROOT is exported by Xcode.app for +// a real build, but never by plain `xcodebuild`, and never while Xcode indexes +// the manifest before a first build. SwiftPM also caches manifest evaluations, +// so an evaluation that ran without it would otherwise be cached with an empty +// include list and surface later as header-not-found errors. Fall back to +// where Pods sit relative to this package for every standard app layout, so +// the result is the same with or without the environment variable. +let podsRootCandidates = [ + sibling("../../ios/Pods"), // consumer: /node_modules/react-native-webgpu + sibling("../../apps/spm-example/ios/Pods"), // this monorepo +] +let podsRoot = + ProcessInfo.processInfo.environment["PODS_ROOT"] + ?? podsRootCandidates.first { FileManager.default.fileExists(atPath: $0) } + ?? podsRootCandidates[0] + +// Skia Graphite and WebGPU must link the exact same Dawn, or the pair links +// fine and crashes at runtime. react-native-skia's podspec enforces this at +// `pod install` time by comparing its libs/.dawn-version against this +// package's `dawn` field. A Swift package has no install hook, so the same +// check runs here, at manifest evaluation. SwiftPM caches evaluations, so +// after changing either package's Dawn version reset the package caches +// (File > Packages > Reset Package Caches) if this does not re-run. +let dawnReleaseTag = "dawn-chrome-m154" +let skiaCandidates = [ + sibling("../@shopify/react-native-skia"), // consumer: sibling in node_modules + sibling("../../node_modules/@shopify/react-native-skia"), // this monorepo +] +for skia in skiaCandidates { + // Only Graphite builds of react-native-skia write this marker (Ganesh + // builds do not link Dawn and impose no constraint). + guard let data = FileManager.default.contents(atPath: "\(skia)/libs/.dawn-version"), + let skiaDawn = String(data: data, encoding: .utf8)? + .trimmingCharacters(in: .whitespacesAndNewlines) + else { continue } + if skiaDawn != dawnReleaseTag { + fatalError( + """ + react-native-webgpu: Dawn version mismatch. This package links \(dawnReleaseTag) \ + but the @shopify/react-native-skia Graphite build at \(skia) links \(skiaDawn). \ + Align the two packages so the app contains exactly one Dawn. + """) + } + break +} + +// Static-library Pods layout. With `use_frameworks!` CocoaPods keeps headers +// inside each framework instead and none of these paths exist; the podspec +// refuses RNWGPU_USE_SPM in that mode. +let publicHeaders = "\(podsRoot)/Headers/Public" +let privateHeaders = "\(podsRoot)/Headers/Private" +let headerSearchPaths = [ + publicHeaders, + // Yoga's headers are CocoaPods-private (apps aren't meant to use Yoga's + // C++ API directly), but React-Fabric's view props headers include them + // transitively. + "\(privateHeaders)/Yoga", + "\(publicHeaders)/React-Core", + "\(publicHeaders)/React-jsi", + "\(publicHeaders)/React-callinvoker", + "\(publicHeaders)/React-NativeModulesApple", + "\(publicHeaders)/React-RCTFabric", + "\(publicHeaders)/ReactCodegen", + "\(publicHeaders)/RCT-Folly", + "\(publicHeaders)/RCTRequired", + "\(publicHeaders)/RCTTypeSafety", + "\(publicHeaders)/FBLazyVector", + "\(publicHeaders)/ReactCommon", + "\(publicHeaders)/React-Fabric", + "\(publicHeaders)/React-graphics", + "\(publicHeaders)/React-utils", + "\(publicHeaders)/React-featureflags", + "\(publicHeaders)/React-rendererdebug", + "\(publicHeaders)/React-debug", + "\(publicHeaders)/React-timing", + "\(publicHeaders)/React-runtimescheduler", + "\(publicHeaders)/React-rendererconsistency", + "\(publicHeaders)/React-performancetimeline", + "\(publicHeaders)/React-runtimeexecutor", + "\(publicHeaders)/React-cxxreact", + "\(publicHeaders)/hermes-engine", + "\(publicHeaders)/glog", + "\(publicHeaders)/DoubleConversion", + "\(publicHeaders)/fmt", + "\(publicHeaders)/fast_float", +] +// The only unsafe flags left: .headerSearchPath cannot escape the target +// path, and these live in the app's Pods directory. +let cFamilyIncludeFlags = headerSearchPaths.map { "-I\($0)" } +let follyDefines: [(name: String, value: String?)] = [ + ("FOLLY_NO_CONFIG", nil), + ("FOLLY_MOBILE", "1"), + ("FOLLY_USE_LIBCPP", "1"), + ("FOLLY_CFG_NO_COROUTINES", "1"), + ("FOLLY_HAVE_CLOCK_GETTIME", "1"), +] + +// Unlike a native Xcode target, SwiftPM doesn't generate an implicit +// per-target header map, so quoted includes only resolve within the +// including file's own directory. The sources use bare cross-directory +// includes (e.g. apple/WebGPUModule.h includes "RNWebGPUManager.h" from +// cpp/rnwgpu), so every directory that's the target of one of those bare +// includes has to be listed explicitly here. +let internalHeaderDirs = [ + "apple", + // "cpp" itself resolves the "webgpu/..." and "dawn/..." namespaced + // includes. Those two directories are only present locally when built via + // `yarn install-dawn` (without the xcframework's embedded headers); a + // remote binaryTarget's xcframework embeds them instead (see + // build-dawn.yml's `-headers` flag), so "cpp" not containing them there + // is fine — the xcframework's own headers cover it. + "cpp", + "cpp/jsi", + "cpp/rnwgpu", + "cpp/rnwgpu/api", + "cpp/rnwgpu/api/descriptors", + "cpp/rnwgpu/async", +] + +let package = Package( + name: "react-native-webgpu", + platforms: [.iOS("15.1"), .macOS("11.0")], + products: [ + .library(name: "react-native-webgpu", targets: ["react-native-webgpu"]) + ], + targets: [ + // Dawn's compiled WebGPU implementation. The xcframework embeds the + // `webgpu/` and `dawn/` C headers per-slice (built via `-headers` in + // build-dawn.yml), so SPM exposes them to dependents automatically. + .binaryTarget( + name: "WebGPUDawn", + url: "https://github.com/wcandillon/react-native-webgpu/releases/download/dawn-chrome-m154/dawn-apple-dawn-chrome-m154.xcframework.zip", + checksum: "896575ffbc99610198a83d061f8c5a2789139b7f16c669fbf3a9f7a7ac9be123" + ), + .target( + name: "react-native-webgpu", + dependencies: ["WebGPUDawn"], + path: ".", + sources: ["apple", "cpp/jsi", "cpp/rnwgpu"], + publicHeadersPath: "apple", + cSettings: internalHeaderDirs.map { CSetting.headerSearchPath($0) } + + follyDefines.map { CSetting.define($0.name, to: $0.value) } + + [.unsafeFlags(cFamilyIncludeFlags)], + cxxSettings: internalHeaderDirs.map { CXXSetting.headerSearchPath($0) } + + follyDefines.map { CXXSetting.define($0.name, to: $0.value) } + + [.unsafeFlags(cFamilyIncludeFlags)], + linkerSettings: [ + .linkedFramework("AVFoundation"), + .linkedFramework("CoreMedia"), + .linkedFramework("CoreVideo"), + .linkedFramework("ImageIO"), + ] + ), + ], + cxxLanguageStandard: .cxx20 +) diff --git a/packages/webgpu/cpp/rnwgpu/api/GPUAdapter.cpp b/packages/webgpu/cpp/rnwgpu/api/GPUAdapter.cpp index 3bfdf2eaa1..aebf171014 100644 --- a/packages/webgpu/cpp/rnwgpu/api/GPUAdapter.cpp +++ b/packages/webgpu/cpp/rnwgpu/api/GPUAdapter.cpp @@ -327,7 +327,7 @@ std::unordered_set GPUAdapter::getFeatures() { std::shared_ptr GPUAdapter::getLimits() { wgpu::Limits limits{}; - if (!_instance.GetLimits(&limits)) { + if (_instance.GetLimits(&limits) != wgpu::Status::Success) { throw std::runtime_error("Failed to get limits"); } return std::make_shared(limits); diff --git a/packages/webgpu/cpp/rnwgpu/api/GPUDevice.cpp b/packages/webgpu/cpp/rnwgpu/api/GPUDevice.cpp index b90d57bbfc..2172df1106 100644 --- a/packages/webgpu/cpp/rnwgpu/api/GPUDevice.cpp +++ b/packages/webgpu/cpp/rnwgpu/api/GPUDevice.cpp @@ -125,7 +125,7 @@ GPUDevice::createBuffer(std::shared_ptr descriptor) { std::shared_ptr GPUDevice::getLimits() { wgpu::Limits limits{}; - if (!_instance.GetLimits(&limits)) { + if (_instance.GetLimits(&limits) != wgpu::Status::Success) { throw std::runtime_error("failed to get device limits"); } return std::make_shared(limits); diff --git a/packages/webgpu/cpp/rnwgpu/api/GPUExternalTexture.cpp b/packages/webgpu/cpp/rnwgpu/api/GPUExternalTexture.cpp index 44b2ea4b0c..86751e1319 100644 --- a/packages/webgpu/cpp/rnwgpu/api/GPUExternalTexture.cpp +++ b/packages/webgpu/cpp/rnwgpu/api/GPUExternalTexture.cpp @@ -190,7 +190,7 @@ std::shared_ptr GPUExternalTexture::Create( wgpu::SharedTextureMemoryBeginAccessDescriptor begin{}; begin.initialized = true; begin.concurrentRead = false; - if (!memory.BeginAccess(texture, &begin)) { + if (memory.BeginAccess(texture, &begin) != wgpu::Status::Success) { throw std::runtime_error( "GPUExternalTexture::Create(): BeginAccess failed"); } @@ -289,7 +289,7 @@ std::shared_ptr GPUExternalTexture::Create( begin.concurrentRead = false; wgpu::SharedTextureMemoryVkImageLayoutBeginState beginLayout{}; begin.nextInChain = &beginLayout; - if (!memory.BeginAccess(texture, &begin)) { + if (memory.BeginAccess(texture, &begin) != wgpu::Status::Success) { throw std::runtime_error( "GPUExternalTexture::Create(): BeginAccess failed"); } @@ -310,7 +310,7 @@ std::shared_ptr GPUExternalTexture::Create( wgpu::SharedTextureMemoryAHardwareBufferProperties ahbProps{}; wgpu::SharedTextureMemoryProperties props{}; props.nextInChain = &ahbProps; - if (memory.GetProperties(&props)) { + if (memory.GetProperties(&props) == wgpu::Status::Success) { yuvToRgbMatrix = makeYuvToRgbMatrix(ahbProps.yCbCrInfo.vkYCbCrModel, ahbProps.yCbCrInfo.vkYCbCrRange); } else { diff --git a/packages/webgpu/cpp/rnwgpu/api/GPUFeatures.h b/packages/webgpu/cpp/rnwgpu/api/GPUFeatures.h index ac19c4c6d3..8c0010e382 100644 --- a/packages/webgpu/cpp/rnwgpu/api/GPUFeatures.h +++ b/packages/webgpu/cpp/rnwgpu/api/GPUFeatures.h @@ -115,7 +115,8 @@ namespace rnwgpu { V(RenderPassRenderArea, "render-pass-render-area") \ V(AdapterPropertiesDrm, "adapter-properties-drm") \ V(TextureCompressionUnaligned, "texture-compression-unaligned") \ - V(DawnAllowUndefinedLoadStoreOp, "dawn-allow-undefined-load-store-op") + V(DawnAllowUndefinedLoadStoreOp, "dawn-allow-undefined-load-store-op") \ + V(BufferMapWriteExtendedUsages, "buffer-map-write-extended-usages") static void convertEnumToJSUnion(wgpu::FeatureName inEnum, std::string *outUnion) { diff --git a/packages/webgpu/cpp/rnwgpu/api/GPUSharedTextureMemory.cpp b/packages/webgpu/cpp/rnwgpu/api/GPUSharedTextureMemory.cpp index 6694263d07..b5500cda9e 100644 --- a/packages/webgpu/cpp/rnwgpu/api/GPUSharedTextureMemory.cpp +++ b/packages/webgpu/cpp/rnwgpu/api/GPUSharedTextureMemory.cpp @@ -75,7 +75,7 @@ void GPUSharedTextureMemory::beginAccess( #endif auto status = _instance.BeginAccess(texture->get(), &desc); - if (!status) { + if (status != wgpu::Status::Success) { throw std::runtime_error("GPUSharedTextureMemory::beginAccess() failed"); } } @@ -101,7 +101,7 @@ jsi::Value GPUSharedTextureMemory::endAccess(jsi::Runtime &runtime, #endif auto status = _instance.EndAccess(texture->get(), &state); - if (!status) { + if (status != wgpu::Status::Success) { throw jsi::JSError(runtime, "GPUSharedTextureMemory::endAccess() failed"); } diff --git a/packages/webgpu/package.json b/packages/webgpu/package.json index 31cab03b4c..3444a74139 100644 --- a/packages/webgpu/package.json +++ b/packages/webgpu/package.json @@ -20,11 +20,12 @@ "apple/**", "libs/**", "*.podspec", + "Package.swift", "app.plugin.js", "plugin/build/**" ], - "dawn": "chrome-m152", - "dawnCommit": "1e897275172a23f27b0022fa6beae3084ed54a9b", + "dawn": "chrome-m154", + "dawnCommit": "3d786993a7ded64c4ebb4884b9b079db9ad0e580", "scripts": { "test": "NODE_OPTIONS='--experimental-require-module' jest -i", "test:ref": "REFERENCE=true NODE_OPTIONS='--experimental-require-module' jest -i", @@ -42,7 +43,8 @@ "clang-format-android": "find android/cpp/ -iname \"*.h\" -o -iname \"*.m\" -o -iname \"*.cpp\" | xargs clang-format -i", "clang-format-common": "find cpp/rnwgpu -iname \"*.h\" -o -iname \"*.m\" -o -iname \"*.cpp\" | xargs clang-format -i", "cpplint": "cpplint --linelength=230 --filter=-legal/copyright,-whitespace/indent,-whitespace/comments,-whitespace/ending_newline,-build/include_order,-runtime/references,-readability/todo,-whitespace/blank_line,-whitespace/todo,-runtime/int,-build/c++11,-whitespace/parens --exclude=example --exclude=android/.cxx --exclude=cpp/webgpu --exclude=cpp/dawn --exclude=ios --exclude=android/build --exclude=node_modules --recursive .", - "install-dawn": "tsx scripts/install-dawn.ts" + "install-dawn": "tsx scripts/install-dawn.ts", + "generate-package-swift": "tsx scripts/generate-package-swift.ts" }, "keywords": [ "react-native", diff --git a/packages/webgpu/react-native-webgpu.podspec b/packages/webgpu/react-native-webgpu.podspec index 12857ffad7..150fefbf55 100644 --- a/packages/webgpu/react-native-webgpu.podspec +++ b/packages/webgpu/react-native-webgpu.podspec @@ -14,17 +14,41 @@ Pod::Spec.new do |s| s.platforms = { :ios => min_ios_version_supported, :osx => "10.15", :visionos => "1.0" } s.source = { :git => "https://github.com/wcandillon/react-native-webgpu.git", :tag => "#{s.version}" } - s.source_files = [ - "apple/**/*.{h,c,cc,cpp,m,mm,swift}", - "cpp/**/*.{h,cpp}" - ] + # RN's autolinking and codegen both key off this podspec being present and + # supporting the platform (see react-native.config.js docs: there is no way + # to disable CocoaPods linking for a dependency without also disabling + # codegen for it). So when the app links react-native-webgpu via the local + # Swift Package (packages/webgpu/Package.swift) instead of CocoaPods, this + # pod still needs to exist to keep the RNWgpuViewSpec codegen output + # flowing — it just shouldn't compile or link anything itself, or the app + # would get the native module twice. Set RNWGPU_USE_SPM=1 before + # `pod install` for that case. + if ENV['RNWGPU_USE_SPM'] + # The Swift package resolves React Native's headers from the + # static-library Pods layout (Pods/Headers/Public). With `use_frameworks!` + # CocoaPods keeps headers inside each framework instead, so none of those + # paths exist and the package fails to compile with header-not-found + # errors that don't point back here. Refuse the combination up front. + # The React Native template drives `use_frameworks!` from USE_FRAMEWORKS. + if ENV['USE_FRAMEWORKS'] + raise "react-native-webgpu: RNWGPU_USE_SPM needs the static-library Pods layout. " \ + "Unset USE_FRAMEWORKS (or drop use_frameworks! from the Podfile) to link " \ + "react-native-webgpu through its Swift package." + end + s.source_files = "apple/RNWGUIKit.h" + else + s.source_files = [ + "apple/**/*.{h,c,cc,cpp,m,mm,swift}", + "cpp/**/*.{h,cpp}" + ] - s.vendored_frameworks = 'libs/apple/libwebgpu_dawn.xcframework' + s.vendored_frameworks = 'libs/apple/libwebgpu_dawn.xcframework' - # The VideoPlayer API uses AVFoundation / CoreMedia, and shared-texture - # surfaces use CoreVideo (CVPixelBuffer). Link them so their symbols resolve. - # ImageIO provides CGImageSource, the image decoder behind createImageBitmap. - s.frameworks = "AVFoundation", "CoreMedia", "CoreVideo", "ImageIO" + # The VideoPlayer API uses AVFoundation / CoreMedia, and shared-texture + # surfaces use CoreVideo (CVPixelBuffer). Link them so their symbols resolve. + # ImageIO provides CGImageSource, the image decoder behind createImageBitmap. + s.frameworks = "AVFoundation", "CoreMedia", "CoreVideo", "ImageIO" + end s.pod_target_xcconfig = { 'HEADER_SEARCH_PATHS' => '$(PODS_TARGET_SRCROOT)/cpp', diff --git a/packages/webgpu/scripts/generate-package-swift.ts b/packages/webgpu/scripts/generate-package-swift.ts new file mode 100644 index 0000000000..e378d623e7 --- /dev/null +++ b/packages/webgpu/scripts/generate-package-swift.ts @@ -0,0 +1,90 @@ +#!/usr/bin/env tsx + +// Regenerates packages/webgpu/Package.swift for the Dawn release pinned in +// package.json ("dawn" field). Run this after build-dawn.yml has published a +// dawn-apple-.xcframework.zip release asset. Writes the file locally; +// commit and push it yourself. +// +// Pass --local to point the WebGPUDawn binary target at the xcframework +// already sitting in libs/apple/ (from `yarn install-dawn` or a local Dawn +// build) instead of downloading the release — useful for iterating on the +// package/example locally without a network round trip. + +import { execSync } from "child_process"; +import { mkdtempSync, readFileSync, rmSync, writeFileSync } from "fs"; +import { tmpdir } from "os"; +import { join } from "path"; + +import { + renderPackageSwift, + type WebGPUDawnBinaryTarget, +} from "./package-swift-template"; + +const packageJsonPath = join(__dirname, "..", "package.json"); +const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8")); +const dawnVersion = packageJson.dawn; + +if (!dawnVersion) { + console.error("No 'dawn' field found in package.json"); + process.exit(1); +} + +const releaseTag = `dawn-${dawnVersion.replace("/", "-")}`; +const zipName = `dawn-apple-${releaseTag}.xcframework.zip`; +const zipUrl = `https://github.com/wcandillon/react-native-webgpu/releases/download/${releaseTag}/${zipName}`; +const checksumUrl = `${zipUrl}.checksum.txt`; + +const fetchChecksum = (): string => { + // Prefer the checksum file build-dawn.yml computes and uploads alongside + // the zip — avoids re-downloading the (large) xcframework locally. + try { + const checksum = execSync(`curl -sfL "${checksumUrl}"`, { + encoding: "utf-8", + }).trim(); + if (checksum) { + console.log(`Using published checksum from ${checksumUrl}`); + return checksum; + } + } catch { + console.log( + "Published checksum file not found, computing from the zip instead...", + ); + } + + const tmpDir = mkdtempSync(join(tmpdir(), "rnwgpu-package-swift-")); + const zipPath = join(tmpDir, zipName); + try { + execSync(`curl -fL -o "${zipPath}" "${zipUrl}"`, { stdio: "inherit" }); + return execSync(`swift package compute-checksum "${zipPath}"`, { + encoding: "utf-8", + }).trim(); + } finally { + rmSync(tmpDir, { recursive: true, force: true }); + } +}; + +const useLocal = process.argv.includes("--local"); + +console.log( + useLocal + ? "Generating Package.swift against the local xcframework in libs/apple/..." + : `Generating Package.swift for ${releaseTag}...`, +); + +const target: WebGPUDawnBinaryTarget = useLocal + ? { kind: "local", path: "libs/apple/libwebgpu_dawn.xcframework" } + : { kind: "remote", url: zipUrl, checksum: fetchChecksum() }; + +const outputPath = join(__dirname, "..", "Package.swift"); +writeFileSync( + outputPath, + renderPackageSwift({ target, dawnReleaseTag: releaseTag }), +); + +console.log(`Wrote ${outputPath}`); +if (target.kind === "remote") { + console.log(` url: ${target.url}`); + console.log(` checksum: ${target.checksum}`); +} else { + console.log(` path: ${target.path}`); +} diff --git a/packages/webgpu/scripts/install-dawn.ts b/packages/webgpu/scripts/install-dawn.ts index 1bf521fd62..a6f31b1d50 100644 --- a/packages/webgpu/scripts/install-dawn.ts +++ b/packages/webgpu/scripts/install-dawn.ts @@ -82,7 +82,7 @@ if (!dawnVersion) { const dawnWorkarounds = [ { marker: "DAWN_WORKAROUND_DEVICE_DESTROY_BEFORE_SURFACE_RELEASE", - pin: "chrome-m152", + pin: "chrome-m154", files: ["cpp/rnwgpu/SurfaceRegistry.h", "cpp/rnwgpu/api/GPUDevice.cpp"], // Android: device.destroy() before the native view is dropped crashed in // SwapChain::DetachFromSurfaceImpl (Vulkan FencedDeleter of the dead @@ -163,7 +163,7 @@ const assets = [ }, }, { - name: `dawn-apple-${releaseTag}.xcframework.tar.gz`, + name: `dawn-apple-${releaseTag}.xcframework.zip`, extractTo: libsDir, postProcess: () => { // The extracted xcframework needs to be placed as libs/apple/libwebgpu_dawn.xcframework @@ -217,7 +217,7 @@ log.subheader("Downloading Assets"); // Add nice names for display const assetNames: { [key: string]: string } = { [`dawn-android-${releaseTag}.tar.gz`]: "Android Libraries", - [`dawn-apple-${releaseTag}.xcframework.tar.gz`]: "Apple Framework", + [`dawn-apple-${releaseTag}.xcframework.zip`]: "Apple Framework", [`dawn-headers-${releaseTag}.tar.gz`]: "C++ Headers", }; @@ -241,9 +241,15 @@ for (const [index, asset] of assets.entries()) { process.stdout.write( ` ${colors.dim}${symbols.extract} Extracting...${colors.reset}`, ); - execSync(`tar -xzf "${tarPath}" -C "${asset.extractTo}"`, { - stdio: "pipe", - }); + if (asset.name.endsWith(".zip")) { + execSync(`unzip -q -o "${tarPath}" -d "${asset.extractTo}"`, { + stdio: "pipe", + }); + } else { + execSync(`tar -xzf "${tarPath}" -C "${asset.extractTo}"`, { + stdio: "pipe", + }); + } process.stdout.write("\r\x1b[K"); // Clear the line // Remove the tar file after extraction diff --git a/packages/webgpu/scripts/package-swift-template.ts b/packages/webgpu/scripts/package-swift-template.ts new file mode 100644 index 0000000000..b9da6d37db --- /dev/null +++ b/packages/webgpu/scripts/package-swift-template.ts @@ -0,0 +1,219 @@ +// Template for the generated packages/webgpu/Package.swift. +// Kept in its own module so generate-package-swift.ts stays focused on +// fetching the release metadata. + +export type WebGPUDawnBinaryTarget = + | { kind: "remote"; url: string; checksum: string } + | { kind: "local"; path: string }; + +export interface PackageSwiftInputs { + target: WebGPUDawnBinaryTarget; + // Dawn release tag, e.g. "dawn-chrome-m154". Same string that + // @shopify/react-native-skia's Graphite installer records in + // libs/.dawn-version, which is what the manifest compares against. + dawnReleaseTag: string; +} + +const renderBinaryTarget = (target: WebGPUDawnBinaryTarget) => + target.kind === "remote" + ? `.binaryTarget( + name: "WebGPUDawn", + url: "${target.url}", + checksum: "${target.checksum}" + )` + : `.binaryTarget( + name: "WebGPUDawn", + path: "${target.path}" + )`; + +export const renderPackageSwift = ({ + target, + dawnReleaseTag, +}: PackageSwiftInputs) => `// swift-tools-version: 5.9 +// Generated by scripts/generate-package-swift.ts — do not edit by hand. +// Re-run that script after a new Dawn release to update the URL/checksum below. +import Foundation +import PackageDescription + +// Integration model: a local Swift package next to a CocoaPods install. +// +// This manifest targets React Native 0.81+ (the package's peer range), where +// React Native's own headers and the RNWgpuViewSpec codegen output only exist +// inside the consuming app's CocoaPods install. Add this package as a local +// Swift Package dependency in place of the react-native-webgpu pod (export +// RNWGPU_USE_SPM=1 for \`pod install\`) and keep running \`pod install\` for +// everything else. The header search paths below point into that Pods +// directory. They can only be expressed as \`unsafeFlags\`, and SwiftPM rejects +// unsafeFlags in anything but a path dependency, so this package can only be +// consumed locally, never by URL and version. +// +// React Native 0.87 added SwiftPM autolinking. There, a dependency shipping +// its own Package.swift is treated as self-managed and referenced directly, +// and it consumes React Native's headers as SwiftPM products (ReactHeaders, +// ReactNativeHeaders, ReactNativeDependenciesHeaders, plus ReactAppHeaders +// from the app's generated codegen package) with no CocoaPods at all. This +// manifest does not implement that model yet: on a 0.87+ app that has opted +// into SwiftPM autolinking it is picked up as self-managed but cannot find +// React Native's headers. Keep CocoaPods for React Native on those apps. + +// Absolute location of this package. Xcode may hand over a symlink (React +// Native 0.87's autolinker does), so resolve it before deriving sibling paths. +let packageRoot = URL(fileURLWithPath: Context.packageDirectory) + .resolvingSymlinksInPath().path +let sibling = { (relative: String) -> String in + URL(fileURLWithPath: "\\(packageRoot)/\\(relative)").standardized.path +} + +// Where the consuming app's Pods live. PODS_ROOT is exported by Xcode.app for +// a real build, but never by plain \`xcodebuild\`, and never while Xcode indexes +// the manifest before a first build. SwiftPM also caches manifest evaluations, +// so an evaluation that ran without it would otherwise be cached with an empty +// include list and surface later as header-not-found errors. Fall back to +// where Pods sit relative to this package for every standard app layout, so +// the result is the same with or without the environment variable. +let podsRootCandidates = [ + sibling("../../ios/Pods"), // consumer: /node_modules/react-native-webgpu + sibling("../../apps/spm-example/ios/Pods"), // this monorepo +] +let podsRoot = + ProcessInfo.processInfo.environment["PODS_ROOT"] + ?? podsRootCandidates.first { FileManager.default.fileExists(atPath: $0) } + ?? podsRootCandidates[0] + +// Skia Graphite and WebGPU must link the exact same Dawn, or the pair links +// fine and crashes at runtime. react-native-skia's podspec enforces this at +// \`pod install\` time by comparing its libs/.dawn-version against this +// package's \`dawn\` field. A Swift package has no install hook, so the same +// check runs here, at manifest evaluation. SwiftPM caches evaluations, so +// after changing either package's Dawn version reset the package caches +// (File > Packages > Reset Package Caches) if this does not re-run. +let dawnReleaseTag = "${dawnReleaseTag}" +let skiaCandidates = [ + sibling("../@shopify/react-native-skia"), // consumer: sibling in node_modules + sibling("../../node_modules/@shopify/react-native-skia"), // this monorepo +] +for skia in skiaCandidates { + // Only Graphite builds of react-native-skia write this marker (Ganesh + // builds do not link Dawn and impose no constraint). + guard let data = FileManager.default.contents(atPath: "\\(skia)/libs/.dawn-version"), + let skiaDawn = String(data: data, encoding: .utf8)? + .trimmingCharacters(in: .whitespacesAndNewlines) + else { continue } + if skiaDawn != dawnReleaseTag { + fatalError( + """ + react-native-webgpu: Dawn version mismatch. This package links \\(dawnReleaseTag) \\ + but the @shopify/react-native-skia Graphite build at \\(skia) links \\(skiaDawn). \\ + Align the two packages so the app contains exactly one Dawn. + """) + } + break +} + +// Static-library Pods layout. With \`use_frameworks!\` CocoaPods keeps headers +// inside each framework instead and none of these paths exist; the podspec +// refuses RNWGPU_USE_SPM in that mode. +let publicHeaders = "\\(podsRoot)/Headers/Public" +let privateHeaders = "\\(podsRoot)/Headers/Private" +let headerSearchPaths = [ + publicHeaders, + // Yoga's headers are CocoaPods-private (apps aren't meant to use Yoga's + // C++ API directly), but React-Fabric's view props headers include them + // transitively. + "\\(privateHeaders)/Yoga", + "\\(publicHeaders)/React-Core", + "\\(publicHeaders)/React-jsi", + "\\(publicHeaders)/React-callinvoker", + "\\(publicHeaders)/React-NativeModulesApple", + "\\(publicHeaders)/React-RCTFabric", + "\\(publicHeaders)/ReactCodegen", + "\\(publicHeaders)/RCT-Folly", + "\\(publicHeaders)/RCTRequired", + "\\(publicHeaders)/RCTTypeSafety", + "\\(publicHeaders)/FBLazyVector", + "\\(publicHeaders)/ReactCommon", + "\\(publicHeaders)/React-Fabric", + "\\(publicHeaders)/React-graphics", + "\\(publicHeaders)/React-utils", + "\\(publicHeaders)/React-featureflags", + "\\(publicHeaders)/React-rendererdebug", + "\\(publicHeaders)/React-debug", + "\\(publicHeaders)/React-timing", + "\\(publicHeaders)/React-runtimescheduler", + "\\(publicHeaders)/React-rendererconsistency", + "\\(publicHeaders)/React-performancetimeline", + "\\(publicHeaders)/React-runtimeexecutor", + "\\(publicHeaders)/React-cxxreact", + "\\(publicHeaders)/hermes-engine", + "\\(publicHeaders)/glog", + "\\(publicHeaders)/DoubleConversion", + "\\(publicHeaders)/fmt", + "\\(publicHeaders)/fast_float", +] +// The only unsafe flags left: .headerSearchPath cannot escape the target +// path, and these live in the app's Pods directory. +let cFamilyIncludeFlags = headerSearchPaths.map { "-I\\($0)" } +let follyDefines: [(name: String, value: String?)] = [ + ("FOLLY_NO_CONFIG", nil), + ("FOLLY_MOBILE", "1"), + ("FOLLY_USE_LIBCPP", "1"), + ("FOLLY_CFG_NO_COROUTINES", "1"), + ("FOLLY_HAVE_CLOCK_GETTIME", "1"), +] + +// Unlike a native Xcode target, SwiftPM doesn't generate an implicit +// per-target header map, so quoted includes only resolve within the +// including file's own directory. The sources use bare cross-directory +// includes (e.g. apple/WebGPUModule.h includes "RNWebGPUManager.h" from +// cpp/rnwgpu), so every directory that's the target of one of those bare +// includes has to be listed explicitly here. +let internalHeaderDirs = [ + "apple", + // "cpp" itself resolves the "webgpu/..." and "dawn/..." namespaced + // includes. Those two directories are only present locally when built via + // \`yarn install-dawn\` (without the xcframework's embedded headers); a + // remote binaryTarget's xcframework embeds them instead (see + // build-dawn.yml's \`-headers\` flag), so "cpp" not containing them there + // is fine — the xcframework's own headers cover it. + "cpp", + "cpp/jsi", + "cpp/rnwgpu", + "cpp/rnwgpu/api", + "cpp/rnwgpu/api/descriptors", + "cpp/rnwgpu/async", +] + +let package = Package( + name: "react-native-webgpu", + platforms: [.iOS("15.1"), .macOS("11.0")], + products: [ + .library(name: "react-native-webgpu", targets: ["react-native-webgpu"]) + ], + targets: [ + // Dawn's compiled WebGPU implementation. The xcframework embeds the + // \`webgpu/\` and \`dawn/\` C headers per-slice (built via \`-headers\` in + // build-dawn.yml), so SPM exposes them to dependents automatically. + ${renderBinaryTarget(target)}, + .target( + name: "react-native-webgpu", + dependencies: ["WebGPUDawn"], + path: ".", + sources: ["apple", "cpp/jsi", "cpp/rnwgpu"], + publicHeadersPath: "apple", + cSettings: internalHeaderDirs.map { CSetting.headerSearchPath($0) } + + follyDefines.map { CSetting.define($0.name, to: $0.value) } + + [.unsafeFlags(cFamilyIncludeFlags)], + cxxSettings: internalHeaderDirs.map { CXXSetting.headerSearchPath($0) } + + follyDefines.map { CXXSetting.define($0.name, to: $0.value) } + + [.unsafeFlags(cFamilyIncludeFlags)], + linkerSettings: [ + .linkedFramework("AVFoundation"), + .linkedFramework("CoreMedia"), + .linkedFramework("CoreVideo"), + .linkedFramework("ImageIO"), + ] + ), + ], + cxxLanguageStandard: .cxx20 +) +`; diff --git a/yarn.lock b/yarn.lock index bf861f6d0c..874adeb48c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1423,7 +1423,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:^7.18.2, @babel/preset-env@npm:^7.25.0": +"@babel/preset-env@npm:^7.18.2, @babel/preset-env@npm:^7.25.0, @babel/preset-env@npm:^7.25.3": version: 7.29.7 resolution: "@babel/preset-env@npm:7.29.7" dependencies: @@ -1994,7 +1994,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.12.1, @eslint-community/regexpp@npm:^4.12.2, @eslint-community/regexpp@npm:^4.4.0": +"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.12.1, @eslint-community/regexpp@npm:^4.12.2, @eslint-community/regexpp@npm:^4.4.0, @eslint-community/regexpp@npm:^4.6.1": version: 4.12.2 resolution: "@eslint-community/regexpp@npm:4.12.2" checksum: 1770bc81f676a72f65c7200b5675ff7a349786521f30e66125faaf767fde1ba1c19c3790e16ba8508a62a3933afcfc806a893858b3b5906faf693d862b9e4120 @@ -2028,6 +2028,23 @@ __metadata: languageName: node linkType: hard +"@eslint/eslintrc@npm:^2.1.4": + version: 2.1.4 + resolution: "@eslint/eslintrc@npm:2.1.4" + dependencies: + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^9.6.0 + globals: ^13.19.0 + ignore: ^5.2.0 + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 + strip-json-comments: ^3.1.1 + checksum: 10957c7592b20ca0089262d8c2a8accbad14b4f6507e35416c32ee6b4dbf9cad67dfb77096bbd405405e9ada2b107f3797fe94362e1c55e0b09d6e90dd149127 + languageName: node + linkType: hard + "@eslint/eslintrc@npm:^3.3.1": version: 3.3.6 resolution: "@eslint/eslintrc@npm:3.3.6" @@ -2045,6 +2062,13 @@ __metadata: languageName: node linkType: hard +"@eslint/js@npm:8.57.1": + version: 8.57.1 + resolution: "@eslint/js@npm:8.57.1" + checksum: 2afb77454c06e8316793d2e8e79a0154854d35e6782a1217da274ca60b5044d2c69d6091155234ed0551a1e408f86f09dd4ece02752c59568fa403e60611e880 + languageName: node + linkType: hard + "@eslint/js@npm:9.35.0": version: 9.35.0 resolution: "@eslint/js@npm:9.35.0" @@ -2733,6 +2757,17 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/config-array@npm:^0.13.0": + version: 0.13.0 + resolution: "@humanwhocodes/config-array@npm:0.13.0" + dependencies: + "@humanwhocodes/object-schema": ^2.0.3 + debug: ^4.3.1 + minimatch: ^3.0.5 + checksum: eae69ff9134025dd2924f0b430eb324981494be26f0fddd267a33c28711c4db643242cf9fddf7dadb9d16c96b54b2d2c073e60a56477df86e0173149313bd5d6 + languageName: node + linkType: hard + "@humanwhocodes/module-importer@npm:^1.0.1": version: 1.0.1 resolution: "@humanwhocodes/module-importer@npm:1.0.1" @@ -2740,6 +2775,13 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/object-schema@npm:^2.0.3": + version: 2.0.3 + resolution: "@humanwhocodes/object-schema@npm:2.0.3" + checksum: d3b78f6c5831888c6ecc899df0d03bcc25d46f3ad26a11d7ea52944dc36a35ef543fad965322174238d677a43d5c694434f6607532cff7077062513ad7022631 + languageName: node + linkType: hard + "@humanwhocodes/retry@npm:^0.4.0, @humanwhocodes/retry@npm:^0.4.2": version: 0.4.3 resolution: "@humanwhocodes/retry@npm:0.4.3" @@ -3510,7 +3552,7 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.walk@npm:^1.2.3": +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": version: 1.2.8 resolution: "@nodelib/fs.walk@npm:1.2.8" dependencies: @@ -4577,6 +4619,18 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli-clean@npm:20.0.0": + version: 20.0.0 + resolution: "@react-native-community/cli-clean@npm:20.0.0" + dependencies: + "@react-native-community/cli-tools": 20.0.0 + chalk: ^4.1.2 + execa: ^5.0.0 + fast-glob: ^3.3.2 + checksum: 61e44c35d4dab0f037a3c8993056ac870c2b9492bc8452cabbc61ea7ff5ce3a55f4c5c1be799f9a943ad470911985783024863d0cfd2b81fee79063023a1d52b + languageName: node + linkType: hard + "@react-native-community/cli-clean@npm:20.2.0": version: 20.2.0 resolution: "@react-native-community/cli-clean@npm:20.2.0" @@ -4589,6 +4643,18 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli-config-android@npm:20.0.0": + version: 20.0.0 + resolution: "@react-native-community/cli-config-android@npm:20.0.0" + dependencies: + "@react-native-community/cli-tools": 20.0.0 + chalk: ^4.1.2 + fast-glob: ^3.3.2 + fast-xml-parser: ^4.4.1 + checksum: cae974e97e1e814add722718f79b6fed5195beb9599209c327f5f26e51c24ba7cec551c4c6240cccfca455d6986f7ca2e8a64c3542d2117c0e0728f281569a30 + languageName: node + linkType: hard + "@react-native-community/cli-config-android@npm:20.2.0": version: 20.2.0 resolution: "@react-native-community/cli-config-android@npm:20.2.0" @@ -4601,6 +4667,18 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli-config-apple@npm:20.0.0": + version: 20.0.0 + resolution: "@react-native-community/cli-config-apple@npm:20.0.0" + dependencies: + "@react-native-community/cli-tools": 20.0.0 + chalk: ^4.1.2 + execa: ^5.0.0 + fast-glob: ^3.3.2 + checksum: b8ffb7d528dca06f1a6e99f5429f65bc6dee10b61059f229bc8c07a7a1096377495905020b7ead6251d47ed1faf1f85db9a68b3db69286a9b6d0753663d52266 + languageName: node + linkType: hard + "@react-native-community/cli-config-apple@npm:20.2.0": version: 20.2.0 resolution: "@react-native-community/cli-config-apple@npm:20.2.0" @@ -4613,6 +4691,20 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli-config@npm:20.0.0": + version: 20.0.0 + resolution: "@react-native-community/cli-config@npm:20.0.0" + dependencies: + "@react-native-community/cli-tools": 20.0.0 + chalk: ^4.1.2 + cosmiconfig: ^9.0.0 + deepmerge: ^4.3.0 + fast-glob: ^3.3.2 + joi: ^17.2.1 + checksum: 5d516474dfde07b2c725fc8b3755a7928bb3bb9c279cb574bd05e76851de8a91aa46879729b7a5ba0f65cd81f793fe69b891e9229d34d497914d83fb986c6a38 + languageName: node + linkType: hard + "@react-native-community/cli-config@npm:20.2.0": version: 20.2.0 resolution: "@react-native-community/cli-config@npm:20.2.0" @@ -4627,6 +4719,29 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli-doctor@npm:20.0.0": + version: 20.0.0 + resolution: "@react-native-community/cli-doctor@npm:20.0.0" + dependencies: + "@react-native-community/cli-config": 20.0.0 + "@react-native-community/cli-platform-android": 20.0.0 + "@react-native-community/cli-platform-apple": 20.0.0 + "@react-native-community/cli-platform-ios": 20.0.0 + "@react-native-community/cli-tools": 20.0.0 + chalk: ^4.1.2 + command-exists: ^1.2.8 + deepmerge: ^4.3.0 + envinfo: ^7.13.0 + execa: ^5.0.0 + node-stream-zip: ^1.9.1 + ora: ^5.4.1 + semver: ^7.5.2 + wcwidth: ^1.0.1 + yaml: ^2.2.1 + checksum: aa80df1ebaf71741292608806ae408d506707e3c7e5894cf34c2470b1f0635fa4ef79dc653febcc2bad6dcddbc357f93a99706f758dc450a0a44f8b163df5227 + languageName: node + linkType: hard + "@react-native-community/cli-doctor@npm:20.2.0": version: 20.2.0 resolution: "@react-native-community/cli-doctor@npm:20.2.0" @@ -4650,6 +4765,19 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli-platform-android@npm:20.0.0": + version: 20.0.0 + resolution: "@react-native-community/cli-platform-android@npm:20.0.0" + dependencies: + "@react-native-community/cli-config-android": 20.0.0 + "@react-native-community/cli-tools": 20.0.0 + chalk: ^4.1.2 + execa: ^5.0.0 + logkitty: ^0.7.1 + checksum: c619c5f871b90d49b06cb96630884d8e8439f56d43d9734401c77f062ba5312134049168a4754ecd55770b86a0a7708c8f2e52b06f058f443415a0b008932829 + languageName: node + linkType: hard + "@react-native-community/cli-platform-android@npm:20.2.0, @react-native-community/cli-platform-android@npm:^20.2.0": version: 20.2.0 resolution: "@react-native-community/cli-platform-android@npm:20.2.0" @@ -4663,6 +4791,19 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli-platform-apple@npm:20.0.0": + version: 20.0.0 + resolution: "@react-native-community/cli-platform-apple@npm:20.0.0" + dependencies: + "@react-native-community/cli-config-apple": 20.0.0 + "@react-native-community/cli-tools": 20.0.0 + chalk: ^4.1.2 + execa: ^5.0.0 + fast-xml-parser: ^4.4.1 + checksum: 10c457a95b8bf69463dadd3a6d426550866f91cbd5de9a1f2c76e08098f37c3422e41edfb5fb1b1252dd4ff4ca4740bd71411d81213ddb93c0069426f8c63988 + languageName: node + linkType: hard + "@react-native-community/cli-platform-apple@npm:20.2.0": version: 20.2.0 resolution: "@react-native-community/cli-platform-apple@npm:20.2.0" @@ -4676,6 +4817,15 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli-platform-ios@npm:20.0.0": + version: 20.0.0 + resolution: "@react-native-community/cli-platform-ios@npm:20.0.0" + dependencies: + "@react-native-community/cli-platform-apple": 20.0.0 + checksum: c7fc89332a7cb9fa71c1c5d4fe928d39b0514c74fdcc85251a7a35344f1f5e9e3b4cd23a85a70ce447dded6e6552a5edfa848cf07d8b26127a0c3b05ce3e1768 + languageName: node + linkType: hard + "@react-native-community/cli-platform-ios@npm:20.2.0, @react-native-community/cli-platform-ios@npm:^20.2.0": version: 20.2.0 resolution: "@react-native-community/cli-platform-ios@npm:20.2.0" @@ -4685,6 +4835,24 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli-server-api@npm:20.0.0": + version: 20.0.0 + resolution: "@react-native-community/cli-server-api@npm:20.0.0" + dependencies: + "@react-native-community/cli-tools": 20.0.0 + body-parser: ^1.20.3 + compression: ^1.7.1 + connect: ^3.6.5 + errorhandler: ^1.5.1 + nocache: ^3.0.1 + open: ^6.2.0 + pretty-format: ^29.7.0 + serve-static: ^1.13.1 + ws: ^6.2.3 + checksum: 60dfd1d0cb9f0026cd2b267ab57902a4ecc57513240230fd8263b683c6ad9356c6202595f4262fc2a07d23cafbdf7b9d4c95fa7fae25472f25c7b87905c13305 + languageName: node + linkType: hard + "@react-native-community/cli-server-api@npm:20.2.0": version: 20.2.0 resolution: "@react-native-community/cli-server-api@npm:20.2.0" @@ -4703,6 +4871,24 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli-tools@npm:20.0.0": + version: 20.0.0 + resolution: "@react-native-community/cli-tools@npm:20.0.0" + dependencies: + "@vscode/sudo-prompt": ^9.0.0 + appdirsjs: ^1.2.4 + chalk: ^4.1.2 + execa: ^5.0.0 + find-up: ^5.0.0 + launch-editor: ^2.9.1 + mime: ^2.4.1 + ora: ^5.4.1 + prompts: ^2.4.2 + semver: ^7.5.2 + checksum: 6169f18e399a507e7f8b6fc8ddea113c0272b22b0af8cffdeb3f4ce77d61eaef97aff8aaede17c6501d470adaaf9e87411e1978e1be61202a98f53abe10ac224 + languageName: node + linkType: hard + "@react-native-community/cli-tools@npm:20.2.0": version: 20.2.0 resolution: "@react-native-community/cli-tools@npm:20.2.0" @@ -4721,6 +4907,15 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli-types@npm:20.0.0": + version: 20.0.0 + resolution: "@react-native-community/cli-types@npm:20.0.0" + dependencies: + joi: ^17.2.1 + checksum: b64b03ff09eb3952c37ba96544156f0b6ffa76e616361a48254e645f914beaa844943ff77ee1fba46445ef8b45f726109fc9ad249afb9d360602cb03db846368 + languageName: node + linkType: hard + "@react-native-community/cli-types@npm:20.2.0": version: 20.2.0 resolution: "@react-native-community/cli-types@npm:20.2.0" @@ -4730,6 +4925,31 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli@npm:20.0.0": + version: 20.0.0 + resolution: "@react-native-community/cli@npm:20.0.0" + dependencies: + "@react-native-community/cli-clean": 20.0.0 + "@react-native-community/cli-config": 20.0.0 + "@react-native-community/cli-doctor": 20.0.0 + "@react-native-community/cli-server-api": 20.0.0 + "@react-native-community/cli-tools": 20.0.0 + "@react-native-community/cli-types": 20.0.0 + chalk: ^4.1.2 + commander: ^9.4.1 + deepmerge: ^4.3.0 + execa: ^5.0.0 + find-up: ^5.0.0 + fs-extra: ^8.1.0 + graceful-fs: ^4.1.3 + prompts: ^2.4.2 + semver: ^7.5.2 + bin: + rnc-cli: build/bin.js + checksum: 70a48fef9a9b5c70c3c8cceae076ee25a791e57e20b956a63d24790d8c3a571a069f9114f731384e1cb14fa56721a82faec3a53095a8c4062a2584e2ee862542 + languageName: node + linkType: hard + "@react-native-community/cli@npm:^20.2.0": version: 20.2.0 resolution: "@react-native-community/cli@npm:20.2.0" @@ -4851,6 +5071,16 @@ __metadata: languageName: node linkType: hard +"@react-native/babel-plugin-codegen@npm:0.81.4": + version: 0.81.4 + resolution: "@react-native/babel-plugin-codegen@npm:0.81.4" + dependencies: + "@babel/traverse": ^7.25.3 + "@react-native/codegen": 0.81.4 + checksum: 704029a644781f4fcbba2af53ae1c6ca20042a97ac5fdaf97531d609e442d2298ebc507db568bcf3e23604f66f4fcee4eb2a13a1a95bb89d7d4d7adffb75ee0b + languageName: node + linkType: hard + "@react-native/babel-plugin-codegen@npm:0.86.3": version: 0.86.3 resolution: "@react-native/babel-plugin-codegen@npm:0.86.3" @@ -4916,6 +5146,61 @@ __metadata: languageName: node linkType: hard +"@react-native/babel-preset@npm:0.81.4": + version: 0.81.4 + resolution: "@react-native/babel-preset@npm:0.81.4" + dependencies: + "@babel/core": ^7.25.2 + "@babel/plugin-proposal-export-default-from": ^7.24.7 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + "@babel/plugin-syntax-export-default-from": ^7.24.7 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/plugin-transform-arrow-functions": ^7.24.7 + "@babel/plugin-transform-async-generator-functions": ^7.25.4 + "@babel/plugin-transform-async-to-generator": ^7.24.7 + "@babel/plugin-transform-block-scoping": ^7.25.0 + "@babel/plugin-transform-class-properties": ^7.25.4 + "@babel/plugin-transform-classes": ^7.25.4 + "@babel/plugin-transform-computed-properties": ^7.24.7 + "@babel/plugin-transform-destructuring": ^7.24.8 + "@babel/plugin-transform-flow-strip-types": ^7.25.2 + "@babel/plugin-transform-for-of": ^7.24.7 + "@babel/plugin-transform-function-name": ^7.25.1 + "@babel/plugin-transform-literals": ^7.25.2 + "@babel/plugin-transform-logical-assignment-operators": ^7.24.7 + "@babel/plugin-transform-modules-commonjs": ^7.24.8 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.24.7 + "@babel/plugin-transform-nullish-coalescing-operator": ^7.24.7 + "@babel/plugin-transform-numeric-separator": ^7.24.7 + "@babel/plugin-transform-object-rest-spread": ^7.24.7 + "@babel/plugin-transform-optional-catch-binding": ^7.24.7 + "@babel/plugin-transform-optional-chaining": ^7.24.8 + "@babel/plugin-transform-parameters": ^7.24.7 + "@babel/plugin-transform-private-methods": ^7.24.7 + "@babel/plugin-transform-private-property-in-object": ^7.24.7 + "@babel/plugin-transform-react-display-name": ^7.24.7 + "@babel/plugin-transform-react-jsx": ^7.25.2 + "@babel/plugin-transform-react-jsx-self": ^7.24.7 + "@babel/plugin-transform-react-jsx-source": ^7.24.7 + "@babel/plugin-transform-regenerator": ^7.24.7 + "@babel/plugin-transform-runtime": ^7.24.7 + "@babel/plugin-transform-shorthand-properties": ^7.24.7 + "@babel/plugin-transform-spread": ^7.24.7 + "@babel/plugin-transform-sticky-regex": ^7.24.7 + "@babel/plugin-transform-typescript": ^7.25.2 + "@babel/plugin-transform-unicode-regex": ^7.24.7 + "@babel/template": ^7.25.0 + "@react-native/babel-plugin-codegen": 0.81.4 + babel-plugin-syntax-hermes-parser: 0.29.1 + babel-plugin-transform-flow-enums: ^0.0.2 + react-refresh: ^0.14.0 + peerDependencies: + "@babel/core": "*" + checksum: 49eae5d59f48d37f15944bdbff30e30280153bb12c0e69aa7cf27ba24772bcae5f9ed0e76dc0e6c258d5ecf0f36d8c4780bebb6502d4b52535e36891909942f0 + languageName: node + linkType: hard + "@react-native/codegen@npm:0.79.6": version: 0.79.6 resolution: "@react-native/codegen@npm:0.79.6" @@ -5239,6 +5524,29 @@ __metadata: languageName: node linkType: hard +"@react-native/eslint-config@npm:0.81.4": + version: 0.81.4 + resolution: "@react-native/eslint-config@npm:0.81.4" + dependencies: + "@babel/core": ^7.25.2 + "@babel/eslint-parser": ^7.25.1 + "@react-native/eslint-plugin": 0.81.4 + "@typescript-eslint/eslint-plugin": ^7.1.1 + "@typescript-eslint/parser": ^7.1.1 + eslint-config-prettier: ^8.5.0 + eslint-plugin-eslint-comments: ^3.2.0 + eslint-plugin-ft-flow: ^2.0.1 + eslint-plugin-jest: ^27.9.0 + eslint-plugin-react: ^7.30.1 + eslint-plugin-react-hooks: ^5.2.0 + eslint-plugin-react-native: ^4.0.0 + peerDependencies: + eslint: ">=8" + prettier: ">=2" + checksum: e601fe1298710557916a0ab3c32975ab0e65319c78edaca7369eded6eea4f94ab4a00c1eafd437f93a82baa93cdfbd2a930ceb1b82b4a2e92f51d490184dd1b1 + languageName: node + linkType: hard + "@react-native/eslint-plugin@npm:0.81.0": version: 0.81.0 resolution: "@react-native/eslint-plugin@npm:0.81.0" @@ -5246,6 +5554,13 @@ __metadata: languageName: node linkType: hard +"@react-native/eslint-plugin@npm:0.81.4": + version: 0.81.4 + resolution: "@react-native/eslint-plugin@npm:0.81.4" + checksum: e9c3ada247dfa410ae5f0ed20fb12ec79193a1140ec643d2cf822d472f7951e51247b4b235924faef0763efed73432dcfb203fd4af3c7abd8ccc10442efa6c31 + languageName: node + linkType: hard + "@react-native/gradle-plugin@npm:0.79.6": version: 0.79.6 resolution: "@react-native/gradle-plugin@npm:0.79.6" @@ -5316,6 +5631,20 @@ __metadata: languageName: node linkType: hard +"@react-native/metro-babel-transformer@npm:0.81.4": + version: 0.81.4 + resolution: "@react-native/metro-babel-transformer@npm:0.81.4" + dependencies: + "@babel/core": ^7.25.2 + "@react-native/babel-preset": 0.81.4 + hermes-parser: 0.29.1 + nullthrows: ^1.1.1 + peerDependencies: + "@babel/core": "*" + checksum: 46f2793a1190becedaebc7a85070e03cd386180805d1082af1e206255b6395e7f749d82ba6736f343f8c9b447755c79d6c5ab11cde36688c45add9d56388db88 + languageName: node + linkType: hard + "@react-native/metro-config@npm:0.81.0": version: 0.81.0 resolution: "@react-native/metro-config@npm:0.81.0" @@ -5328,6 +5657,18 @@ __metadata: languageName: node linkType: hard +"@react-native/metro-config@npm:0.81.4": + version: 0.81.4 + resolution: "@react-native/metro-config@npm:0.81.4" + dependencies: + "@react-native/js-polyfills": 0.81.4 + "@react-native/metro-babel-transformer": 0.81.4 + metro-config: ^0.83.1 + metro-runtime: ^0.83.1 + checksum: 3ae2a2c55cb988da8a35f5f119b19a476dd85388d4c4970e33fc9af7886d2bba7d894743b997a4cac7389125b87ed1aac436cd0e2426d3ea06bc1cde4838d866 + languageName: node + linkType: hard + "@react-native/normalize-colors@npm:0.79.6": version: 0.79.6 resolution: "@react-native/normalize-colors@npm:0.79.6" @@ -5370,6 +5711,13 @@ __metadata: languageName: node linkType: hard +"@react-native/typescript-config@npm:0.81.4": + version: 0.81.4 + resolution: "@react-native/typescript-config@npm:0.81.4" + checksum: 21e517036fe5e423d4bb67739168743374c40641dfb2dde080b13bdd68126f280707ebf7d2780df23f5cf7805c759f1db2705473de35f1d3b7761256d2694c7e + languageName: node + linkType: hard + "@react-native/virtualized-lists@npm:0.79.6": version: 0.79.6 resolution: "@react-native/virtualized-lists@npm:0.79.6" @@ -7650,7 +7998,7 @@ __metadata: languageName: node linkType: hard -"@ungap/structured-clone@npm:^1.0.0, @ungap/structured-clone@npm:^1.3.0": +"@ungap/structured-clone@npm:^1.0.0, @ungap/structured-clone@npm:^1.2.0, @ungap/structured-clone@npm:^1.3.0": version: 1.4.0 resolution: "@ungap/structured-clone@npm:1.4.0" checksum: 2a69d69c54600b0e7acd1755cfd4f80e2bf5a57f999d4c3f4023ef69d94ca8a86520e3369edb635f0925c67af87c7f0b6f1a7177a682e8bbb66fb7973180102d @@ -8065,7 +8413,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.0.0, acorn@npm:^8.15.0": +"acorn@npm:^8.0.0, acorn@npm:^8.15.0, acorn@npm:^8.9.0": version: 8.18.0 resolution: "acorn@npm:8.18.0" bin: @@ -8980,6 +9328,26 @@ __metadata: languageName: node linkType: hard +"body-parser@npm:^1.20.3": + version: 1.20.8 + resolution: "body-parser@npm:1.20.8" + dependencies: + bytes: ~3.1.2 + content-type: ~1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: ~1.2.0 + http-errors: ~2.0.1 + iconv-lite: ~0.4.24 + on-finished: ~2.4.1 + qs: ~6.16.0 + raw-body: ~2.5.3 + type-is: ~1.6.18 + unpipe: ~1.0.0 + checksum: 7add892e93070136dc3fab558f8f77cc9b8cee360e8660cc724c7162d70cebe0c5ca94a0346a60e2e7442600c2357c0758bd3e4eb4d4e3a92420c9b8c90912a0 + languageName: node + linkType: hard + "body-parser@npm:^2.2.2": version: 2.3.0 resolution: "body-parser@npm:2.3.0" @@ -9874,6 +10242,13 @@ __metadata: languageName: node linkType: hard +"content-type@npm:~1.0.5": + version: 1.0.5 + resolution: "content-type@npm:1.0.5" + checksum: 566271e0a251642254cde0f845f9dd4f9856e52d988f4eb0d0dcffbb7a1f8ec98de7a5215fc628f3bce30fe2fb6fd2bc064b562d721658c59b544e2d34ea2766 + languageName: node + linkType: hard + "conventional-changelog-angular@npm:^8.0.0": version: 8.3.1 resolution: "conventional-changelog-angular@npm:8.3.1" @@ -10064,7 +10439,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6": +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6": version: 7.0.6 resolution: "cross-spawn@npm:7.0.6" dependencies: @@ -10996,7 +11371,7 @@ __metadata: languageName: node linkType: hard -"destroy@npm:1.2.0": +"destroy@npm:1.2.0, destroy@npm:~1.2.0": version: 1.2.0 resolution: "destroy@npm:1.2.0" checksum: 0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38 @@ -11116,6 +11491,15 @@ __metadata: languageName: node linkType: hard +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: ^2.0.2 + checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce + languageName: node + linkType: hard + "dompurify@npm:^3.3.3": version: 3.4.14 resolution: "dompurify@npm:3.4.14" @@ -11972,6 +12356,16 @@ __metadata: languageName: node linkType: hard +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e + languageName: node + linkType: hard + "eslint-scope@npm:^8.4.0": version: 8.4.0 resolution: "eslint-scope@npm:8.4.0" @@ -11989,7 +12383,7 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.3": +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": version: 3.4.3 resolution: "eslint-visitor-keys@npm:3.4.3" checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 @@ -12060,6 +12454,54 @@ __metadata: languageName: node linkType: hard +"eslint@npm:^8.19.0": + version: 8.57.1 + resolution: "eslint@npm:8.57.1" + dependencies: + "@eslint-community/eslint-utils": ^4.2.0 + "@eslint-community/regexpp": ^4.6.1 + "@eslint/eslintrc": ^2.1.4 + "@eslint/js": 8.57.1 + "@humanwhocodes/config-array": ^0.13.0 + "@humanwhocodes/module-importer": ^1.0.1 + "@nodelib/fs.walk": ^1.2.8 + "@ungap/structured-clone": ^1.2.0 + ajv: ^6.12.4 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.3.2 + doctrine: ^3.0.0 + escape-string-regexp: ^4.0.0 + eslint-scope: ^7.2.2 + eslint-visitor-keys: ^3.4.3 + espree: ^9.6.1 + esquery: ^1.4.2 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 + find-up: ^5.0.0 + glob-parent: ^6.0.2 + globals: ^13.19.0 + graphemer: ^1.4.0 + ignore: ^5.2.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + is-path-inside: ^3.0.3 + js-yaml: ^4.1.0 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash.merge: ^4.6.2 + minimatch: ^3.1.2 + natural-compare: ^1.4.0 + optionator: ^0.9.3 + strip-ansi: ^6.0.1 + text-table: ^0.2.0 + bin: + eslint: bin/eslint.js + checksum: e2489bb7f86dd2011967759a09164e65744ef7688c310bc990612fc26953f34cc391872807486b15c06833bdff737726a23e9b4cdba5de144c311377dc41d91b + languageName: node + linkType: hard + "espree@npm:^10.0.1, espree@npm:^10.4.0": version: 10.4.0 resolution: "espree@npm:10.4.0" @@ -12071,6 +12513,17 @@ __metadata: languageName: node linkType: hard +"espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: ^8.9.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.4.1 + checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 + languageName: node + linkType: hard + "esprima@npm:^4.0.0, esprima@npm:^4.0.1": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -12081,7 +12534,7 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.5.0": +"esquery@npm:^1.4.2, esquery@npm:^1.5.0": version: 1.7.0 resolution: "esquery@npm:1.7.0" dependencies: @@ -12736,7 +13189,7 @@ __metadata: languageName: node linkType: hard -"fast-xml-parser@npm:^4.0.0": +"fast-xml-parser@npm:^4.0.0, fast-xml-parser@npm:^4.4.1": version: 4.5.7 resolution: "fast-xml-parser@npm:4.5.7" dependencies: @@ -12896,6 +13349,15 @@ __metadata: languageName: node linkType: hard +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: ^3.0.4 + checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 + languageName: node + linkType: hard + "file-entry-cache@npm:^8.0.0": version: 8.0.0 resolution: "file-entry-cache@npm:8.0.0" @@ -12982,6 +13444,17 @@ __metadata: languageName: node linkType: hard +"flat-cache@npm:^3.0.4": + version: 3.2.0 + resolution: "flat-cache@npm:3.2.0" + dependencies: + flatted: ^3.2.9 + keyv: ^4.5.3 + rimraf: ^3.0.2 + checksum: e7e0f59801e288b54bee5cb9681e9ee21ee28ef309f886b312c9d08415b79fc0f24ac842f84356ce80f47d6a53de62197ce0e6e148dc42d5db005992e2a756ec + languageName: node + linkType: hard + "flat-cache@npm:^4.0.0": version: 4.0.1 resolution: "flat-cache@npm:4.0.1" @@ -13677,6 +14150,15 @@ __metadata: languageName: node linkType: hard +"globals@npm:^13.19.0": + version: 13.24.0 + resolution: "globals@npm:13.24.0" + dependencies: + type-fest: ^0.20.2 + checksum: 56066ef058f6867c04ff203b8a44c15b038346a62efbc3060052a1016be9f56f4cf0b2cd45b74b22b81e521a889fc7786c73691b0549c2f3a6e825b3d394f43c + languageName: node + linkType: hard + "globals@npm:^14.0.0": version: 14.0.0 resolution: "globals@npm:14.0.0" @@ -14242,7 +14724,7 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:0.4": +"iconv-lite@npm:0.4, iconv-lite@npm:~0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" dependencies: @@ -14815,7 +15297,7 @@ __metadata: languageName: node linkType: hard -"is-path-inside@npm:^3.0.2": +"is-path-inside@npm:^3.0.2, is-path-inside@npm:^3.0.3": version: 3.0.3 resolution: "is-path-inside@npm:3.0.3" checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 @@ -15883,7 +16365,7 @@ __metadata: languageName: node linkType: hard -"keyv@npm:^4.5.4": +"keyv@npm:^4.5.3, keyv@npm:^4.5.4": version: 4.5.4 resolution: "keyv@npm:4.5.4" dependencies: @@ -16950,6 +17432,13 @@ __metadata: languageName: node linkType: hard +"media-typer@npm:0.3.0": + version: 0.3.0 + resolution: "media-typer@npm:0.3.0" + checksum: af1b38516c28ec95d6b0826f6c8f276c58aec391f76be42aa07646b4e39d317723e869700933ca6995b056db4b09a78c92d5440dc23657e6764be5d28874bba1 + languageName: node + linkType: hard + "media-typer@npm:^1.1.0": version: 1.1.1 resolution: "media-typer@npm:1.1.1" @@ -18411,7 +18900,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.27, mime-types@npm:^2.1.35, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.27, mime-types@npm:^2.1.35, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -18486,7 +18975,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2, minimatch@npm:^3.1.5": +"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2, minimatch@npm:^3.1.5": version: 3.1.5 resolution: "minimatch@npm:3.1.5" dependencies: @@ -20428,7 +20917,7 @@ __metadata: languageName: node linkType: hard -"qs@npm:^6.15.2": +"qs@npm:^6.15.2, qs@npm:~6.16.0": version: 6.16.0 resolution: "qs@npm:6.16.0" dependencies: @@ -20492,6 +20981,18 @@ __metadata: languageName: node linkType: hard +"raw-body@npm:~2.5.3": + version: 2.5.3 + resolution: "raw-body@npm:2.5.3" + dependencies: + bytes: ~3.1.2 + http-errors: ~2.0.1 + iconv-lite: ~0.4.24 + unpipe: ~1.0.0 + checksum: 16aa51e504318ebeef7f84a4d884c0f273cb0b7f3f14ea88788f92f5f488870617c97d4f886e84f119f21a2d6cdda3c4554821f8b18ed6be0d731ecb5a063d2a + languageName: node + linkType: hard + "rc@npm:^1.2.8": version: 1.2.8 resolution: "rc@npm:1.2.8" @@ -22701,6 +23202,29 @@ __metadata: languageName: node linkType: hard +"spm-example@workspace:apps/spm-example": + version: 0.0.0-use.local + resolution: "spm-example@workspace:apps/spm-example" + dependencies: + "@babel/core": ^7.25.2 + "@babel/preset-env": ^7.25.3 + "@babel/runtime": ^7.25.0 + "@react-native-community/cli": 20.0.0 + "@react-native-community/cli-platform-ios": 20.0.0 + "@react-native/babel-preset": 0.81.4 + "@react-native/eslint-config": 0.81.4 + "@react-native/metro-config": 0.81.4 + "@react-native/typescript-config": 0.81.4 + "@types/react": ^19.1.0 + eslint: ^8.19.0 + prettier: 2.8.8 + react: 19.1.0 + react-native: 0.81.4 + react-native-webgpu: "workspace:*" + typescript: ^5.8.3 + languageName: unknown + linkType: soft + "sprintf-js@npm:~1.0.2": version: 1.0.3 resolution: "sprintf-js@npm:1.0.3" @@ -23366,7 +23890,7 @@ __metadata: languageName: node linkType: hard -"text-table@npm:~0.2.0": +"text-table@npm:^0.2.0, text-table@npm:~0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a @@ -23746,6 +24270,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 + languageName: node + linkType: hard + "type-fest@npm:^0.21.3": version: 0.21.3 resolution: "type-fest@npm:0.21.3" @@ -23808,6 +24339,16 @@ __metadata: languageName: node linkType: hard +"type-is@npm:~1.6.18": + version: 1.6.18 + resolution: "type-is@npm:1.6.18" + dependencies: + media-typer: 0.3.0 + mime-types: ~2.1.24 + checksum: 2c8e47675d55f8b4e404bcf529abdf5036c537a04c2b20177bcf78c9e3c1da69da3942b1346e6edb09e823228c0ee656ef0e033765ec39a70d496ef601a0c657 + languageName: node + linkType: hard + "typed-array-buffer@npm:^1.0.3": version: 1.0.3 resolution: "typed-array-buffer@npm:1.0.3" @@ -23898,7 +24439,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.2.2, typescript@npm:^5.9.2": +"typescript@npm:^5.2.2, typescript@npm:^5.8.3, typescript@npm:^5.9.2": version: 5.9.3 resolution: "typescript@npm:5.9.3" bin: @@ -23928,7 +24469,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@^5.2.2#~builtin, typescript@patch:typescript@^5.9.2#~builtin": +"typescript@patch:typescript@^5.2.2#~builtin, typescript@patch:typescript@^5.8.3#~builtin, typescript@patch:typescript@^5.9.2#~builtin": version: 5.9.3 resolution: "typescript@patch:typescript@npm%3A5.9.3#~builtin::version=5.9.3&hash=29ae49" bin: