From c12b4fd5d7a99741e01fa9737aac4aa42f75c439 Mon Sep 17 00:00:00 2001 From: Christian Falch Date: Mon, 13 Oct 2025 10:02:42 +0200 Subject: [PATCH 01/14] [precompile] added readme/doc files for precompile Added readme files for both RN dependencies and RN Core precompiled --- .../scripts/ios-prebuild/__docs__/README.md | 124 +++++++++++ .../releases/ios-prebuild/__docs__/README.md | 209 ++++++++++++++++++ 2 files changed, 333 insertions(+) create mode 100644 packages/react-native/scripts/ios-prebuild/__docs__/README.md create mode 100644 scripts/releases/ios-prebuild/__docs__/README.md diff --git a/packages/react-native/scripts/ios-prebuild/__docs__/README.md b/packages/react-native/scripts/ios-prebuild/__docs__/README.md new file mode 100644 index 000000000000..508273bb97da --- /dev/null +++ b/packages/react-native/scripts/ios-prebuild/__docs__/README.md @@ -0,0 +1,124 @@ +# iOS Prebuild Scripts + +This directory contains scripts for prebuilding React Native itself into XCFrameworks for iOS and related platforms. + +## Overview + +These scripts automate the process of building React Native as a Swift Package and packaging it into XCFrameworks that can be distributed and consumed by iOS applications. The build process creates optimized frameworks for multiple architectures and platforms. + +## Purpose + +The prebuild scripts are used to: + +- Build React Native itself (not its dependencies) as XCFrameworks +- Create distributable binaries for iOS, iOS Simulator, Catalyst, Vision, and visionOS platforms +- Support both Debug and Release build configurations +- Generate Debug Symbol (dSYM) files for debugging +- Enable library evolution and module stability for Swift packages + +## Architecture + +The build system consists of several components: + +### `cli.js` +The main entry point that orchestrates the build process. It: +- Parses command-line arguments +- Validates build parameters +- Coordinates the build, archiving, and XCFramework creation steps + +### `build.js` +Handles the Swift Package build process. It: +- Executes `xcodebuild` commands with appropriate flags +- Builds for specific platforms and build types (Debug/Release) +- Locates and validates the generated framework artifacts +- Uses build settings like `BUILD_LIBRARY_FOR_DISTRIBUTION=YES` for binary compatibility + +### `types.js` +Defines TypeScript/Flow type definitions for: +- `BuildFlavor`: Debug or Release configurations +- `Destination`: Target platforms (iOS, iOS Simulator, Catalyst, Vision, visionOS) +- `ArchiveOptions`: Configuration options for the build process + +### `utils.js` +Provides utility functions including: +- Logging functionality with prefixed output +- Common helper functions used across scripts + +## Usage + +Run the prebuild script from the command line: + +```bash +node cli.js [options] +``` + +### Options + + +| Option | Alias | Type | Default | Description | +|--------|-------|------|---------|-------------| +| `--setup` | `-s` | boolean | - | Download and setup dependencies | +| `--build` | `-b` | boolean | - | Build dependencies/platforms | +| `--compose` | `-c` | boolean | - | Compose XCFramework from built dependencies | +| `--platforms` | `-p` | array | `['ios', 'ios-simulator', 'mac-catalyst']` | Specify one or more platforms to build for | +| `--flavor` | `-f` | string | `Debug` | Specify the flavor to build: `Debug` or `Release` | +| `--identity` | `-i` | string | - | Specify the code signing identity to use for signing the frameworks | +| `--help` | - | boolean | - | Show help information | + + +### Build Process + +1. **Build Phase**: Compiles the React Native Swift Package for the specified platform and configuration +2. **Archive Phase**: Collects the built frameworks from the derived data path +3. **XCFramework Creation**: Packages the frameworks into XCFrameworks with debug symbols + +### Output Structure + +The build produces: +- XCFrameworks in the specified output directory +- Debug symbols (dSYM files) for debugging +- Build products organized by platform and configuration + +## Build Flags + +The build process uses specific `xcodebuild` flags: + +- `BUILD_LIBRARY_FOR_DISTRIBUTION=YES`: Enables module stability +- `SKIP_INSTALL=NO`: Ensures frameworks are properly installed +- `DEBUG_INFORMATION_FORMAT="dwarf-with-dsym"`: Generates debug symbols +- `OTHER_SWIFT_FLAGS="-no-verify-emitted-module-interface"`: Skips interface verification + +## Requirements + +- Xcode installed with command-line tools +- Swift Package Manager support +- macOS development environment +- Node.js for running the scripts + +## Notes + +- These scripts build React Native itself, not third-party dependencies +- The build process requires significant disk space for derived data +- Build times vary depending on the target platform and configuration +- XCFrameworks support multiple architectures in a single bundle + +## Known Issues + +The generated XCFrameworks currently use CocoaPods-style header structures rather than standard framework header conventions. This may cause modularity issues when: + +- Consuming the XCFrameworks in projects that expect standard framework headers +- Building dependent frameworks that rely on proper module boundaries +- Integrating with Swift Package Manager projects expecting modular headers + +## Usage + +To use the prebuilt React Native dependencies XCFrameworks in your iOS project, run pod install with the environment variable `RCT_USE_RN_DEP` set to `1`: + +```bash +RCT_USE_RN_DEP=1 bundle exec pod install +``` + +For debugging and troubleshooting the Cocoapods scripts, you can use the following environment variables: + +- `RCT_USE_LOCAL_RN_DEP`: **TEST ONLY** If set, it will use a local tarball of ReactNativeDependencies if it exists. +- `RCT_DEPS_VERSION`: **TEST ONLY** If set, it will override the version of ReactNativeDependencies to be used. \ No newline at end of file diff --git a/scripts/releases/ios-prebuild/__docs__/README.md b/scripts/releases/ios-prebuild/__docs__/README.md new file mode 100644 index 000000000000..5c49c03f9cb0 --- /dev/null +++ b/scripts/releases/ios-prebuild/__docs__/README.md @@ -0,0 +1,209 @@ +# iOS Prebuild Scripts Documentation + +This folder contains scripts for creating precompiled XCFrameworks for React Native's dependencies. These scripts automate the process of downloading, building, and packaging third-party libraries into distributable XCFramework bundles for iOS. + +## Overview + +The iOS prebuild system creates precompiled frameworks to reduce build times for React Native iOS apps. Instead of compiling dependencies from source during every build, these scripts package them as ready-to-use XCFrameworks. + +The prebuild process creates a Swift package that builds frameworks for the following 3rd party libraries: + +- boost +- folly +- glog +- fmt +- double-conversion +- socketrocket +- fast-float + +## Main Scripts + +### `cli.js` + +Command-line interface for the prebuild system. Provides the following options: + +```bash +# Setup: Download and prepare dependencies +node cli.js --setup + +# Build: Compile dependencies for specified platforms +node cli.js --build --platforms ios,macos + +# Compose: Create XCFrameworks from built artifacts +node cli.js --compose + +# Create Swift Package: Generate Package.swift file +node cli.js --swiftpackage +``` + +**Options:** +- `--setup` / `-s`: Download and setup dependencies +- `--build` / `-b`: Build dependencies for target platforms +- `--compose` / `-c`: Compose XCFrameworks from built artifacts +- `--swiftpackage` / `-w`: Generate Package.swift file +- `--platforms` / `-p`: Target platforms (ios, macos, catalyst, tvos, visionos) +- `--configurations` / `-g`: Build configurations (Debug, Release) +- `--dependencies` / `-d`: Specific dependencies to process +- `--clean`: Clean build folder before building +- `--identity` / `-i`: Signing identity for frameworks + +### `setupDependencies.js` + +Handles downloading and preparing third-party dependencies defined in `configuration.js`. + +**Functions:** +- Downloads dependencies from specified URLs +- Extracts archives (tar.gz, zip) +- Runs preparation scripts for each dependency +- Organizes source files in the build directory + +### `build.js` + +Compiles dependencies using Xcode for specified platforms and configurations. + +**Key features:** +- Builds for multiple platforms: iOS, macOS, Catalyst, tvOS, visionOS +- Supports both Debug and Release configurations +- Creates universal binaries for device and simulator +- Handles architecture-specific builds (arm64, x86_64) + +### `compose-framework.js` + +Creates the final XCFramework from built artifacts. + +**Functions:** + +#### `createFramework(scheme, configuration, dependencies, rootFolder, buildFolder, identity)` +Composes XCFrameworks from platform-specific builds using `xcodebuild -create-xcframework`. + +#### `copyHeaders(scheme, dependencies, rootFolder)` +Copies public headers from dependencies to the framework's Headers folder based on settings in `configuration.js`. + +#### `copyBundles(scheme, dependencies, outputFolder, frameworkPaths)` +Copies resource bundles into the XCFramework's Resources folder. + +#### `copySymbols(scheme, outputFolder, frameworkPaths)` +Copies debug symbols (dSYM files) to enable symbolication of crash reports. + +#### `signXCFramework(identity, xcframeworkPath)` +Code signs the XCFramework with the specified identity. + +### `configuration.js` + +Defines all dependencies and their build settings. + +**Configuration structure:** +```javascript +{ + name: 'boost', + version: '1.84.0', + url: new URL('https://...'), + files: { + sources: ['boost/**/*.hpp'], + headers: ['boost/**/*.hpp'], + resources: ['PrivacyInfo.xcprivacy'] + }, + settings: { + publicHeaderFiles: './', + headerSearchPaths: ['./'], + cCompilerFlags: ['-Wno-documentation'], + cxxCompilerFlags: ['-std=c++20'] + } +} +``` + +### `swift-package.js` + +Generates a Package.swift file for Swift Package Manager distribution. + +**Functions:** +- `createSwiftPackageFile(dependencies, version, outputPath)`: Creates Package.swift with binary target definitions + +### `folders.js` + +Utility functions for folder operations. + +**Functions:** +- `cleanFolder(folderPath)`: Removes and recreates a directory +- `ensureFolder(folderPath)`: Creates directory if it doesn't exist + +### `constants.js` + +Defines shared constants used across scripts: +- `HEADERS_FOLDER`: Location for extracted headers +- `TARGET_FOLDER`: Build output location +- `CPP_STANDARD`: C++ standard version to use + +### `types.js` + +Flow type definitions for TypeScript-style type checking: +- `Platform`: Supported platform types +- `Configuration`: Build configuration types +- `Dependency`: Dependency configuration structure + +## Workflow + +The typical workflow for creating prebuilt frameworks: + +1. **Setup Phase** (`setupDependencies.js`) + - Downloads third-party dependencies + - Extracts archives + - Runs preparation scripts + - Organizes files in build directory + +2. **Build Phase** (`build.js`) + - Compiles each dependency for target platforms + - Creates fat binaries for device + simulator + - Generates build artifacts in platform-specific folders + +3. **Compose Phase** (`compose-framework.js`) + - Combines platform builds into XCFramework + - Copies headers and resources + - Includes debug symbols (dSYM) + - Code signs if identity provided + +4. **Package Phase** (`swift-package.js`) + - Generates Package.swift for SPM distribution + - Defines binary targets with checksums + +## Integration + +The prebuilt frameworks are consumed via CocoaPods or Swift Package Manager. + +Related files: +- `packages/react-native/scripts/cocoapods/rndependencies.rb` - CocoaPods integration +- `packages/react-native/React-Core-prebuilt.podspec` - Prebuilt React Core podspec + +## Entry Point + +The main entry point is `prepare-ios-prebuilds.js` which orchestrates the entire prebuild process: + +```javascript +const {buildDepenencies} = require('./ios-prebuild/build'); +const {createFramework} = require('./ios-prebuild/compose-framework'); +const {setupDependencies} = require('./ios-prebuild/setupDependencies'); +``` + +## Environment Variables + +- `RCT_USE_RN_DEP`: Use prebuilt dependencies instead of building from source +- `RCT_USE_LOCAL_RN_DEP`: Use local tarball for testing +- `RCT_SYMBOLICATE_PREBUILT_FRAMEWORKS`: Download and install dSYMs for symbolication + +See `packages/react-native/scripts/cocoapods/rncore.rb` for implementation details. + +## Usage + +To use the prebuilt React Native XCFrameworks in your iOS project, run pod install with the environment variable `RCT_USE_PREBUILT_RNCORE` set to `1`: + +```bash +RCT_USE_PREBUILT_RNCORE=1 bundle exec pod install +``` + +This can be combined with `RCT_USE_RN_DEP=1` to use both React Native and its dependencies as prebuilt frameworks. + +For debugging and troubleshooting the Cocoapods scripts, you can use the following environment variables: + +- `RCT_TESTONLY_RNCORE_TARBALL_PATH`: **TEST ONLY** If set, it will use a local tarball of RNCore if it exists. +- `RCT_TESTONLY_RNCORE_VERSION`: **TEST ONLY** If set, it will override the version of RNCore to be used. +- `RCT_SYMBOLICATE_PREBUILT_FRAMEWORKS`: If set to 1, it will download the dSYMs for the prebuilt RNCore frameworks and install these in the framework folders From 86d648c003652128af90639d78fe592a4e4b9b4b Mon Sep 17 00:00:00 2001 From: Christian Falch Date: Tue, 14 Oct 2025 15:07:00 +0200 Subject: [PATCH 02/14] codereview --- .../scripts/ios-prebuild/__docs__/README.md | 131 ++++++----- .../releases/ios-prebuild/__docs__/README.md | 217 ++++-------------- 2 files changed, 114 insertions(+), 234 deletions(-) diff --git a/packages/react-native/scripts/ios-prebuild/__docs__/README.md b/packages/react-native/scripts/ios-prebuild/__docs__/README.md index 508273bb97da..c7a671e96110 100644 --- a/packages/react-native/scripts/ios-prebuild/__docs__/README.md +++ b/packages/react-native/scripts/ios-prebuild/__docs__/README.md @@ -1,84 +1,99 @@ # iOS Prebuild Scripts -This directory contains scripts for prebuilding React Native itself into XCFrameworks for iOS and related platforms. +This directory contains scripts for prebuilding React Native itself into +XCFrameworks for iOS and related platforms. ## Overview -These scripts automate the process of building React Native as a Swift Package and packaging it into XCFrameworks that can be distributed and consumed by iOS applications. The build process creates optimized frameworks for multiple architectures and platforms. +These scripts automate the process of building React Native as a Swift Package +and packaging it into XCFrameworks that can be distributed and consumed by iOS +applications. The build process creates optimized frameworks for multiple +architectures and platforms. ## Purpose The prebuild scripts are used to: - Build React Native itself (not its dependencies) as XCFrameworks -- Create distributable binaries for iOS, iOS Simulator, Catalyst, Vision, and visionOS platforms +- Create distributable binaries for iOS, iOS Simulator, Catalyst, Vision, and + visionOS platforms - Support both Debug and Release build configurations - Generate Debug Symbol (dSYM) files for debugging - Enable library evolution and module stability for Swift packages +## Usage + +Run the prebuild script from the command line: + +```bash +cd packages/react-native +node scripts/ios-prebuild +``` + +If no options are passed, the script executes all the steps in this order: + +- setup build for all platforms and flavors +- compose xcframeworks +- sign (if an identity is passed) + +### Options + +| Option | Alias | Type | Default | Description | +| ------------- | ----- | ------- | ------------------------------------------ | ------------------------------------------------------------------- | +| `--setup` | `-s` | boolean | - | Download and setup dependencies | +| `--build` | `-b` | boolean | - | Build dependencies/platforms | +| `--compose` | `-c` | boolean | - | Compose XCFramework from built dependencies | +| `--platforms` | `-p` | array | `['ios', 'ios-simulator', 'mac-catalyst']` | Specify one or more platforms to build for | +| `--flavor` | `-f` | string | `Debug` | Specify the flavor to build: `Debug` or `Release` | +| `--identity` | `-i` | string | - | Specify the code signing identity to use for signing the frameworks | +| `--help` | - | boolean | - | Show help information | + +### Output Structure + +The build produces: + +- XCFrameworks in the specified output directory +- Debug symbols (dSYM files) for debugging +- Build products organized by platform and configuration + ## Architecture The build system consists of several components: ### `cli.js` + The main entry point that orchestrates the build process. It: + - Parses command-line arguments - Validates build parameters - Coordinates the build, archiving, and XCFramework creation steps ### `build.js` + Handles the Swift Package build process. It: + - Executes `xcodebuild` commands with appropriate flags - Builds for specific platforms and build types (Debug/Release) - Locates and validates the generated framework artifacts -- Uses build settings like `BUILD_LIBRARY_FOR_DISTRIBUTION=YES` for binary compatibility +- Uses build settings like `BUILD_LIBRARY_FOR_DISTRIBUTION=YES` for binary + compatibility ### `types.js` + Defines TypeScript/Flow type definitions for: + - `BuildFlavor`: Debug or Release configurations -- `Destination`: Target platforms (iOS, iOS Simulator, Catalyst, Vision, visionOS) +- `Destination`: Target platforms (iOS, iOS Simulator, Catalyst, Vision, + visionOS) - `ArchiveOptions`: Configuration options for the build process ### `utils.js` + Provides utility functions including: + - Logging functionality with prefixed output - Common helper functions used across scripts -## Usage - -Run the prebuild script from the command line: - -```bash -node cli.js [options] -``` - -### Options - - -| Option | Alias | Type | Default | Description | -|--------|-------|------|---------|-------------| -| `--setup` | `-s` | boolean | - | Download and setup dependencies | -| `--build` | `-b` | boolean | - | Build dependencies/platforms | -| `--compose` | `-c` | boolean | - | Compose XCFramework from built dependencies | -| `--platforms` | `-p` | array | `['ios', 'ios-simulator', 'mac-catalyst']` | Specify one or more platforms to build for | -| `--flavor` | `-f` | string | `Debug` | Specify the flavor to build: `Debug` or `Release` | -| `--identity` | `-i` | string | - | Specify the code signing identity to use for signing the frameworks | -| `--help` | - | boolean | - | Show help information | - - -### Build Process - -1. **Build Phase**: Compiles the React Native Swift Package for the specified platform and configuration -2. **Archive Phase**: Collects the built frameworks from the derived data path -3. **XCFramework Creation**: Packages the frameworks into XCFrameworks with debug symbols - -### Output Structure - -The build produces: -- XCFrameworks in the specified output directory -- Debug symbols (dSYM files) for debugging -- Build products organized by platform and configuration - ## Build Flags The build process uses specific `xcodebuild` flags: @@ -86,14 +101,9 @@ The build process uses specific `xcodebuild` flags: - `BUILD_LIBRARY_FOR_DISTRIBUTION=YES`: Enables module stability - `SKIP_INSTALL=NO`: Ensures frameworks are properly installed - `DEBUG_INFORMATION_FORMAT="dwarf-with-dsym"`: Generates debug symbols -- `OTHER_SWIFT_FLAGS="-no-verify-emitted-module-interface"`: Skips interface verification - -## Requirements - -- Xcode installed with command-line tools -- Swift Package Manager support -- macOS development environment -- Node.js for running the scripts +- `OTHER_SWIFT_FLAGS="-no-verify-emitted-module-interface"`: Skips interface + verification (useful for React Native modules due to the header structure not + beeing modular) ## Notes @@ -104,21 +114,24 @@ The build process uses specific `xcodebuild` flags: ## Known Issues -The generated XCFrameworks currently use CocoaPods-style header structures rather than standard framework header conventions. This may cause modularity issues when: +The generated XCFrameworks currently use CocoaPods-style header structures +rather than standard framework header conventions. This may cause modularity +issues when: - Consuming the XCFrameworks in projects that expect standard framework headers - Building dependent frameworks that rely on proper module boundaries - Integrating with Swift Package Manager projects expecting modular headers -## Usage - -To use the prebuilt React Native dependencies XCFrameworks in your iOS project, run pod install with the environment variable `RCT_USE_RN_DEP` set to `1`: - -```bash -RCT_USE_RN_DEP=1 bundle exec pod install -``` +## Integrating in your project with Cocoapods -For debugging and troubleshooting the Cocoapods scripts, you can use the following environment variables: +For consuming, debugging or troubleshooting when using Cocoapods scripts, you +can use the following environment variables: -- `RCT_USE_LOCAL_RN_DEP`: **TEST ONLY** If set, it will use a local tarball of ReactNativeDependencies if it exists. -- `RCT_DEPS_VERSION`: **TEST ONLY** If set, it will override the version of ReactNativeDependencies to be used. \ No newline at end of file +- `RCT_USE_PREBUILT_RNCORE`: If set to 1, it will use the release tarball from + Maven instead of building from source. +- `RCT_TESTONLY_RNCORE_TARBALL_PATH`: **TEST ONLY** If set, it will use a local + tarball of RNCore if it exists. +- `RCT_TESTONLY_RNCORE_VERSION`: **TEST ONLY** If set, it will override the + version of RNCore to be used. +- `RCT_SYMBOLICATE_PREBUILT_FRAMEWORKS`: If set to 1, it will download the dSYMs + for the prebuilt RNCore frameworks and install these in the framework folders diff --git a/scripts/releases/ios-prebuild/__docs__/README.md b/scripts/releases/ios-prebuild/__docs__/README.md index 5c49c03f9cb0..9b0953f43f28 100644 --- a/scripts/releases/ios-prebuild/__docs__/README.md +++ b/scripts/releases/ios-prebuild/__docs__/README.md @@ -1,12 +1,18 @@ # iOS Prebuild Scripts Documentation -This folder contains scripts for creating precompiled XCFrameworks for React Native's dependencies. These scripts automate the process of downloading, building, and packaging third-party libraries into distributable XCFramework bundles for iOS. +This folder contains scripts for creating precompiled XCFrameworks for React +Native's dependencies. These scripts automate the process of downloading, +building, and packaging third-party libraries into distributable XCFramework +bundles for iOS. ## Overview -The iOS prebuild system creates precompiled frameworks to reduce build times for React Native iOS apps. Instead of compiling dependencies from source during every build, these scripts package them as ready-to-use XCFrameworks. +The iOS prebuild system creates precompiled frameworks to reduce build times for +React Native iOS apps. Instead of compiling dependencies from source during +every build, these scripts package them as ready-to-use XCFrameworks. -The prebuild process creates a Swift package that builds frameworks for the following 3rd party libraries: +The prebuild process creates a Swift package that builds frameworks for the +following 3rd party libraries: - boost - folly @@ -20,190 +26,51 @@ The prebuild process creates a Swift package that builds frameworks for the foll ### `cli.js` -Command-line interface for the prebuild system. Provides the following options: +Command-line interface for the prebuild system. ```bash -# Setup: Download and prepare dependencies -node cli.js --setup - -# Build: Compile dependencies for specified platforms -node cli.js --build --platforms ios,macos - -# Compose: Create XCFrameworks from built artifacts -node cli.js --compose - -# Create Swift Package: Generate Package.swift file -node cli.js --swiftpackage -``` - -**Options:** -- `--setup` / `-s`: Download and setup dependencies -- `--build` / `-b`: Build dependencies for target platforms -- `--compose` / `-c`: Compose XCFrameworks from built artifacts -- `--swiftpackage` / `-w`: Generate Package.swift file -- `--platforms` / `-p`: Target platforms (ios, macos, catalyst, tvos, visionos) -- `--configurations` / `-g`: Build configurations (Debug, Release) -- `--dependencies` / `-d`: Specific dependencies to process -- `--clean`: Clean build folder before building -- `--identity` / `-i`: Signing identity for frameworks - -### `setupDependencies.js` - -Handles downloading and preparing third-party dependencies defined in `configuration.js`. - -**Functions:** -- Downloads dependencies from specified URLs -- Extracts archives (tar.gz, zip) -- Runs preparation scripts for each dependency -- Organizes source files in the build directory - -### `build.js` - -Compiles dependencies using Xcode for specified platforms and configurations. - -**Key features:** -- Builds for multiple platforms: iOS, macOS, Catalyst, tvOS, visionOS -- Supports both Debug and Release configurations -- Creates universal binaries for device and simulator -- Handles architecture-specific builds (arm64, x86_64) - -### `compose-framework.js` - -Creates the final XCFramework from built artifacts. - -**Functions:** - -#### `createFramework(scheme, configuration, dependencies, rootFolder, buildFolder, identity)` -Composes XCFrameworks from platform-specific builds using `xcodebuild -create-xcframework`. - -#### `copyHeaders(scheme, dependencies, rootFolder)` -Copies public headers from dependencies to the framework's Headers folder based on settings in `configuration.js`. - -#### `copyBundles(scheme, dependencies, outputFolder, frameworkPaths)` -Copies resource bundles into the XCFramework's Resources folder. - -#### `copySymbols(scheme, outputFolder, frameworkPaths)` -Copies debug symbols (dSYM files) to enable symbolication of crash reports. - -#### `signXCFramework(identity, xcframeworkPath)` -Code signs the XCFramework with the specified identity. - -### `configuration.js` - -Defines all dependencies and their build settings. - -**Configuration structure:** -```javascript -{ - name: 'boost', - version: '1.84.0', - url: new URL('https://...'), - files: { - sources: ['boost/**/*.hpp'], - headers: ['boost/**/*.hpp'], - resources: ['PrivacyInfo.xcprivacy'] - }, - settings: { - publicHeaderFiles: './', - headerSearchPaths: ['./'], - cCompilerFlags: ['-Wno-documentation'], - cxxCompilerFlags: ['-std=c++20'] - } -} +node scripts/releases/prepare-ios-prebuilds.js ``` -### `swift-package.js` - -Generates a Package.swift file for Swift Package Manager distribution. - -**Functions:** -- `createSwiftPackageFile(dependencies, version, outputPath)`: Creates Package.swift with binary target definitions - -### `folders.js` - -Utility functions for folder operations. - -**Functions:** -- `cleanFolder(folderPath)`: Removes and recreates a directory -- `ensureFolder(folderPath)`: Creates directory if it doesn't exist - -### `constants.js` - -Defines shared constants used across scripts: -- `HEADERS_FOLDER`: Location for extracted headers -- `TARGET_FOLDER`: Build output location -- `CPP_STANDARD`: C++ standard version to use - -### `types.js` - -Flow type definitions for TypeScript-style type checking: -- `Platform`: Supported platform types -- `Configuration`: Build configuration types -- `Dependency`: Dependency configuration structure +If no options are passed, the script executes all the steps in this order: -## Workflow +- setup dependencies and prepares them +- creates Swift package file +- builds for all platforms and configurations +- creates xcframeworks -The typical workflow for creating prebuilt frameworks: - -1. **Setup Phase** (`setupDependencies.js`) - - Downloads third-party dependencies - - Extracts archives - - Runs preparation scripts - - Organizes files in build directory - -2. **Build Phase** (`build.js`) - - Compiles each dependency for target platforms - - Creates fat binaries for device + simulator - - Generates build artifacts in platform-specific folders - -3. **Compose Phase** (`compose-framework.js`) - - Combines platform builds into XCFramework - - Copies headers and resources - - Includes debug symbols (dSYM) - - Code signs if identity provided - -4. **Package Phase** (`swift-package.js`) - - Generates Package.swift for SPM distribution - - Defines binary targets with checksums - -## Integration - -The prebuilt frameworks are consumed via CocoaPods or Swift Package Manager. - -Related files: -- `packages/react-native/scripts/cocoapods/rndependencies.rb` - CocoaPods integration -- `packages/react-native/React-Core-prebuilt.podspec` - Prebuilt React Core podspec - -## Entry Point - -The main entry point is `prepare-ios-prebuilds.js` which orchestrates the entire prebuild process: - -```javascript -const {buildDepenencies} = require('./ios-prebuild/build'); -const {createFramework} = require('./ios-prebuild/compose-framework'); -const {setupDependencies} = require('./ios-prebuild/setupDependencies'); -``` - -## Environment Variables - -- `RCT_USE_RN_DEP`: Use prebuilt dependencies instead of building from source -- `RCT_USE_LOCAL_RN_DEP`: Use local tarball for testing -- `RCT_SYMBOLICATE_PREBUILT_FRAMEWORKS`: Download and install dSYMs for symbolication +**Options:** -See `packages/react-native/scripts/cocoapods/rncore.rb` for implementation details. +| Option | Short | Description | +| ------------------ | ----: | ------------------------------------------------------- | +| `--setup` | `-s` | Download and setup dependencies | +| `--build` | `-b` | Build dependencies for target platforms | +| `--compose` | `-c` | Compose XCFrameworks from built artifacts | +| `--swiftpackage` | `-w` | Generate `Package.swift` file | +| `--platforms` | `-p` | Target platforms (ios, macos, catalyst, tvos, visionos) | +| `--configurations` | `-g` | Build configurations (Debug, Release) | +| `--dependencies` | `-d` | Specific dependencies to process | +| `--clean` | — | Clean build folder before building | +| `--identity` | `-i` | Signing identity for frameworks | -## Usage +## Integrating in your project with Cocoapods -To use the prebuilt React Native XCFrameworks in your iOS project, run pod install with the environment variable `RCT_USE_PREBUILT_RNCORE` set to `1`: +To use the prebuilt React Native Dependencies XCFrameworks in your iOS project, +run pod install with the environment variable `RCT_USE_RN_DEP` set to `1`: ```bash -RCT_USE_PREBUILT_RNCORE=1 bundle exec pod install +RCT_USE_RN_DEP=1 bundle exec pod install ``` -This can be combined with `RCT_USE_RN_DEP=1` to use both React Native and its dependencies as prebuilt frameworks. +This can be combined with `RCT_USE_RN_DEP=1` to use both React Native and its +dependencies as prebuilt frameworks. -For debugging and troubleshooting the Cocoapods scripts, you can use the following environment variables: +For debugging and troubleshooting the Cocoapods scripts, you can use the +following environment variables: -- `RCT_TESTONLY_RNCORE_TARBALL_PATH`: **TEST ONLY** If set, it will use a local tarball of RNCore if it exists. -- `RCT_TESTONLY_RNCORE_VERSION`: **TEST ONLY** If set, it will override the version of RNCore to be used. -- `RCT_SYMBOLICATE_PREBUILT_FRAMEWORKS`: If set to 1, it will download the dSYMs for the prebuilt RNCore frameworks and install these in the framework folders +- `RCT_USE_RN_DEP`: If set to 1, it will use the release tarball from Maven + instead of building from source. +- `RCT_USE_LOCAL_RN_DEP`: **TEST ONLY** If set, it will use a local tarball of + ReactNativeDependencies if it exists. +- `RCT_DEPS_VERSION`: **TEST ONLY** If set, it will override the version of + ReactNativeDependencies to be used. From 382f463e25c97eb29576f41f45d9d74a0d440b8c Mon Sep 17 00:00:00 2001 From: Christian Falch <875252+chrfalch@users.noreply.github.com> Date: Tue, 11 Nov 2025 10:28:53 +0100 Subject: [PATCH 03/14] Update packages/react-native/scripts/ios-prebuild/__docs__/README.md Co-authored-by: Riccardo Cipolleschi --- packages/react-native/scripts/ios-prebuild/__docs__/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/react-native/scripts/ios-prebuild/__docs__/README.md b/packages/react-native/scripts/ios-prebuild/__docs__/README.md index c7a671e96110..e32d39b814fd 100644 --- a/packages/react-native/scripts/ios-prebuild/__docs__/README.md +++ b/packages/react-native/scripts/ios-prebuild/__docs__/README.md @@ -1,7 +1,6 @@ # iOS Prebuild Scripts -This directory contains scripts for prebuilding React Native itself into -XCFrameworks for iOS and related platforms. +This directory contains scripts for prebuilding React Native itself into XCFrameworks for iOS and related platforms. ## Overview From 946cd3cc85702860913de583d2aba983d4e715d3 Mon Sep 17 00:00:00 2001 From: Christian Falch <875252+chrfalch@users.noreply.github.com> Date: Tue, 11 Nov 2025 10:29:10 +0100 Subject: [PATCH 04/14] Update packages/react-native/scripts/ios-prebuild/__docs__/README.md Co-authored-by: Riccardo Cipolleschi --- .../react-native/scripts/ios-prebuild/__docs__/README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/react-native/scripts/ios-prebuild/__docs__/README.md b/packages/react-native/scripts/ios-prebuild/__docs__/README.md index e32d39b814fd..3ff039530f54 100644 --- a/packages/react-native/scripts/ios-prebuild/__docs__/README.md +++ b/packages/react-native/scripts/ios-prebuild/__docs__/README.md @@ -4,10 +4,7 @@ This directory contains scripts for prebuilding React Native itself into XCFrame ## Overview -These scripts automate the process of building React Native as a Swift Package -and packaging it into XCFrameworks that can be distributed and consumed by iOS -applications. The build process creates optimized frameworks for multiple -architectures and platforms. +These scripts automate the process of building React Native as a Swift Package and packaging it into XCFrameworks that can be distributed and consumed by iOS applications. The build process creates optimized frameworks for multiple architectures and platforms. ## Purpose From c63736a7a5a03f4cb4f194bd5ddb40bb28641803 Mon Sep 17 00:00:00 2001 From: Christian Falch <875252+chrfalch@users.noreply.github.com> Date: Tue, 11 Nov 2025 10:29:33 +0100 Subject: [PATCH 05/14] Update packages/react-native/scripts/ios-prebuild/__docs__/README.md Co-authored-by: Riccardo Cipolleschi --- packages/react-native/scripts/ios-prebuild/__docs__/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/react-native/scripts/ios-prebuild/__docs__/README.md b/packages/react-native/scripts/ios-prebuild/__docs__/README.md index 3ff039530f54..e40e0d4d6ca6 100644 --- a/packages/react-native/scripts/ios-prebuild/__docs__/README.md +++ b/packages/react-native/scripts/ios-prebuild/__docs__/README.md @@ -11,8 +11,7 @@ These scripts automate the process of building React Native as a Swift Package a The prebuild scripts are used to: - Build React Native itself (not its dependencies) as XCFrameworks -- Create distributable binaries for iOS, iOS Simulator, Catalyst, Vision, and - visionOS platforms +- Create distributable binaries for iOS, iOS Simulator, Catalyst. - Support both Debug and Release build configurations - Generate Debug Symbol (dSYM) files for debugging - Enable library evolution and module stability for Swift packages From 403ad5eedbcafa4466734cde9296f7346e8ada15 Mon Sep 17 00:00:00 2001 From: Christian Falch <875252+chrfalch@users.noreply.github.com> Date: Tue, 11 Nov 2025 10:29:43 +0100 Subject: [PATCH 06/14] Update packages/react-native/scripts/ios-prebuild/__docs__/README.md Co-authored-by: Riccardo Cipolleschi --- packages/react-native/scripts/ios-prebuild/__docs__/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/react-native/scripts/ios-prebuild/__docs__/README.md b/packages/react-native/scripts/ios-prebuild/__docs__/README.md index e40e0d4d6ca6..2c0f1457e3e1 100644 --- a/packages/react-native/scripts/ios-prebuild/__docs__/README.md +++ b/packages/react-native/scripts/ios-prebuild/__docs__/README.md @@ -14,7 +14,6 @@ The prebuild scripts are used to: - Create distributable binaries for iOS, iOS Simulator, Catalyst. - Support both Debug and Release build configurations - Generate Debug Symbol (dSYM) files for debugging -- Enable library evolution and module stability for Swift packages ## Usage From 75aca5e99124ccb10ecb59e51dd7a66848895b4e Mon Sep 17 00:00:00 2001 From: Christian Falch <875252+chrfalch@users.noreply.github.com> Date: Tue, 11 Nov 2025 10:30:44 +0100 Subject: [PATCH 07/14] Update packages/react-native/scripts/ios-prebuild/__docs__/README.md Co-authored-by: Riccardo Cipolleschi --- packages/react-native/scripts/ios-prebuild/__docs__/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/react-native/scripts/ios-prebuild/__docs__/README.md b/packages/react-native/scripts/ios-prebuild/__docs__/README.md index 2c0f1457e3e1..e0ec0f361f3f 100644 --- a/packages/react-native/scripts/ios-prebuild/__docs__/README.md +++ b/packages/react-native/scripts/ios-prebuild/__docs__/README.md @@ -26,7 +26,8 @@ node scripts/ios-prebuild If no options are passed, the script executes all the steps in this order: -- setup build for all platforms and flavors +- setup the codebase for all platforms and flavors +- build for all platforms and flavors - compose xcframeworks - sign (if an identity is passed) From f111adeca547cbe8ea1378e74d7e367958477f1c Mon Sep 17 00:00:00 2001 From: Christian Falch <875252+chrfalch@users.noreply.github.com> Date: Tue, 11 Nov 2025 10:30:55 +0100 Subject: [PATCH 08/14] Update scripts/releases/ios-prebuild/__docs__/README.md Co-authored-by: Riccardo Cipolleschi --- scripts/releases/ios-prebuild/__docs__/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/releases/ios-prebuild/__docs__/README.md b/scripts/releases/ios-prebuild/__docs__/README.md index 9b0953f43f28..bdca1dc3795e 100644 --- a/scripts/releases/ios-prebuild/__docs__/README.md +++ b/scripts/releases/ios-prebuild/__docs__/README.md @@ -55,8 +55,7 @@ If no options are passed, the script executes all the steps in this order: ## Integrating in your project with Cocoapods -To use the prebuilt React Native Dependencies XCFrameworks in your iOS project, -run pod install with the environment variable `RCT_USE_RN_DEP` set to `1`: +To use the prebuilt React Native Dependencies XCFrameworks in your iOS project, run pod install with the environment variable `RCT_USE_RN_DEP` set to `1`: ```bash RCT_USE_RN_DEP=1 bundle exec pod install From 95fab247beea855f9f3d19b43f371f6dbc3a829f Mon Sep 17 00:00:00 2001 From: Christian Falch <875252+chrfalch@users.noreply.github.com> Date: Tue, 11 Nov 2025 10:31:16 +0100 Subject: [PATCH 09/14] Update scripts/releases/ios-prebuild/__docs__/README.md Co-authored-by: Riccardo Cipolleschi --- scripts/releases/ios-prebuild/__docs__/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/releases/ios-prebuild/__docs__/README.md b/scripts/releases/ios-prebuild/__docs__/README.md index bdca1dc3795e..776ff9eedb66 100644 --- a/scripts/releases/ios-prebuild/__docs__/README.md +++ b/scripts/releases/ios-prebuild/__docs__/README.md @@ -61,8 +61,7 @@ To use the prebuilt React Native Dependencies XCFrameworks in your iOS project, RCT_USE_RN_DEP=1 bundle exec pod install ``` -This can be combined with `RCT_USE_RN_DEP=1` to use both React Native and its -dependencies as prebuilt frameworks. +This can be combined with `RCT_USE_RN_DEP=1` to use both React Native and its dependencies as prebuilt frameworks. For debugging and troubleshooting the Cocoapods scripts, you can use the following environment variables: From 7e564e83a5efdfeca4f3f3455eef4692e9971212 Mon Sep 17 00:00:00 2001 From: Christian Falch <875252+chrfalch@users.noreply.github.com> Date: Tue, 11 Nov 2025 10:32:35 +0100 Subject: [PATCH 10/14] Update scripts/releases/ios-prebuild/__docs__/README.md Co-authored-by: Riccardo Cipolleschi --- scripts/releases/ios-prebuild/__docs__/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/releases/ios-prebuild/__docs__/README.md b/scripts/releases/ios-prebuild/__docs__/README.md index 776ff9eedb66..7eac598bca56 100644 --- a/scripts/releases/ios-prebuild/__docs__/README.md +++ b/scripts/releases/ios-prebuild/__docs__/README.md @@ -63,8 +63,7 @@ RCT_USE_RN_DEP=1 bundle exec pod install This can be combined with `RCT_USE_RN_DEP=1` to use both React Native and its dependencies as prebuilt frameworks. -For debugging and troubleshooting the Cocoapods scripts, you can use the -following environment variables: +For debugging and troubleshooting the Cocoapods scripts, you can use the following environment variables: - `RCT_USE_RN_DEP`: If set to 1, it will use the release tarball from Maven instead of building from source. From 901b7c8e1a3fb5008c7f99b95c3936ad04ebb08b Mon Sep 17 00:00:00 2001 From: Christian Falch <875252+chrfalch@users.noreply.github.com> Date: Tue, 11 Nov 2025 10:34:01 +0100 Subject: [PATCH 11/14] Update scripts/releases/ios-prebuild/__docs__/README.md Co-authored-by: Riccardo Cipolleschi --- scripts/releases/ios-prebuild/__docs__/README.md | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/scripts/releases/ios-prebuild/__docs__/README.md b/scripts/releases/ios-prebuild/__docs__/README.md index 7eac598bca56..a0a8f9bf1d36 100644 --- a/scripts/releases/ios-prebuild/__docs__/README.md +++ b/scripts/releases/ios-prebuild/__docs__/README.md @@ -65,9 +65,6 @@ This can be combined with `RCT_USE_RN_DEP=1` to use both React Native and its de For debugging and troubleshooting the Cocoapods scripts, you can use the following environment variables: -- `RCT_USE_RN_DEP`: If set to 1, it will use the release tarball from Maven - instead of building from source. -- `RCT_USE_LOCAL_RN_DEP`: **TEST ONLY** If set, it will use a local tarball of - ReactNativeDependencies if it exists. -- `RCT_DEPS_VERSION`: **TEST ONLY** If set, it will override the version of - ReactNativeDependencies to be used. +- `RCT_USE_RN_DEP`: If set to 1, it will use the release tarball from Maven instead of building from source. +- `RCT_USE_LOCAL_RN_DEP`: **TEST ONLY** If set, it will use a local tarball of ReactNativeDependencies if it exists. +- `RCT_DEPS_VERSION`: **TEST ONLY** If set, it will override the version of ReactNativeDependencies to be used. From 6fff7380c100333d41aa6ee87138bba086284a58 Mon Sep 17 00:00:00 2001 From: Christian Falch <875252+chrfalch@users.noreply.github.com> Date: Tue, 11 Nov 2025 10:35:21 +0100 Subject: [PATCH 12/14] Update packages/react-native/scripts/ios-prebuild/__docs__/README.md Co-authored-by: Riccardo Cipolleschi --- .../scripts/ios-prebuild/__docs__/README.md | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/packages/react-native/scripts/ios-prebuild/__docs__/README.md b/packages/react-native/scripts/ios-prebuild/__docs__/README.md index e0ec0f361f3f..4427f3278816 100644 --- a/packages/react-native/scripts/ios-prebuild/__docs__/README.md +++ b/packages/react-native/scripts/ios-prebuild/__docs__/README.md @@ -119,14 +119,9 @@ issues when: ## Integrating in your project with Cocoapods -For consuming, debugging or troubleshooting when using Cocoapods scripts, you -can use the following environment variables: - -- `RCT_USE_PREBUILT_RNCORE`: If set to 1, it will use the release tarball from - Maven instead of building from source. -- `RCT_TESTONLY_RNCORE_TARBALL_PATH`: **TEST ONLY** If set, it will use a local - tarball of RNCore if it exists. -- `RCT_TESTONLY_RNCORE_VERSION`: **TEST ONLY** If set, it will override the - version of RNCore to be used. -- `RCT_SYMBOLICATE_PREBUILT_FRAMEWORKS`: If set to 1, it will download the dSYMs - for the prebuilt RNCore frameworks and install these in the framework folders +For consuming, debugging or troubleshooting when using Cocoapods scripts, you can use the following environment variables: + +- `RCT_USE_PREBUILT_RNCORE`: If set to 1, it will use the release tarball from Maven instead of building from source. +- `RCT_TESTONLY_RNCORE_TARBALL_PATH`: **TEST ONLY** If set, it will use a local tarball of RNCore if it exists. +- `RCT_TESTONLY_RNCORE_VERSION`: **TEST ONLY** If set, it will override the version of RNCore to be used. +- `RCT_SYMBOLICATE_PREBUILT_FRAMEWORKS`: If set to 1, it will download the dSYMs for the prebuilt RNCore frameworks and install these in the framework folders From cdb5dbd4534c1170024695dc81e34e4ad3551812 Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Wed, 19 Nov 2025 18:27:13 +0000 Subject: [PATCH 13/14] Run prettier --- .../releases/ios-prebuild/__docs__/README.md | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/scripts/releases/ios-prebuild/__docs__/README.md b/scripts/releases/ios-prebuild/__docs__/README.md index a0a8f9bf1d36..9b0953f43f28 100644 --- a/scripts/releases/ios-prebuild/__docs__/README.md +++ b/scripts/releases/ios-prebuild/__docs__/README.md @@ -55,16 +55,22 @@ If no options are passed, the script executes all the steps in this order: ## Integrating in your project with Cocoapods -To use the prebuilt React Native Dependencies XCFrameworks in your iOS project, run pod install with the environment variable `RCT_USE_RN_DEP` set to `1`: +To use the prebuilt React Native Dependencies XCFrameworks in your iOS project, +run pod install with the environment variable `RCT_USE_RN_DEP` set to `1`: ```bash RCT_USE_RN_DEP=1 bundle exec pod install ``` -This can be combined with `RCT_USE_RN_DEP=1` to use both React Native and its dependencies as prebuilt frameworks. +This can be combined with `RCT_USE_RN_DEP=1` to use both React Native and its +dependencies as prebuilt frameworks. -For debugging and troubleshooting the Cocoapods scripts, you can use the following environment variables: +For debugging and troubleshooting the Cocoapods scripts, you can use the +following environment variables: -- `RCT_USE_RN_DEP`: If set to 1, it will use the release tarball from Maven instead of building from source. -- `RCT_USE_LOCAL_RN_DEP`: **TEST ONLY** If set, it will use a local tarball of ReactNativeDependencies if it exists. -- `RCT_DEPS_VERSION`: **TEST ONLY** If set, it will override the version of ReactNativeDependencies to be used. +- `RCT_USE_RN_DEP`: If set to 1, it will use the release tarball from Maven + instead of building from source. +- `RCT_USE_LOCAL_RN_DEP`: **TEST ONLY** If set, it will use a local tarball of + ReactNativeDependencies if it exists. +- `RCT_DEPS_VERSION`: **TEST ONLY** If set, it will override the version of + ReactNativeDependencies to be used. From a9d30e10f4fa2cffc5d9f86a53c44571cb61b4cc Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Wed, 19 Nov 2025 18:32:00 +0000 Subject: [PATCH 14/14] Add missing file --- .../scripts/ios-prebuild/__docs__/README.md | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/packages/react-native/scripts/ios-prebuild/__docs__/README.md b/packages/react-native/scripts/ios-prebuild/__docs__/README.md index 4427f3278816..6933a47c175d 100644 --- a/packages/react-native/scripts/ios-prebuild/__docs__/README.md +++ b/packages/react-native/scripts/ios-prebuild/__docs__/README.md @@ -1,10 +1,14 @@ # iOS Prebuild Scripts -This directory contains scripts for prebuilding React Native itself into XCFrameworks for iOS and related platforms. +This directory contains scripts for prebuilding React Native itself into +XCFrameworks for iOS and related platforms. ## Overview -These scripts automate the process of building React Native as a Swift Package and packaging it into XCFrameworks that can be distributed and consumed by iOS applications. The build process creates optimized frameworks for multiple architectures and platforms. +These scripts automate the process of building React Native as a Swift Package +and packaging it into XCFrameworks that can be distributed and consumed by iOS +applications. The build process creates optimized frameworks for multiple +architectures and platforms. ## Purpose @@ -119,9 +123,14 @@ issues when: ## Integrating in your project with Cocoapods -For consuming, debugging or troubleshooting when using Cocoapods scripts, you can use the following environment variables: - -- `RCT_USE_PREBUILT_RNCORE`: If set to 1, it will use the release tarball from Maven instead of building from source. -- `RCT_TESTONLY_RNCORE_TARBALL_PATH`: **TEST ONLY** If set, it will use a local tarball of RNCore if it exists. -- `RCT_TESTONLY_RNCORE_VERSION`: **TEST ONLY** If set, it will override the version of RNCore to be used. -- `RCT_SYMBOLICATE_PREBUILT_FRAMEWORKS`: If set to 1, it will download the dSYMs for the prebuilt RNCore frameworks and install these in the framework folders +For consuming, debugging or troubleshooting when using Cocoapods scripts, you +can use the following environment variables: + +- `RCT_USE_PREBUILT_RNCORE`: If set to 1, it will use the release tarball from + Maven instead of building from source. +- `RCT_TESTONLY_RNCORE_TARBALL_PATH`: **TEST ONLY** If set, it will use a local + tarball of RNCore if it exists. +- `RCT_TESTONLY_RNCORE_VERSION`: **TEST ONLY** If set, it will override the + version of RNCore to be used. +- `RCT_SYMBOLICATE_PREBUILT_FRAMEWORKS`: If set to 1, it will download the dSYMs + for the prebuilt RNCore frameworks and install these in the framework folders