From f48b9704ae90d9ec8adb5a408af9f878d3e6a44d Mon Sep 17 00:00:00 2001 From: Christoph Pader Date: Thu, 22 Oct 2026 19:08:54 +0100 Subject: [PATCH] build(ios)!: build with Swift Package Manager Nitro V1 only builds iOS through Swift Package Manager. Package.swift manifests now build the library and sqlite-vec. The library reads the app's nitroSQLite settings like the podspec did and adds iosSqliteFlags for custom SQLite definitions, and sqlite-vec registers itself when SwiftPM links it. The podspecs remain so React Native CLI can discover the packages. The example app moves to Swift Package Manager with patched manifests for react-native-screens and the clipboard module, and iOS CI resumes on Xcode 27. BREAKING CHANGE: iOS apps must build with Swift Package Manager and Xcode with Swift 6.4 or newer. Co-Authored-By: Claude Opus 5.5 --- .github/ci-paths.json | 7 +- .github/workflows/ci.yml | 21 +- .github/workflows/release.yml | 8 +- .github/workflows/test-harness-ios.yml | 32 +- .github/workflows/update-lockfiles.yml | 21 +- CONTRIBUTING.md | 5 +- example/.eslintrc.js | 2 + example/ios/.gitignore | 6 + .../.spm-injected.json | 187 ++ .../project.pbxproj | 253 +- .../xcschemes/NitroSQLiteExample.xcscheme | 209 ++ .../contents.xcworkspacedata | 10 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - example/ios/Podfile | 47 +- example/ios/Podfile.lock | 2321 ----------------- example/package.json | 2 +- .../Package.swift | 53 + .../RNNitroSqliteVec.podspec | 26 +- .../cpp/NitroSQLiteVecOnLoad.mm | 14 + .../package.json | 4 + .../react-native.config.js | 2 +- .../react-native-nitro-sqlite/Package.swift | 363 +++ .../RNNitroSQLite.podspec | 98 +- .../react-native-nitro-sqlite/ios/OnLoad.mm | 3 +- .../ios/RNNitroSQLite-Swift.h | 1 - .../react-native-nitro-sqlite/package.json | 7 + ...ct-native-clipboard+clipboard+1.16.3.patch | 46 + patches/react-native-screens+4.30.0.patch | 275 ++ scripts/ci-dependencies.test.ts | 28 +- scripts/ci-dependencies.ts | 25 +- scripts/ci.test.ts | 74 +- scripts/commit-release-lockfiles.ts | 7 +- scripts/sqlite-package-config.test.ts | 337 +++ scripts/test-podspec-threadsafe.rb | 361 --- 34 files changed, 1779 insertions(+), 3084 deletions(-) create mode 100644 example/ios/.gitignore create mode 100644 example/ios/NitroSQLiteExample.xcodeproj/.spm-injected.json delete mode 100644 example/ios/NitroSQLiteExample.xcworkspace/contents.xcworkspacedata delete mode 100644 example/ios/NitroSQLiteExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 example/ios/Podfile.lock create mode 100644 packages/react-native-nitro-sqlite-vec/Package.swift create mode 100644 packages/react-native-nitro-sqlite-vec/cpp/NitroSQLiteVecOnLoad.mm create mode 100644 packages/react-native-nitro-sqlite/Package.swift delete mode 100644 packages/react-native-nitro-sqlite/ios/RNNitroSQLite-Swift.h create mode 100644 patches/@react-native-clipboard+clipboard+1.16.3.patch create mode 100644 patches/react-native-screens+4.30.0.patch create mode 100644 scripts/sqlite-package-config.test.ts delete mode 100644 scripts/test-podspec-threadsafe.rb diff --git a/.github/ci-paths.json b/.github/ci-paths.json index c0faedd9..abc96865 100644 --- a/.github/ci-paths.json +++ b/.github/ci-paths.json @@ -132,7 +132,8 @@ "packages/react-native-nitro-sqlite-vec/cpp/**", "packages/react-native-nitro-sqlite/RNNitroSQLite.podspec", "packages/react-native-nitro-sqlite-vec/RNNitroSqliteVec.podspec", - "example/Gemfile*", + "packages/react-native-nitro-sqlite/Package.swift", + "packages/react-native-nitro-sqlite-vec/Package.swift", "bun.lock", "package.json", "example/package.json", @@ -140,12 +141,14 @@ "packages/react-native-nitro-sqlite-vec/package.json", "patches/react-native-nitro-modules*", "patches/@react-native-harness*", + "patches/react-native-screens*", + "patches/@react-native-clipboard*", "example/react-native.config.js", "packages/react-native-nitro-sqlite/react-native.config.js", "packages/react-native-nitro-sqlite-vec/react-native.config.js", "packages/react-native-nitro-sqlite/nitro.json", "!packages/react-native-nitro-sqlite/src/__tests__/**", - "scripts/test-podspec-threadsafe.rb", + "scripts/sqlite-package-config.test.ts", "example/index.js", "example/babel.config*.js", "example/app.json", diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3ac78716..183c9f85 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,7 +50,6 @@ jobs: android_configuration: ${{ steps.select.outputs.android_configuration }} ios: ${{ steps.select.outputs.ios }} macos: ${{ steps.select.outputs.macos }} - ios_pods: ${{ steps.pods.outputs.ios_pods }} macos_pods: ${{ steps.pods.outputs.macos_pods }} steps: - uses: actions/checkout@v7 @@ -89,7 +88,6 @@ jobs: name: ci-lockfiles path: | bun.lock - example/ios/Podfile.lock example/macos/Podfile.lock retention-days: 1 - name: Require committed dependency resolutions @@ -99,7 +97,7 @@ jobs: git diff --exit-code -- bun.lock - name: Select native lockfile checks id: pods - if: steps.select.outputs.dependencies == 'true' && (steps.select.outputs.ios == 'true' || steps.select.outputs.macos == 'true') + if: steps.select.outputs.dependencies == 'true' && steps.select.outputs.macos == 'true' run: node scripts/ci-dependencies.ts env: CI_BASE_SHA: ${{ github.event.pull_request.base.sha || github.event.before || github.sha }} @@ -140,10 +138,9 @@ jobs: - name: Test C++ database lifecycle and SQLite symbols if: steps.select.outputs.cpp_tests == 'true' run: bash scripts/test-cpp.sh - - name: Test SQLite thread-safety pod configuration - # Paused because Nitro V1 doesn't generate the CocoaPods files that the podspec loads. - if: false && steps.select.outputs.ios == 'true' - run: ruby scripts/test-podspec-threadsafe.rb + - name: Test SQLite Swift package configuration + if: steps.select.outputs.ios == 'true' + run: node --test scripts/sqlite-package-config.test.ts - name: Check documentation if: steps.select.outputs.docs == 'true' run: | @@ -153,15 +150,12 @@ jobs: lockfiles: name: Native lockfiles needs: checks - # Paused because Nitro V1 doesn't support CocoaPods. Remove `false &&` to resume it. + # Paused until Nitro V1 supports React Native macOS. Remove `false &&` to resume it. if: >- false && github.event_name != 'push' && !github.event.pull_request.draft && - (needs.checks.outputs.ios_pods == 'true' || needs.checks.outputs.macos_pods == 'true') + needs.checks.outputs.macos_pods == 'true' uses: ./.github/workflows/update-lockfiles.yml - with: - ios: ${{ needs.checks.outputs.ios_pods == 'true' }} - macos: ${{ needs.checks.outputs.macos_pods == 'true' }} android: name: Android @@ -179,10 +173,7 @@ jobs: ios: name: iOS needs: [checks, lockfiles] - # Paused because Nitro V1 builds iOS with Swift Package Manager, which this workflow doesn't set up yet. - # Remove `false &&` to resume it. if: >- - false && !cancelled() && needs.checks.result == 'success' && (needs.lockfiles.result == 'success' || needs.lockfiles.result == 'skipped') && github.event_name != 'push' && !github.event.pull_request.draft && diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 049ea598..984e4f46 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -94,7 +94,7 @@ jobs: bun run sync:lockfile bun run check:lockfile bun install --frozen-lockfile - # The CocoaPods steps are paused because Nitro V1 doesn't support CocoaPods. + # The macOS steps are paused until Nitro V1 supports React Native macOS. - uses: ruby/setup-ruby@v1 if: false with: @@ -104,11 +104,9 @@ jobs: - name: Select Xcode if: false run: sudo xcode-select -s "/Applications/Xcode_26.5.app/Contents/Developer" - - name: Update iOS and macOS lockfiles + - name: Update macOS lockfile if: false - run: | - bun example pods - bun example pods:macos + run: bun example pods:macos - name: Commit lockfiles and optional announcement run: node scripts/commit-release-lockfiles.ts env: diff --git a/.github/workflows/test-harness-ios.yml b/.github/workflows/test-harness-ios.yml index aa931f90..26c89184 100644 --- a/.github/workflows/test-harness-ios.yml +++ b/.github/workflows/test-harness-ios.yml @@ -12,17 +12,16 @@ permissions: jobs: test: - name: iOS integration tests, ${{ matrix.config.name }}, Xcode ${{ matrix.config.xcode }} - runs-on: macos-26 + name: iOS integration tests, Xcode ${{ matrix.config.xcode }} + # Nitro V1 requires Swift 6.4, which GitHub provides in its Xcode 27 preview image. + runs-on: xcode-27 timeout-minutes: 40 strategy: matrix: - config: ${{ fromJSON(inputs.full && '[{"name":"static_frameworks","frameworks":"static","xcode":"26.5"},{"name":"no_frameworks","frameworks":"","xcode":"26.5"},{"name":"static_frameworks","frameworks":"static","xcode":"26.2"}]' || '[{"name":"static_frameworks","frameworks":"static","xcode":"26.5"},{"name":"no_frameworks","frameworks":"","xcode":"26.5"}]') }} + config: ${{ fromJSON(inputs.full && '[{"xcode":"27.0"},{"xcode":"27.1"}]' || '[{"xcode":"27.0"}]') }} env: - USE_CCACHE: 1 - USE_FRAMEWORKS: ${{ matrix.config.frameworks }} - IOS_SIMULATOR_NAME: iPhone 17 Pro - IOS_SIMULATOR_OS: ${{ matrix.config.xcode }} + IOS_SIMULATOR_NAME: iPhone 18 Pro + IOS_SIMULATOR_OS: '27.0' steps: - uses: actions/checkout@v7 - uses: actions/download-artifact@v8 @@ -41,7 +40,7 @@ jobs: uses: hendrikmuhs/ccache-action@v1.2 with: max-size: 500M - key: ${{ runner.os }}-${{ matrix.config.name }}-ccache-example-ios-xcode${{ matrix.config.xcode }} + key: ${{ runner.os }}-ccache-example-ios-xcode${{ matrix.config.xcode }} create-symlink: true - name: Setup ccache behavior run: | @@ -50,13 +49,6 @@ jobs: echo "CCACHE_DEPEND=true" >> $GITHUB_ENV echo "CCACHE_INODECACHE=true" >> $GITHUB_ENV - - name: Setup Ruby (bundle) - uses: ruby/setup-ruby@v1 - with: - ruby-version: 3.3.0 - bundler-cache: true - working-directory: example - - name: Select Xcode ${{ matrix.config.xcode }} run: sudo xcode-select -s "/Applications/Xcode_${{ matrix.config.xcode }}.app/Contents/Developer" @@ -79,9 +71,9 @@ jobs: xcrun simctl boot "$simulator_udid" fi - - name: Install Pods + - name: Generate Swift packages working-directory: example - run: bun pods + run: bun spm - name: Build App working-directory: example/ios @@ -90,7 +82,7 @@ jobs: xcodebuild \ CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ \ -derivedDataPath build/DerivedData -UseModernBuildSystem=YES \ - -workspace NitroSQLiteExample.xcworkspace \ + -project NitroSQLiteExample.xcodeproj \ -scheme NitroSQLiteExample \ -sdk iphonesimulator \ -configuration Debug \ @@ -104,6 +96,10 @@ jobs: timeout-minutes: 10 run: xcrun simctl bootstatus "$IOS_SIMULATOR_UDID" -b + # react-native-harness 1.5.0 fails on Xcode 27, where `simctl appinfo` errors for apps that are not installed. + - name: Install app on the iOS simulator + run: xcrun simctl install "$IOS_SIMULATOR_UDID" example/ios/build/DerivedData/Build/Products/Debug-iphonesimulator/NitroSQLiteExample.app + - name: Run iOS integration tests uses: callstackincubator/react-native-harness@v1.6.0 env: diff --git a/.github/workflows/update-lockfiles.yml b/.github/workflows/update-lockfiles.yml index 55a1ac0d..b6802d2f 100644 --- a/.github/workflows/update-lockfiles.yml +++ b/.github/workflows/update-lockfiles.yml @@ -2,13 +2,6 @@ name: Check native lockfiles on: workflow_call: - inputs: - ios: - type: boolean - default: false - macos: - type: boolean - default: false permissions: contents: read @@ -38,12 +31,7 @@ jobs: working-directory: example - name: Select Xcode 26.5 run: sudo xcode-select -s '/Applications/Xcode_26.5.app/Contents/Developer' - - name: Refresh iOS lockfile - if: inputs.ios - working-directory: example - run: bun pods - name: Refresh macOS lockfile - if: inputs.macos working-directory: example run: bun pods:macos - name: Attach refreshed native lockfiles @@ -52,17 +40,10 @@ jobs: with: name: native-lockfiles path: | - example/ios/Podfile.lock example/macos/Podfile.lock example/Gemfile.lock retention-days: 1 - name: Require committed native dependency resolutions - env: - CHECK_IOS: ${{ inputs.ios }} - CHECK_MACOS: ${{ inputs.macos }} run: | - lockfiles=() - if [[ "$CHECK_IOS" == true ]]; then lockfiles+=(example/ios/Podfile.lock); fi - if [[ "$CHECK_MACOS" == true ]]; then lockfiles+=(example/macos/Podfile.lock); fi - ruby scripts/ci-pod-lockfiles.rb "${lockfiles[@]}" + ruby scripts/ci-pod-lockfiles.rb example/macos/Podfile.lock git diff --exit-code -- example/Gemfile.lock diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 03ac47de..2e97d6ea 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -24,9 +24,10 @@ To run the example app on Android: bun example android ``` -To run the example app on iOS: +To run the example app on iOS, generate its Swift packages first. Run this again after changing native dependencies: ```sh +bun example spm bun example ios ``` @@ -49,7 +50,7 @@ Remember to add tests for your change if possible. Run the unit tests by: bun test ``` -To edit the Objective-C files, open `example/ios/SequelExample.xcworkspace` in XCode and find the source files at `Pods > Development Pods > react-native-nitro-sqlite`. +To edit the Objective-C++ and C++ files, open `example/ios/NitroSQLiteExample.xcodeproj` in Xcode and find the source files in the `RNNitroSQLite` package. To edit the Kotlin files, open `example/android` in Android studio and find the source files at `rnnitrosqlite` under `Android`. diff --git a/example/.eslintrc.js b/example/.eslintrc.js index f937b3da..4132d895 100644 --- a/example/.eslintrc.js +++ b/example/.eslintrc.js @@ -1,6 +1,8 @@ module.exports = { root: true, extends: '../config/.eslintrc.js', + // SwiftPM links native packages under ios/build, including this repository's packages. + ignorePatterns: ['ios/build'], parserOptions: { project: true, tsconfigRootDir: __dirname, diff --git a/example/ios/.gitignore b/example/ios/.gitignore new file mode 100644 index 00000000..c1e540af --- /dev/null +++ b/example/ios/.gitignore @@ -0,0 +1,6 @@ + +# SPM – auto-generated at build time (do not commit) +Package.resolved +build/generated/ +build/xcframeworks/ +.build/ diff --git a/example/ios/NitroSQLiteExample.xcodeproj/.spm-injected.json b/example/ios/NitroSQLiteExample.xcodeproj/.spm-injected.json new file mode 100644 index 00000000..5d6588f7 --- /dev/null +++ b/example/ios/NitroSQLiteExample.xcodeproj/.spm-injected.json @@ -0,0 +1,187 @@ +{ + "rootUuid": "83CBB9F71A601CBA00E9B192", + "target": "NitroSQLiteExample", + "targetUuid": "13B07F861A680F5B00A75B9A", + "injectedUuids": [ + "17CA21E30A8FFCB9D0FC1E35", + "27BDE9D743CB351F53154525", + "3AFDEFB917B01458307FDE0A", + "3F1E298E4A2D7CA403A328B5", + "50A8621D202A6CFB97E2C1B5", + "512EBECF5434FD7A6AF7C967", + "658A88AFBFD620F8BC6F91BA", + "69A7AB74931112BD2779B631", + "8332BE36B9C49BD2E49347C1", + "920F69A9DF98D37C8308D020", + "947DD5EF3BE079FB7F5AFF87", + "94F7C9B714A718310DA6BE9C", + "A700952B9A737913514EB28F", + "B174F870C259554596A4373B", + "C2FECF1430FDAAE3BF355839", + "D6BD17EA9023C9F39246B71F", + "F3857EDDA38AFC0011322D6D" + ], + "createdArrayFields": [ + { + "container": "project", + "key": "packageReferences" + }, + { + "container": "target", + "key": "packageProductDependencies" + } + ], + "buildSettingChanges": [ + { + "configUuid": "13B07F941A680F5B00A75B9A", + "createdArrayKeys": [ + "HEADER_SEARCH_PATHS", + "SWIFT_ACTIVE_COMPILATION_CONDITIONS", + "FRAMEWORK_SEARCH_PATHS" + ], + "appendedArrayValues": { + "OTHER_LDFLAGS": [ + "\"$(RN_SPM_REACT_BINARY)\"", + "\"$(RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY)\"", + "\"$(RN_SPM_HERMES_BINARY)\"" + ] + }, + "createdScalars": [ + "CLANG_CXX_LANGUAGE_STANDARD", + "REACT_NATIVE_PATH", + "RN_SPM_FLAVOR", + "\"RN_SPM_REACT_FRAMEWORK[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_BINARY[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_SEARCH_PATH[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_FRAMEWORK[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_BINARY[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_SEARCH_PATH[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_FRAMEWORK[sdk=macosx*]\"", + "\"RN_SPM_REACT_BINARY[sdk=macosx*]\"", + "\"RN_SPM_REACT_SEARCH_PATH[sdk=macosx*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=appletvos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=appletvos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=appletvos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=appletvsimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=appletvsimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=appletvsimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=macosx*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=macosx*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=macosx*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=xros*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=xros*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=xros*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=xrsimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=xrsimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=xrsimulator*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=appletvos*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=appletvos*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=appletvos*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=appletvsimulator*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=appletvsimulator*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=appletvsimulator*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=iphoneos*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=iphoneos*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=iphoneos*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=iphonesimulator*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=iphonesimulator*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=iphonesimulator*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=macosx*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=macosx*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=macosx*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=xros*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=xros*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=xros*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=xrsimulator*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=xrsimulator*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=xrsimulator*]\"" + ], + "replacedScalars": {} + }, + { + "configUuid": "13B07F951A680F5B00A75B9A", + "createdArrayKeys": [ + "HEADER_SEARCH_PATHS", + "FRAMEWORK_SEARCH_PATHS" + ], + "appendedArrayValues": { + "OTHER_LDFLAGS": [ + "\"$(RN_SPM_REACT_BINARY)\"", + "\"$(RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY)\"", + "\"$(RN_SPM_HERMES_BINARY)\"" + ] + }, + "createdScalars": [ + "CLANG_CXX_LANGUAGE_STANDARD", + "REACT_NATIVE_PATH", + "RN_SPM_FLAVOR", + "\"RN_SPM_REACT_FRAMEWORK[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_BINARY[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_SEARCH_PATH[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_FRAMEWORK[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_BINARY[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_SEARCH_PATH[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_FRAMEWORK[sdk=macosx*]\"", + "\"RN_SPM_REACT_BINARY[sdk=macosx*]\"", + "\"RN_SPM_REACT_SEARCH_PATH[sdk=macosx*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=appletvos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=appletvos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=appletvos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=appletvsimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=appletvsimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=appletvsimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=macosx*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=macosx*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=macosx*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=xros*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=xros*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=xros*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=xrsimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=xrsimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=xrsimulator*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=appletvos*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=appletvos*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=appletvos*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=appletvsimulator*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=appletvsimulator*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=appletvsimulator*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=iphoneos*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=iphoneos*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=iphoneos*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=iphonesimulator*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=iphonesimulator*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=iphonesimulator*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=macosx*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=macosx*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=macosx*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=xros*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=xros*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=xros*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=xrsimulator*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=xrsimulator*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=xrsimulator*]\"" + ], + "replacedScalars": {} + } + ], + "generatedSources": {}, + "scriptPhases": {}, + "artifactsVersionOverride": null, + "configCommand": null, + "scheme": { + "file": "NitroSQLiteExample.xcscheme", + "created": false + } +} diff --git a/example/ios/NitroSQLiteExample.xcodeproj/project.pbxproj b/example/ios/NitroSQLiteExample.xcodeproj/project.pbxproj index aa4e212f..14a1b803 100644 --- a/example/ios/NitroSQLiteExample.xcodeproj/project.pbxproj +++ b/example/ios/NitroSQLiteExample.xcodeproj/project.pbxproj @@ -8,13 +8,18 @@ /* Begin PBXBuildFile section */ 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; - 29068BA81B410DFAFD515E63 /* Pods_NitroSQLiteExample.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3E89C92C507841F368080BD /* Pods_NitroSQLiteExample.framework */; }; 4A947A190A327B2E26F1CC50 /* BenchmarkMemory.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A947A180A327B2E26F1CC50 /* BenchmarkMemory.m */; }; 761780ED2CA45674006654EE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761780EC2CA45674006654EE /* AppDelegate.swift */; }; 7B5735B8E367752583C44170 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; A7EB6D102DCB00010003AF01 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7EB6D0F2DCB00010003AF01 /* SceneDelegate.swift */; }; D463F2F53B094E469119C69E /* load-file-with-error.sql in Resources */ = {isa = PBXBuildFile; fileRef = D463F2F53B094E469119C69F /* load-file-with-error.sql */; }; + 94F7C9B714A718310DA6BE9C /* ReactHeaders in Frameworks */ = {isa = PBXBuildFile; productRef = 512EBECF5434FD7A6AF7C967 /* ReactHeaders */;}; + 17CA21E30A8FFCB9D0FC1E35 /* ReactNativeHeaders in Frameworks */ = {isa = PBXBuildFile; productRef = 920F69A9DF98D37C8308D020 /* ReactNativeHeaders */;}; + 69A7AB74931112BD2779B631 /* ReactNativeDependenciesHeaders in Frameworks */ = {isa = PBXBuildFile; productRef = 8332BE36B9C49BD2E49347C1 /* ReactNativeDependenciesHeaders */;}; + D6BD17EA9023C9F39246B71F /* Autolinked in Frameworks */ = {isa = PBXBuildFile; productRef = 3AFDEFB917B01458307FDE0A /* Autolinked */;}; + 3F1E298E4A2D7CA403A328B5 /* ReactCodegen in Frameworks */ = {isa = PBXBuildFile; productRef = 947DD5EF3BE079FB7F5AFF87 /* ReactCodegen */;}; + 50A8621D202A6CFB97E2C1B5 /* ReactAppDependencyProvider in Frameworks */ = {isa = PBXBuildFile; productRef = F3857EDDA38AFC0011322D6D /* ReactAppDependencyProvider */;}; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -22,13 +27,10 @@ 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = NitroSQLiteExample/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = NitroSQLiteExample/Info.plist; sourceTree = ""; }; 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = PrivacyInfo.xcprivacy; path = NitroSQLiteExample/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 3B4392A12AC88292D35C810B /* Pods-NitroSQLiteExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NitroSQLiteExample.debug.xcconfig"; path = "Target Support Files/Pods-NitroSQLiteExample/Pods-NitroSQLiteExample.debug.xcconfig"; sourceTree = ""; }; 4A947A180A327B2E26F1CC50 /* BenchmarkMemory.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = BenchmarkMemory.m; path = NitroSQLiteExample/BenchmarkMemory.m; sourceTree = ""; }; - 5709B34CF0A7D63546082F79 /* Pods-NitroSQLiteExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NitroSQLiteExample.release.xcconfig"; path = "Target Support Files/Pods-NitroSQLiteExample/Pods-NitroSQLiteExample.release.xcconfig"; sourceTree = ""; }; 761780EC2CA45674006654EE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = NitroSQLiteExample/AppDelegate.swift; sourceTree = ""; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = NitroSQLiteExample/LaunchScreen.storyboard; sourceTree = ""; }; A7EB6D0F2DCB00010003AF01 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SceneDelegate.swift; path = NitroSQLiteExample/SceneDelegate.swift; sourceTree = ""; }; - C3E89C92C507841F368080BD /* Pods_NitroSQLiteExample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_NitroSQLiteExample.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D463F2F53B094E469119C69F /* load-file-with-error.sql */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "load-file-with-error.sql"; path = "NitroSQLiteExample/load-file-with-error.sql"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; /* End PBXFileReference section */ @@ -38,7 +40,12 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 29068BA81B410DFAFD515E63 /* Pods_NitroSQLiteExample.framework in Frameworks */, + 94F7C9B714A718310DA6BE9C /* ReactHeaders in Frameworks */, + 17CA21E30A8FFCB9D0FC1E35 /* ReactNativeHeaders in Frameworks */, + 69A7AB74931112BD2779B631 /* ReactNativeDependenciesHeaders in Frameworks */, + D6BD17EA9023C9F39246B71F /* Autolinked in Frameworks */, + 3F1E298E4A2D7CA403A328B5 /* ReactCodegen in Frameworks */, + 50A8621D202A6CFB97E2C1B5 /* ReactAppDependencyProvider in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -63,8 +70,6 @@ 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { isa = PBXGroup; children = ( - ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - C3E89C92C507841F368080BD /* Pods_NitroSQLiteExample.framework */, ); name = Frameworks; sourceTree = ""; @@ -83,7 +88,6 @@ 832341AE1AAA6A7D00B99B32 /* Libraries */, 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, - BBD78D7AC51CEA395F1C20DB /* Pods */, ); indentWidth = 2; sourceTree = ""; @@ -98,29 +102,27 @@ name = Products; sourceTree = ""; }; - BBD78D7AC51CEA395F1C20DB /* Pods */ = { - isa = PBXGroup; - children = ( - 3B4392A12AC88292D35C810B /* Pods-NitroSQLiteExample.debug.xcconfig */, - 5709B34CF0A7D63546082F79 /* Pods-NitroSQLiteExample.release.xcconfig */, - ); - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 13B07F861A680F5B00A75B9A /* NitroSQLiteExample */ = { + packageProductDependencies = ( + 512EBECF5434FD7A6AF7C967 /* ReactHeaders */, + 920F69A9DF98D37C8308D020 /* ReactNativeHeaders */, + 8332BE36B9C49BD2E49347C1 /* ReactNativeDependenciesHeaders */, + 3AFDEFB917B01458307FDE0A /* Autolinked */, + 947DD5EF3BE079FB7F5AFF87 /* ReactCodegen */, + F3857EDDA38AFC0011322D6D /* ReactAppDependencyProvider */, + ); isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "NitroSQLiteExample" */; buildPhases = ( - C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */, + 658A88AFBFD620F8BC6F91BA /* Sync SPM Autolinking */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, + B174F870C259554596A4373B /* Embed React Native Flavored Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */, - E235C05ADACE081382539298 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -135,6 +137,11 @@ /* Begin PBXProject section */ 83CBB9F71A601CBA00E9B192 /* Project object */ = { + packageReferences = ( + 27BDE9D743CB351F53154525 /* XCLocalSwiftPackageReference "build/xcframeworks" */, + C2FECF1430FDAAE3BF355839 /* XCLocalSwiftPackageReference "build/generated/autolinking" */, + A700952B9A737913514EB28F /* XCLocalSwiftPackageReference "build/generated/ios" */, + ); isa = PBXProject; attributes = { LastUpgradeCheck = 1210; @@ -193,24 +200,7 @@ 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-NitroSQLiteExample/Pods-NitroSQLiteExample-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-NitroSQLiteExample/Pods-NitroSQLiteExample-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NitroSQLiteExample/Pods-NitroSQLiteExample-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = { + 658A88AFBFD620F8BC6F91BA /* Sync SPM Autolinking */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -218,36 +208,40 @@ inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; + name = "Sync SPM Autolinking"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-NitroSQLiteExample-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; + shellPath = /bin/bash; + shellScript = "set -euo pipefail\n\n# ---------------------------------------------------------------------------\n# Resolve a node binary and the react-native package dir at BUILD TIME.\n# ---------------------------------------------------------------------------\nNODE_BINARY=\"${NODE_BINARY:-}\"\nif [ -z \"$NODE_BINARY\" ]; then\n # Source RN's standard app-local node-path files. They reference vars that\n # may be unset and may return non-zero, so relax nounset AND errexit while\n # sourcing — a buggy user .xcode.env must degrade to PATH-based node\n # resolution below, not silently abort every build.\n set +eu\n if [ -f \"$SRCROOT/.xcode.env\" ]; then\n . \"$SRCROOT/.xcode.env\"\n fi\n if [ -f \"$SRCROOT/.xcode.env.local\" ]; then\n . \"$SRCROOT/.xcode.env.local\"\n fi\n set -eu\n NODE_BINARY=\"${NODE_BINARY:-}\"\nfi\nif [ -z \"$NODE_BINARY\" ]; then\n NODE_BINARY=\"$(command -v node 2>/dev/null || true)\"\nfi\n\n# Resolve react-native's dir FROM THE APP (require.resolve), not a\n# generation-time baked path — the baked path goes stale in pnpm / hoisted\n# stores. Fall back to the baked path if resolution fails or the resolved dir\n# has no setup-apple-spm.js.\nRN_DIR=\"\"\nif [ -n \"$NODE_BINARY\" ]; then\n RN_DIR=\"$(cd \"$SRCROOT\" && \"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json'))\" 2>/dev/null || true)\"\nfi\nif [ -z \"$RN_DIR\" ] || [ ! -f \"$RN_DIR/scripts/setup-apple-spm.js\" ]; then\n RN_DIR=\"../../node_modules/react-native\"\nfi\n\nSTAMP=\"$SRCROOT/build/generated/autolinking/.spm-sync-stamp\"\nSTALE=0\n\n# Find project root (where package.json lives — may be an ancestor of SRCROOT)\nPROJECT_ROOT=\"$SRCROOT\"\nwhile [ \"$PROJECT_ROOT\" != \"/\" ] && [ ! -f \"$PROJECT_ROOT/package.json\" ]; do\n PROJECT_ROOT=\"$(dirname \"$PROJECT_ROOT\")\"\ndone\nif [ ! -f \"$PROJECT_ROOT/package.json\" ]; then\n PROJECT_ROOT=\"$SRCROOT\"\nfi\n\n# Check 1: dependency inputs (covers app projects after any package manager install)\nfor INPUT in \\\n \"$PROJECT_ROOT/package.json\" \\\n \"$PROJECT_ROOT/react-native.config.js\"; do\n if [ -f \"$INPUT\" ] && [ \"$INPUT\" -nt \"$STAMP\" ]; then\n STALE=1\n break\n fi\ndone\n\n# Check workspace lockfiles and package-manager metadata. These cover package\n# managers that do not reliably bump node_modules mtimes, and Yarn PnP projects\n# that do not have node_modules at all.\nif [ \"$STALE\" -eq 0 ]; then\n DIR=\"$PROJECT_ROOT\"\n while [ \"$DIR\" != \"/\" ]; do\n for INPUT in \\\n \"$DIR/package-lock.json\" \\\n \"$DIR/npm-shrinkwrap.json\" \\\n \"$DIR/yarn.lock\" \\\n \"$DIR/pnpm-lock.yaml\" \\\n \"$DIR/bun.lock\" \\\n \"$DIR/bun.lockb\" \\\n \"$DIR/.pnp.cjs\" \\\n \"$DIR/.pnp.loader.mjs\"; do\n if [ -f \"$INPUT\" ] && [ \"$INPUT\" -nt \"$STAMP\" ]; then\n STALE=1\n break\n fi\n done\n if [ \"$STALE\" -eq 1 ]; then\n break\n fi\n DIR=\"$(dirname \"$DIR\")\"\n done\nfi\n\n# Check node_modules mtime. In monorepos, node_modules may be hoisted to any\n# ancestor between the app package and the workspace root.\nif [ \"$STALE\" -eq 0 ]; then\n DIR=\"$PROJECT_ROOT\"\n while [ \"$DIR\" != \"/\" ]; do\n NM_DIR=\"$DIR/node_modules\"\n if [ -d \"$NM_DIR\" ] && [ \"$NM_DIR\" -nt \"$STAMP\" ]; then\n STALE=1\n break\n fi\n DIR=\"$(dirname \"$DIR\")\"\n done\nfi\n\n# Also check the app root directly when SRCROOT is not the package root.\nif [ \"$STALE\" -eq 0 ] && [ \"$SRCROOT\" != \"$PROJECT_ROOT\" ]; then\n if [ -d \"$SRCROOT/node_modules\" ] && [ \"$SRCROOT/node_modules\" -nt \"$STAMP\" ]; then\n STALE=1\n fi\nfi\n\n# Check 1.5: watched paths (mixed dirs AND files). Dirs catch add/remove of\n# source files in spm.modules and autolinked deps (dir mtime updates on both);\n# files catch edits to a dep's checked-in Package.swift / plugin manifests that\n# would not bump any parent dir mtime. A path that has VANISHED (renamed/moved\n# module root) forces a re-sync so the autolinker surfaces the real, actionable\n# config error rather than the build failing later on dangling-symlink noise.\nWATCH_FILE=\"$SRCROOT/build/generated/autolinking/.spm-sync-watch-paths\"\nif [ \"$STALE\" -eq 0 ] && [ -f \"$WATCH_FILE\" ]; then\n while IFS= read -r P; do\n [ -z \"$P\" ] && continue\n if [ -d \"$P\" ]; then\n # .swiftpm holds Xcode's own per-user scheme state, which it rewrites\n # during a build — reading it as a change makes every IDE build re-sync.\n if [ -n \"$(find \"$P\" -name .swiftpm -prune -o -newer \"$STAMP\" -print -quit 2>/dev/null)\" ]; then\n STALE=1\n break\n fi\n elif [ -f \"$P\" ]; then\n if [ \"$P\" -nt \"$STAMP\" ]; then\n STALE=1\n break\n fi\n else\n STALE=1\n break\n fi\n done < \"$WATCH_FILE\"\nfi\n\n# Check 2: codegen spec files changed via git (covers monorepo after git pull)\nif [ \"$STALE\" -eq 0 ] && [ -f \"$STAMP\" ]; then\n STAMP_TIME=$(stat -f %m \"$STAMP\" 2>/dev/null || stat -c %Y \"$STAMP\" 2>/dev/null || echo 0)\n LATEST_SPEC_COMMIT=$(git -C \"$SRCROOT\" log -1 --format=%ct -- '*.js' '*.ts' 2>/dev/null || echo 0)\n if [ \"$LATEST_SPEC_COMMIT\" -gt \"$STAMP_TIME\" ]; then\n STALE=1\n fi\nfi\n\nif [ ! -f \"$STAMP\" ]; then\n STALE=1\nfi\n\n# Re-sync codegen + autolinking when a dependency input changed. Runtime\n# framework slots and Xcode linker settings are only changed by spm update.\nif [ \"$STALE\" -eq 1 ]; then\n echo \"SPM sync inputs changed — re-syncing (codegen + autolinking)...\"\n\n WITH_ENVIRONMENT=\"$RN_DIR/scripts/xcode/with-environment.sh\"\n\n if [ -f \"$WITH_ENVIRONMENT\" ]; then\n # with-environment.sh references PODS_ROOT and $1, which may be unset.\n # Temporarily disable nounset to avoid failures when sourcing.\n export PODS_ROOT=\"${PODS_ROOT:-$SRCROOT}\"\n set +u\n . \"$WITH_ENVIRONMENT\"\n set -u\n fi\n\n cd \"$SRCROOT\"\n # `|| RC=$?` so a non-zero exit is CAPTURED rather than aborting the phase\n # under `set -e` — the whole point is to branch on the code below (2 = fail\n # the build with a scaffold hint; other non-zero = warn but don't break).\n RC=0\n if [ -n \"$NODE_BINARY\" ] && [ -f \"$RN_DIR/scripts/setup-apple-spm.js\" ]; then\n # Direct, dependency-free dispatch (no `npx react-native`, which needs\n # @react-native-community/cli).\n \"$NODE_BINARY\" \"$RN_DIR/scripts/setup-apple-spm.js\" sync || RC=$?\n elif command -v npx >/dev/null 2>&1; then\n npx react-native spm sync || RC=$?\n else\n echo \"warning: node/npx not found — skipping SPM sync\"\n fi\n if [ \"$RC\" -eq 2 ]; then\n # Exit 2 = an autolinked community dependency has no Package.swift. The\n # autolinker already printed an `error:` line per dep (so Xcode shows them\n # and the fix). Fail the build — the developer must run\n # `npx react-native spm scaffold` from a terminal to generate the manifest.\n exit 1\n elif [ \"$RC\" -ne 0 ]; then\n echo \"warning: SPM sync failed — build may use stale codegen/autolinking\"\n fi\nfi\n\n"; }; - E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = { + B174F870C259554596A4373B /* Embed React Native Flavored Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-NitroSQLiteExample/Pods-NitroSQLiteExample-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + inputPaths = ( + "$(SRCROOT)/build/xcframeworks/.artifact-stamp", + "$(RN_SPM_REACT_FRAMEWORK)", + "$(RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK)", + "$(RN_SPM_HERMES_FRAMEWORK)", + ); + name = "Embed React Native Flavored Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-NitroSQLiteExample/Pods-NitroSQLiteExample-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(TARGET_BUILD_DIR)/$(FRAMEWORKS_FOLDER_PATH)/React.framework", + "$(TARGET_BUILD_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactNativeDependencies.framework", + "$(TARGET_BUILD_DIR)/$(FRAMEWORKS_FOLDER_PATH)/hermesvm.framework", ); runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NitroSQLiteExample/Pods-NitroSQLiteExample-resources.sh\"\n"; - showEnvVarsInLog = 0; + shellPath = /bin/bash; + shellScript = "set -euo pipefail\n\ndestination=\"$TARGET_BUILD_DIR/$FRAMEWORKS_FOLDER_PATH\"\nmkdir -p \"$destination\"\n\nvalidate_framework() {\n source=\"$1\"\n name=\"$2\"\n if [ -z \"$source\" ] || [ ! -d \"$source\" ]; then\n echo \"error: React Native SwiftPM framework '$name' is unavailable for configuration '$CONFIGURATION' and SDK '$SDK_NAME': $source\"\n exit 1\n fi\n binary=\"${name%.framework}\"\n if [ ! -e \"$source/$binary\" ] && [ ! -e \"$source/Versions/Current/$binary\" ]; then\n echo \"error: React Native SwiftPM framework '$name' is invalid for configuration '$CONFIGURATION': expected $source/$binary or $source/Versions/Current/$binary\"\n exit 1\n fi\n}\n\ncopy_and_sign() {\n source=\"$1\"\n name=\"$2\"\n /usr/bin/rsync -a --delete \"$source/\" \"$destination/$name/\"\n if [ \"${CODE_SIGNING_ALLOWED:-YES}\" != \"NO\" ]; then\n identity=\"${EXPANDED_CODE_SIGN_IDENTITY:--}\"\n if [ \"$identity\" = \"-\" ]; then\n /usr/bin/codesign --force --sign - --timestamp=none --preserve-metadata=identifier,entitlements,flags \"$destination/$name\"\n else\n /usr/bin/codesign --force --sign \"$identity\" --preserve-metadata=identifier,entitlements,flags \"$destination/$name\"\n fi\n fi\n}\n\nvalidate_framework \"${RN_SPM_REACT_FRAMEWORK:-}\" \"React.framework\"\nvalidate_framework \"${RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK:-}\" \"ReactNativeDependencies.framework\"\nvalidate_framework \"${RN_SPM_HERMES_FRAMEWORK:-}\" \"hermesvm.framework\"\ncopy_and_sign \"${RN_SPM_REACT_FRAMEWORK:-}\" \"React.framework\"\ncopy_and_sign \"${RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK:-}\" \"ReactNativeDependencies.framework\"\ncopy_and_sign \"${RN_SPM_HERMES_FRAMEWORK:-}\" \"hermesvm.framework\"\n"; }; /* End PBXShellScriptBuildPhase section */ @@ -267,8 +261,75 @@ /* Begin XCBuildConfiguration section */ 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-NitroSQLiteExample.debug.xcconfig */; buildSettings = { + "RN_SPM_HERMES_SEARCH_PATH[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64_x86_64-simulator"; + "RN_SPM_HERMES_BINARY[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64_x86_64-simulator/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64_x86_64-simulator/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64"; + "RN_SPM_HERMES_BINARY[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-maccatalyst"; + "RN_SPM_HERMES_BINARY[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-maccatalyst/hermesvm.framework/Versions/1/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-maccatalyst/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-simulator"; + "RN_SPM_HERMES_BINARY[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-simulator/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-simulator/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64"; + "RN_SPM_HERMES_BINARY[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64_x86_64-simulator"; + "RN_SPM_HERMES_BINARY[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64_x86_64-simulator/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64_x86_64-simulator/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64"; + "RN_SPM_HERMES_BINARY[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64/hermesvm.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64_x86_64-simulator"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64_x86_64-simulator/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64_x86_64-simulator/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-maccatalyst"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-maccatalyst/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-maccatalyst/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-simulator"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-simulator/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-simulator/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64_x86_64-simulator"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64_x86_64-simulator/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64_x86_64-simulator/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64/ReactNativeDependencies.framework"; + "RN_SPM_REACT_SEARCH_PATH[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-maccatalyst"; + "RN_SPM_REACT_BINARY[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-maccatalyst/React.framework/React"; + "RN_SPM_REACT_FRAMEWORK[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-maccatalyst/React.framework"; + "RN_SPM_REACT_SEARCH_PATH[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-simulator"; + "RN_SPM_REACT_BINARY[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-simulator/React.framework/React"; + "RN_SPM_REACT_FRAMEWORK[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-simulator/React.framework"; + "RN_SPM_REACT_SEARCH_PATH[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64"; + "RN_SPM_REACT_BINARY[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64/React.framework/React"; + "RN_SPM_REACT_FRAMEWORK[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64/React.framework"; + RN_SPM_FLAVOR = debug; + REACT_NATIVE_PATH = "../../node_modules/react-native"; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(RN_SPM_REACT_SEARCH_PATH)", + "$(RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH)", + "$(RN_SPM_HERMES_SEARCH_PATH)", + ); + SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( + "$(inherited)", + DEBUG, + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/build/generated/autolinking/headers", + ); ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = 1; @@ -285,6 +346,9 @@ "$(inherited)", "-ObjC", "-lc++", + "$(RN_SPM_REACT_BINARY)", + "$(RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY)", + "$(RN_SPM_HERMES_BINARY)", ); PRODUCT_BUNDLE_IDENTIFIER = com.margelo.rnnitrosqlite.example; PRODUCT_NAME = NitroSQLiteExample; @@ -296,8 +360,71 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-NitroSQLiteExample.release.xcconfig */; buildSettings = { + "RN_SPM_HERMES_SEARCH_PATH[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64_x86_64-simulator"; + "RN_SPM_HERMES_BINARY[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64_x86_64-simulator/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64_x86_64-simulator/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64"; + "RN_SPM_HERMES_BINARY[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-maccatalyst"; + "RN_SPM_HERMES_BINARY[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-maccatalyst/hermesvm.framework/Versions/1/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-maccatalyst/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-simulator"; + "RN_SPM_HERMES_BINARY[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-simulator/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-simulator/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64"; + "RN_SPM_HERMES_BINARY[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64_x86_64-simulator"; + "RN_SPM_HERMES_BINARY[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64_x86_64-simulator/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64_x86_64-simulator/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64"; + "RN_SPM_HERMES_BINARY[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64/hermesvm.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64_x86_64-simulator"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64_x86_64-simulator/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64_x86_64-simulator/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-maccatalyst"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-maccatalyst/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-maccatalyst/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-simulator"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-simulator/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-simulator/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64_x86_64-simulator"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64_x86_64-simulator/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64_x86_64-simulator/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64/ReactNativeDependencies.framework"; + "RN_SPM_REACT_SEARCH_PATH[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-maccatalyst"; + "RN_SPM_REACT_BINARY[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-maccatalyst/React.framework/React"; + "RN_SPM_REACT_FRAMEWORK[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-maccatalyst/React.framework"; + "RN_SPM_REACT_SEARCH_PATH[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-simulator"; + "RN_SPM_REACT_BINARY[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-simulator/React.framework/React"; + "RN_SPM_REACT_FRAMEWORK[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-simulator/React.framework"; + "RN_SPM_REACT_SEARCH_PATH[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64"; + "RN_SPM_REACT_BINARY[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64/React.framework/React"; + "RN_SPM_REACT_FRAMEWORK[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64/React.framework"; + RN_SPM_FLAVOR = release; + REACT_NATIVE_PATH = "../../node_modules/react-native"; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(RN_SPM_REACT_SEARCH_PATH)", + "$(RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH)", + "$(RN_SPM_HERMES_SEARCH_PATH)", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/build/generated/autolinking/headers", + ); ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = 1; @@ -313,6 +440,9 @@ "$(inherited)", "-ObjC", "-lc++", + "$(RN_SPM_REACT_BINARY)", + "$(RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY)", + "$(RN_SPM_HERMES_BINARY)", ); PRODUCT_BUNDLE_IDENTIFIER = com.margelo.rnnitrosqlite.example; PRODUCT_NAME = NitroSQLiteExample; @@ -575,6 +705,21 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ +/* Begin XCLocalSwiftPackageReference section */ + 27BDE9D743CB351F53154525 /* XCLocalSwiftPackageReference "build/xcframeworks" */ = {isa = XCLocalSwiftPackageReference; relativePath = build/xcframeworks;}; + C2FECF1430FDAAE3BF355839 /* XCLocalSwiftPackageReference "build/generated/autolinking" */ = {isa = XCLocalSwiftPackageReference; relativePath = build/generated/autolinking;}; + A700952B9A737913514EB28F /* XCLocalSwiftPackageReference "build/generated/ios" */ = {isa = XCLocalSwiftPackageReference; relativePath = build/generated/ios;}; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 512EBECF5434FD7A6AF7C967 /* ReactHeaders */ = {isa = XCSwiftPackageProductDependency; package = 27BDE9D743CB351F53154525 /* XCLocalSwiftPackageReference "build/xcframeworks" */; productName = ReactHeaders;}; + 920F69A9DF98D37C8308D020 /* ReactNativeHeaders */ = {isa = XCSwiftPackageProductDependency; package = 27BDE9D743CB351F53154525 /* XCLocalSwiftPackageReference "build/xcframeworks" */; productName = ReactNativeHeaders;}; + 8332BE36B9C49BD2E49347C1 /* ReactNativeDependenciesHeaders */ = {isa = XCSwiftPackageProductDependency; package = 27BDE9D743CB351F53154525 /* XCLocalSwiftPackageReference "build/xcframeworks" */; productName = ReactNativeDependenciesHeaders;}; + 3AFDEFB917B01458307FDE0A /* Autolinked */ = {isa = XCSwiftPackageProductDependency; package = C2FECF1430FDAAE3BF355839 /* XCLocalSwiftPackageReference "build/generated/autolinking" */; productName = Autolinked;}; + 947DD5EF3BE079FB7F5AFF87 /* ReactCodegen */ = {isa = XCSwiftPackageProductDependency; package = A700952B9A737913514EB28F /* XCLocalSwiftPackageReference "build/generated/ios" */; productName = ReactCodegen;}; + F3857EDDA38AFC0011322D6D /* ReactAppDependencyProvider */ = {isa = XCSwiftPackageProductDependency; package = A700952B9A737913514EB28F /* XCLocalSwiftPackageReference "build/generated/ios" */; productName = ReactAppDependencyProvider;}; +/* End XCSwiftPackageProductDependency section */ + }; rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; } diff --git a/example/ios/NitroSQLiteExample.xcodeproj/xcshareddata/xcschemes/NitroSQLiteExample.xcscheme b/example/ios/NitroSQLiteExample.xcodeproj/xcshareddata/xcschemes/NitroSQLiteExample.xcscheme index cb48a5b1..d03281ff 100644 --- a/example/ios/NitroSQLiteExample.xcodeproj/xcshareddata/xcschemes/NitroSQLiteExample.xcscheme +++ b/example/ios/NitroSQLiteExample.xcodeproj/xcshareddata/xcschemes/NitroSQLiteExample.xcscheme @@ -5,6 +5,215 @@ + + + + + + + + + + - - - - - - diff --git a/example/ios/NitroSQLiteExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/ios/NitroSQLiteExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d98100..00000000 --- a/example/ios/NitroSQLiteExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/example/ios/Podfile b/example/ios/Podfile index 4112c136..59feb741 100644 --- a/example/ios/Podfile +++ b/example/ios/Podfile @@ -1,45 +1,2 @@ -ENV['RCT_NEW_ARCH_ENABLED'] = '1' -# Default to static frameworks locally, while allowing CI to select either mode. -ENV['USE_FRAMEWORKS'] ||= 'static' -ENV['NITRO_SQLITE_VEC'] = '1' - -# 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'] -unless linkage.to_s.empty? - Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green - use_frameworks! :linkage => linkage.to_sym -end - -target 'NitroSQLiteExample' 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| - react_native_post_install( - installer, - config[:reactNativePath], - :mac_catalyst_enabled => false, - :ccache_enabled => ENV['USE_CCACHE'] == '1' - ) - - installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['DEAD_CODE_STRIPPING'] = 'YES' - end - end - end -end +# React Native CLI 20 uses this file to discover the iOS project. +# All native dependencies are built through Swift Package Manager. diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock deleted file mode 100644 index 8a61cb30..00000000 --- a/example/ios/Podfile.lock +++ /dev/null @@ -1,2321 +0,0 @@ -PODS: - - boost (1.84.0): - - ReactNativeDependencies - - DoubleConversion (1.1.6): - - ReactNativeDependencies - - fast_float (8.0.0): - - ReactNativeDependencies - - FBLazyVector (0.88.0): - - React-Core-prebuilt - - fmt (12.1.0): - - ReactNativeDependencies - - glog (0.3.5): - - ReactNativeDependencies - - hermes-engine (260318099.0.4): - - hermes-engine/Pre-built (= 260318099.0.4) - - hermes-engine/Pre-built (260318099.0.4) - - NitroModules (0.37.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-callinvoker - - React-Core - - React-Core-prebuilt - - React-cxxstableapi - - 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/core - - ReactNativeDependencies - - Yoga - - RCT-Folly (2024.11.18.00): - - RCT-Folly/Default (= 2024.11.18.00) - - ReactNativeDependencies - - RCT-Folly/Default (2024.11.18.00): - - ReactNativeDependencies - - RCTDeprecation (0.88.0): - - React-Core-prebuilt - - RCTRequired (0.88.0): - - React-Core-prebuilt - - RCTSwiftUI (0.88.0) - - RCTSwiftUIWrapper (0.88.0): - - RCTSwiftUI - - RCTTypeSafety (0.88.0): - - FBLazyVector (= 0.88.0) - - RCTRequired (= 0.88.0) - - React-Core (= 0.88.0) - - React (0.88.0): - - React-Core (= 0.88.0) - - React-Core/DevSupport (= 0.88.0) - - React-Core/RCTWebSocket (= 0.88.0) - - React-RCTActionSheet (= 0.88.0) - - React-RCTAnimation (= 0.88.0) - - React-RCTBlob (= 0.88.0) - - React-RCTImage (= 0.88.0) - - React-RCTLinking (= 0.88.0) - - React-RCTNetwork (= 0.88.0) - - React-RCTSettings (= 0.88.0) - - React-RCTText (= 0.88.0) - - React-RCTVibration (= 0.88.0) - - React-bridging (0.88.0): - - React-callinvoker - - React-Core-prebuilt - - React-jsi - - React-timing - - ReactNativeDependencies - - React-callinvoker (0.88.0): - - React-callinvoker/callinvokerUmbrella (= 0.88.0) - - React-cxxstableapi - - React-callinvoker/callinvokerUmbrella (0.88.0): - - React-cxxstableapi - - React-Core (0.88.0): - - React-Core-prebuilt - - React-Core/Default (= 0.88.0) - - React-Core-prebuilt (0.88.0): - - ReactNativeDependencies - - React-Core/CoreModulesHeaders (0.88.0): - - React-Core-prebuilt - - React-Core/Default (0.88.0): - - React-Core-prebuilt - - React-Core/DevSupport (0.88.0): - - React-Core-prebuilt - - React-Core/RCTActionSheetHeaders (0.88.0): - - React-Core-prebuilt - - React-Core/RCTAnimationHeaders (0.88.0): - - React-Core-prebuilt - - React-Core/RCTBlobHeaders (0.88.0): - - React-Core-prebuilt - - React-Core/RCTImageHeaders (0.88.0): - - React-Core-prebuilt - - React-Core/RCTLinkingHeaders (0.88.0): - - React-Core-prebuilt - - React-Core/RCTNetworkHeaders (0.88.0): - - React-Core-prebuilt - - React-Core/RCTSettingsHeaders (0.88.0): - - React-Core-prebuilt - - React-Core/RCTTextHeaders (0.88.0): - - React-Core-prebuilt - - React-Core/RCTVibrationHeaders (0.88.0): - - React-Core-prebuilt - - React-Core/RCTWebSocket (0.88.0): - - React-Core-prebuilt - - React-CoreModules (0.88.0): - - RCTTypeSafety (= 0.88.0) - - React-Core-prebuilt - - React-Core/CoreModulesHeaders (= 0.88.0) - - React-debug - - React-featureflags - - React-jsi (= 0.88.0) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-NativeModulesApple - - React-networking - - React-RCTBlob - - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.88.0) - - React-runtimeexecutor - - React-utils - - ReactCommon - - ReactNativeDependencies - - React-cxxreact (0.88.0): - - hermes-engine - - React-callinvoker (= 0.88.0) - - React-Core-prebuilt - - React-debug (= 0.88.0) - - React-jserrorhandler (= 0.88.0) - - React-jsi (= 0.88.0) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-logger (= 0.88.0) - - React-perflogger (= 0.88.0) - - React-runtimeexecutor - - React-timing (= 0.88.0) - - React-utils - - ReactNativeDependencies - - React-cxxstableapi (0.88.0) - - React-debug (0.88.0): - - React-cxxstableapi - - React-debug/debugUmbrella (= 0.88.0) - - React-debug/redbox (= 0.88.0) - - React-debug/debugUmbrella (0.88.0): - - React-cxxstableapi - - React-debug/redbox (0.88.0): - - React-cxxstableapi - - React-defaultsnativemodule (0.88.0): - - hermes-engine - - React-Core-prebuilt - - React-cxxstableapi - - React-domnativemodule - - React-Fabric/animated - - React-featureflags - - React-featureflagsnativemodule - - React-idlecallbacksnativemodule - - React-intersectionobservernativemodule - - React-jsi - - React-jsiexecutor - - React-microtasksnativemodule - - React-mutationobservernativemodule - - React-RCTFBReactNativeSpec - - React-resizeobservernativemodule - - React-viewtransitionnativemodule - - React-webperformancenativemodule - - ReactNativeDependencies - - Yoga - - React-domnativemodule (0.88.0): - - hermes-engine - - React-bridging - - React-Core-prebuilt - - React-cxxstableapi - - React-Fabric - - React-Fabric/bridging - - React-FabricComponents - - React-graphics - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - React-runtimeexecutor - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-Fabric (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-Fabric/animated (= 0.88.0) - - React-Fabric/animationbackend (= 0.88.0) - - React-Fabric/animations (= 0.88.0) - - React-Fabric/attributedstring (= 0.88.0) - - React-Fabric/bridging (= 0.88.0) - - React-Fabric/componentregistry (= 0.88.0) - - React-Fabric/componentregistrynative (= 0.88.0) - - React-Fabric/components (= 0.88.0) - - React-Fabric/consistency (= 0.88.0) - - React-Fabric/core (= 0.88.0) - - React-Fabric/dom (= 0.88.0) - - React-Fabric/imagemanager (= 0.88.0) - - React-Fabric/leakchecker (= 0.88.0) - - React-Fabric/mounting (= 0.88.0) - - React-Fabric/observers (= 0.88.0) - - React-Fabric/scheduler (= 0.88.0) - - React-Fabric/telemetry (= 0.88.0) - - React-Fabric/uimanager (= 0.88.0) - - React-Fabric/viewtransition (= 0.88.0) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/animated (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-Fabric/animationbackend - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/animationbackend (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/animations (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/attributedstring (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/bridging (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/componentregistry (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/componentregistrynative (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/components (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.88.0) - - React-Fabric/components/root (= 0.88.0) - - React-Fabric/components/scrollview (= 0.88.0) - - React-Fabric/components/view (= 0.88.0) - - React-Fabric/components/viewUmbrella (= 0.88.0) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/components/legacyviewmanagerinterop (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/components/root (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/components/scrollview (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/components/view (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - 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 - - ReactNativeDependencies - - Yoga - - React-Fabric/components/viewUmbrella (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/consistency (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/core (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/dom (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/imagemanager (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/leakchecker (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/mounting (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-jsinspectortracing - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/observers (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-Fabric/observers/events (= 0.88.0) - - React-Fabric/observers/intersection (= 0.88.0) - - React-Fabric/observers/mutation (= 0.88.0) - - React-Fabric/observers/resize (= 0.88.0) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/observers/events (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/observers/intersection (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/observers/mutation (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/observers/resize (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/scheduler (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-Fabric/animationbackend - - React-Fabric/observers/events - - React-Fabric/viewtransition - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-performancecdpmetrics - - React-performancetimeline - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/telemetry (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/uimanager (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-Fabric/uimanager/consistency (= 0.88.0) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererconsistency - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/uimanager/consistency (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - 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 - - ReactNativeDependencies - - React-Fabric/viewtransition (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-FabricComponents (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-Fabric - - React-FabricComponents/components (= 0.88.0) - - React-FabricComponents/textlayoutmanager (= 0.88.0) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.88.0) - - React-FabricComponents/components/iostextinput (= 0.88.0) - - React-FabricComponents/components/modal (= 0.88.0) - - React-FabricComponents/components/rncore (= 0.88.0) - - React-FabricComponents/components/safeareaview (= 0.88.0) - - React-FabricComponents/components/switch (= 0.88.0) - - React-FabricComponents/components/text (= 0.88.0) - - React-FabricComponents/components/textinput (= 0.88.0) - - React-FabricComponents/components/unimplementedview (= 0.88.0) - - React-FabricComponents/components/virtualview (= 0.88.0) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/inputaccessory (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - 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 - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/iostextinput (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - 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 - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/modal (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - 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 - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/rncore (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - 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 - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/safeareaview (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - 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 - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/switch (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - 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 - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/text (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - 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 - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/textinput (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - 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 - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/unimplementedview (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - 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 - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/virtualview (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - 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 - - ReactNativeDependencies - - Yoga - - React-FabricComponents/textlayoutmanager (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - 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 - - ReactNativeDependencies - - Yoga - - React-FabricImage (0.88.0): - - hermes-engine - - RCTRequired (= 0.88.0) - - RCTTypeSafety (= 0.88.0) - - React-Core-prebuilt - - React-cxxstableapi - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-jsiexecutor (= 0.88.0) - - React-logger - - React-rendererdebug - - React-utils - - ReactCommon - - ReactNativeDependencies - - Yoga - - React-featureflags (0.88.0): - - React-Core-prebuilt - - React-cxxstableapi - - React-featureflags/featureflagsUmbrella (= 0.88.0) - - ReactNativeDependencies - - React-featureflags/featureflagsUmbrella (0.88.0): - - React-Core-prebuilt - - React-cxxstableapi - - ReactNativeDependencies - - React-featureflagsnativemodule (0.88.0): - - hermes-engine - - React-Core-prebuilt - - React-cxxstableapi - - React-featureflags - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-graphics (0.88.0): - - hermes-engine - - React-Core-prebuilt - - React-featureflags - - React-jsi - - React-jsiexecutor - - React-rendererdebug - - React-utils - - ReactNativeDependencies - - React-hermes (0.88.0): - - hermes-engine - - React-Core-prebuilt - - React-cxxreact (= 0.88.0) - - React-cxxstableapi - - React-jsi - - React-jsiexecutor (= 0.88.0) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-jsitooling - - React-oscompat - - React-perflogger (= 0.88.0) - - React-runtimeexecutor - - ReactNativeDependencies - - React-idlecallbacksnativemodule (0.88.0): - - hermes-engine - - React-bridging - - React-Core-prebuilt - - React-cxxstableapi - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - React-runtimeexecutor - - React-runtimescheduler - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-ImageManager (0.88.0): - - React-Core-prebuilt - - React-Core/Default - - React-cxxstableapi - - React-debug - - React-Fabric - - React-graphics - - React-rendererdebug - - React-utils - - ReactNativeDependencies - - React-intersectionobservernativemodule (0.88.0): - - hermes-engine - - React-bridging - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-Fabric - - React-Fabric/bridging - - React-graphics - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - React-runtimeexecutor - - React-runtimescheduler - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-jserrorhandler (0.88.0): - - hermes-engine - - React-bridging - - React-Core-prebuilt - - React-cxxstableapi - - React-debug - - React-featureflags - - React-jsi - - ReactNativeDependencies - - React-jsi (0.88.0): - - hermes-engine - - React-Core-prebuilt - - ReactNativeDependencies - - React-jsiexecutor (0.88.0): - - hermes-engine - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-jserrorhandler - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-utils - - ReactNativeDependencies - - React-jsinspector (0.88.0): - - hermes-engine - - React-Core-prebuilt - - React-featureflags - - React-jsi - - React-jsinspectorcdp - - React-jsinspectornetwork - - React-jsinspectortracing - - React-oscompat - - React-perflogger (= 0.88.0) - - React-runtimeexecutor - - React-utils - - ReactNativeDependencies - - React-jsinspectorcdp (0.88.0): - - React-Core-prebuilt - - React-cxxstableapi - - ReactNativeDependencies - - React-jsinspectornetwork (0.88.0): - - React-Core-prebuilt - - React-cxxstableapi - - React-jsinspectorcdp - - ReactNativeDependencies - - React-jsinspectortracing (0.88.0): - - hermes-engine - - React-Core-prebuilt - - React-cxxstableapi - - React-jsi - - React-jsinspectornetwork - - React-oscompat - - React-timing - - React-utils - - ReactNativeDependencies - - React-jsitooling (0.88.0): - - hermes-engine - - React-Core-prebuilt - - React-cxxreact (= 0.88.0) - - React-cxxstableapi - - React-debug - - React-jsi (= 0.88.0) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-runtimeexecutor - - React-utils - - ReactNativeDependencies - - React-jsitracing (0.88.0): - - React-jsi - - React-logger (0.88.0): - - React-Core-prebuilt - - ReactNativeDependencies - - React-Mapbuffer (0.88.0): - - React-Core-prebuilt - - React-cxxstableapi - - React-debug - - React-Mapbuffer/mapbufferUmbrella (= 0.88.0) - - ReactNativeDependencies - - React-Mapbuffer/mapbufferUmbrella (0.88.0): - - React-Core-prebuilt - - React-cxxstableapi - - React-debug - - ReactNativeDependencies - - React-microtasksnativemodule (0.88.0): - - hermes-engine - - React-Core-prebuilt - - React-cxxstableapi - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-mutationobservernativemodule (0.88.0): - - hermes-engine - - React-bridging - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-Fabric - - React-Fabric/bridging - - React-Fabric/observers/mutation - - React-featureflags - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - React-runtimeexecutor - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - react-native-safe-area-context (5.10.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxstableapi - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - react-native-safe-area-context/common (= 5.10.1) - - react-native-safe-area-context/fabric (= 5.10.1) - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - react-native-safe-area-context/common (5.10.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxstableapi - - 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/core - - ReactNativeDependencies - - Yoga - - react-native-safe-area-context/fabric (5.10.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxstableapi - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - react-native-safe-area-context/common - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-NativeModulesApple (0.88.0): - - hermes-engine - - React-bridging - - React-callinvoker - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-runtimeexecutor - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-networking (0.88.0): - - React-Core-prebuilt - - React-cxxstableapi - - React-jsinspectornetwork - - React-jsinspectortracing - - React-performancetimeline - - React-timing - - ReactNativeDependencies - - React-oscompat (0.88.0): - - React-cxxstableapi - - React-perflogger (0.88.0): - - React-Core-prebuilt - - ReactNativeDependencies - - React-performancecdpmetrics (0.88.0): - - hermes-engine - - React-Core-prebuilt - - React-cxxstableapi - - React-jsi - - React-performancetimeline - - React-runtimeexecutor - - React-timing - - ReactNativeDependencies - - React-performancetimeline (0.88.0): - - React-Core-prebuilt - - React-cxxstableapi - - React-featureflags - - React-jsinspector - - React-jsinspectortracing - - React-perflogger - - React-timing - - ReactNativeDependencies - - React-RCTActionSheet (0.88.0): - - React-Core/RCTActionSheetHeaders (= 0.88.0) - - React-RCTAnimatedModuleProvider (0.88.0): - - hermes-engine - - React-Core - - React-Core-prebuilt - - React-Fabric/animated - - React-featureflags - - ReactCommon - - ReactNativeDependencies - - Yoga - - React-RCTAnimation (0.88.0): - - RCTTypeSafety - - React-Core-prebuilt - - React-Core/RCTAnimationHeaders - - React-debug - - React-featureflags - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - ReactNativeDependencies - - React-RCTAppDelegate (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-CoreModules - - React-debug - - React-defaultsnativemodule - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-jsitooling - - React-NativeModulesApple - - React-RCTAnimatedModuleProvider - - React-RCTFabric - - React-RCTFBReactNativeSpec - - React-RCTImage - - React-RCTLinking - - React-RCTNetwork - - React-RCTRuntime - - React-rendererdebug - - React-RuntimeApple - - React-RuntimeCore - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon - - ReactNativeDependencies - - React-RCTBlob (0.88.0): - - hermes-engine - - React-Core-prebuilt - - React-Core/RCTBlobHeaders - - React-Core/RCTWebSocket - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - React-RCTNetwork - - ReactCommon - - ReactNativeDependencies - - React-RCTFabric (0.88.0): - - React-Core-prebuilt - - React-RCTFBReactNativeSpec (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec/components (= 0.88.0) - - ReactCommon - - ReactNativeDependencies - - React-RCTFBReactNativeSpec/components (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxstableapi - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-NativeModulesApple - - React-rendererdebug - - React-utils - - ReactCommon - - ReactNativeDependencies - - Yoga - - React-RCTImage (0.88.0): - - RCTTypeSafety - - React-Core-prebuilt - - React-Core/RCTImageHeaders - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - React-RCTNetwork - - ReactCommon - - ReactNativeDependencies - - React-RCTLinking (0.88.0): - - React-Core/RCTLinkingHeaders (= 0.88.0) - - React-jsi (= 0.88.0) - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - ReactCommon/turbomodule/core (= 0.88.0) - - React-RCTNetwork (0.88.0): - - RCTTypeSafety - - React-Core-prebuilt - - React-Core/RCTNetworkHeaders - - React-debug - - React-featureflags - - React-jsi - - React-jsinspectorcdp - - React-jsinspectornetwork - - React-NativeModulesApple - - React-networking - - React-RCTFBReactNativeSpec - - ReactCommon - - ReactNativeDependencies - - React-RCTRuntime (0.88.0): - - React-Core-prebuilt - - React-RCTSettings (0.88.0): - - RCTTypeSafety - - React-Core-prebuilt - - React-Core/RCTSettingsHeaders - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - ReactNativeDependencies - - React-RCTText (0.88.0): - - React-Core/RCTTextHeaders (= 0.88.0) - - Yoga - - React-RCTVibration (0.88.0): - - React-Core-prebuilt - - React-Core/RCTVibrationHeaders - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - ReactNativeDependencies - - React-rendererconsistency (0.88.0) - - React-renderercss (0.88.0): - - React-debug - - React-utils - - React-rendererdebug (0.88.0): - - React-Core-prebuilt - - React-debug - - ReactNativeDependencies - - React-resizeobservernativemodule (0.88.0): - - hermes-engine - - React-bridging - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-Fabric - - React-Fabric/bridging - - React-Fabric/observers/resize - - React-graphics - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - React-runtimeexecutor - - React-runtimescheduler - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-RuntimeApple (0.88.0): - - hermes-engine - - React-callinvoker - - React-Core-prebuilt - - React-Core/Default - - React-CoreModules - - React-cxxreact - - React-cxxstableapi - - 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 - - ReactNativeDependencies - - React-RuntimeCore (0.88.0): - - hermes-engine - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-Fabric - - React-featureflags - - React-jserrorhandler - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsitooling - - React-performancetimeline - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - React-runtimeexecutor (0.88.0): - - React-Core-prebuilt - - React-debug - - React-featureflags - - React-jsi (= 0.88.0) - - React-utils - - ReactNativeDependencies - - React-RuntimeHermes (0.88.0): - - hermes-engine - - React-Core-prebuilt - - React-cxxstableapi - - React-featureflags - - React-hermes - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-jsitooling - - React-jsitracing - - React-RuntimeCore - - React-runtimeexecutor - - React-utils - - ReactNativeDependencies - - React-runtimescheduler (0.88.0): - - hermes-engine - - React-callinvoker - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-debug - - React-featureflags - - React-jserrorhandler - - React-jsi - - React-jsinspectortracing - - React-performancetimeline - - React-rendererconsistency - - React-rendererdebug - - React-runtimeexecutor - - React-timing - - React-utils - - ReactNativeDependencies - - React-timing (0.88.0): - - React-cxxstableapi - - React-debug - - React-timing/timingUmbrella (= 0.88.0) - - React-timing/timingUmbrella (0.88.0): - - React-cxxstableapi - - React-debug - - React-utils (0.88.0): - - hermes-engine - - React-Core-prebuilt - - React-debug - - React-jsi (= 0.88.0) - - ReactNativeDependencies - - React-viewtransitionnativemodule (0.88.0): - - hermes-engine - - React-Core-prebuilt - - React-Fabric - - React-Fabric/bridging - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - React-runtimeexecutor - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-webperformancenativemodule (0.88.0): - - hermes-engine - - React-bridging - - React-Core-prebuilt - - React-cxxreact - - React-cxxstableapi - - React-jsi - - React-jsiexecutor - - React-performancetimeline - - React-RCTFBReactNativeSpec - - React-runtimeexecutor - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - ReactAppDependencyProvider (0.88.0): - - ReactCodegen - - ReactCodegen (0.88.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-FabricImage - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-NativeModulesApple - - React-RCTAppDelegate - - React-rendererdebug - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - ReactCommon (0.88.0): - - React-Core-prebuilt - - ReactCommon/turbomodule (= 0.88.0) - - ReactNativeDependencies - - ReactCommon/turbomodule (0.88.0): - - hermes-engine - - React-callinvoker (= 0.88.0) - - React-Core-prebuilt - - React-jsi (= 0.88.0) - - React-logger (= 0.88.0) - - React-perflogger (= 0.88.0) - - ReactCommon/turbomodule/core (= 0.88.0) - - ReactNativeDependencies - - ReactCommon/turbomodule/core (0.88.0): - - hermes-engine - - React-bridging - - React-callinvoker (= 0.88.0) - - React-Core-prebuilt - - React-cxxreact (= 0.88.0) - - React-debug (= 0.88.0) - - React-featureflags (= 0.88.0) - - React-jsi (= 0.88.0) - - React-logger (= 0.88.0) - - React-perflogger (= 0.88.0) - - React-utils (= 0.88.0) - - ReactNativeDependencies - - ReactNativeDependencies (0.88.0) - - RNCClipboard (1.16.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxstableapi - - 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/core - - ReactNativeDependencies - - Yoga - - RNNitroSQLite (10.2.0): - - hermes-engine - - NitroModules - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxstableapi - - 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/core - - ReactNativeDependencies - - Yoga - - RNNitroSqliteVec (10.2.0): - - RNNitroSQLite - - RNScreens (4.30.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxstableapi - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-RCTImage - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - RNScreens/common (= 4.30.0) - - Yoga - - RNScreens/common (4.30.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-bridging - - React-Core - - React-Core-prebuilt - - React-cxxstableapi - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-RCTImage - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - SocketRocket (0.7.1): - - ReactNativeDependencies - - Yoga (0.0.0): - - React-Core-prebuilt - -DEPENDENCIES: - - boost (from `build/rndeps-facades/boost`) - - DoubleConversion (from `build/rndeps-facades/DoubleConversion`) - - fast_float (from `build/rndeps-facades/fast_float`) - - FBLazyVector (from `build/rncore-facades/FBLazyVector`) - - fmt (from `build/rndeps-facades/fmt`) - - glog (from `build/rndeps-facades/glog`) - - hermes-engine (from `../../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) - - NitroModules (from `../../node_modules/react-native-nitro-modules`) - - RCT-Folly (from `build/rndeps-facades/RCT-Folly`) - - RCTDeprecation (from `build/rncore-facades/RCTDeprecation`) - - RCTRequired (from `build/rncore-facades/RCTRequired`) - - RCTSwiftUI (from `../../node_modules/react-native/ReactApple/RCTSwiftUI`) - - RCTSwiftUIWrapper (from `../../node_modules/react-native/ReactApple/RCTSwiftUIWrapper`) - - RCTTypeSafety (from `../../node_modules/react-native/Libraries/TypeSafety`) - - React (from `../../node_modules/react-native/`) - - React-bridging (from `../../node_modules/react-native/ReactCommon/react/bridging`) - - React-callinvoker (from `../../node_modules/react-native/ReactCommon/callinvoker`) - - React-Core (from `build/rncore-facades/React-Core`) - - React-Core-prebuilt (from `../../node_modules/react-native/React-Core-prebuilt.podspec`) - - React-Core/RCTWebSocket (from `build/rncore-facades/React-Core`) - - React-CoreModules (from `../../node_modules/react-native/React/CoreModules`) - - React-cxxreact (from `../../node_modules/react-native/ReactCommon/cxxreact`) - - React-cxxstableapi (from `../../node_modules/react-native/ReactCommon/react/cxxstableapi`) - - 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-intersectionobservernativemodule (from `../../node_modules/react-native/ReactCommon/react/nativemodule/intersectionobserver`) - - 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-mutationobservernativemodule (from `../../node_modules/react-native/ReactCommon/react/nativemodule/mutationobserver`) - - react-native-safe-area-context (from `../../node_modules/react-native-safe-area-context`) - - React-NativeModulesApple (from `../../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) - - React-networking (from `../../node_modules/react-native/ReactCommon/react/networking`) - - React-oscompat (from `../../node_modules/react-native/ReactCommon/oscompat`) - - React-perflogger (from `../../node_modules/react-native/ReactCommon/reactperflogger`) - - React-performancecdpmetrics (from `../../node_modules/react-native/ReactCommon/react/performance/cdpmetrics`) - - React-performancetimeline (from `../../node_modules/react-native/ReactCommon/react/performance/timeline`) - - React-RCTActionSheet (from `../../node_modules/react-native/Libraries/ActionSheetIOS`) - - React-RCTAnimatedModuleProvider (from `../../node_modules/react-native/ReactApple/RCTAnimatedModuleProvider`) - - 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 `build/rncore-facades/React-RCTFabric`) - - 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 `build/rncore-facades/React-RCTRuntime`) - - 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-resizeobservernativemodule (from `../../node_modules/react-native/ReactCommon/react/nativemodule/resizeobserver`) - - 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`) - - React-viewtransitionnativemodule (from `../../node_modules/react-native/ReactCommon/react/nativemodule/viewtransition`) - - React-webperformancenativemodule (from `../../node_modules/react-native/ReactCommon/react/nativemodule/webperformance`) - - ReactAppDependencyProvider (from `build/generated/ios/ReactAppDependencyProvider`) - - ReactCodegen (from `build/generated/ios/ReactCodegen`) - - ReactCommon/turbomodule/core (from `../../node_modules/react-native/ReactCommon`) - - ReactNativeDependencies (from `../../node_modules/react-native/third-party-podspecs/ReactNativeDependencies.podspec`) - - "RNCClipboard (from `../../node_modules/@react-native-clipboard/clipboard`)" - - RNNitroSQLite (from `../../packages/react-native-nitro-sqlite`) - - RNNitroSqliteVec (from `../../node_modules/react-native-nitro-sqlite-vec`) - - RNScreens (from `../../node_modules/react-native-screens`) - - SocketRocket (from `build/rndeps-facades/SocketRocket`) - - Yoga (from `build/rncore-facades/Yoga`) - -EXTERNAL SOURCES: - boost: - :path: build/rndeps-facades/boost - DoubleConversion: - :path: build/rndeps-facades/DoubleConversion - fast_float: - :path: build/rndeps-facades/fast_float - FBLazyVector: - :path: build/rncore-facades/FBLazyVector - fmt: - :path: build/rndeps-facades/fmt - glog: - :path: build/rndeps-facades/glog - hermes-engine: - :podspec: "../../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" - :tag: hermes-v260318099.0.2 - NitroModules: - :path: "../../node_modules/react-native-nitro-modules" - RCT-Folly: - :path: build/rndeps-facades/RCT-Folly - RCTDeprecation: - :path: build/rncore-facades/RCTDeprecation - RCTRequired: - :path: build/rncore-facades/RCTRequired - RCTSwiftUI: - :path: "../../node_modules/react-native/ReactApple/RCTSwiftUI" - RCTSwiftUIWrapper: - :path: "../../node_modules/react-native/ReactApple/RCTSwiftUIWrapper" - RCTTypeSafety: - :path: "../../node_modules/react-native/Libraries/TypeSafety" - React: - :path: "../../node_modules/react-native/" - React-bridging: - :path: "../../node_modules/react-native/ReactCommon/react/bridging" - React-callinvoker: - :path: "../../node_modules/react-native/ReactCommon/callinvoker" - React-Core: - :path: build/rncore-facades/React-Core - React-Core-prebuilt: - :podspec: "../../node_modules/react-native/React-Core-prebuilt.podspec" - React-CoreModules: - :path: "../../node_modules/react-native/React/CoreModules" - React-cxxreact: - :path: "../../node_modules/react-native/ReactCommon/cxxreact" - React-cxxstableapi: - :path: "../../node_modules/react-native/ReactCommon/react/cxxstableapi" - 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-intersectionobservernativemodule: - :path: "../../node_modules/react-native/ReactCommon/react/nativemodule/intersectionobserver" - 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-mutationobservernativemodule: - :path: "../../node_modules/react-native/ReactCommon/react/nativemodule/mutationobserver" - react-native-safe-area-context: - :path: "../../node_modules/react-native-safe-area-context" - React-NativeModulesApple: - :path: "../../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" - React-networking: - :path: "../../node_modules/react-native/ReactCommon/react/networking" - React-oscompat: - :path: "../../node_modules/react-native/ReactCommon/oscompat" - React-perflogger: - :path: "../../node_modules/react-native/ReactCommon/reactperflogger" - React-performancecdpmetrics: - :path: "../../node_modules/react-native/ReactCommon/react/performance/cdpmetrics" - React-performancetimeline: - :path: "../../node_modules/react-native/ReactCommon/react/performance/timeline" - React-RCTActionSheet: - :path: "../../node_modules/react-native/Libraries/ActionSheetIOS" - React-RCTAnimatedModuleProvider: - :path: "../../node_modules/react-native/ReactApple/RCTAnimatedModuleProvider" - 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: build/rncore-facades/React-RCTFabric - 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: build/rncore-facades/React-RCTRuntime - 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-resizeobservernativemodule: - :path: "../../node_modules/react-native/ReactCommon/react/nativemodule/resizeobserver" - 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" - React-viewtransitionnativemodule: - :path: "../../node_modules/react-native/ReactCommon/react/nativemodule/viewtransition" - React-webperformancenativemodule: - :path: "../../node_modules/react-native/ReactCommon/react/nativemodule/webperformance" - ReactAppDependencyProvider: - :path: build/generated/ios/ReactAppDependencyProvider - ReactCodegen: - :path: build/generated/ios/ReactCodegen - ReactCommon: - :path: "../../node_modules/react-native/ReactCommon" - ReactNativeDependencies: - :podspec: "../../node_modules/react-native/third-party-podspecs/ReactNativeDependencies.podspec" - RNCClipboard: - :path: "../../node_modules/@react-native-clipboard/clipboard" - RNNitroSQLite: - :path: "../../packages/react-native-nitro-sqlite" - RNNitroSqliteVec: - :path: "../../node_modules/react-native-nitro-sqlite-vec" - RNScreens: - :path: "../../node_modules/react-native-screens" - SocketRocket: - :path: build/rndeps-facades/SocketRocket - Yoga: - :path: build/rncore-facades/Yoga - -SPEC CHECKSUMS: - boost: 8502bfdc46e2804408af2e163049ece181009af4 - DoubleConversion: 501a575c40c0b50c89685762dd3e415e6bb26fb0 - fast_float: 7c925d1cebf8328d4018d061f49377e9f887e3b4 - FBLazyVector: fdebac2dfe9c53bca49f8218fbdf1e24e36c8be0 - fmt: ba0886e864ebb21d14c98b2e12e164b8002f5b93 - glog: 3cf7cb46f743c4bc758ae3e6d9c15bd1b4cfd6d4 - hermes-engine: 6a00d96909f1648698fe5419972fe3c9e628755e - NitroModules: 92c2f230ec822ce8be72c8330fe292cdcf24e3a4 - RCT-Folly: 82921e585c0400eda46fac1068297aa9dfb035e4 - RCTDeprecation: e134f2a2c096a6450f5fcbbe949531f913a2ff04 - RCTRequired: f1a68295837ee8f91e112ed1b5694d12e7ff1784 - RCTSwiftUI: 4b21ec5b1f86acb9c96bb429100ad88d4023ed76 - RCTSwiftUIWrapper: 68bd9fac4e710259cb2b202472adc5f4d113e872 - RCTTypeSafety: 77078a9c26030dd84a6bdae74ed900159f89a098 - React: 8dafd0ef058191e9e7238cfa6b3deaa24398e5dd - React-bridging: 7c54be133225720d355418ec645943262a1aa5bb - React-callinvoker: b76a26472ac4f42362f18393379740ea003b2bc6 - React-Core: a831be15fcea0e345a24cb10d6cc0b87e9913d03 - React-Core-prebuilt: 0fd2555a42f40e7770ced1c7dfc5ee1dbfe041cd - React-CoreModules: a86fbe698fd817c17b3936832dc1106a130c4694 - React-cxxreact: 48ca56bd4f26de869478a803a5544b101a57cde6 - React-cxxstableapi: fea1bdba65658838a2582e2d211fc5b0fd1d31d8 - React-debug: d413aea8e974ee4362b4b8913c7b3be944788e63 - React-defaultsnativemodule: 3514f99a4ae7078f987563e400e24c24eb318836 - React-domnativemodule: 59be66200936fe915adb202b8ffa073ee2878b27 - React-Fabric: eb762ffff8f575de96e5c416174738c8e51cfdab - React-FabricComponents: 0f2c3e6e081c5cd859c9fb8b060b3cc7205bafa9 - React-FabricImage: e50334f0473af14bc2ca12f65a8a7fee359839eb - React-featureflags: 2bd99e0ccd64f0320a02c7d589f779b31bc758b8 - React-featureflagsnativemodule: 1e4ca2e7e386cb87f602d3c0dd2ed1d034988cd2 - React-graphics: bb85e3c7a30a9323ca1fcbae2212958964c60b85 - React-hermes: 9ce7aaf6784709e196ac51bfd89dd6c551e3fb4c - React-idlecallbacksnativemodule: 34f6f350a99ee90c4ba655ab7b7c047750194255 - React-ImageManager: f4efe88c800ad56056b089f60575c3e6b11d5825 - React-intersectionobservernativemodule: 0710821b9b6dac1b5f2c2d12871e54e8d9cfcc5b - React-jserrorhandler: e3cee4ff5a8a6ac9140d5ec55548b1dcf7ea1534 - React-jsi: 489de0620905b88a17ccb0ac2328046af43e7ebd - React-jsiexecutor: f0e2ae6d98b587d3505ebde246599ee3ad97cee1 - React-jsinspector: e715dc5199f3f5181235507326fa51aa9d2f2d3e - React-jsinspectorcdp: 4f25139f0722f2b027446ae073328807e5df137a - React-jsinspectornetwork: 7b4262a993bbe180c30c7c84bf0bcc50c440e6b9 - React-jsinspectortracing: 59683a44de6535592c2281d6b3e702832569cf15 - React-jsitooling: dd3db25eda3ce6522d4ad941e0471b3d4a895e8a - React-jsitracing: b13814b765648a561b42f4f65574ad523cf76b57 - React-logger: 3d2b406a780fed50ad0bbd07452b373c2a515308 - React-Mapbuffer: cf4026a5c35cd3598b648ce6f3ac6e8bfae12ad5 - React-microtasksnativemodule: 3c7c5f3624403317fe91b4ddefa86b60023552a8 - React-mutationobservernativemodule: 7284a91b3c7d7fb85b5d4ac04f7f8da811b22977 - react-native-safe-area-context: 7b143af09becaf26ba247b9a82d355f91b77b9b0 - React-NativeModulesApple: 52f3def085f129de1307e3eb78e26729ff70f421 - React-networking: e97a095de90a95bf811b887e2dfdb225f20fd493 - React-oscompat: 6865eead03a4aeba8d15b74cf168c7db3377cb63 - React-perflogger: f1466e0f46ce706aef73a559337eca85f51a40b7 - React-performancecdpmetrics: eb59528fed6350aac279bcb21066925c2b6a75ad - React-performancetimeline: 1f5ff676c0df6d8a186a044d44fa410b1551be49 - React-RCTActionSheet: 81662769b1f576e9c2e074deb41d6b83d1c7e29f - React-RCTAnimatedModuleProvider: a9829773197f782c19ad86c5438a2cc199203774 - React-RCTAnimation: ad9dd2c6c3b4d07e583c2b79354858c4f34481a0 - React-RCTAppDelegate: 70398a06e10ada27cdf77dc2b43f883126a91ac0 - React-RCTBlob: f3d86b491b8f28c36ced0cb750878b62f72e1380 - React-RCTFabric: 3767f97183c40ba3dadf007b17a01be2cd4e632a - React-RCTFBReactNativeSpec: 0ccd140627de551daa70ff0b90b8533622127b9f - React-RCTImage: 46ad408f777dce991d4095d7e73a568212be6baa - React-RCTLinking: 547427cc885bfa74b3cbba405971c5270defde7a - React-RCTNetwork: 52c00c0fe07327df9b9fe9881b4f5550dc5ced37 - React-RCTRuntime: 081fd457d305c3aee76c335c568e693ed107f48e - React-RCTSettings: 9cd0b2be41404574ec280b6b8e73c2208c842050 - React-RCTText: 5a6d38456eabc0a1a7c0d47d592390d35c6de57c - React-RCTVibration: c1815b4f471462954a4b7d8835155e053cec5412 - React-rendererconsistency: b8a15b544e2ccdab6ecf101eca394ec5220dafe9 - React-renderercss: 8131cc0b15780d74e2b37946592ce12eb9bfecd3 - React-rendererdebug: fb6e7dc1ec63c856170b88c1fd01bb103ce9223b - React-resizeobservernativemodule: b67f74c61268664cacc7cce4046513c5df1a63ef - React-RuntimeApple: 9b00a3d025fe85e18bfed4815c15fd7b42386e9c - React-RuntimeCore: 29d5a812271391b797e60461157a939c490aebea - React-runtimeexecutor: 59e6d950badc34655ca87c8ce3cf4159b8064332 - React-RuntimeHermes: b123e7cd8e900b300ff861ed368f7d99589b62d2 - React-runtimescheduler: 0dc48303a33d9a7fb332b934158b8083d8f08447 - React-timing: 67b61a284a1862cdf3124e56cbf9eff3a443bac2 - React-utils: bbbcc3ce4efc8d8f434d87ed439881e8fc9ae968 - React-viewtransitionnativemodule: 22ae58bc9260c2b9651b1a8fad1ef37ce9996ec1 - React-webperformancenativemodule: d5706a015640e1e52a3b7e85e11a91bdff982ff7 - ReactAppDependencyProvider: 782ee9546c9cd3b53b73f1e9e3dd728540085fc7 - ReactCodegen: f6ec2e701fd5bdea51130af52261c517363b726d - ReactCommon: 145a14b942b19fc2fe38927f261955ada56978aa - ReactNativeDependencies: d3b7423ba1e52525e42085c8470109abde583d2e - RNCClipboard: 27d5e530990704ebda46ddd789fb816fbca618f6 - RNNitroSQLite: 24196ad7dd39934bd6341ed266a17a79f5da8a79 - RNNitroSqliteVec: bdf5ec9611da0f0fcc70443951c7d5a790d02dc4 - RNScreens: 96c6d636ee9b2b4c3f062db05eecc59217e7f7df - SocketRocket: 37aec555668fb852ec12e3c0de59a86ca58f0871 - Yoga: d1c536142c5ff8ec8cd856ab2a7c227a1d875c8e - -PODFILE CHECKSUM: fd5bc9f335e919fdcd0b0eaf293b8e68d12e6ed4 - -COCOAPODS: 1.15.2 diff --git a/example/package.json b/example/package.json index d6c7466b..2508ce30 100644 --- a/example/package.json +++ b/example/package.json @@ -10,9 +10,9 @@ "start": "react-native start", "android": "react-native run-android", "ios": "react-native run-ios", + "spm": "react-native spm", "macos": "bun --cwd macos macos", "bundle-install": "bundle install", - "pods": "cd ios && bundle exec pod install", "pods:macos": "cd macos && bundle exec pod install", "typecheck": "tsc --build", "lint": "eslint \"**/*.{js,mjs,ts,tsx}\" --fix", diff --git a/packages/react-native-nitro-sqlite-vec/Package.swift b/packages/react-native-nitro-sqlite-vec/Package.swift new file mode 100644 index 00000000..c98314b1 --- /dev/null +++ b/packages/react-native-nitro-sqlite-vec/Package.swift @@ -0,0 +1,53 @@ +// swift-tools-version: 6.2 + +import Foundation +import PackageDescription + +let useSystemSQLite = Context.environment["NITRO_SQLITE_USE_PHONE_VERSION"] == "1" +let defines: [(name: String, value: String)] = + [("SQLITE_CORE", "1"), ("SQLITE_VEC_STATIC", "1")] + (useSystemSQLite ? [("NITRO_SQLITE_USE_PHONE_VERSION", "1")] : []) +// sqlite-vec must use the core's sqlite3.h, which renames the bundled SQLite symbols. +let coreSQLiteHeaders = findCoreSQLiteHeaders() + +let package = Package( + name: "RNNitroSqliteVec", + platforms: [.iOS(.v16)], + products: [ + .library(name: "RNNitroSqliteVec", targets: ["RNNitroSqliteVec"]) + ], + targets: [ + .target( + name: "RNNitroSqliteVec", + path: "cpp", + publicHeadersPath: ".", + cSettings: defines.map { .define($0.name, to: $0.value) } + [ + .unsafeFlags(["-I", coreSQLiteHeaders]), + .disableWarning("shorten-64-to-32"), + .disableWarning("comma"), + .disableWarning("unreachable-code"), + .disableWarning("conditional-uninitialized"), + ], + cxxSettings: defines.map { .define($0.name, to: $0.value) } + [ + .unsafeFlags(["-I", coreSQLiteHeaders]) + ] + ) + ], + cxxLanguageStandard: .cxx20 +) + +/// Finds `cpp/sqlite` of react-native-nitro-sqlite next to this package, either through React Native's +/// `libs/` alias or in node_modules. +func findCoreSQLiteHeaders() -> String { + let parent = URL(fileURLWithPath: Context.packageDirectory).deletingLastPathComponent() + let candidates = ["RNNitroSQLite", "react-native-nitro-sqlite"].map { + parent.appendingPathComponent($0).appendingPathComponent("cpp/sqlite") + } + guard + let headers = candidates.first(where: { + FileManager.default.fileExists(atPath: $0.appendingPathComponent("sqlite3.h").path) + }) + else { + fatalError("react-native-nitro-sqlite-vec requires react-native-nitro-sqlite. Install it in your app.") + } + return headers.path +} diff --git a/packages/react-native-nitro-sqlite-vec/RNNitroSqliteVec.podspec b/packages/react-native-nitro-sqlite-vec/RNNitroSqliteVec.podspec index b8b36147..6e69fbe7 100644 --- a/packages/react-native-nitro-sqlite-vec/RNNitroSqliteVec.podspec +++ b/packages/react-native-nitro-sqlite-vec/RNNitroSqliteVec.podspec @@ -2,12 +2,8 @@ require "json" package = JSON.parse(File.read(File.join(__dir__, "package.json"))) -# Apple-platform opt-in (NITRO_SQLITE_VEC=1); compile sqlite-vec and static-link into the core's sqlite3. -nitro_sqlite_vec = ENV['NITRO_SQLITE_VEC'] == '1' - -# The core's bundled sqlite3.h (compiled with SQLITE_CORE to link it directly). -core_sqlite_headers = File.expand_path(File.join(__dir__, "..", "react-native-nitro-sqlite", "cpp", "sqlite")) - +# React Native CLI 20 still requires a podspec to discover iOS dependencies. +# Native sources are built through Package.swift. Pod::Spec.new do |s| s.name = "RNNitroSqliteVec" s.version = package["version"] @@ -15,24 +11,10 @@ Pod::Spec.new do |s| s.homepage = "https://github.com/margelo/react-native-nitro-sqlite" s.license = "MIT" s.authors = "Margelo" + s.source = { :git => "https://github.com/margelo/react-native-nitro-sqlite.git", :tag => "#{s.version}" } s.platforms = { - :ios => min_ios_version_supported, + :ios => "16.0", :visionos => "1.0", :osx => "10.13", } - s.source = { :git => "https://github.com/margelo/react-native-nitro-sqlite.git", :tag => "#{s.version}" } - - if nitro_sqlite_vec - s.source_files = "cpp/**/*.{c,cpp,h,hpp}" - s.pod_target_xcconfig = { - "GCC_PREPROCESSOR_DEFINITIONS" => "$(inherited) SQLITE_CORE=1 SQLITE_VEC_STATIC=1" + (ENV['NITRO_SQLITE_USE_PHONE_VERSION'] == '1' ? " NITRO_SQLITE_USE_PHONE_VERSION=1" : ""), - "USER_HEADER_SEARCH_PATHS" => "\"#{core_sqlite_headers}\"", - "HEADER_SEARCH_PATHS" => "\"#{core_sqlite_headers}\"", - "WARNING_CFLAGS" => "-Wno-shorten-64-to-32 -Wno-comma -Wno-unreachable-code -Wno-conditional-uninitialized", - } - s.dependency "RNNitroSQLite" - else - # Disabled: ship headers only, compile nothing. - s.source_files = "cpp/**/*.{h,hpp}" - end end diff --git a/packages/react-native-nitro-sqlite-vec/cpp/NitroSQLiteVecOnLoad.mm b/packages/react-native-nitro-sqlite-vec/cpp/NitroSQLiteVecOnLoad.mm new file mode 100644 index 00000000..69dcb7c5 --- /dev/null +++ b/packages/react-native-nitro-sqlite-vec/cpp/NitroSQLiteVecOnLoad.mm @@ -0,0 +1,14 @@ +#import "NitroSQLiteVecRegisterVectorExtensions.hpp" +#import + +// Swift Package Manager builds this package separately from the core, so register before any database opens. +@interface NitroSQLiteVecOnLoad : NSObject +@end + +@implementation NitroSQLiteVecOnLoad + ++ (void)load { + margelo::rnnitrosqlitevec::registerVectorExtensions(); +} + +@end diff --git a/packages/react-native-nitro-sqlite-vec/package.json b/packages/react-native-nitro-sqlite-vec/package.json index 73da8329..30fbc245 100644 --- a/packages/react-native-nitro-sqlite-vec/package.json +++ b/packages/react-native-nitro-sqlite-vec/package.json @@ -11,6 +11,7 @@ "!**/__tests__", "cpp", "RNNitroSqliteVec.podspec", + "Package.swift", "react-native.config.js", "README.md" ], @@ -65,5 +66,8 @@ "statements": 100 } } + }, + "swiftpmConfig": { + "name": "RNNitroSqliteVec" } } diff --git a/packages/react-native-nitro-sqlite-vec/react-native.config.js b/packages/react-native-nitro-sqlite-vec/react-native.config.js index 2faef343..b440dc7a 100644 --- a/packages/react-native-nitro-sqlite-vec/react-native.config.js +++ b/packages/react-native-nitro-sqlite-vec/react-native.config.js @@ -1,4 +1,4 @@ -// CocoaPods autolinks this package on Apple platforms; Android compiles it via the core's CMake. +// Swift Package Manager builds this package on iOS; Android compiles it via the core's CMake. module.exports = { dependency: { platforms: { diff --git a/packages/react-native-nitro-sqlite/Package.swift b/packages/react-native-nitro-sqlite/Package.swift new file mode 100644 index 00000000..a826b10c --- /dev/null +++ b/packages/react-native-nitro-sqlite/Package.swift @@ -0,0 +1,363 @@ +// swift-tools-version: 6.2 + +import Foundation +import PackageDescription + +let package = Package( + name: "RNNitroSQLite", + platforms: [.iOS(.v16)] +) + +// SwiftPM caches the evaluated manifest by its contents and environment, not by the package.json it reads. +// After changing nitroSQLite settings, delete ~/Library/Caches/org.swift.swiftpm/manifests and rebuild. +let sqlite = SQLiteBuildOptions.resolve() + +addNitrogenTargets( + to: package, + // SwiftPM cannot build Objective-C++ in a Swift target, so OnLoad.mm builds with the C++ sources. + swiftSources: [], + cxxSources: ["cpp", "ios/OnLoad.mm"], + cxxSettings: sqlite.defines.map { .define($0.name, to: $0.value) } +) + +// addNitrogenTargets only applies C++ settings, but the bundled sqlite3.c is compiled as C. +for target in package.targets where target.name == "RNNitroSQLiteCxx" { + target.cSettings = sqlite.defines.map { .define($0.name, to: $0.value) } + [ + .disableWarning("shorten-64-to-32"), + .disableWarning("comma"), + .disableWarning("unreachable-code"), + .disableWarning("conditional-uninitialized"), + .disableWarning("deprecated-declarations"), + ] + if sqlite.useSystemSQLite { + target.exclude.append("cpp/sqlite/sqlite3.c") + target.linkerSettings = [.linkedLibrary("sqlite3")] + } +} + +/// SQLite compile options from the app's `nitroSQLite` package.json settings and environment overrides. +struct SQLiteBuildOptions { + var defines: [(name: String, value: String?)] + var useSystemSQLite: Bool + + static func resolve() -> SQLiteBuildOptions { + let config = readAppConfig() + let threadSafe = + readEnvironmentFlag("NITRO_SQLITE_THREADSAFE") ?? readConfigFlag(config, "threadSafe") ?? true + let performanceMode = + readEnvironmentFlag("NITRO_SQLITE_PERFORMANCE_MODE") ?? readConfigFlag(config, "performanceMode") ?? true + let enableRTree = readConfigFlag(config, "enableRTree") ?? true + let useSystemSQLite = Context.environment["NITRO_SQLITE_USE_PHONE_VERSION"] == "1" + + var defines: [(name: String, value: String?)] = [("SQLITE_THREADSAFE", threadSafe ? "1" : "0")] + // SQLite checks whether this macro is defined, so disabling RTree must omit it. + if enableRTree { + defines.append(("SQLITE_ENABLE_RTREE", "1")) + } + if performanceMode { + defines += [ + ("SQLITE_DQS", "0"), + ("SQLITE_DEFAULT_MEMSTATUS", "0"), + ("SQLITE_DEFAULT_WAL_SYNCHRONOUS", "1"), + ("SQLITE_LIKE_DOESNT_MATCH_BLOBS", "1"), + ("SQLITE_MAX_EXPR_DEPTH", "0"), + ("SQLITE_OMIT_DEPRECATED", "1"), + ("SQLITE_OMIT_PROGRESS_CALLBACK", "1"), + ("SQLITE_OMIT_SHARED_CACHE", "1"), + ("SQLITE_USE_ALLOCA", "1"), + ] + } + if useSystemSQLite { + defines.append(("NITRO_SQLITE_USE_PHONE_VERSION", "1")) + } + // Like nitroSqliteFlags on Android, custom definitions replace defaults with the same name. + let customDefines = readCustomDefines(config) + let customNames = Set(customDefines.map(\.name)) + defines.removeAll { + customNames.contains($0.name) || ($0.name == "SQLITE_THREADSAFE" && customNames.contains("THREADSAFE")) + } + return SQLiteBuildOptions(defines: defines + customDefines, useSystemSQLite: useSystemSQLite) + } +} + +/// A JSON value that only distinguishes booleans and strings, so other settings can be rejected. +enum ConfigValue: Decodable { + case bool(Bool) + case string(String) + case other + + init(from decoder: Decoder) throws { + let container = try decoder.singleValueContainer() + if let value = try? container.decode(Bool.self) { + self = .bool(value) + } else if let value = try? container.decode(String.self) { + self = .string(value) + } else { + self = .other + } + } +} + +struct AppPackage: Decodable { + var nitroSQLite: [String: ConfigValue]? +} + +/// Reads `nitroSQLite` from the nearest package.json above this package, which is the app's. +/// React Native links this package through `/ios/build/generated/autolinking/libs/RNNitroSQLite`. +func readAppConfig() -> [String: ConfigValue] { + var directory = URL(fileURLWithPath: Context.packageDirectory).deletingLastPathComponent() + while directory.path != "/" { + let packageJson = directory.appendingPathComponent("package.json") + if let data = FileManager.default.contents(atPath: packageJson.path) { + do { + return try JSONDecoder().decode(AppPackage.self, from: data).nitroSQLite ?? [:] + } catch DecodingError.typeMismatch(_, let context) where context.codingPath.count == 1 { + fatalError("nitroSQLite in package.json must be an object") + } catch { + fatalError("Failed to read \(packageJson.path): \(error)") + } + } + directory.deleteLastPathComponent() + } + return [:] +} + +func readConfigFlag(_ config: [String: ConfigValue], _ name: String) -> Bool? { + switch config[name] { + case nil: + return nil + case .bool(let value): + return value + case .string, .other: + fatalError("nitroSQLite.\(name) in package.json must be true or false") + } +} + +/// Parses `nitroSQLite.iosSqliteFlags`, a string of `-DNAME` or `-DNAME=VALUE` definitions. +func readCustomDefines(_ config: [String: ConfigValue]) -> [(name: String, value: String?)] { + let flags: String + switch config["iosSqliteFlags"] { + case nil: + return [] + case .string(let value): + flags = value + case .bool, .other: + fatalError("nitroSQLite.iosSqliteFlags in package.json must be a string") + } + return flags.split(whereSeparator: \.isWhitespace).map { flag in + let definition = flag.dropFirst(2).split(separator: "=", maxSplits: 1, omittingEmptySubsequences: false) + guard flag.hasPrefix("-D"), let name = definition.first, name.first?.isNumber == false, + name.allSatisfy({ $0.isASCII && ($0 == "_" || $0.isLetter || $0.isNumber) }) + else { + fatalError("nitroSQLite.iosSqliteFlags in package.json must only contain -D definitions, found \(flag)") + } + return (String(name), definition.count > 1 ? String(definition[1]) : nil) + } +} + +func readEnvironmentFlag(_ name: String) -> Bool? { + guard let value = Context.environment[name] else { + return nil + } + switch value { + case "true", "1": + return true + case "false", "0": + return false + default: + fatalError("\(name) must be true, false, 1, or 0") + } +} + +// nitrogen:begin +// +// This section was generated by nitrogen. DO NOT MODIFY THIS SECTION. +// Running nitrogen replaces everything between "nitrogen:begin" and "nitrogen:end". +// https://github.com/margelo/nitro +// Copyright © Marc Rousavy @ Margelo +// + +// swift-format-ignore +import Foundation + +/// Adds the `RNNitroSQLite` library and its targets to `package`: +/// +/// - `RNNitroSQLiteCxx`: The generated cross-platform C++ specs, and your C++ sources. +/// - `RNNitroSQLiteAppleCxx`: The generated C++ bridge declarations that Swift imports. +/// - `RNNitroSQLite`: Your Swift sources and the generated Swift specs. +/// - `RNNitroSQLiteSwiftBridge`: The generated C++ wrappers that call into Swift, and autolinking. +/// +/// It also adds the packages these targets depend on: React Native's `ReactNative` package, +/// `NitroModules`, and the Nitro modules whose types the specs use. +/// React Native's autolinking references every library through `build/generated/autolinking/libs/`, +/// and SwiftPM resolves the relative package paths against that location. +/// List every Nitro module this library depends on in `swiftpmConfig.dependencies` in package.json, +/// so React Native's autolinking links it too. +/// Packages without a C++ language standard use C++20. +/// +/// - Parameters: +/// - package: The package to add the library and its targets to. +/// - swiftSources: Directories or files containing your Swift sources, relative to the package root. +/// Paths that don't exist are skipped. +/// - cxxSources: Directories or files containing your C++ sources, relative to the package root. +/// Paths that don't exist are skipped. Their directories are also added to the header search paths. +/// - dependencies: Additional dependencies of all targets. +/// - swiftSettings: Additional Swift settings of the `RNNitroSQLite` Swift target. +/// - cxxSettings: Additional C++ settings of the `RNNitroSQLiteCxx` and `RNNitroSQLiteSwiftBridge` targets. +// swift-format-ignore +func addNitrogenTargets( + to package: Package, + swiftSources: [String] = ["ios"], + cxxSources: [String] = ["cpp"], + dependencies: [Target.Dependency] = [], + swiftSettings: [SwiftSetting] = [], + cxxSettings: [CXXSetting] = [] +) { + package.dependencies += [ + .package(name: "ReactNative", path: "../../../../xcframeworks"), + .package(name: "NitroModules", path: "../NitroModules"), + ] + let nitroModuleDependencies: [Target.Dependency] = [ + .product(name: "NitroModules", package: "NitroModules"), + ] + dependencies + + let packageDirectory = URL(fileURLWithPath: Context.packageDirectory) + func exists(_ path: String) -> Bool { + return FileManager.default.fileExists(atPath: packageDirectory.appendingPathComponent(path).path) + } + let userSwiftSources = swiftSources.filter(exists) + let userCxxSources = cxxSources.filter(exists) + func userHeaderSearchPaths(relativeTo targetPath: String) -> [CXXSetting] { + let targetComponents = packageDirectory.appendingPathComponent(targetPath).standardizedFileURL.pathComponents + return userCxxSources.map { source in + let sourceURL = packageDirectory.appendingPathComponent(source) + var isDirectory: ObjCBool = false + FileManager.default.fileExists(atPath: sourceURL.path, isDirectory: &isDirectory) + let directory = isDirectory.boolValue ? sourceURL : sourceURL.deletingLastPathComponent() + let headerComponents = directory.standardizedFileURL.pathComponents + let commonCount = zip(targetComponents, headerComponents).prefix { $0.0 == $0.1 }.count + let relativeComponents = Array(repeating: "..", count: targetComponents.count - commonCount) + + headerComponents.dropFirst(commonCount) + return .headerSearchPath(relativeComponents.isEmpty ? "." : relativeComponents.joined(separator: "/")) + } + } + + // React Native's prebuilt React.framework is either Debug or Release, keep the C++ ABI in sync. + let releaseSettings: [CXXSetting] = [ + .define("DEBUG", .when(configuration: .debug)), + .define("NDEBUG", .when(configuration: .release)), + ] + let commonCxxSettings: [CXXSetting] = releaseSettings + [ + .disableWarning("nullability-extension"), + ] + let reactNativeDependencies: [Target.Dependency] = [ + .product(name: "ReactNativeHeaders", package: "ReactNative"), + .product(name: "ReactNativeDependenciesHeaders", package: "ReactNative"), + ] + + let cxxSourcesInTarget = ["nitrogen/generated/shared/c++"] + userCxxSources + let cxxTarget: Target = .target( + name: "RNNitroSQLiteCxx", + dependencies: nitroModuleDependencies + reactNativeDependencies, + path: ".", + exclude: nitrogenExcludes(in: ".", keeping: cxxSourcesInTarget) + + ["nitrogen/generated/shared/c++/include"], + sources: cxxSourcesInTarget, + publicHeadersPath: "nitrogen/generated/shared/c++/include", + cxxSettings: commonCxxSettings + userHeaderSearchPaths(relativeTo: ".") + cxxSettings + ) + + let appleCxxTarget: Target = .target( + name: "RNNitroSQLiteAppleCxx", + dependencies: ["RNNitroSQLiteCxx"] + nitroModuleDependencies, + path: "nitrogen/generated/ios/RNNitroSQLiteAppleCxx", + cxxSettings: commonCxxSettings + userHeaderSearchPaths(relativeTo: "nitrogen/generated/ios/RNNitroSQLiteAppleCxx") + ) + + let swiftSourcesInTarget = userSwiftSources + [ + "nitrogen/generated/ios/swift", + ] + let swiftDependencies: [Target.Dependency] = ["RNNitroSQLiteAppleCxx"] + nitroModuleDependencies + let generatedSwiftSettings: [SwiftSetting] = [ + .swiftLanguageMode(.v6), + .enableUpcomingFeature("InternalImportsByDefault"), + .interoperabilityMode(.Cxx), + .unsafeFlags(["-Xfrontend", "-clang-header-expose-decls=has-expose-attr-or-stdlib"]), + // Swift leaves declarations that use another module's Swift types, like AnyJSON, + // out of the generated header unless that module's header is exposed to it. + .unsafeFlags([ + "-Xfrontend", "-clang-header-expose-module", "-Xfrontend", "NitroModules=NitroModules-Swift.h", + ]), + ] + let swiftTarget: Target = .target( + name: "RNNitroSQLite", + dependencies: swiftDependencies, + path: ".", + exclude: nitrogenExcludes(in: ".", keeping: swiftSourcesInTarget), + sources: swiftSourcesInTarget, + cxxSettings: releaseSettings, + swiftSettings: generatedSwiftSettings + swiftSettings + ) + + let swiftBridgeSources = [ + "c++", + "RNNitroSQLite-Swift-Cxx-Bridge.cpp", + "RNNitroSQLiteAutolinking.cpp", + "RNNitroSQLiteAutolinking.mm", + ].filter { exists("nitrogen/generated/ios/" + $0) } + let swiftBridgeSettings: [CXXSetting] = [ + // Include Swift's generated header textually after the C++ declarations it uses. + // Swift Build and Xcode provide the generated header directory. + .unsafeFlags(["-I${GENERATED_MODULEMAP_DIR}", "-fno-modules"]), + ] + let swiftBridgeTarget: Target = .target( + name: "RNNitroSQLiteSwiftBridge", + dependencies: [ + "RNNitroSQLite", + "RNNitroSQLiteAppleCxx", + ] + nitroModuleDependencies + reactNativeDependencies, + path: "nitrogen/generated/ios", + exclude: nitrogenExcludes(in: "nitrogen/generated/ios", keeping: swiftBridgeSources) + + ["c++/include"], + sources: swiftBridgeSources, + publicHeadersPath: "c++/include", + cxxSettings: commonCxxSettings + userHeaderSearchPaths(relativeTo: "nitrogen/generated/ios") + swiftBridgeSettings + cxxSettings + ) + + package.products.append( + .library(name: "RNNitroSQLite", targets: ["RNNitroSQLiteCxx", "RNNitroSQLite", "RNNitroSQLiteSwiftBridge"]) + ) + package.targets += [cxxTarget, appleCxxTarget, swiftTarget, swiftBridgeTarget] + if package.cxxLanguageStandard == nil { + package.cxxLanguageStandard = .cxx20 + } +} + +/// Returns the files and directories in `path` that are neither `sources` nor contain them. +/// Excluding them stops SwiftPM from scanning unrelated files, like `node_modules`. +// swift-format-ignore +func nitrogenExcludes(in path: String, keeping sources: [String]) -> [String] { + var parents: Set = [""] + for source in sources { + var components = source.split(separator: "/").dropLast() + while !components.isEmpty { + parents.insert(components.joined(separator: "/")) + components = components.dropLast() + } + } + + let targetURL = URL(fileURLWithPath: Context.packageDirectory).appendingPathComponent(path) + var excludes: [String] = [] + for parent in parents.sorted() { + let parentURL = targetURL.appendingPathComponent(parent) + let entries = (try? FileManager.default.contentsOfDirectory(atPath: parentURL.path)) ?? [] + for entry in entries.sorted() where !entry.hasPrefix(".") { + let entryPath = parent.isEmpty ? entry : "\(parent)/\(entry)" + if !sources.contains(entryPath) && !parents.contains(entryPath) { + excludes.append(entryPath) + } + } + } + return excludes +} +// nitrogen:end diff --git a/packages/react-native-nitro-sqlite/RNNitroSQLite.podspec b/packages/react-native-nitro-sqlite/RNNitroSQLite.podspec index fb21f117..121669d3 100644 --- a/packages/react-native-nitro-sqlite/RNNitroSQLite.podspec +++ b/packages/react-native-nitro-sqlite/RNNitroSQLite.podspec @@ -1,54 +1,9 @@ require "json" package = JSON.parse(File.read(File.join(__dir__, "package.json"))) -app_package_json_path = File.expand_path("../package.json", Pod::Config.instance.installation_root) -app_package = File.exist?(app_package_json_path) ? JSON.parse(File.read(app_package_json_path)) : {} -app_config = app_package.fetch("nitroSQLite", {}) - -unless app_config.is_a?(Hash) - raise "nitroSQLite in package.json must be an object" -end - -enable_rtree = app_config.fetch("enableRTree", true) -unless [true, false].include?(enable_rtree) - raise "nitroSQLite.enableRTree in package.json must be true or false" -end - -if ENV.key?("NITRO_SQLITE_THREADSAFE") - thread_safe_value = ENV["NITRO_SQLITE_THREADSAFE"] - unless %w[true false 1 0].include?(thread_safe_value) - raise "NITRO_SQLITE_THREADSAFE must be true, false, 1, or 0" - end - - sqlite_threadsafe = %w[true 1].include?(thread_safe_value) ? "1" : "0" -else - thread_safe_value = app_config.fetch("threadSafe", true) - unless [true, false].include?(thread_safe_value) - raise "nitroSQLite.threadSafe in package.json must be true or false" - end - - sqlite_threadsafe = thread_safe_value ? "1" : "0" -end - -if ENV.key?("NITRO_SQLITE_PERFORMANCE_MODE") - performance_mode_value = ENV["NITRO_SQLITE_PERFORMANCE_MODE"] - unless %w[true false 1 0].include?(performance_mode_value) - raise "NITRO_SQLITE_PERFORMANCE_MODE must be true, false, 1, or 0" - end - - performance_mode = %w[true 1].include?(performance_mode_value) -else - performance_mode = app_config.fetch("performanceMode", true) - - unless [true, false].include?(performance_mode) - raise "nitroSQLite.performanceMode in package.json must be true or false" - end -end -folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1' -log_message = lambda do |message| - puts "\e[34m#{message}\e[0m" -end +# React Native CLI 20 still requires a podspec to discover iOS dependencies. +# Native sources, dependencies, and SQLite build options are in Package.swift. Pod::Spec.new do |s| s.name = "RNNitroSQLite" s.version = package["version"] @@ -56,55 +11,10 @@ Pod::Spec.new do |s| s.homepage = package["homepage"] s.license = package["license"] s.authors = package["author"] + s.source = { :git => "https://github.com/margelo/react-native-nitro-sqlite.git", :tag => "#{s.version}" } s.platforms = { - :ios => min_ios_version_supported, + :ios => "16.0", :visionos => "1.0", :osx => "10.13", } - s.source = { :git => "https://github.com/margelo/react-native-nitro-sqlite.git", :tag => "#{s.version}" } - - # Opt-in vector search (NITRO_SQLITE_VEC=1); the companion pod compiles the sources. - nitro_sqlite_vec = ENV['NITRO_SQLITE_VEC'] == '1' - nitro_sqlite_vec_cpp = File.expand_path(File.join(__dir__, "..", "react-native-nitro-sqlite-vec", "cpp")) - - s.source_files = [ - # Apple platform implementation (Swift) - "ios/**/*.{swift}", - # Apple platform autolinking/registration (Objective-C++) - "ios/**/*.{h,hpp,m,mm}", - # Implementation (C++ objects) - "cpp/**/*.{h,hpp,c,cpp}" - ] - - inherited_cflags = '$(inherited)' - optimized_cflags = '-DSQLITE_DQS=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS=1 -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_OMIT_DEPRECATED=1 -DSQLITE_OMIT_PROGRESS_CALLBACK=1 -DSQLITE_OMIT_SHARED_CACHE=1 -DSQLITE_USE_ALLOCA=1' - - log_message.call("SQLite thread safety: SQLITE_THREADSAFE=#{sqlite_threadsafe}") - log_message.call("SQLite performance mode: #{performance_mode ? "enabled" : "disabled"}") - performance_cflags = performance_mode ? " #{optimized_cflags}" : "" - # SQLite checks whether this macro is defined, so disabling RTree must omit it. - rtree_cflags = enable_rtree ? " -DSQLITE_ENABLE_RTREE=1" : "" - other_cflags = "#{inherited_cflags}#{performance_cflags}#{rtree_cflags} -DSQLITE_THREADSAFE=#{sqlite_threadsafe} " - - s.pod_target_xcconfig = { - :GCC_PREPROCESSOR_DEFINITIONS => "HAVE_FULLFSYNC=1", - :WARNING_CFLAGS => "-Wno-shorten-64-to-32 -Wno-comma -Wno-unreachable-code -Wno-conditional-uninitialized -Wno-deprecated-declarations", - 'CLANG_CXX_LANGUAGE_STANDARD' => 'c++20', - 'CLANG_CXX_LIBRARY' => 'libc++', - 'DEFINES_MODULE' => 'YES', - "HEADER_SEARCH_PATHS" => "\"${PODS_ROOT}/RCT-Folly\"" + (nitro_sqlite_vec ? " \"#{nitro_sqlite_vec_cpp}\"" : ""), - "GCC_PREPROCESSOR_DEFINITIONS" => "$(inherited) FOLLY_NO_CONFIG FOLLY_CFG_NO_COROUTINES" + (nitro_sqlite_vec ? " NITRO_SQLITE_VEC=1" : "") + (ENV['NITRO_SQLITE_USE_PHONE_VERSION'] == '1' ? " NITRO_SQLITE_USE_PHONE_VERSION=1" : ""), - "OTHER_CPLUSPLUSFLAGS" => folly_compiler_flags, - "OTHER_CFLAGS" => other_cflags, - } - - load 'nitrogen/generated/ios/RNNitroSQLite+autolinking.rb' - add_nitrogen_files(s) - - install_modules_dependencies(s) - - if ENV['NITRO_SQLITE_USE_PHONE_VERSION'] == '1' then - s.exclude_files = "cpp/sqlite/sqlite3.c", "cpp/sqlite/sqlite3.h" - s.library = "sqlite3" - end end diff --git a/packages/react-native-nitro-sqlite/ios/OnLoad.mm b/packages/react-native-nitro-sqlite/ios/OnLoad.mm index e6aa2920..58c39394 100644 --- a/packages/react-native-nitro-sqlite/ios/OnLoad.mm +++ b/packages/react-native-nitro-sqlite/ios/OnLoad.mm @@ -1,7 +1,6 @@ #import #import -#import "RNNitroSQLite-Swift-Cxx-Umbrella.hpp" -#import "HybridNitroSQLite.hpp" +#import "hybridObjects/HybridNitroSQLite.hpp" #if TARGET_OS_OSX static NSString *macOSDatabaseDirectory(void) { diff --git a/packages/react-native-nitro-sqlite/ios/RNNitroSQLite-Swift.h b/packages/react-native-nitro-sqlite/ios/RNNitroSQLite-Swift.h deleted file mode 100644 index 6f70f09b..00000000 --- a/packages/react-native-nitro-sqlite/ios/RNNitroSQLite-Swift.h +++ /dev/null @@ -1 +0,0 @@ -#pragma once diff --git a/packages/react-native-nitro-sqlite/package.json b/packages/react-native-nitro-sqlite/package.json index 546e2194..e13ade62 100644 --- a/packages/react-native-nitro-sqlite/package.json +++ b/packages/react-native-nitro-sqlite/package.json @@ -51,6 +51,7 @@ "cpp", "nitrogen", "RNNitroSQLite.podspec", + "Package.swift", "!lib/typescript/example", "!android/build", "!android/.cxx", @@ -174,5 +175,11 @@ } ] ] + }, + "swiftpmConfig": { + "name": "RNNitroSQLite", + "dependencies": [ + "react-native-nitro-modules" + ] } } diff --git a/patches/@react-native-clipboard+clipboard+1.16.3.patch b/patches/@react-native-clipboard+clipboard+1.16.3.patch new file mode 100644 index 00000000..69fc3d4a --- /dev/null +++ b/patches/@react-native-clipboard+clipboard+1.16.3.patch @@ -0,0 +1,46 @@ +diff --git a/node_modules/@react-native-clipboard/clipboard/Package.swift b/node_modules/@react-native-clipboard/clipboard/Package.swift +new file mode 100644 +index 0000000..324df4b +--- /dev/null ++++ b/node_modules/@react-native-clipboard/clipboard/Package.swift +@@ -0,0 +1,40 @@ ++// swift-tools-version: 6.0 ++// AUTO-SCAFFOLDED by react-native spm scaffold — safe to edit & commit via patch-package. ++// AUTO-SCAFFOLDED-VERSION: 20 ++// Cache slot: 0.88.0/dual-flavor ++// Edit the contents below if needed and re-run `npx patch-package ` ++// to persist across `npm install`. To regenerate from the podspec, remove ++// this file (or just this marker) and re-run `npx react-native spm scaffold`. ++// ++// Package references are plain relative paths, computed when this file was ++// scaffolded. They stay correct because the file is re-scaffolded per app ++// and cache slot, and any node_modules relayout reinstalls this package ++// (dropping the file) anyway. ++ ++import PackageDescription ++ ++let package = Package( ++ name: "RNCClipboard", ++ platforms: [.iOS("16.6")], ++ products: [ ++ .library(name: "RNCClipboard", targets: ["RNCClipboardObjC"]), ++ ], ++ dependencies: [ ++ .package(name: "ReactNative", path: "../../../../xcframeworks"), ++ .package(name: "React-GeneratedCode", path: "../../../ios"), ++ ], ++ targets: [ ++ .target( ++ // A target named like ios/RNCClipboard.h would make it an umbrella header, which SwiftPM rejects next to the .xcodeproj. ++ name: "RNCClipboardObjC", ++ dependencies: [.product(name: "ReactHeaders", package: "ReactNative"), .product(name: "ReactNativeHeaders", package: "ReactNative"), .product(name: "ReactNativeDependenciesHeaders", package: "ReactNative"), .product(name: "ReactAppHeaders", package: "React-GeneratedCode")], ++ path: "ios", ++ exclude: ["RNCClipboard.xcodeproj"], ++ publicHeadersPath: ".", ++ cSettings: [], ++ cxxSettings: [.unsafeFlags(["-DFOLLY_NO_CONFIG", "-DFOLLY_MOBILE=1", "-DFOLLY_USE_LIBCPP=1", "-Wno-comma", "-Wno-shorten-64-to-32", "-DRCT_NEW_ARCH_ENABLED"]), .define("DEBUG", .when(configuration: .debug)), .define("NDEBUG", .when(configuration: .release))], ++ linkerSettings: [.linkedFramework("UIKit"), .linkedFramework("Foundation"), .linkedFramework("CoreGraphics"), .linkedFramework("MobileCoreServices")] ++ ), ++ ], ++ cxxLanguageStandard: .cxx20 ++) diff --git a/patches/react-native-screens+4.30.0.patch b/patches/react-native-screens+4.30.0.patch new file mode 100644 index 00000000..5506fd23 --- /dev/null +++ b/patches/react-native-screens+4.30.0.patch @@ -0,0 +1,275 @@ +diff --git a/node_modules/react-native-screens/Package.swift b/node_modules/react-native-screens/Package.swift +new file mode 100644 +index 0000000..f90d726 +--- /dev/null ++++ b/node_modules/react-native-screens/Package.swift +@@ -0,0 +1,253 @@ ++// swift-tools-version: 6.0 ++// AUTO-SCAFFOLDED by react-native spm scaffold — safe to edit & commit via patch-package. ++// AUTO-SCAFFOLDED-VERSION: 20 ++// Cache slot: 0.88.0/dual-flavor ++// Edit the contents below if needed and re-run `npx patch-package ` ++// to persist across `npm install`. To regenerate from the podspec, remove ++// this file (or just this marker) and re-run `npx react-native spm scaffold`. ++// ++// Package references are plain relative paths, computed when this file was ++// scaffolded. They stay correct because the file is re-scaffolded per app ++// and cache slot, and any node_modules relayout reinstalls this package ++// (dropping the file) anyway. ++ ++import PackageDescription ++ ++let package = Package( ++ name: "RNScreens", ++ platforms: [.iOS("16.6")], ++ products: [ ++ .library(name: "RNScreens", targets: ["RNScreens"]), ++ ], ++ dependencies: [ ++ .package(name: "ReactNative", path: "../../../../xcframeworks"), ++ .package(name: "React-GeneratedCode", path: "../../../ios"), ++ ], ++ targets: [ ++ .target( ++ name: "RNScreens", ++ dependencies: [.product(name: "ReactHeaders", package: "ReactNative"), .product(name: "ReactNativeHeaders", package: "ReactNative"), .product(name: "ReactNativeDependenciesHeaders", package: "ReactNative"), .product(name: "ReactAppHeaders", package: "React-GeneratedCode")], ++ path: ".", ++ sources: [ ++ "common/cpp/react/renderer/components/rnscreens/FrameCorrectionModes.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSFormSheetHostComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSFormSheetHostShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSFormSheetHostShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSFormSheetHostState.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSFormSheetHostState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSFullWindowOverlayComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSFullWindowOverlayShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSFullWindowOverlayShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSFullWindowOverlayState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSModalScreenComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSSafeAreaViewComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSSafeAreaViewShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSSafeAreaViewShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSSafeAreaViewState.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSSafeAreaViewState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNodeCommitHook.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNodeCommitHook.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigState.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewState.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSSplitScreenComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSSplitScreenShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSSplitScreenShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSSplitScreenState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderConfigComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderConfigShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderConfigShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderConfigState.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderConfigState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderItemComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderItemShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderItemShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderItemState.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderItemState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderSubviewComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderSubviewShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderSubviewShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderSubviewState.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderSubviewState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackScreenComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackScreenShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackScreenShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackScreenState.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackScreenState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSTabsBottomAccessoryComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSTabsBottomAccessoryShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSTabsBottomAccessoryShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSTabsBottomAccessoryState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSTabsHostComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSTabsHostShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSTabsHostShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSTabsHostState.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSTabsHostState.h", ++ "common/cpp/react/renderer/components/rnscreens/utils/RectUtil.h", ++ "cpp/RNSScreenRemovalListener.cpp", ++ "cpp/RNSScreenRemovalListener.h", ++ "cpp/RNScreensTurboModule.cpp", ++ "cpp/RNScreensTurboModule.h", ++ "ios/RCTImageComponentView+RNSScreenStackHeaderConfig.h", ++ "ios/RCTImageComponentView+RNSScreenStackHeaderConfig.mm", ++ "ios/RNSBarButtonItem.h", ++ "ios/RNSBarButtonItem.mm", ++ "ios/RNSConvert.h", ++ "ios/RNSConvert.mm", ++ "ios/RNSEnums.h", ++ "ios/RNSFullWindowOverlay.h", ++ "ios/RNSFullWindowOverlay.mm", ++ "ios/RNSModalScreen.h", ++ "ios/RNSModalScreen.mm", ++ "ios/RNSModule.h", ++ "ios/RNSModule.mm", ++ "ios/RNSNavigationBar.h", ++ "ios/RNSNavigationBar.mm", ++ "ios/RNSOrientationProviding.h", ++ "ios/RNSPercentDrivenInteractiveTransition.h", ++ "ios/RNSPercentDrivenInteractiveTransition.mm", ++ "ios/RNSReactMountingTransactionObserving.h", ++ "ios/RNSScreen.h", ++ "ios/RNSScreen.mm", ++ "ios/RNSScreenContainer.h", ++ "ios/RNSScreenContainer.mm", ++ "ios/RNSScreenContentWrapper.h", ++ "ios/RNSScreenContentWrapper.mm", ++ "ios/RNSScreenFooter.h", ++ "ios/RNSScreenFooter.mm", ++ "ios/RNSScreenNavigationContainer.h", ++ "ios/RNSScreenNavigationContainer.mm", ++ "ios/RNSScreenStack.h", ++ "ios/RNSScreenStack.mm", ++ "ios/RNSScreenStackAnimator.h", ++ "ios/RNSScreenStackAnimator.mm", ++ "ios/RNSScreenStackHeaderConfig.h", ++ "ios/RNSScreenStackHeaderConfig.mm", ++ "ios/RNSScreenStackHeaderSubview.h", ++ "ios/RNSScreenStackHeaderSubview.mm", ++ "ios/RNSScreenWindowTraits.h", ++ "ios/RNSScreenWindowTraits.mm", ++ "ios/RNSScrollViewBehaviorOverriding.h", ++ "ios/RNSSearchBar.h", ++ "ios/RNSSearchBar.mm", ++ "ios/RNScreens-Bridging-Header.h", ++ "ios/UIScrollView+RNScreens.h", ++ "ios/UIScrollView+RNScreens.mm", ++ "ios/UIViewController+RNScreens.h", ++ "ios/UIViewController+RNScreens.mm", ++ "ios/UIWindow+RNScreens.h", ++ "ios/UIWindow+RNScreens.mm", ++ "ios/bridging/RNSReactBaseView.h", ++ "ios/bridging/RNSReactBaseView.mm", ++ "ios/conversion/RNSConversions-Fabric.mm", ++ "ios/conversion/RNSConversions-ScrollViewMarker.h", ++ "ios/conversion/RNSConversions-ScrollViewMarker.mm", ++ "ios/conversion/RNSConversions-SplitView.mm", ++ "ios/conversion/RNSConversions-Stack.h", ++ "ios/conversion/RNSConversions-Stack.mm", ++ "ios/conversion/RNSConversions-Tabs.mm", ++ "ios/conversion/RNSConversions.h", ++ "ios/conversion/RNSConversions.mm", ++ "ios/conversion/always_false.h", ++ "ios/events/RNSHeaderHeightChangeEvent.h", ++ "ios/events/RNSHeaderHeightChangeEvent.mm", ++ "ios/events/RNSScreenViewEvent.h", ++ "ios/events/RNSScreenViewEvent.mm", ++ "ios/helpers/container/RNSContainer.h", ++ "ios/helpers/container/RNSContainerHelpers.h", ++ "ios/helpers/container/RNSContainerHelpers.mm", ++ "ios/helpers/container/RNSContainerItem.h", ++ "ios/helpers/container/RNSContainerItemSupport.h", ++ "ios/helpers/container/RNSContainerItemSupport.mm", ++ "ios/helpers/container/RNSParentContainerItemRegistry.h", ++ "ios/helpers/container/RNSParentContainerItemRegistry.mm", ++ "ios/helpers/image/RNSImageLoading.h", ++ "ios/helpers/image/RNSImageLoadingHelper.h", ++ "ios/helpers/image/RNSImageLoadingHelper.mm", ++ "ios/helpers/scroll-view/RNSContentScrollViewProviding.h", ++ "ios/helpers/scroll-view/RNSScrollEdgeEffectApplicator.h", ++ "ios/helpers/scroll-view/RNSScrollEdgeEffectApplicator.mm", ++ "ios/helpers/scroll-view/RNSScrollViewFinder.h", ++ "ios/helpers/scroll-view/RNSScrollViewFinder.mm", ++ "ios/helpers/scroll-view/RNSScrollViewHelper.h", ++ "ios/helpers/scroll-view/RNSScrollViewHelper.mm", ++ "ios/integrations/RNSDismissibleModalProtocol.h", ++ "ios/safe-area/RNSSafeAreaProviding.h", ++ "ios/safe-area/RNSSafeAreaViewComponentView.h", ++ "ios/safe-area/RNSSafeAreaViewComponentView.mm", ++ "ios/safe-area/RNSSafeAreaViewNotifications.h", ++ "ios/stubs/RNSGammaStubs.h", ++ "ios/stubs/RNSGammaStubs.mm", ++ "ios/tabs/RCTConvert+RNSTabs.h", ++ "ios/tabs/RCTConvert+RNSTabs.mm", ++ "ios/tabs/RNSTabBarAppearanceCoordinator.h", ++ "ios/tabs/RNSTabBarAppearanceCoordinator.mm", ++ "ios/tabs/RNSTabBarItemCoordinator.h", ++ "ios/tabs/RNSTabBarItemCoordinator.mm", ++ "ios/tabs/RNSTabsSpecialEffectsSupporting.h", ++ "ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.h", ++ "ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.mm", ++ "ios/tabs/bottom-accessory/RNSTabsBottomAccessoryContentComponentView.h", ++ "ios/tabs/bottom-accessory/RNSTabsBottomAccessoryContentComponentView.mm", ++ "ios/tabs/bottom-accessory/RNSTabsBottomAccessoryEventEmitter.h", ++ "ios/tabs/bottom-accessory/RNSTabsBottomAccessoryEventEmitter.mm", ++ "ios/tabs/bottom-accessory/RNSTabsBottomAccessoryHelper.h", ++ "ios/tabs/bottom-accessory/RNSTabsBottomAccessoryHelper.mm", ++ "ios/tabs/bottom-accessory/RNSTabsBottomAccessoryShadowStateProxy.h", ++ "ios/tabs/bottom-accessory/RNSTabsBottomAccessoryShadowStateProxy.mm", ++ "ios/tabs/bottom-accessory/RNSTabsBottomAccessoryWrapperView.h", ++ "ios/tabs/bottom-accessory/RNSTabsBottomAccessoryWrapperView.mm", ++ "ios/tabs/extensions/RNSTabsHostComponentView+RNSImageLoader.h", ++ "ios/tabs/extensions/RNSTabsHostComponentView+RNSImageLoader.mm", ++ "ios/tabs/host/RNSTabBarController.h", ++ "ios/tabs/host/RNSTabBarController.mm", ++ "ios/tabs/host/RNSTabsHostComponentView.h", ++ "ios/tabs/host/RNSTabsHostComponentView.mm", ++ "ios/tabs/host/RNSTabsHostEventEmitter.h", ++ "ios/tabs/host/RNSTabsHostEventEmitter.mm", ++ "ios/tabs/host/RNSTabsNavigationState.h", ++ "ios/tabs/host/RNSTabsNavigationState.mm", ++ "ios/tabs/host/RNSTabsNavigationStateObserverRegistry.h", ++ "ios/tabs/host/RNSTabsNavigationStateObserverRegistry.mm", ++ "ios/tabs/screen/RNSTabsScreenComponentView.h", ++ "ios/tabs/screen/RNSTabsScreenComponentView.mm", ++ "ios/tabs/screen/RNSTabsScreenEventEmitter.h", ++ "ios/tabs/screen/RNSTabsScreenEventEmitter.mm", ++ "ios/tabs/screen/RNSTabsScreenViewController.h", ++ "ios/tabs/screen/RNSTabsScreenViewController.mm", ++ "ios/utils/NSString+RNSUtility.h", ++ "ios/utils/NSString+RNSUtility.mm", ++ "ios/utils/RCTSurfaceTouchHandler+RNSUtility.h", ++ "ios/utils/RCTSurfaceTouchHandler+RNSUtility.mm", ++ "ios/utils/RNSBackBarButtonItem.h", ++ "ios/utils/RNSBackBarButtonItem.mm", ++ "ios/utils/RNSDefines.h", ++ "ios/utils/RNSLog.h", ++ "ios/utils/UINavigationBar+RNSUtility.h", ++ "ios/utils/UINavigationBar+RNSUtility.mm", ++ "ios/utils/UIView+RNSUtility.h", ++ "ios/utils/UIView+RNSUtility.mm", ++ "ios/utils/extensions/RCTImageSource+AccessHiddenMembers.h", ++ ], ++ publicHeadersPath: "ios", ++ cSettings: [.headerSearchPath("common/cpp"), .headerSearchPath("common/cpp/react/renderer/components"), .headerSearchPath("common/cpp/react/renderer/components/rnscreens"), .headerSearchPath("common/cpp/react/renderer/components/rnscreens/utils"), .headerSearchPath("cpp"), .headerSearchPath("ios"), .headerSearchPath("ios/bridging"), .headerSearchPath("ios/conversion"), .headerSearchPath("ios/events"), .headerSearchPath("ios/helpers/container"), .headerSearchPath("ios/helpers/image"), .headerSearchPath("ios/helpers/scroll-view"), .headerSearchPath("ios/integrations"), .headerSearchPath("ios/safe-area"), .headerSearchPath("ios/stubs"), .headerSearchPath("ios/tabs"), .headerSearchPath("ios/tabs/bottom-accessory"), .headerSearchPath("ios/tabs/extensions"), .headerSearchPath("ios/tabs/host"), .headerSearchPath("ios/tabs/screen"), .headerSearchPath("ios/utils"), .headerSearchPath("ios/utils/extensions"), .headerSearchPath("."), .unsafeFlags(["-include", "react-native-spm-prefix.h"])], ++ cxxSettings: [.headerSearchPath("common/cpp"), .headerSearchPath("common/cpp/react/renderer/components"), .headerSearchPath("common/cpp/react/renderer/components/rnscreens"), .headerSearchPath("common/cpp/react/renderer/components/rnscreens/utils"), .headerSearchPath("cpp"), .headerSearchPath("ios"), .headerSearchPath("ios/bridging"), .headerSearchPath("ios/conversion"), .headerSearchPath("ios/events"), .headerSearchPath("ios/helpers/container"), .headerSearchPath("ios/helpers/image"), .headerSearchPath("ios/helpers/scroll-view"), .headerSearchPath("ios/integrations"), .headerSearchPath("ios/safe-area"), .headerSearchPath("ios/stubs"), .headerSearchPath("ios/tabs"), .headerSearchPath("ios/tabs/bottom-accessory"), .headerSearchPath("ios/tabs/extensions"), .headerSearchPath("ios/tabs/host"), .headerSearchPath("ios/tabs/screen"), .headerSearchPath("ios/utils"), .headerSearchPath("ios/utils/extensions"), .headerSearchPath("."), .unsafeFlags(["-include", "react-native-spm-prefix.h"]), .define("DEBUG", .when(configuration: .debug)), .define("NDEBUG", .when(configuration: .release))], ++ linkerSettings: [.linkedFramework("UIKit"), .linkedFramework("Foundation"), .linkedFramework("CoreGraphics")] ++ ), ++ ], ++ cxxLanguageStandard: .cxx20 ++) +diff --git a/node_modules/react-native-screens/react-native-spm-prefix.h b/node_modules/react-native-screens/react-native-spm-prefix.h +new file mode 100644 +index 0000000..af5cea0 +--- /dev/null ++++ b/node_modules/react-native-screens/react-native-spm-prefix.h +@@ -0,0 +1,10 @@ ++// AUTO-SCAFFOLDED by react-native spm scaffold — mirrors CocoaPods' default ++// prefix header so ObjC sources that rely on an implicit Foundation/UIKit ++// import compile under SPM (which has no prefix-header mechanism). Safe to ++// delete + regenerate via `npx react-native spm scaffold`. ++#ifdef __OBJC__ ++#import ++#if __has_include() ++#import ++#endif ++#endif diff --git a/scripts/ci-dependencies.test.ts b/scripts/ci-dependencies.test.ts index 3bd8e66e..b3b9e997 100644 --- a/scripts/ci-dependencies.test.ts +++ b/scripts/ci-dependencies.test.ts @@ -113,17 +113,11 @@ test('invalid locked package records fail rather than silently skipping validati ) }) -test('Apple configuration changes only prepare the affected lockfile', () => { - assert.deepEqual(selectPodChecks(['example/ios/Podfile'], false, false), { - ios: true, - macos: false, - }) +test('CocoaPods configuration changes prepare the macOS lockfile', () => { assert.deepEqual(selectPodChecks(['example/macos/Podfile'], false, false), { - ios: false, macos: true, }) assert.deepEqual(selectPodChecks(['example/package.json'], false, false), { - ios: false, macos: false, }) assert.deepEqual( @@ -132,29 +126,19 @@ test('Apple configuration changes only prepare the affected lockfile', () => { false, false, ), - { ios: true, macos: true }, + { macos: true }, ) }) -test('native dependency changes and full runs prepare both Apple lockfiles', () => { - assert.deepEqual(selectPodChecks([], true, false), { ios: true, macos: true }) - assert.deepEqual(selectPodChecks([], false, true), { ios: true, macos: true }) +test('native dependency changes and full runs prepare the macOS lockfile', () => { + assert.deepEqual(selectPodChecks([], true, false), { macos: true }) + assert.deepEqual(selectPodChecks([], false, true), { macos: true }) }) test('direct native lockfile changes require validation before compilation', () => { - assert.deepEqual( - selectPodChecks(['example/ios/Podfile.lock'], false, false), - { - ios: true, - macos: false, - }, - ) assert.deepEqual( selectPodChecks(['example/macos/Podfile.lock'], false, false), - { - ios: false, - macos: true, - }, + { macos: true }, ) }) diff --git a/scripts/ci-dependencies.ts b/scripts/ci-dependencies.ts index bb199cd3..3c753e4a 100644 --- a/scripts/ci-dependencies.ts +++ b/scripts/ci-dependencies.ts @@ -36,36 +36,27 @@ export function nativeDependenciesChanged( } /** - * Selects Apple lockfiles after native dependencies or CocoaPods inputs change. + * Selects the macOS lockfile after native dependencies or CocoaPods inputs change. * @param files Repository-relative paths changed since the base commit. * @param nativeChanged Whether a locked native package changed. - * @param full Whether to validate both Apple platforms unconditionally. - * @returns Independent iOS and macOS lockfile selections. + * @param full Whether to validate the macOS lockfile unconditionally. + * @returns The macOS lockfile selection. */ export function selectPodChecks( files: string[], nativeChanged: boolean, full: boolean, ) { - const shared = [ - '**/*.podspec', - '**/react-native.config.js', - 'example/Gemfile*', - 'patches/**', - ] return { - ios: - full || - nativeChanged || - files.some((file) => - matchesPaths(file, [...shared, 'example/ios/Podfile*']), - ), macos: full || nativeChanged || files.some((file) => matchesPaths(file, [ - ...shared, + '**/*.podspec', + '**/react-native.config.js', + 'example/Gemfile*', + 'patches/**', 'example/macos/Podfile*', 'example/macos/scripts/*config*.js', 'example/macos/scripts/resolve-react-native.js', @@ -108,7 +99,7 @@ function main(): void { if (!output) { throw new Error('GITHUB_OUTPUT is required') } - appendFileSync(output, `ios_pods=${pods.ios}\nmacos_pods=${pods.macos}\n`) + appendFileSync(output, `macos_pods=${pods.macos}\n`) } function resolution(value: unknown): string { diff --git a/scripts/ci.test.ts b/scripts/ci.test.ts index 4b218f9e..d07c3a82 100644 --- a/scripts/ci.test.ts +++ b/scripts/ci.test.ts @@ -1,5 +1,5 @@ import assert from 'node:assert/strict' -import { execFileSync, spawnSync } from 'node:child_process' +import { execFileSync } from 'node:child_process' import { mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' @@ -94,13 +94,25 @@ test('Harness patches retain both mobile and desktop coverage', () => { assert.equal(checks.macos, true) }) -test('Ruby dependency changes retain both Apple platforms', () => { +test('Ruby dependency changes only select macOS', () => { const checks = selectChecks(['example/Gemfile'], false) - assert.equal(checks.ios, true) assert.equal(checks.macos, true) + assert.equal(checks.ios, false) assert.equal(checks.android, false) }) +test('Swift package changes select iOS without Android', () => { + for (const file of [ + 'packages/react-native-nitro-sqlite/Package.swift', + 'packages/react-native-nitro-sqlite-vec/Package.swift', + 'patches/react-native-screens+4.30.0.patch', + ]) { + const checks = selectChecks([file], false) + assert.equal(checks.ios, true) + assert.equal(checks.android, false) + } +}) + test('a full run selects every check even without file changes', () => { assert.ok(Object.values(selectChecks([], true)).every(Boolean)) }) @@ -185,56 +197,7 @@ test('the CLI routes real Git commits', () => { } }) -test('the real iOS Podfile honors both CI matrix modes and retains the local default', () => { - const script = ` - module Pod - class Config - def self.instance = new - def installation_root = '/stub' - end - module Executable - def self.execute_command(*) = '/stub/react_native_pods.rb' - end - module UI - def self.puts(*) = nil - end - end - class String - def green = self - end - def require(*) = true - def min_ios_version_supported = '15.1' - def platform(*) = nil - def prepare_react_native_project! = nil - def use_frameworks!(linkage:) = STDOUT.puts("frameworks=#{linkage}") - def target(*) = yield - def use_native_modules! = { reactNativePath: '/stub' } - def use_react_native!(**) = nil - def post_install(*) = nil - load ARGV.fetch(0) - ` - for (const [mode, expected] of [ - ['static', 'frameworks=static'], - ['', ''], - [undefined, 'frameworks=static'], - ]) { - const env = { ...process.env } - if (mode === undefined) { - delete env.USE_FRAMEWORKS - } else { - env.USE_FRAMEWORKS = mode - } - const result = spawnSync( - 'ruby', - ['-e', script, join(root, 'example/ios/Podfile')], - { env, encoding: 'utf8' }, - ) - assert.equal(result.status, 0, result.stderr) - assert.equal(result.stdout.trim(), expected) - } -}) - -test('the routine iOS matrix retains both framework configurations', () => { +test('the routine iOS matrix uses Xcode 27', () => { const workflow = readFileSync( join(root, '.github/workflows/test-harness-ios.yml'), 'utf8', @@ -244,10 +207,7 @@ test('the routine iOS matrix retains both framework configurations', () => { ) assert.ok(match?.[2]) const matrix: unknown = JSON.parse(match[2]) - assert.deepEqual(matrix, [ - { name: 'static_frameworks', frameworks: 'static', xcode: '26.5' }, - { name: 'no_frameworks', frameworks: '', xcode: '26.5' }, - ]) + assert.deepEqual(matrix, [{ xcode: '27.0' }]) }) function enabled(checks: ReturnType): string[] { diff --git a/scripts/commit-release-lockfiles.ts b/scripts/commit-release-lockfiles.ts index 258d9afa..173c3b00 100644 --- a/scripts/commit-release-lockfiles.ts +++ b/scripts/commit-release-lockfiles.ts @@ -6,12 +6,7 @@ const branch = process.env.RELEASE_BRANCH const repository = process.env.GITHUB_REPOSITORY if (!branch || !repository) throw new Error('Release branch and repository are required.') -const paths = [ - 'bun.lock', - 'example/ios/Podfile.lock', - 'example/macos/Podfile.lock', - 'example/Gemfile.lock', -] +const paths = ['bun.lock', 'example/macos/Podfile.lock', 'example/Gemfile.lock'] const announcement = process.env.RELEASE_ANNOUNCEMENT if (announcement?.trim()) { const metadata: unknown = JSON.parse(readFileSync('package.json', 'utf8')) diff --git a/scripts/sqlite-package-config.test.ts b/scripts/sqlite-package-config.test.ts new file mode 100644 index 00000000..43b3d385 --- /dev/null +++ b/scripts/sqlite-package-config.test.ts @@ -0,0 +1,337 @@ +import assert from 'node:assert/strict' +import { execFileSync, spawnSync } from 'node:child_process' +import { + copyFileSync, + mkdirSync, + mkdtempSync, + rmSync, + writeFileSync, +} from 'node:fs' +import { tmpdir } from 'node:os' +import { join } from 'node:path' +import test from 'node:test' +import { fileURLToPath } from 'node:url' + +const root = fileURLToPath(new URL('../', import.meta.url)) +const packageDirectory = join(root, 'packages/react-native-nitro-sqlite') +const sqliteDirectory = join(packageDirectory, 'cpp/sqlite') +const environmentNames = [ + 'NITRO_SQLITE_THREADSAFE', + 'NITRO_SQLITE_PERFORMANCE_MODE', + 'NITRO_SQLITE_USE_PHONE_VERSION', +] +const optimizationDefines = [ + 'SQLITE_DQS=0', + 'SQLITE_DEFAULT_MEMSTATUS=0', + 'SQLITE_DEFAULT_WAL_SYNCHRONOUS=1', + 'SQLITE_LIKE_DOESNT_MATCH_BLOBS=1', + 'SQLITE_MAX_EXPR_DEPTH=0', + 'SQLITE_OMIT_DEPRECATED=1', + 'SQLITE_OMIT_PROGRESS_CALLBACK=1', + 'SQLITE_OMIT_SHARED_CACHE=1', + 'SQLITE_USE_ALLOCA=1', +] + +type Environment = Record +type Setting = { tool: string; kind: Record } +type Target = { + name: string + exclude: string[] + settings: Setting[] +} + +test('defaults enable thread safety, performance mode, and RTree', () => { + const defines = definesFor({}) + assertThreadSafe(defines, '1') + assertOptimizations(defines, true) + assert.ok(defines.includes('SQLITE_ENABLE_RTREE=1')) + compileAndProbe(defines, '1', true) +}) + +test('package.json settings choose SQLite options', () => { + const withoutRTree = definesFor({ nitroSQLite: { enableRTree: false } }) + assert.ok( + !withoutRTree.some((define) => define.startsWith('SQLITE_ENABLE_RTREE')), + ) + compileAndProbe(withoutRTree, '1', false) + + const unsafe = definesFor({ nitroSQLite: { threadSafe: false } }) + assertThreadSafe(unsafe, '0') + assertOptimizations(unsafe, true) + compileAndProbe(unsafe, '0', true) + + const unoptimized = definesFor({ nitroSQLite: { performanceMode: false } }) + assertThreadSafe(unoptimized, '1') + assertOptimizations(unoptimized, false) + assert.ok(unoptimized.includes('SQLITE_ENABLE_RTREE=1')) + compileAndProbe(unoptimized, '1', true) +}) + +test('environment variables override package.json settings', () => { + assertThreadSafe( + definesFor( + { nitroSQLite: { threadSafe: false } }, + { NITRO_SQLITE_THREADSAFE: 'true' }, + ), + '1', + ) + assertThreadSafe( + definesFor( + { nitroSQLite: { threadSafe: true } }, + { NITRO_SQLITE_THREADSAFE: 'false' }, + ), + '0', + ) + assertOptimizations( + definesFor( + { nitroSQLite: { performanceMode: false } }, + { NITRO_SQLITE_PERFORMANCE_MODE: 'true' }, + ), + true, + ) + // An overridden setting is not validated. + assertOptimizations( + definesFor( + { nitroSQLite: { performanceMode: 2 } }, + { NITRO_SQLITE_PERFORMANCE_MODE: 'true' }, + ), + true, + ) + assertOptimizations( + definesFor( + { nitroSQLite: { performanceMode: true } }, + { NITRO_SQLITE_PERFORMANCE_MODE: 'false' }, + ), + false, + ) +}) + +test('invalid settings fail the package resolution', () => { + assertRejected( + { nitroSQLite: true }, + {}, + 'nitroSQLite in package.json must be an object', + ) + assertRejected( + { nitroSQLite: { threadSafe: 1 } }, + {}, + 'nitroSQLite.threadSafe in package.json must be true or false', + ) + assertRejected( + { nitroSQLite: { performanceMode: 1 } }, + {}, + 'nitroSQLite.performanceMode in package.json must be true or false', + ) + assertRejected( + { nitroSQLite: { enableRTree: 'false' } }, + {}, + 'nitroSQLite.enableRTree in package.json must be true or false', + ) + assertRejected( + {}, + { NITRO_SQLITE_THREADSAFE: '2' }, + 'NITRO_SQLITE_THREADSAFE must be true, false, 1, or 0', + ) + assertRejected( + {}, + { NITRO_SQLITE_PERFORMANCE_MODE: 'enabled' }, + 'NITRO_SQLITE_PERFORMANCE_MODE must be true, false, 1, or 0', + ) + assertRejected( + { nitroSQLite: { iosSqliteFlags: true } }, + {}, + 'nitroSQLite.iosSqliteFlags in package.json must be a string', + ) + assertRejected( + { nitroSQLite: { iosSqliteFlags: '-DSQLITE_ENABLE_FTS5=1 -O2' } }, + {}, + 'nitroSQLite.iosSqliteFlags in package.json must only contain -D definitions, found -O2', + ) +}) + +test('iosSqliteFlags add definitions and replace defaults with the same name', () => { + const custom = definesFor({ + nitroSQLite: { + iosSqliteFlags: + '-DSQLITE_ENABLE_FTS5 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=2 -DTHREADSAFE=2', + }, + }) + assert.ok(custom.includes('SQLITE_ENABLE_FTS5')) + assert.ok(custom.includes('SQLITE_DEFAULT_WAL_SYNCHRONOUS=2')) + assert.ok(!custom.includes('SQLITE_DEFAULT_WAL_SYNCHRONOUS=1')) + // SQLite reads THREADSAFE when SQLITE_THREADSAFE is not defined. + assert.ok(!custom.some((define) => define.startsWith('SQLITE_THREADSAFE='))) + compileAndProbe(custom, '2', true) +}) + +test('system SQLite excludes the bundled amalgamation and links libsqlite3', () => { + const target = sqliteTarget({}, { NITRO_SQLITE_USE_PHONE_VERSION: '1' }) + assert.ok(target.exclude.includes('cpp/sqlite/sqlite3.c')) + assert.ok(defines(target).includes('NITRO_SQLITE_USE_PHONE_VERSION=1')) + assert.ok( + target.settings.some( + (setting) => + setting.tool === 'linker' && + setting.kind.linkedLibrary?._0 === 'sqlite3', + ), + ) +}) + +function definesFor( + appPackage: object, + environment: Environment = {}, +): string[] { + return defines(sqliteTarget(appPackage, environment)) +} + +function defines(target: Target): string[] { + return target.settings + .filter((setting) => setting.tool === 'c' && setting.kind.define) + .map((setting) => String(setting.kind.define?._0)) +} + +function sqliteTarget(appPackage: object, environment: Environment): Target { + const result = dumpPackage(appPackage, environment) + assert.equal(result.status, 0, result.stderr) + const manifest = JSON.parse(result.stdout) as { targets: Target[] } + const target = manifest.targets.find( + ({ name }) => name === 'RNNitroSQLiteCxx', + ) + assert.ok(target, 'RNNitroSQLiteCxx target is missing') + return target +} + +function assertRejected( + appPackage: object, + environment: Environment, + message: string, +): void { + const result = dumpPackage(appPackage, environment) + assert.notEqual(result.status, 0) + assert.match( + result.stderr + result.stdout, + new RegExp(message.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')), + ) +} + +/** + * Evaluates Package.swift where React Native links it, `/ios/build/generated/autolinking/libs/RNNitroSQLite`. + * Each call uses a new directory, because SwiftPM caches evaluated manifests by path and contents. + */ +function dumpPackage(appPackage: object, environment: Environment) { + const app = mkdtempSync(join(tmpdir(), 'nitro-sqlite-app-')) + try { + const linkedPackage = join( + app, + 'ios/build/generated/autolinking/libs/RNNitroSQLite', + ) + mkdirSync(linkedPackage, { recursive: true }) + writeFileSync(join(app, 'package.json'), JSON.stringify(appPackage)) + copyFileSync( + join(packageDirectory, 'Package.swift'), + join(linkedPackage, 'Package.swift'), + ) + const env = { ...process.env } + for (const name of environmentNames) delete env[name] + return spawnSync('swift', ['package', 'dump-package'], { + cwd: linkedPackage, + env: { ...env, ...environment }, + encoding: 'utf8', + }) + } finally { + rmSync(app, { recursive: true, force: true }) + } +} + +function assertThreadSafe(defines: string[], expected: string): void { + assert.ok( + defines.includes(`SQLITE_THREADSAFE=${expected}`), + defines.join(' '), + ) + assert.equal( + defines.filter((define) => define.startsWith('SQLITE_THREADSAFE=')).length, + 1, + ) +} + +function assertOptimizations(defines: string[], enabled: boolean): void { + for (const define of optimizationDefines) { + assert.equal(defines.includes(define), enabled, define) + } +} + +/** Compiles the bundled SQLite with the resolved defines and checks thread safety and RTree at runtime. */ +function compileAndProbe( + defines: string[], + threadSafe: string, + rtree: boolean, +): void { + const directory = mkdtempSync(join(tmpdir(), 'nitro-sqlite-probe-')) + try { + const probe = join(directory, 'probe.c') + const binary = join(directory, 'probe') + writeFileSync( + probe, + `#include +#include +#include +#include "sqlite3.h" + +int main(int argc, char **argv) { + assert(argc == 2); + sqlite3 *db = NULL; + assert(sqlite3_open(argv[1], &db) == SQLITE_OK); + int rc = sqlite3_exec(db, + "CREATE VIRTUAL TABLE SpatialIndex USING rtree(id,minX,maxX,minY,maxY)", + NULL, NULL, NULL); + if (${rtree ? 1 : 0}) { + assert(rc == SQLITE_OK); + assert(sqlite3_exec(db, + "INSERT INTO SpatialIndex VALUES(1,10,20,30,40);" + "CREATE TABLE Item(id INTEGER PRIMARY KEY);" + "INSERT INTO Item VALUES(1);" + "CREATE VIEW SpatialItems AS SELECT Item.id FROM Item JOIN SpatialIndex USING(id);" + "CREATE VIRTUAL TABLE IntIndex USING rtree_i32(id,minX,maxX)", + NULL, NULL, NULL) == SQLITE_OK); + assert(sqlite3_close(db) == SQLITE_OK); + assert(sqlite3_open(argv[1], &db) == SQLITE_OK); + assert(sqlite3_exec(db, + "ALTER TABLE Item RENAME TO RenamedItem;" + "ALTER TABLE SpatialIndex RENAME TO RenamedSpatialIndex;", + NULL, NULL, NULL) == SQLITE_OK); + sqlite3_stmt *statement = NULL; + assert(sqlite3_prepare_v2(db, "SELECT id FROM SpatialItems", -1, &statement, NULL) == SQLITE_OK); + assert(sqlite3_step(statement) == SQLITE_ROW); + assert(sqlite3_column_int(statement, 0) == 1); + assert(sqlite3_step(statement) == SQLITE_DONE); + assert(sqlite3_finalize(statement) == SQLITE_OK); + } else { + assert(rc == SQLITE_ERROR); + assert(strcmp(sqlite3_errmsg(db), "no such module: rtree") == 0); + } + assert(sqlite3_close(db) == SQLITE_OK); + printf("%d", sqlite3_threadsafe()); + return 0; +} +`, + ) + execFileSync(process.env.CC ?? 'cc', [ + ...defines.map((define) => `-D${define}`), + `-I${sqliteDirectory}`, + join(sqliteDirectory, 'sqlite3.c'), + probe, + '-o', + binary, + // FTS5 calls log(), which Linux provides in libm. + '-lm', + ]) + assert.equal( + execFileSync(binary, [join(directory, 'rtree.sqlite')], { + encoding: 'utf8', + }), + threadSafe, + ) + } finally { + rmSync(directory, { recursive: true, force: true }) + } +} diff --git a/scripts/test-podspec-threadsafe.rb b/scripts/test-podspec-threadsafe.rb deleted file mode 100644 index 804995e1..00000000 --- a/scripts/test-podspec-threadsafe.rb +++ /dev/null @@ -1,361 +0,0 @@ -#!/usr/bin/env ruby - -require "shellwords" -require "tmpdir" -require "json" - -ROOT = File.expand_path("..", __dir__) -PACKAGE_DIRECTORY = File.join(ROOT, "packages", "react-native-nitro-sqlite") -PODSPEC = File.join(PACKAGE_DIRECTORY, "RNNitroSQLite.podspec") -SQLITE_SOURCE = File.join(PACKAGE_DIRECTORY, "cpp", "sqlite", "sqlite3.c") - -module Pod - module UI - def self.puts(*) end - end - - class Spec - class << self - attr_accessor :last - - def new - spec = allocate - spec.send(:initialize) - yield spec - self.last = spec - end - end - - attr_reader :attributes_hash - - def initialize - @attributes_hash = {} - end - - def dependency(*) end - - def method_missing(name, *arguments) - attribute = name.to_s - return @attributes_hash[attribute] if arguments.empty? - - if attribute.end_with?("=") && arguments.length == 1 - @attributes_hash[attribute.delete_suffix("=")] = arguments.first - return arguments.first - end - - super - end - - def respond_to_missing?(*_arguments) - true - end - end - - class Config - class << self - attr_accessor :installation_root - - def instance - self - end - end - end -end - -def min_ios_version_supported - "13.4" -end - -def install_modules_dependencies(_spec) end - -def main - default_flags = with_app_package({}) { flags_for(nil) } - assert_threadsafe(default_flags, "1") - assert_optimization_flags(default_flags) - assert_includes(default_flags, "-DSQLITE_ENABLE_RTREE=1") - - without_rtree_flags = with_app_package("nitroSQLite" => {"enableRTree" => false}) do - flags_for(nil) - end - refute_includes(without_rtree_flags, "SQLITE_ENABLE_RTREE") - - unsafe_flags = with_app_package("nitroSQLite" => {"threadSafe" => false}) do - flags_for(nil) - end - assert_threadsafe(unsafe_flags, "0") - assert_optimization_flags(unsafe_flags) - - safe_flags = with_app_package("nitroSQLite" => {"threadSafe" => false}) do - flags_for("true") - end - assert_threadsafe(safe_flags, "1") - assert_optimization_flags(safe_flags) - - environment_unsafe_flags = with_app_package("nitroSQLite" => {"threadSafe" => true}) do - flags_for("false") - end - assert_threadsafe(environment_unsafe_flags, "0") - assert_optimization_flags(environment_unsafe_flags) - - unoptimized_flags = with_app_package("nitroSQLite" => {"performanceMode" => false}) do - flags_for(nil) - end - assert_threadsafe(unoptimized_flags, "1") - refute_optimization_flags(unoptimized_flags) - assert_includes(unoptimized_flags, "-DSQLITE_ENABLE_RTREE=1") - - environment_enabled_flags = with_app_package("nitroSQLite" => {"performanceMode" => false}) do - flags_for(nil, "true") - end - assert_optimization_flags(environment_enabled_flags) - - environment_override_invalid_package = with_app_package("nitroSQLite" => {"performanceMode" => 2}) do - flags_for(nil, "true") - end - assert_optimization_flags(environment_override_invalid_package) - - environment_disabled_flags = with_app_package("nitroSQLite" => {"performanceMode" => true}) do - flags_for(nil, "false") - end - refute_optimization_flags(environment_disabled_flags) - - assert_invalid_package_value_rejected - assert_invalid_package_config_rejected - assert_invalid_environment_value_rejected - assert_invalid_package_performance_mode_rejected - assert_invalid_environment_performance_mode_rejected - assert_invalid_package_rtree_rejected - with_app_package({}) { assert_system_sqlite_configuration } - compile_and_probe(unsafe_flags, "0") - compile_and_probe(safe_flags, "1") - compile_and_probe(unoptimized_flags, "1") - compile_and_probe(without_rtree_flags, "1", false) - - puts "SQLite pod configuration tests passed" -end - -def with_app_package(contents) - Dir.mktmpdir("nitro-sqlite-app") do |directory| - ios_directory = File.join(directory, "ios") - Dir.mkdir(ios_directory) - File.write(File.join(directory, "package.json"), JSON.generate(contents)) - Pod::Config.installation_root = ios_directory - yield - end -end - -def flags_for(threadsafe, performance_mode = nil) - spec = evaluate_podspec( - "NITRO_SQLITE_THREADSAFE" => threadsafe, - "NITRO_SQLITE_PERFORMANCE_MODE" => performance_mode, - "NITRO_SQLITE_USE_PHONE_VERSION" => nil, - ) - spec.attributes_hash.fetch("pod_target_xcconfig").fetch("OTHER_CFLAGS") -end - -def evaluate_podspec(environment) - previous_environment = environment.to_h do |name, _value| - [name, ENV.key?(name) ? ENV.fetch(name) : nil] - end - - environment.each do |name, value| - value.nil? ? ENV.delete(name) : ENV[name] = value - end - - Dir.chdir(PACKAGE_DIRECTORY) { load PODSPEC } - Pod::Spec.last -ensure - previous_environment&.each do |name, value| - value.nil? ? ENV.delete(name) : ENV[name] = value - end -end - -def assert_threadsafe(flags, expected) - assert_includes(flags, "-DSQLITE_THREADSAFE=#{expected}") - other = expected == "1" ? "0" : "1" - refute_includes(flags, "-DSQLITE_THREADSAFE=#{other}") -end - -def assert_optimization_flags(flags) - optimization_flags.each { |flag| assert_includes(flags, flag) } -end - -def refute_optimization_flags(flags) - optimization_flags.each { |flag| refute_includes(flags, flag) } -end - -def optimization_flags - %w[ - -DSQLITE_DQS=0 - -DSQLITE_DEFAULT_MEMSTATUS=0 - -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 - -DSQLITE_LIKE_DOESNT_MATCH_BLOBS=1 - -DSQLITE_MAX_EXPR_DEPTH=0 - -DSQLITE_OMIT_DEPRECATED=1 - -DSQLITE_OMIT_PROGRESS_CALLBACK=1 - -DSQLITE_OMIT_SHARED_CACHE=1 - -DSQLITE_USE_ALLOCA=1 - ] -end - -def assert_invalid_package_value_rejected - with_app_package("nitroSQLite" => {"threadSafe" => 1}) do - evaluate_podspec("NITRO_SQLITE_THREADSAFE" => nil) - end - fail "Expected an invalid NITRO_SQLITE_THREADSAFE value to fail" -rescue RuntimeError => error - expected = "nitroSQLite.threadSafe in package.json must be true or false" - fail "Unexpected validation error: #{error.message}" unless error.message == expected -end - -def assert_invalid_package_config_rejected - with_app_package("nitroSQLite" => true) do - evaluate_podspec("NITRO_SQLITE_THREADSAFE" => nil) - end - fail "Expected an invalid nitroSQLite configuration to fail" -rescue RuntimeError => error - expected = "nitroSQLite in package.json must be an object" - fail "Unexpected validation error: #{error.message}" unless error.message == expected -end - -def assert_invalid_environment_value_rejected - with_app_package({}) { evaluate_podspec("NITRO_SQLITE_THREADSAFE" => "2") } - fail "Expected an invalid NITRO_SQLITE_THREADSAFE value to fail" -rescue RuntimeError => error - expected = "NITRO_SQLITE_THREADSAFE must be true, false, 1, or 0" - fail "Unexpected validation error: #{error.message}" unless error.message == expected -end - -def assert_invalid_package_performance_mode_rejected - with_app_package("nitroSQLite" => {"performanceMode" => 1}) do - evaluate_podspec( - "NITRO_SQLITE_THREADSAFE" => nil, - "NITRO_SQLITE_PERFORMANCE_MODE" => nil, - ) - end - fail "Expected an invalid nitroSQLite.performanceMode value to fail" -rescue RuntimeError => error - expected = "nitroSQLite.performanceMode in package.json must be true or false" - fail "Unexpected validation error: #{error.message}" unless error.message == expected -end - -def assert_invalid_environment_performance_mode_rejected - with_app_package({}) do - evaluate_podspec( - "NITRO_SQLITE_THREADSAFE" => nil, - "NITRO_SQLITE_PERFORMANCE_MODE" => "enabled", - ) - end - fail "Expected an invalid NITRO_SQLITE_PERFORMANCE_MODE value to fail" -rescue RuntimeError => error - expected = "NITRO_SQLITE_PERFORMANCE_MODE must be true, false, 1, or 0" - fail "Unexpected validation error: #{error.message}" unless error.message == expected -end - -def assert_system_sqlite_configuration - spec = evaluate_podspec( - "NITRO_SQLITE_THREADSAFE" => "1", - "NITRO_SQLITE_USE_PHONE_VERSION" => "1", - ) - attributes = spec.attributes_hash - - assert_equal(attributes.fetch("library"), "sqlite3") - assert_equal( - attributes.fetch("exclude_files"), - ["cpp/sqlite/sqlite3.c", "cpp/sqlite/sqlite3.h"], - ) -end - -def assert_invalid_package_rtree_rejected - with_app_package("nitroSQLite" => {"enableRTree" => "false"}) do - evaluate_podspec("NITRO_SQLITE_THREADSAFE" => nil) - end - fail "Expected an invalid nitroSQLite.enableRTree value to fail" -rescue RuntimeError => error - expected = "nitroSQLite.enableRTree in package.json must be true or false" - fail "Unexpected validation error: #{error.message}" unless error.message == expected -end - -def compile_and_probe(flags, expected, rtree = true) - Dir.mktmpdir("nitro-sqlite-threadsafe") do |directory| - probe = File.join(directory, "probe.c") - binary = File.join(directory, "probe") - File.write( - probe, - <<~C, - #include - #include - #include - #include "sqlite3.h" - - int main(int argc, char **argv) { - assert(argc == 2); - sqlite3 *db = NULL; - assert(sqlite3_open(argv[1], &db) == SQLITE_OK); - int rc = sqlite3_exec(db, - "CREATE VIRTUAL TABLE SpatialIndex USING rtree(id,minX,maxX,minY,maxY)", - NULL, NULL, NULL); - if (#{rtree ? 1 : 0}) { - assert(rc == SQLITE_OK); - assert(sqlite3_exec(db, - "INSERT INTO SpatialIndex VALUES(1,10,20,30,40);" - "CREATE TABLE Item(id INTEGER PRIMARY KEY);" - "INSERT INTO Item VALUES(1);" - "CREATE VIEW SpatialItems AS SELECT Item.id FROM Item JOIN SpatialIndex USING(id);" - "CREATE VIRTUAL TABLE IntIndex USING rtree_i32(id,minX,maxX)", - NULL, NULL, NULL) == SQLITE_OK); - assert(sqlite3_close(db) == SQLITE_OK); - assert(sqlite3_open(argv[1], &db) == SQLITE_OK); - assert(sqlite3_exec(db, - "ALTER TABLE Item RENAME TO RenamedItem;" - "ALTER TABLE SpatialIndex RENAME TO RenamedSpatialIndex;", - NULL, NULL, NULL) == SQLITE_OK); - sqlite3_stmt *statement = NULL; - assert(sqlite3_prepare_v2(db, "SELECT id FROM SpatialItems", -1, - &statement, NULL) == SQLITE_OK); - assert(sqlite3_step(statement) == SQLITE_ROW); - assert(sqlite3_column_int(statement, 0) == 1); - assert(sqlite3_step(statement) == SQLITE_DONE); - assert(sqlite3_finalize(statement) == SQLITE_OK); - } else { - assert(rc == SQLITE_ERROR); - assert(strcmp(sqlite3_errmsg(db), "no such module: rtree") == 0); - } - assert(sqlite3_close(db) == SQLITE_OK); - printf("%d", sqlite3_threadsafe()); - return 0; - } - C - ) - - compile_flags = Shellwords.split(flags).reject { |flag| flag == "$(inherited)" } - command = [ - ENV.fetch("CC", "cc"), - *compile_flags, - "-I#{File.dirname(SQLITE_SOURCE)}", - SQLITE_SOURCE, - probe, - "-o", - binary, - ] - fail "Failed to compile bundled SQLite with SQLITE_THREADSAFE=#{expected}" unless system(*command) - - actual = IO.popen([binary, File.join(directory, "rtree.sqlite")], &:read) - fail "SQLite configuration probe failed" unless $?.success? - assert_equal(actual, expected) - end -end - -def assert_includes(value, expected) - fail "Expected #{value.inspect} to include #{expected.inspect}" unless value.include?(expected) -end - -def refute_includes(value, unexpected) - fail "Expected #{value.inspect} not to include #{unexpected.inspect}" if value.include?(unexpected) -end - -def assert_equal(actual, expected) - fail "Expected #{expected.inspect}, got #{actual.inspect}" unless actual == expected -end - -main