diff --git a/.agents/learnings/promoted/2026-08-30-ios-extension-version-verification.md b/.agents/learnings/promoted/2026-08-30-ios-extension-version-verification.md index d8497c0..fe100fe 100644 --- a/.agents/learnings/promoted/2026-08-30-ios-extension-version-verification.md +++ b/.agents/learnings/promoted/2026-08-30-ios-extension-version-verification.md @@ -3,8 +3,8 @@ id: 2026-08-30-ios-extension-version-verification date: 2026-08-30 status: promoted scope: iOS release artifact verification -evidence: build 45 Xcode archive warning plus direct PlistBuddy inspection of the exported IPA -destination: .codex/skills/release-mobile/SKILL.md +evidence: v1.0.6 exported IPA inspection and reproduced v1.0.7 Xcode build-setting mismatch +destination: apps/mobile/scripts/release-preflight.mjs and .codex/skills/release-mobile/SKILL.md review_after: 2027-02-28 --- @@ -21,19 +21,23 @@ and every packaged extension `Info.plist` with `PlistBuddy`. ## Cause -The archive warning described an intermediate state and was not authoritative -for the exported package. Direct IPA inspection showed both the app and -`LiveDrawWidget.appex` at version 1.0.6 build 45. +The v1.0.6 archive warning described an intermediate state and was not +authoritative for that exported package. The later v1.0.7 reproduction found a +separate real hazard: `CURRENT_PROJECT_VERSION` in both LiveDrawWidget +configurations can override the widget plist and package an older build number. ## Remediation -For every iOS release, inspect version and build values in the exported app and -all packaged extensions. Reject or rebuild only when the final IPA values differ; -do not accept or reject a release from archive warnings alone. +Before every iOS release, require public-version parity across app config, both +plists, and Xcode marketing settings. Require the widget Debug and Release +`CURRENT_PROJECT_VERSION` values to equal both plists. Then inspect the exported +app and all packaged extensions. Reject or rebuild only when the final IPA values +differ; do not accept or reject a release from archive warnings alone. ## Evidence `PlistBuddy` read `CFBundleShortVersionString` 1.0.6 and `CFBundleVersion` 45 from -both packaged plists. `codesign --verify --deep --strict` passed for the app, and -the verified IPA SHA-256 was -`9d4779bddac4647911a3a38e4ee37cf794c2b8691e0746a041b629c62b308e7f`. +both v1.0.6 packaged plists. The v1.0.7 build later proved a stale widget Xcode +setting can survive plist-only review. `release-preflight.mjs` and its node test +now reject that mismatch before EAS allocation; exported IPA inspection remains +the final authority. diff --git a/.agents/learnings/promoted/2026-08-31-mobile-release-preflight-and-attempts.md b/.agents/learnings/promoted/2026-08-31-mobile-release-preflight-and-attempts.md new file mode 100644 index 0000000..1352518 --- /dev/null +++ b/.agents/learnings/promoted/2026-08-31-mobile-release-preflight-and-attempts.md @@ -0,0 +1,49 @@ +--- +id: 2026-08-31-mobile-release-preflight-and-attempts +date: 2026-08-31 +status: promoted +scope: mobile production release preparation and local EAS builds +evidence: v1.0.7 Android and iOS local EAS release investigation and verified artifacts +destination: apps/mobile/scripts/release-preflight.mjs, apps/mobile/scripts/release-preflight.test.mjs, docs/releasing.md, and release skills +review_after: 2027-02-28 +--- + +## Symptom + +The v1.0.7 release spent repeated attempts on archive, plugin startup, package +installation, disk-space, signing, and iOS extension-version failures before +valid Android and iOS artifacts were accepted. + +## Reproduction + +Run a local production EAS build with an ignored public OTA certificate, a +package-directory plugin path, insufficient disk space, or divergent widget +`CURRENT_PROJECT_VERSION`. Each condition fails or produces an invalid input +before a valid final artifact can be accepted. + +## Cause + +Pre-compilation setup failures were treated as rebuild failures. Source parity, +archive inclusion, local EAS plugin shape, disk capacity, and effective iOS widget +build settings were not checked together before EAS allocation. + +## Remediation + +Run the deterministic mobile release preflight before every production build. +Classify attempts before retrying: archive, plugin, npm, and ENOSPC failures do +not consume a native build; signing, profile, and capability failures require +provider read-back before one replacement build. Retain work directories and logs +at stable ignored paths. Accept only independently inspected artifacts and keep +rejected artifacts out of the upload path. + +The Android native input failure was a Gradle task ordering issue: Prefab inputs +must be available before dependent native tasks. Preserve the explicit ordering +fix rather than removing Firebase or changing dependency versions without proof. + +## Evidence + +The preflight node tests reject an ignored OTA certificate and an effective widget +build-setting mismatch. The checked-in source invariants pass the preflight. The +maintained release guide and skills record local EAS path requirements, provider +read-back, phase-specific status language, artifact inspection, store read-back, +and scoped upload authorization boundaries. diff --git a/.claude/skills/release-mobile/SKILL.md b/.claude/skills/release-mobile/SKILL.md index 1b7ab74..07339ef 100644 --- a/.claude/skills/release-mobile/SKILL.md +++ b/.claude/skills/release-mobile/SKILL.md @@ -1,6 +1,6 @@ --- name: release-mobile -description: Prepare and verify Sauci iOS or Android releases and store uploads. +description: Prepare, verify, and ship Sauci iOS or Android releases end to end, including store uploads, review submission, and rollout. --- Read `.codex/skills/release-mobile/SKILL.md` completely and follow it. diff --git a/.codex/skills/generate-release/SKILL.md b/.codex/skills/generate-release/SKILL.md index 25e60da..cbf9eb9 100644 --- a/.codex/skills/generate-release/SKILL.md +++ b/.codex/skills/generate-release/SKILL.md @@ -13,9 +13,13 @@ drafting notes and [references/artifact-verification.md](references/artifact-ver before accepting a build. A request to generate or create a release authorizes the scoped version edits, -release notes, local builds, release commits, and one local annotated tag. It -does not authorize pushing commits or tags, uploading binaries, submitting a -store release, changing signing credentials, or regenerating native projects. +release notes, local builds, release commits, and one local annotated tag. When +the request also asks to ship, upload, submit, or release to the stores, it +authorizes the complete store pipeline for the stated platforms after the exact +artifact has been verified: upload, App Review / Google Play review submission, +and rollout, including full production rollout (see the `release-mobile` skill). +It does not authorize pushing commits or tags, changing signing credentials, or +regenerating native projects unless the request explicitly includes that action. ## Defaults @@ -39,6 +43,8 @@ Require all of the following: - consistent public and OTA runtime versions across `app.json`, explicit `app.config.js` runtime, Android, and every iOS target (`scripts/set_version.mjs --check`); +- `npm run release:preflight -w @sauci/mobile`, which also checks the iOS widget + effective build settings and OTA certificate archive inclusion; - Node 20, JDK 17 for Android, and Xcode/CocoaPods for iOS; - the configured production API/Auth/RevenueCat environment, without printing secret values. @@ -80,6 +86,15 @@ Build from the clean prepared source using the package scripts in versioned artifact directory. When building both platforms, build Android first, then iOS. +For local EAS, retain the working directory and logs under a stable ignored path, +set `EAS_LOCAL_BUILD_ARTIFACTS_DIR`, and preflight available disk space before +starting. Set `EAS_LOCAL_BUILD_PLUGIN_PATH` only to the matching plugin +executable `bin/run`, never a package directory or a hardcoded cache location. +Classify plugin, archive, npm, and ENOSPC failures as pre-compilation failures; +repair and preflight them without spending another build. Make at most one +meaningful build for each newly proven input state. After a signing, profile, or +capability failure, read back and prove the provider correction before rebuilding. + After each build: 1. Inspect the worktree before doing anything else. Accept only the documented @@ -88,15 +103,19 @@ After each build: dependency, or native-project regeneration as a failed build. 2. Independently inspect the binary for package/bundle identifier, public version, platform build number, production endpoint configuration where - inspectable, and signing identity/fingerprint. Require the embedded public - version to equal the requested version. + inspectable, signing identity/fingerprint, OTA runtime/channel/certificate, + and SHA-256. Require the embedded public version to equal the requested + version. For Android, also inspect all required ABIs, Worklets/Reanimated/Skia + libraries, and the release permissions. For iOS, inspect every packaged + extension after export. 3. Record the verified platform build number in the new release-note entry. 4. Commit only the expected metadata and release-note update as `chore(): record v build `. The worktree must be clean before starting the next platform build. -Do not accept a successful EAS exit code as proof of a valid artifact. If either -requested platform fails, do not tag a partial release. +Do not accept a successful EAS exit code as proof of a valid artifact. Quarantine +or remove rejected artifacts so only accepted paths can be offered for upload. If +either requested platform fails, do not tag a partial release. ## Tag and prove the result diff --git a/.codex/skills/release-mobile/SKILL.md b/.codex/skills/release-mobile/SKILL.md index ba7e23c..88b4d0d 100644 --- a/.codex/skills/release-mobile/SKILL.md +++ b/.codex/skills/release-mobile/SKILL.md @@ -1,6 +1,6 @@ --- name: release-mobile -description: Prepare and verify Sauci iOS or Android releases. Use for versioning, EAS/native builds, Fastlane upload, release notes, or store submission preparation. +description: Prepare, verify, and ship Sauci iOS or Android releases end to end. Use for versioning, EAS/native builds, store uploads, App Review / Play review submission, and rollout. --- # Mobile release @@ -9,6 +9,41 @@ Read `docs/releasing.md`, `apps/mobile/RELEASING.md` when present, and the mobil scoped instructions. Confirm target platform and release profile. Run repository verification plus a native acceptance pass before starting a release build. +## OTA update vs full store release + +Choose the delivery mechanism before doing anything else; they are different +pipelines with different blast radii. `docs/mobile-ota.md` is the authority. + +- **OTA update** (`npm run ota:publish:` in `apps/mobile`): ships only the + JavaScript bundle and assets to builds already installed on devices. No store + review, live within minutes, and rolled back by repointing the XPREM channel + at a previous update. Valid only when the change touches no native code, no + native dependency, no `ios/`/`android/` project files, and no config that + alters the native binary. The OTA runtime version equals the public app + version, so an OTA update can only reach installs of the current + `expo.version`. +- **Full store release** (this skill): a new signed binary through App Store + Connect and Google Play, including review. Required whenever native code, + native dependencies, the checked-in native projects, Expo SDK, permissions, + entitlements, or `expo.version` change. Rollback is coarser: Play staged + rollouts can be halted, iOS phased release can be paused, and a bad release is + otherwise superseded by shipping the next version. + +When a change qualifies for OTA, prefer OTA unless the user asks for a store +release. Never present an OTA publish as a store release or vice versa; report +which mechanism was used. + +## Authorization + +An explicit request for a mobile release authorizes the complete pipeline for +the stated platforms: version bump, build, verification, store upload, review +submission (App Review / Google Play review), and rollout — including full +production rollout. Rollout is recoverable by design (staged-rollout halt, +phased-release pause, OTA supersession, or the next store version), so do not +pause to re-confirm these steps; execute them and report. A request that +explicitly narrows scope (for example "upload only", "TestFlight only", or a +named track) still bounds what you do. + Before a build from the current upstream branch, fetch, require a clean worktree, and prove `HEAD` matches its upstream. The `generate-release` skill may instead build a clean, scoped release-preparation commit that descends directly from that @@ -17,40 +52,65 @@ verified EAS version metadata. Sauci tracks its native iOS and Android projects, so routine release builds must package those checked-in sources. Do not run `expo prebuild` first; native regeneration is a separate reviewed change. -Use the package scripts in `apps/mobile/package.json`; they create artifacts only. -Never infer upload or submission authority from build authorization. Store upload -uses a separately authorized command. +Run `npm run release:preflight -w @sauci/mobile` before allocating an EAS build. +It rejects inconsistent public/runtime versions, an iOS widget build-setting +override, and a public OTA certificate that would be omitted from the archive. +For a local EAS build, also run `npm run release:preflight:local-eas -w +@sauci/mobile` after setting `EAS_LOCAL_BUILD_PLUGIN_PATH` to the matching +plugin's executable `bin/run`. Do not point it at the package directory or +hardcode a machine-local cache path. -## Upload authorization gate +Classify a failure before rebuilding. Archive, plugin-spawn, package-install, and +disk-space failures happen before native compilation and must be repaired and +preflighted without consuming another build. After a signing, profile, or +capability failure, read back the provider state and prove only the affected +input changed before rebuilding. Retain the EAS work directory, command log, and +stable artifact path for every meaningful attempt. Never retry an ambiguous +upload. -After an artifact passes verification, stop immediately before the external -upload and ask the user for confirmation. The request must identify: +Report provider progress by phase: packaging, native compilation, submission +queue, or store processing. Do not describe every failure as a rebuild. + +Use the package scripts in `apps/mobile/package.json` to build artifacts and the +Fastlane lanes in `apps/mobile/fastlane/Fastfile` to upload, submit, and roll +out. + +## Upload and submission execution + +Verification before upload is unchanged and mandatory. Independently verify and +report: - the platform, exact artifact path, bundle/package identifier, public version, build number, signature identity, and SHA-256 digest; -- the exact destination and resulting state: Google Play internal-track draft or - App Store Connect/TestFlight processing; -- that the upload does not authorize a public rollout or App Review submission. +- the exact destination and resulting state: which Play track and rollout + status, or App Store Connect version state and whether App Review submission + and automatic release are included. -For iOS, inspect the current App Store Connect automatic-distribution behavior -before asking. If the build would be distributed automatically, name the exact -TestFlight groups or testers in the request and include that effect in the fresh -authorization. If the effect cannot be established, stop; changing an automatic- -distribution setting also requires separate authorization. +Once these details match the request, proceed through upload, review +submission, and rollout without requesting further confirmation. -Even when the original request includes building, releasing, uploading, or -submitting, require this fresh confirmation once the exact verified artifact and -destination are known. End the request with: `Upload this verified artifact to - now?` A clear affirmative response authorizes one upload of that -artifact to that destination, plus only any automatic TestFlight distribution -explicitly disclosed in the request. Run `eas submit` with the explicit -`--platform`, `--profile production`, `--path`, and `--wait` arguments; never -select `--latest`. If the result is ambiguous, inspect EAS and the store before -doing anything else, do not retry, and ask again before another upload. +- **Android**: `bundle exec fastlane android release aab:` + commits the release on the production track (pass `track:` to target another + track, `rollout:0.1` for a staged rollout). Play review runs automatically; + rollout proceeds on approval. Use the `upload` lane only when the request is + explicitly upload-only. +- **iOS**: `bundle exec fastlane ios release ipa:` uploads, + creates the App Store version, submits for App Review, and releases + automatically on approval (pass `phased_release:true` for a 7-day phased + release, `release_notes:"..."` for What's New). Use the `upload` lane for + TestFlight-only requests. `eas submit` remains valid for upload-only flows; + when used, pass explicit `--platform`, `--profile production`, `--path`, and + `--wait` — never `--latest`. -Apply this gate to every upload method, including EAS, Fastlane, Xcode Organizer, -and the store consoles. A later public rollout, App Review submission, or -additional TestFlight distribution requires another fresh authorization. +App Store Connect API group association does not establish the automatic- +distribution switch. Verify that switch in an authenticated App Store Connect UI +session before upload; if that UI verification is unavailable, stop rather +than inferring the distribution effect from API data. + +If an upload or submission command returns an ambiguous result, inspect EAS and +the store before doing anything else; do not retry blind. After submission, read +back the store state (Play Console track status / App Store Connect version +state) and report it. Preserve platform signing and local EAS versioning. After a build, verify that tracked changes are limited to the expected version metadata, then independently @@ -58,5 +118,30 @@ read the artifact version and signature. For an iOS IPA, inspect every packaged app extension as well as the containing app and require matching `CFBundleShortVersionString` and `CFBundleVersion` values. Treat Xcode archive warnings as diagnostic evidence, not the final artifact state: decide whether to -reject or rebuild only after reading the exported IPA itself. Report the artifact, -version/build number, upload result when authorized, and store read-back state. +reject or rebuild only after reading the exported IPA itself. Report the +artifact, version/build number, upload and submission results, rollout state, +and store read-back state. + +For Android, verify the accepted AAB has all four required ABIs, the Worklets, +Reanimated, and Skia native libraries, no broad `READ_MEDIA_IMAGES` or +`READ_MEDIA_VIDEO` permissions, and the production OTA runtime, channel, and +public certificate. For iOS, verify the exported IPA, not archive warnings, and +check both the containing app and every extension. + +For the Android native dependency ordering already tracked in Gradle, preserve +the explicit task dependency that makes Prefab inputs available before dependent +native tasks. Fix task validation with ordering, not Firebase removal or +dependency-version roulette. + +After Android upload, EAS Submit `FINISHED`, the exact internal/DRAFT/no-rollout +submit configuration, and the retained artifact digest are the available +authoritative read-back when a direct Play track read would require creating an +edit. Never create an edit merely to claim read-only verification. + +For a checked-in iOS entitlement, inspect the real Apple App ID capability state +before a signing rebuild. The capability sync bug tracked in +https://github.com/expo/eas-cli/issues/3986 can report success while Apple +rejects a malformed update. Read back Associated Domains, regenerate only the +affected profile, and decode that profile to prove the entitlement before +rebuilding. Noninteractive managed App Store Connect key auth may require +`EXPO_APPLE_TEAM_ID`; preserve certificates and unrelated target profiles. diff --git a/apps/mobile/.eslintrc.js b/apps/mobile/.eslintrc.js index b36a556..918dc81 100644 --- a/apps/mobile/.eslintrc.js +++ b/apps/mobile/.eslintrc.js @@ -2,6 +2,21 @@ module.exports = { extends: 'expo', ignorePatterns: ['/dist/*'], + rules: { + // eslint-config-expo (SDK 56) pulls eslint-plugin-react-hooks v7, whose + // recommended config adds React Compiler era rules as errors. Existing + // patterns this codebase relies on deliberately (the "latest value" ref + // pattern, effect-driven setState, dynamically created inline + // components, and manual memoization) trip these new rules throughout + // the app. Adopting the stricter rules is a deliberate follow-up + // refactor, not an SDK upgrade side effect, so they are downgraded to + // warnings here. + 'react-hooks/refs': 'warn', + 'react-hooks/set-state-in-effect': 'warn', + 'react-hooks/immutability': 'warn', + 'react-hooks/preserve-manual-memoization': 'warn', + 'react-hooks/static-components': 'warn', + }, overrides: [ { files: ['plugins/**/*.js'], diff --git a/apps/mobile/.gitignore b/apps/mobile/.gitignore index 8f5435e..e45d01f 100755 --- a/apps/mobile/.gitignore +++ b/apps/mobile/.gitignore @@ -11,5 +11,6 @@ expo-env.d.ts *.keystore # Fastlane fastlane-key.json +fastlane/.env fastlane/report.xml fastlane/README.md diff --git a/apps/mobile/android/.gitignore b/apps/mobile/android/.gitignore index 8a6be07..1ea9b64 100644 --- a/apps/mobile/android/.gitignore +++ b/apps/mobile/android/.gitignore @@ -12,5 +12,8 @@ local.properties *.hprof .cxx/ +# generated inline modules +app/src/main/java/inline/ + # Bundle artifacts *.jsbundle diff --git a/apps/mobile/android/app/build.gradle b/apps/mobile/android/app/build.gradle index 3a9f4b8..d49db76 100644 --- a/apps/mobile/android/app/build.gradle +++ b/apps/mobile/android/app/build.gradle @@ -11,7 +11,7 @@ def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath() react { entryFile = file(["node", "-e", "require('expo/scripts/resolveAppEntry')", projectRoot, "android", "absolute"].execute(null, rootDir).text.trim()) reactNativeDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() - hermesCommand = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc" + hermesCommand = new File(["node", "--print", "require.resolve('hermes-compiler/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/hermesc/%OS-BIN%/hermesc" codegenDir = new File(["node", "--print", "require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean() @@ -64,7 +64,7 @@ react { } /** - * Set this to true in release builds to optimize the app using R8. + * Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization). */ def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean() @@ -92,8 +92,9 @@ android { applicationId 'com.sauci.app' minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 49 - versionName "1.0.7" + versionCode 51 + versionName "1.0.8" + buildConfigField "String", "REACT_NATIVE_RELEASE_LEVEL", "\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\"" } signingConfigs { @@ -181,54 +182,4 @@ dependencies { } apply plugin: 'com.google.gms.google-services' -apply plugin: 'com.google.firebase.crashlytics' - -// Reanimated 4.1.7 imports Worklets from its pre-AGP-8 CMake output path, -// while AGP 8.14 writes release outputs below intermediates/cxx/RelWithDebInfo. -// Keep the checked-in Android project compatible with the supported SDK 54 -// dependency set by materializing that one legacy input after Worklets builds. -def workletsReleaseAbis = ["armeabi-v7a", "arm64-v8a", "x86", "x86_64"] -def syncWorkletsReleaseCmakeInputs = tasks.register("syncWorkletsReleaseCmakeInputs") { - dependsOn(":react-native-worklets:externalNativeBuildRelease") - - doLast { - def workletsIntermediates = file("${rootDir}/../../../node_modules/react-native-worklets/android/build/intermediates") - workletsReleaseAbis.each { abi -> - def libraries = fileTree(workletsIntermediates) { - include "cxx/RelWithDebInfo/**/obj/${abi}/libworklets.so" - }.files - if (libraries.size() != 1) { - throw new GradleException("Expected exactly one Worklets release library for ${abi}, found ${libraries.size()}") - } - def source = libraries.iterator().next() - def destination = file("${workletsIntermediates}/cmake/release/obj/${abi}/libworklets.so") - destination.parentFile.mkdirs() - java.nio.file.Files.deleteIfExists(destination.toPath()) - source.withInputStream { input -> - destination.withOutputStream { output -> output << input } - } - if (destination.length() != source.length()) { - throw new GradleException("Failed to copy Worklets release library for ${abi}") - } - } - } -} - -gradle.projectsEvaluated { - def reanimatedProject = findProject(":react-native-reanimated") - reanimatedProject?.tasks?.configureEach { task -> - if (task.name == "externalNativeBuildRelease" || task.name == "prefabReleasePackage") { - task.dependsOn(syncWorkletsReleaseCmakeInputs) - } - } - - tasks.configureEach { task -> - if (task.name.startsWith("configureCMakeRelWithDebInfo")) { - task.dependsOn( - ":react-native-worklets:prefabReleasePackage", - ":react-native-reanimated:prefabReleasePackage", - ":shopify_react-native-skia:prefabReleasePackage", - ) - } - } -} +apply plugin: 'com.google.firebase.crashlytics' \ No newline at end of file diff --git a/apps/mobile/android/app/src/debugOptimized/AndroidManifest.xml b/apps/mobile/android/app/src/debugOptimized/AndroidManifest.xml new file mode 100644 index 0000000..3ec2507 --- /dev/null +++ b/apps/mobile/android/app/src/debugOptimized/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/apps/mobile/android/app/src/main/AndroidManifest.xml b/apps/mobile/android/app/src/main/AndroidManifest.xml index a35260b..12a74d8 100644 --- a/apps/mobile/android/app/src/main/AndroidManifest.xml +++ b/apps/mobile/android/app/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ - + @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + @@ -30,13 +30,14 @@ + - + @@ -46,7 +47,6 @@ - @@ -56,7 +56,7 @@ - + diff --git a/apps/mobile/android/app/src/main/java/com/sauci/app/MainActivity.kt b/apps/mobile/android/app/src/main/java/com/sauci/app/MainActivity.kt index 0255aa6..d10dae3 100644 --- a/apps/mobile/android/app/src/main/java/com/sauci/app/MainActivity.kt +++ b/apps/mobile/android/app/src/main/java/com/sauci/app/MainActivity.kt @@ -1,4 +1,5 @@ package com.sauci.app +import expo.modules.splashscreen.SplashScreenManager import android.os.Build import android.os.Bundle @@ -15,7 +16,10 @@ class MainActivity : ReactActivity() { // Set the theme to AppTheme BEFORE onCreate to support // coloring the background, status bar, and navigation bar. // This is required for expo-splash-screen. - setTheme(R.style.AppTheme); + // setTheme(R.style.AppTheme); + // @generated begin expo-splashscreen - expo prebuild (DO NOT MODIFY) sync-f3ff59a738c56c9a6119210cb55f0b613eb8b6af + SplashScreenManager.registerOnActivity(this) + // @generated end expo-splashscreen super.onCreate(null) } diff --git a/apps/mobile/android/app/src/main/java/com/sauci/app/MainApplication.kt b/apps/mobile/android/app/src/main/java/com/sauci/app/MainApplication.kt index d691313..def3d48 100644 --- a/apps/mobile/android/app/src/main/java/com/sauci/app/MainApplication.kt +++ b/apps/mobile/android/app/src/main/java/com/sauci/app/MainApplication.kt @@ -5,40 +5,27 @@ import android.content.res.Configuration import com.facebook.react.PackageList import com.facebook.react.ReactApplication -import com.facebook.react.ReactNativeHost +import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative import com.facebook.react.ReactPackage import com.facebook.react.ReactHost -import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint -import com.facebook.react.defaults.DefaultReactNativeHost import com.facebook.react.common.ReleaseLevel +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint import expo.modules.ApplicationLifecycleDispatcher -import expo.modules.ReactNativeHostWrapper +import expo.modules.ExpoReactHostFactory class MainApplication : Application(), ReactApplication { - override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper( - this, - object : DefaultReactNativeHost(this) { - override fun getPackages(): List { - val packages = PackageList(this).packages - // Packages that cannot be autolinked yet can be added manually here, for example: - // packages.add(new MyReactNativePackage()); - return packages - } - - override fun getJSMainModuleName(): String = ".expo/.virtual-metro-entry" - - override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG - - override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED - override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED - } - ) - - override val reactHost: ReactHost - get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost) + override val reactHost: ReactHost by lazy { + ExpoReactHostFactory.getDefaultReactHost( + context = applicationContext, + packageList = + PackageList(this).packages.apply { + // Packages that cannot be autolinked yet can be added manually here, for example: + // add(MyReactNativePackage()) + } + ) + } override fun onCreate() { super.onCreate() diff --git a/apps/mobile/android/app/src/main/java/com/sauci/app/widget/LiveDraw.java b/apps/mobile/android/app/src/main/java/com/sauci/app/widget/LiveDraw.java index b93b9bc..d28f4af 100644 --- a/apps/mobile/android/app/src/main/java/com/sauci/app/widget/LiveDraw.java +++ b/apps/mobile/android/app/src/main/java/com/sauci/app/widget/LiveDraw.java @@ -1,84 +1,6 @@ package com.sauci.app.widget; -import android.appwidget.AppWidgetManager; -import android.appwidget.AppWidgetProvider; -import android.content.Context; -import android.content.SharedPreferences; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.RectF; -import android.util.Base64; -import android.util.TypedValue; -import android.widget.RemoteViews; +import com.reactnativeandroidwidget.RNWidgetProvider; -import com.sauci.app.R; - -public class LiveDraw extends AppWidgetProvider { - - private static final String PREFS_NAME_SUFFIX = ".widgetdata"; - private static final String KEY_IMAGE = "LiveDrawImage"; - private static final int BG_COLOR = 0xFF1A1A2E; - private static final int CORNER_RADIUS_DP = 16; - - @Override - public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { - for (int widgetId : appWidgetIds) { - updateWidget(context, appWidgetManager, widgetId); - } - } - - private void updateWidget(Context context, AppWidgetManager appWidgetManager, int widgetId) { - RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_live_draw); - - String base64 = getStoredImage(context); - if (base64 != null && !base64.isEmpty()) { - try { - byte[] bytes = Base64.decode(base64, Base64.DEFAULT); - Bitmap decoded = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); - if (decoded != null) { - Bitmap rounded = addRoundedBackground(context, decoded); - views.setImageViewBitmap(R.id.widget_image, rounded); - decoded.recycle(); - } - } catch (Exception e) { - setPlaceholder(views); - } - } else { - setPlaceholder(views); - } - - appWidgetManager.updateAppWidget(widgetId, views); - } - - private String getStoredImage(Context context) { - SharedPreferences prefs = context.getSharedPreferences( - context.getPackageName() + PREFS_NAME_SUFFIX, Context.MODE_PRIVATE); - return prefs.getString(KEY_IMAGE, null); - } - - private void setPlaceholder(RemoteViews views) { - views.setImageViewResource(R.id.widget_image, R.drawable.widget_placeholder); - } - - private Bitmap addRoundedBackground(Context context, Bitmap drawing) { - float radius = TypedValue.applyDimension( - TypedValue.COMPLEX_UNIT_DIP, CORNER_RADIUS_DP, - context.getResources().getDisplayMetrics()); - - int w = drawing.getWidth(); - int h = drawing.getHeight(); - - Bitmap output = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(output); - - Paint bgPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - bgPaint.setColor(BG_COLOR); - canvas.drawRoundRect(new RectF(0, 0, w, h), radius, radius, bgPaint); - - canvas.drawBitmap(drawing, 0, 0, null); - - return output; - } +public class LiveDraw extends RNWidgetProvider { } diff --git a/apps/mobile/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/apps/mobile/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png index 0aa1799..940ca5d 100644 Binary files a/apps/mobile/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png and b/apps/mobile/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ diff --git a/apps/mobile/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/apps/mobile/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png index 817dbe9..b03e8a4 100644 Binary files a/apps/mobile/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png and b/apps/mobile/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ diff --git a/apps/mobile/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/apps/mobile/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png index b2cfe67..126546c 100644 Binary files a/apps/mobile/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png and b/apps/mobile/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ diff --git a/apps/mobile/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/apps/mobile/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png index 0222083..cb759ad 100644 Binary files a/apps/mobile/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png and b/apps/mobile/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ diff --git a/apps/mobile/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/apps/mobile/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png index 1ad138f..1df342b 100644 Binary files a/apps/mobile/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png and b/apps/mobile/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ diff --git a/apps/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/apps/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp index a97edd8..e91bfd8 100644 Binary files a/apps/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp and b/apps/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/apps/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/apps/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp index cf7a6da..658f2c1 100644 Binary files a/apps/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp and b/apps/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/apps/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/apps/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp index 60af425..e202285 100644 Binary files a/apps/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp and b/apps/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/apps/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/apps/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp index 2606d3c..9bfe4a5 100644 Binary files a/apps/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp and b/apps/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/apps/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/apps/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp index 282629c..5f78705 100644 Binary files a/apps/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp and b/apps/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/apps/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/apps/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp index 8f28e36..e249752 100644 Binary files a/apps/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp and b/apps/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/apps/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/apps/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp index 9f8b66d..cf1b62e 100644 Binary files a/apps/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp and b/apps/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/apps/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/apps/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp index 6312379..4bccefd 100644 Binary files a/apps/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp and b/apps/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/apps/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/apps/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp index 56aec77..6bcfbcf 100644 Binary files a/apps/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp and b/apps/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/apps/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/apps/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp index 783f21f..9abd05e 100644 Binary files a/apps/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp and b/apps/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/apps/mobile/android/app/src/main/res/values/colors.xml b/apps/mobile/android/app/src/main/res/values/colors.xml index d8aa5d2..6668e93 100644 --- a/apps/mobile/android/app/src/main/res/values/colors.xml +++ b/apps/mobile/android/app/src/main/res/values/colors.xml @@ -2,6 +2,5 @@ #1a1a2e #1a1a2e #023c69 - #1a1a2e #e94560 \ No newline at end of file diff --git a/apps/mobile/android/app/src/main/res/values/strings.xml b/apps/mobile/android/app/src/main/res/values/strings.xml index 8ef60c0..d9e5322 100644 --- a/apps/mobile/android/app/src/main/res/values/strings.xml +++ b/apps/mobile/android/app/src/main/res/values/strings.xml @@ -1,7 +1,7 @@ Sauci - contain - false + automatic + 1.0.8 See your shared drawing with your partner. - 1.0.7 + contain \ No newline at end of file diff --git a/apps/mobile/android/app/src/main/res/values/styles.xml b/apps/mobile/android/app/src/main/res/values/styles.xml index 85c39a6..1a134df 100644 --- a/apps/mobile/android/app/src/main/res/values/styles.xml +++ b/apps/mobile/android/app/src/main/res/values/styles.xml @@ -1,18 +1,14 @@ - - - \ No newline at end of file diff --git a/apps/mobile/android/app/src/main/res/xml/widgetprovider_livedraw.xml b/apps/mobile/android/app/src/main/res/xml/widgetprovider_livedraw.xml index 62d4092..9e484a6 100644 --- a/apps/mobile/android/app/src/main/res/xml/widgetprovider_livedraw.xml +++ b/apps/mobile/android/app/src/main/res/xml/widgetprovider_livedraw.xml @@ -4,10 +4,18 @@ android:minHeight="110dp" android:targetCellWidth="4" android:targetCellHeight="2" + + + android:resizeMode="none" + android:description="@string/widget_livedraw_description" - android:initialLayout="@layout/widget_live_draw" + + android:initialLayout="@layout/rn_widget" android:previewImage="@drawable/livedraw_preview" + + + android:updatePeriodMillis="1800000" android:widgetCategory="home_screen"> diff --git a/apps/mobile/android/build.gradle b/apps/mobile/android/build.gradle index 4f5d91a..c27035a 100644 --- a/apps/mobile/android/build.gradle +++ b/apps/mobile/android/build.gradle @@ -1,26 +1,26 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - repositories { - google() - mavenCentral() - } - dependencies { + repositories { + google() + mavenCentral() + } + dependencies { classpath 'com.google.firebase:firebase-crashlytics-gradle:3.0.6' - classpath 'com.google.gms:google-services:4.4.1' - classpath('com.android.tools.build:gradle') - classpath('com.facebook.react:react-native-gradle-plugin') - classpath('org.jetbrains.kotlin:kotlin-gradle-plugin') - } + classpath 'com.google.gms:google-services:4.4.4' + classpath('com.android.tools.build:gradle') + classpath('com.facebook.react:react-native-gradle-plugin') + classpath('org.jetbrains.kotlin:kotlin-gradle-plugin') + } +} + +allprojects { + repositories { + google() + mavenCentral() + maven { url 'https://www.jitpack.io' } + } } apply plugin: "expo-root-project" apply plugin: "com.facebook.react.rootproject" - -allprojects { - repositories { - google() - mavenCentral() - maven { url 'https://www.jitpack.io' } - } -} diff --git a/apps/mobile/android/gradle.properties b/apps/mobile/android/gradle.properties index fd2cfbb..fd77685 100644 --- a/apps/mobile/android/gradle.properties +++ b/apps/mobile/android/gradle.properties @@ -10,12 +10,12 @@ # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. # Default value: -Xmx512m -XX:MaxMetaspaceSize=256m -org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m +org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true +org.gradle.parallel=true # AndroidX package structure to make it clearer which packages are bundled with the # Android operating system, and which are packaged with your app's APK @@ -41,6 +41,11 @@ newArchEnabled=true # If set to false, you will be using JSC instead. hermesEnabled=true +# Use this property to enable edge-to-edge display support. +# This allows your app to draw behind system bars for an immersive UI. +# Note: Only works with ReactActivity and should not be used with custom Activity. +edgeToEdgeEnabled=true + # Enable GIF support in React Native images (~200 B increase) expo.gif.enabled=true # Enable webp support in React Native images (~85 KB increase) @@ -55,16 +60,7 @@ EX_DEV_CLIENT_NETWORK_INSPECTOR=true # Use legacy packaging to compress native libraries in the resulting APK. expo.useLegacyPackaging=false -android.targetSdkVersion=36 -android.extraMavenRepos=[] -# Specifies whether the app is configured to use edge-to-edge via the app config or plugin -# WARNING: This property has been deprecated and will be removed in Expo SDK 55. Use `edgeToEdgeEnabled` or `react.edgeToEdgeEnabled` to determine whether the project is using edge-to-edge. -expo.edgeToEdgeEnabled=true - -# Use this property to enable edge-to-edge display support. -# This allows your app to draw behind system bars for an immersive UI. -# Note: Only works with ReactActivity and should not be used with custom Activity. -edgeToEdgeEnabled=true - +expo.inlineModules.watchedDirectories=[] android.compileSdkVersion=36 -android.buildToolsVersion=36.0.0 +android.targetSdkVersion=36 +android.buildToolsVersion=36.0.0 \ No newline at end of file diff --git a/apps/mobile/android/gradle/wrapper/gradle-wrapper.jar b/apps/mobile/android/gradle/wrapper/gradle-wrapper.jar index a4b76b9..61285a6 100644 Binary files a/apps/mobile/android/gradle/wrapper/gradle-wrapper.jar and b/apps/mobile/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/apps/mobile/android/gradle/wrapper/gradle-wrapper.properties b/apps/mobile/android/gradle/wrapper/gradle-wrapper.properties index d4081da..37f78a6 100644 --- a/apps/mobile/android/gradle/wrapper/gradle-wrapper.properties +++ b/apps/mobile/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/apps/mobile/android/gradlew b/apps/mobile/android/gradlew index f5feea6..adff685 100755 --- a/apps/mobile/android/gradlew +++ b/apps/mobile/android/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -86,8 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -115,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -173,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -206,15 +203,14 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/apps/mobile/android/gradlew.bat b/apps/mobile/android/gradlew.bat index 9b42019..39baf4d 100644 --- a/apps/mobile/android/gradlew.bat +++ b/apps/mobile/android/gradlew.bat @@ -1,3 +1,8 @@ +@REM Copyright (c) Meta Platforms, Inc. and affiliates. +@REM +@REM This source code is licensed under the MIT license found in the +@REM LICENSE file in the root directory of this source tree. + @rem @rem Copyright 2015 the original author or authors. @rem @@ -70,11 +75,10 @@ goto fail :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell diff --git a/apps/mobile/android/settings.gradle b/apps/mobile/android/settings.gradle index b2fa730..294d3bd 100644 --- a/apps/mobile/android/settings.gradle +++ b/apps/mobile/android/settings.gradle @@ -6,7 +6,7 @@ pluginManagement { }.standardOutput.asText.get().trim() ).getParentFile().absolutePath includeBuild(reactNativeGradlePlugin) - + def expoPluginsPath = new File( providers.exec { workingDir(rootDir) @@ -29,10 +29,10 @@ extensions.configure(com.facebook.react.ReactSettingsExtension) { ex -> ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand) } } +expoAutolinking.useExpoModules() rootProject.name = 'Sauci' -expoAutolinking.useExpoModules() expoAutolinking.useExpoVersionCatalog() include ':app' diff --git a/apps/mobile/app.config.js b/apps/mobile/app.config.js index be4f5b6..c4a523a 100644 --- a/apps/mobile/app.config.js +++ b/apps/mobile/app.config.js @@ -81,7 +81,7 @@ module.exports = () => ({ // Keep this explicit because EOAS validates a primitive runtime string before // upload. The release version script updates it atomically with app.json and // the checked-in native runtime values. - runtimeVersion: '1.0.7', + runtimeVersion: '1.0.8', updates: { enabled: true, url: OTA_MANIFEST_URL, diff --git a/apps/mobile/app.json b/apps/mobile/app.json index fa2b758..80264a9 100644 --- a/apps/mobile/app.json +++ b/apps/mobile/app.json @@ -2,17 +2,15 @@ "expo": { "name": "Sauci", "slug": "sauci", - "version": "1.0.7", + "version": "1.0.8", "orientation": "portrait", "icon": "./assets/icon.png", "scheme": "app.sauci", "userInterfaceStyle": "automatic", - "newArchEnabled": true, - "splash": { - "image": "./assets/splash-icon.png", - "resizeMode": "contain", - "backgroundColor": "#1a1a2e" - }, + "platforms": [ + "ios", + "android" + ], "ios": { "supportsTablet": false, "bundleIdentifier": "com.sauci.app", @@ -27,7 +25,7 @@ "group.com.sauci.app" ] }, - "buildNumber": "46", + "buildNumber": "47", "usesAppleSignIn": true, "googleServicesFile": "./GoogleService-Info.plist", "infoPlist": { @@ -189,7 +187,7 @@ "backgroundColor": "#1a1a2e" }, "package": "com.sauci.app", - "versionCode": 49, + "versionCode": 51, "googleServicesFile": "./google-services.json", "permissions": [ "RECEIVE_BOOT_COMPLETED", @@ -223,6 +221,14 @@ }, "plugins": [ "./plugins/withFixHoisting.js", + [ + "expo-splash-screen", + { + "image": "./assets/splash-icon.png", + "resizeMode": "contain", + "backgroundColor": "#1a1a2e" + } + ], "@react-native-firebase/app", [ "expo-build-properties", @@ -320,7 +326,10 @@ "origin": false }, "eas": { - "projectId": "807ca0af-e9bd-40e8-a658-f3382072c724" + "projectId": "807ca0af-e9bd-40e8-a658-f3382072c724", + "observe": { + "endpointUrl": "https://ota.apps.jbrunton.co.uk/observe/9a66f3c2-fda7-416f-87e2-6db833b32e9d" + } } }, "owner": "jjbrunton-apps" diff --git a/apps/mobile/app/(app)/my-answers.tsx b/apps/mobile/app/(app)/my-answers.tsx index ad265ad..2fcb1d8 100644 --- a/apps/mobile/app/(app)/my-answers.tsx +++ b/apps/mobile/app/(app)/my-answers.tsx @@ -389,7 +389,7 @@ const styles = StyleSheet.create({ zIndex: 100, }, navBarBackground: { - ...StyleSheet.absoluteFillObject, + ...StyleSheet.absoluteFill, borderBottomWidth: 1, borderBottomColor: colors.border, backgroundColor: colors.background, diff --git a/apps/mobile/app/_layout.tsx b/apps/mobile/app/_layout.tsx index 0e4efe1..fa47adc 100755 --- a/apps/mobile/app/_layout.tsx +++ b/apps/mobile/app/_layout.tsx @@ -5,6 +5,11 @@ import "../src/polyfills/web"; import { initCrashlytics, setUserContext, clearUserContext } from "../src/lib/crashlytics"; initCrashlytics(); +// Install the Observe global JS error handler after Crashlytics so it wraps +// (and always calls) whatever handler is already registered. +import { installObserveGlobalErrorHandler, logAppStarted } from "../src/lib/observe"; +installObserveGlobalErrorHandler(); + // Analytics imports (initialization deferred until app mounts) import { initAnalytics, setUserId, clearUserId, logScreenView, Events } from "../src/lib/analytics"; @@ -73,6 +78,7 @@ export default function RootLayout() { analyticsInitialized.current = true; initAnalytics(); Events.appOpened("cold"); + logAppStarted(); } }, []); @@ -115,15 +121,15 @@ export default function RootLayout() { // Fetch user on mount fetchUser(); - // Handle initial URL if app was opened via deep link - const handleDeepLink = async (url: string | null) => { - if (!url) return; + // Handle initial URL if app was opened via deep link + const handleDeepLink = async (url: string | null) => { + if (!url) return; // Invite links (https://sauci.app/join/{code} or app.sauci://join?code={code}) // are handled separately from the Supabase auth deep link flow below. - const inviteLink = parseInviteLinkCode(url); - if (inviteLink) { - Events.inviteLinkOpened(inviteLink.source); + const inviteLink = parseInviteLinkCode(url); + if (inviteLink) { + Events.inviteLinkOpened(inviteLink.source); await stashPendingInviteCode(inviteLink.code); const { isAuthenticated, user } = useAuthStore.getState(); @@ -200,15 +206,15 @@ export default function RootLayout() { } }; - // Get initial URL - Linking.getInitialURL().then((url) => { - handleDeepLink(url); - }); + // Get initial URL + Linking.getInitialURL().then((url) => { + handleDeepLink(url); + }); - // Listen for new deep links while app is open - const linkingSubscription = Linking.addEventListener("url", (event) => { - handleDeepLink(event.url); - }); + // Listen for new deep links while app is open + const linkingSubscription = Linking.addEventListener("url", (event) => { + handleDeepLink(event.url); + }); // Set up push notification response listener (for taps while app is running) const notificationSubscription = setupNotificationResponseListener(); diff --git a/apps/mobile/app/pack/[id].tsx b/apps/mobile/app/pack/[id].tsx index 2389670..a5699c0 100644 --- a/apps/mobile/app/pack/[id].tsx +++ b/apps/mobile/app/pack/[id].tsx @@ -425,7 +425,7 @@ const styles = StyleSheet.create({ zIndex: 100, }, navBarBackground: { - ...StyleSheet.absoluteFillObject, + ...StyleSheet.absoluteFill, borderBottomWidth: 1, borderBottomColor: colors.border, overflow: "hidden", diff --git a/apps/mobile/fastlane/Appfile b/apps/mobile/fastlane/Appfile index 5084007..453582b 100644 --- a/apps/mobile/fastlane/Appfile +++ b/apps/mobile/fastlane/Appfile @@ -1,2 +1,3 @@ json_key_file(ENV["GOOGLE_PLAY_KEY_FILE"] || File.expand_path("../fastlane-key.json", __dir__)) package_name("com.sauci.app") +app_identifier("com.sauci.app") diff --git a/apps/mobile/fastlane/Fastfile b/apps/mobile/fastlane/Fastfile index 441406f..3b63e6c 100644 --- a/apps/mobile/fastlane/Fastfile +++ b/apps/mobile/fastlane/Fastfile @@ -45,4 +45,86 @@ platform :android do lane :upload_beta do |options| upload(options.merge(track: "beta")) end + + desc "Upload AAB and release it: commits the release on the given track (default production), triggering Play review and rollout on approval" + lane :release do |options| + track = options[:track] || "production" + + project_root = File.expand_path("..", __dir__) + aab_path = options[:aab] + UI.user_error!("Pass the exact verified artifact with aab: — never release an implicit build") unless aab_path + aab_path = File.expand_path(aab_path, project_root) unless aab_path.start_with?("/") + UI.user_error!("AAB not found at #{aab_path}") unless File.exist?(aab_path) + + rollout = options[:rollout] # e.g. "0.1" for 10% staged rollout; omit for full rollout + + UI.message("Releasing #{aab_path} to #{track} track#{rollout ? " at #{(rollout.to_f * 100).round}% rollout" : " at full rollout"}...") + + upload_to_play_store( + track: track, + aab: aab_path, + skip_upload_metadata: true, + skip_upload_images: true, + skip_upload_screenshots: true, + skip_upload_changelogs: false, + release_status: rollout ? "inProgress" : "completed", + rollout: rollout, + ) + + UI.success("Release committed to #{track}. Google Play review runs automatically; rollout proceeds on approval.") + end +end + +platform :ios do + # App Store Connect API key, supplied via environment (never committed): + # ASC_KEY_ID, ASC_ISSUER_ID, ASC_KEY_PATH (path to the .p8 file) + private_lane :asc_api_key do + UI.user_error!("Set ASC_KEY_ID, ASC_ISSUER_ID, and ASC_KEY_PATH") unless ENV["ASC_KEY_ID"] && ENV["ASC_ISSUER_ID"] && ENV["ASC_KEY_PATH"] + app_store_connect_api_key( + key_id: ENV["ASC_KEY_ID"], + issuer_id: ENV["ASC_ISSUER_ID"], + key_filepath: ENV["ASC_KEY_PATH"], + ) + end + + desc "Upload IPA to App Store Connect / TestFlight only (no App Review submission)" + lane :upload do |options| + ipa_path = options[:ipa] + UI.user_error!("Pass the exact verified artifact with ipa:") unless ipa_path && File.exist?(File.expand_path(ipa_path)) + + upload_to_testflight( + api_key: asc_api_key, + ipa: File.expand_path(ipa_path), + skip_waiting_for_build_processing: false, + ) + UI.success("Uploaded to App Store Connect; build is processing for TestFlight.") + end + + desc "Upload IPA, create the App Store version, and submit it for App Review with automatic release on approval" + lane :release do |options| + ipa_path = options[:ipa] + UI.user_error!("Pass the exact verified artifact with ipa:") unless ipa_path && File.exist?(File.expand_path(ipa_path)) + + api_key = asc_api_key + + upload_to_app_store( + api_key: api_key, + ipa: File.expand_path(ipa_path), + submit_for_review: true, + automatic_release: options.fetch(:automatic_release, true), + phased_release: options.fetch(:phased_release, false), + precheck_include_in_app_purchases: false, + # Metadata lives in App Store Connect; only release notes change per version. + skip_metadata: options[:release_notes].nil?, + skip_screenshots: true, + release_notes: options[:release_notes] ? { "en-GB" => options[:release_notes], "default" => options[:release_notes] } : nil, + submission_information: { + add_id_info_uses_idfa: false, + export_compliance_uses_encryption: false, + }, + force: true, # skip interactive HTML preview; agents run non-interactively + ) + + UI.success("Submitted for App Review. The version releases #{options.fetch(:automatic_release, true) ? "automatically on approval" : "manually after approval"}.") + end end diff --git a/apps/mobile/ios/.gitignore b/apps/mobile/ios/.gitignore index 8beb344..8dcd911 100644 --- a/apps/mobile/ios/.gitignore +++ b/apps/mobile/ios/.gitignore @@ -28,3 +28,6 @@ project.xcworkspace # CocoaPods /Pods/ + +# @bacons/apple-targets generated entitlements cache +/.targets/ diff --git a/apps/mobile/ios/Podfile b/apps/mobile/ios/Podfile index 4b970db..a8be231 100644 --- a/apps/mobile/ios/Podfile +++ b/apps/mobile/ios/Podfile @@ -1,15 +1,28 @@ +# Set by expo-router. This enables Fabric-only features from react-native-screens +ENV['RNS_GAMMA_ENABLED'] ||= '1' require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking") require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods") require 'json' podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {} -ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0' -ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] +def ccache_enabled?(podfile_properties) + # Environment variable takes precedence + return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE'] -platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1' -install! 'cocoapods', - :deterministic_uuids => false + # Fall back to Podfile properties + podfile_properties['apple.ccacheEnabled'] == 'true' +end + +ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] +ENV['RCT_USE_RN_DEP'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1' +ENV['RCT_USE_PREBUILT_RNCORE'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1' +ENV['RCT_HERMES_V1_ENABLED'] ||= '0' if podfile_properties['expo.useHermesV1'] == 'false' +# An explicit `ios.usePrecompiledModules: false` must win even when the env var is already set +# (e.g. EXPO_USE_PRECOMPILED_MODULES exported by EAS Build), so force-disable here before the default. +ENV['EXPO_USE_PRECOMPILED_MODULES'] = '0' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] == 'false' +ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' +platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4' prepare_react_native_project! @@ -23,7 +36,8 @@ target 'Sauci' do 'node', '--no-warnings', '--eval', - 'require(require.resolve(\'expo-modules-autolinking\', { paths: [require.resolve(\'expo/package.json\')] }))(process.argv.slice(1))', + 'require(\'expo/bin/autolinking\')', + 'expo-modules-autolinking', 'react-native-config', '--json', '--platform', @@ -49,34 +63,8 @@ target 'Sauci' do installer, config[:reactNativePath], :mac_catalyst_enabled => false, - :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true', + :ccache_enabled => ccache_enabled?(podfile_properties), ) - - # The fmt version bundled with React Native 0.76 enables consteval for - # Apple Clang, but Apple Clang 21 (Xcode 26.4+) rejects fmt's FMT_STRING - # call sites. Patch the generated pod until React Native supplies a newer - # fmt release. Keeping this here makes clean pod installs reproducible. - fmt_base_header = File.join(__dir__, 'Pods', 'fmt', 'include', 'fmt', 'base.h') - if File.exist?(fmt_base_header) - fmt_base_source = File.read(fmt_base_header) - fmt_base_source.sub!( - /#elif defined\(__apple_build_version__\) && __apple_build_version__ < 14000029L/, - '#elif defined(__apple_build_version__)' - ) - File.chmod(0644, fmt_base_header) - File.write(fmt_base_header, fmt_base_source) - end - - # This is necessary for Xcode 14, because it signs resource bundles by default - # when building for devices. - installer.target_installation_results.pod_target_installation_results - .each do |pod_name, target_installation_result| - target_installation_result.resource_bundle_targets.each do |resource_bundle_target| - resource_bundle_target.build_configurations.each do |config| - config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO' - end - end - end end end diff --git a/apps/mobile/ios/Podfile.lock b/apps/mobile/ios/Podfile.lock index 6bce093..ca34081 100644 --- a/apps/mobile/ios/Podfile.lock +++ b/apps/mobile/ios/Podfile.lock @@ -1,44 +1,33 @@ PODS: - - AppAuth (2.0.0): - - AppAuth/Core (= 2.0.0) - - AppAuth/ExternalUserAgent (= 2.0.0) - - AppAuth/Core (2.0.0) - - AppAuth/ExternalUserAgent (2.0.0): + - AppAuth (2.1.0): + - AppAuth/Core (= 2.1.0) + - AppAuth/ExternalUserAgent (= 2.1.0) + - AppAuth/Core (2.1.0) + - AppAuth/ExternalUserAgent (2.1.0): - AppAuth/Core - - AppCheckCore (11.2.0): + - AppCheckCore (11.3.1): - GoogleUtilities/Environment (~> 8.0) - GoogleUtilities/UserDefaults (~> 8.0) - PromisesObjC (~> 2.4) - - boost (1.84.0) - - DoubleConversion (1.1.6) - - EXApplication (7.0.8): + - PromisesSwift (~> 2.4) + - RecaptchaInterop (~> 101.0) + - EASClient (56.0.1): - ExpoModulesCore - - EXAV (16.0.8): + - EXApplication (56.0.3): - ExpoModulesCore - - ReactCommon/turbomodule/core - - EXConstants (18.0.14): + - EXConstants (56.0.25): - ExpoModulesCore - - EXImageLoader (6.0.0): + - EXJSONUtils (56.0.0) + - EXManifests (56.0.4): - ExpoModulesCore - - React-Core - - EXJSONUtils (0.15.0) - - EXManifests (1.0.11): + - Expo (56.0.21): - ExpoModulesCore - - EXNotifications (0.32.17): - - ExpoModulesCore - - Expo (54.0.37): - - boost - - DoubleConversion - - ExpoModulesCore - - fast_float - - fmt - - glog + - ExpoModulesJSI - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -55,32 +44,26 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - expo-dev-client (6.0.21): + - expo-dev-client (56.0.26): - EXManifests - expo-dev-launcher - expo-dev-menu - expo-dev-menu-interface - EXUpdatesInterface - - expo-dev-launcher (6.0.21): - - boost - - DoubleConversion + - expo-dev-launcher (56.0.27): - EXManifests - - expo-dev-launcher/Main (= 6.0.21) + - expo-dev-launcher/Main (= 56.0.27) - expo-dev-menu - expo-dev-menu-interface - ExpoModulesCore - EXUpdatesInterface - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -98,26 +81,20 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - expo-dev-launcher/Main (6.0.21): - - boost - - DoubleConversion + - expo-dev-launcher/Main (56.0.27): - EXManifests - expo-dev-launcher/Unsafe - expo-dev-menu - expo-dev-menu-interface - ExpoModulesCore - EXUpdatesInterface - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -135,25 +112,19 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - expo-dev-launcher/Unsafe (6.0.21): - - boost - - DoubleConversion + - expo-dev-launcher/Unsafe (56.0.27): - EXManifests - expo-dev-menu - expo-dev-menu-interface - ExpoModulesCore - EXUpdatesInterface - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -171,22 +142,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - expo-dev-menu (7.0.19): - - boost - - DoubleConversion - - expo-dev-menu/Main (= 7.0.19) - - expo-dev-menu/ReactNativeCompatibles (= 7.0.19) - - fast_float - - fmt - - glog + - expo-dev-menu (56.0.23): + - expo-dev-menu/Main (= 56.0.23) - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -201,24 +165,18 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - expo-dev-menu-interface (2.0.0) - - expo-dev-menu/Main (7.0.19): - - boost - - DoubleConversion + - expo-dev-menu-interface (56.0.1) + - expo-dev-menu/Main (56.0.23): - EXManifests - expo-dev-menu-interface - ExpoModulesCore - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -235,20 +193,25 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - expo-dev-menu/ReactNativeCompatibles (7.0.19): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ExpoAdapterGoogleSignIn (16.1.4): + - ExpoModulesCore + - GoogleSignIn (~> 9.0) + - GoogleUtilities/Environment + - GoogleUtilities/UserDefaults + - React-Core + - RecaptchaInterop + - ExpoAppleAuthentication (56.0.4): + - ExpoModulesCore + - ExpoAppMetrics (56.0.26): + - ExpoModulesCore + - EXUpdatesInterface - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -263,61 +226,50 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - ExpoAdapterGoogleSignIn (16.1.1): + - ExpoAsset (56.0.24): - ExpoModulesCore - - GoogleSignIn (~> 9.0) + - ExpoAudio (56.0.13): + - ExpoModulesCore + - ExpoBlur (56.0.4): + - ExpoModulesCore + - ExpoClipboard (56.0.4): + - ExpoModulesCore + - ExpoDomWebView (56.0.6): + - ExpoModulesCore + - ExpoFileSystem (56.0.11): + - ExpoModulesCore + - ExpoFont (56.0.7): + - ExpoModulesCore + - ExpoGlassEffect (56.0.4): + - ExpoModulesCore + - ExpoHaptics (56.0.3): + - ExpoModulesCore + - ExpoImage (56.0.12): + - ExpoModulesCore + - ExpoImagePicker (56.0.25): + - ExpoModulesCore + - ExpoKeepAwake (56.0.3): + - ExpoModulesCore + - ExpoLinearGradient (56.0.4): + - ExpoModulesCore + - ExpoLinking (56.0.17): + - ExpoModulesCore + - ExpoLocalAuthentication (56.0.5): + - ExpoModulesCore + - ExpoLogBox (56.0.14): - React-Core - - ExpoAppleAuthentication (8.0.8): - - ExpoModulesCore - - ExpoAsset (12.0.13): - - ExpoModulesCore - - ExpoBlur (15.0.8): - - ExpoModulesCore - - ExpoClipboard (8.0.8): - - ExpoModulesCore - - ExpoFileSystem (19.0.24): - - ExpoModulesCore - - ExpoFont (14.0.12): - - ExpoModulesCore - - ExpoHaptics (15.0.8): - - ExpoModulesCore - - ExpoHead (6.0.24): - - ExpoModulesCore - - RNScreens - - ExpoImage (3.0.11): - - ExpoModulesCore - - libavif/libdav1d - - SDWebImage (~> 5.21.0) - - SDWebImageAVIFCoder (~> 0.11.0) - - SDWebImageSVGCoder (~> 1.7.0) - - SDWebImageWebPCoder (~> 0.14.6) - - ExpoImagePicker (17.0.11): - - ExpoModulesCore - - ExpoKeepAwake (15.0.8): - - ExpoModulesCore - - ExpoLinearGradient (15.0.8): - - ExpoModulesCore - - ExpoLinking (8.0.12): - - ExpoModulesCore - - ExpoLocalAuthentication (17.0.9): - - ExpoModulesCore - - ExpoMediaLibrary (18.2.1): + - ExpoMediaLibrary (56.0.11): - ExpoModulesCore - React-Core - - ExpoModulesCore (3.0.30): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ExpoModulesCore (56.0.25): + - ExpoModulesJSI - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -333,85 +285,164 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - ExpoSecureStore (15.0.8): + - ExpoModulesJSI (56.0.13): + - React-Core + - ReactCommon + - ExpoModulesWorklets (56.0.25): - ExpoModulesCore - - ExpoSharing (14.0.8): + - ExpoModulesJSI + - ExpoModulesWorkletsAdapter (56.0.25): + - ExpoModulesCore + - ExpoModulesJSI + - ExpoModulesWorklets + - RNWorklets + - ExpoNotifications (56.0.25): + - ExpoModulesCore + - ExpoObserve (56.0.29): + - EASClient + - ExpoAppMetrics + - ExpoModulesCore + - hermes-engine + - RCTRequired + - RCTTypeSafety + - React-Core + - React-Core-prebuilt + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - ReactNativeDependencies + - Yoga + - ExpoRouter (56.2.20): + - ExpoModulesCore + - RNScreens + - ExpoSecureStore (56.0.4): + - ExpoModulesCore + - ExpoSharing (56.0.26): + - ExpoModulesCore + - ExpoSplashScreen (56.0.15): + - ExpoModulesCore + - ExpoSymbols (56.0.7): + - ExpoModulesCore + - ExpoSystemUI (56.0.5): + - ExpoModulesCore + - ExpoUI (56.0.26): + - ExpoModulesCore + - ExpoModulesWorklets + - React-RCTFabric + - ExpoVideo (56.1.4): - ExpoModulesCore - ExpoWidgets (3.0.2): - ExpoModulesCore + - EXStructuredHeaders (56.0.0) - ExtensionStorage (1.0.0): - ExpoModulesCore - - EXUpdatesInterface (2.0.0): + - EXUpdates (56.0.26): + - EASClient + - EXManifests - ExpoModulesCore - - fast_float (8.0.0) - - FBLazyVector (0.81.5) - - Firebase/CoreOnly (12.8.0): - - FirebaseCore (~> 12.8.0) - - Firebase/Crashlytics (12.8.0): + - EXStructuredHeaders + - EXUpdatesInterface + - hermes-engine + - RCTRequired + - RCTTypeSafety + - ReachabilitySwift + - React-Core + - React-Core-prebuilt + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - ReactNativeDependencies + - Yoga + - EXUpdatesInterface (56.0.2): + - ExpoModulesCore + - FBLazyVector (0.85.3) + - Firebase/CoreOnly (12.10.0): + - FirebaseCore (~> 12.10.0) + - Firebase/Crashlytics (12.10.0): - Firebase/CoreOnly - - FirebaseCrashlytics (~> 12.8.0) - - FirebaseAnalytics/Core (12.8.0): - - FirebaseCore (~> 12.8.0) - - FirebaseInstallations (~> 12.8.0) - - GoogleAppMeasurement/Core (= 12.8.0) + - FirebaseCrashlytics (~> 12.10.0) + - FirebaseAnalytics/Core (12.10.0): + - FirebaseCore (~> 12.10.0) + - FirebaseInstallations (~> 12.10.0) + - GoogleAppMeasurement/Core (= 12.10.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - GoogleUtilities/MethodSwizzler (~> 8.1) - GoogleUtilities/Network (~> 8.1) - "GoogleUtilities/NSData+zlib (~> 8.1)" - nanopb (~> 3.30910.0) - - FirebaseAnalytics/IdentitySupport (12.8.0): - - FirebaseCore (~> 12.8.0) - - FirebaseInstallations (~> 12.8.0) - - GoogleAppMeasurement/IdentitySupport (= 12.8.0) + - FirebaseAnalytics/IdentitySupport (12.10.0): + - FirebaseCore (~> 12.10.0) + - FirebaseInstallations (~> 12.10.0) + - GoogleAppMeasurement/IdentitySupport (= 12.10.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - GoogleUtilities/MethodSwizzler (~> 8.1) - GoogleUtilities/Network (~> 8.1) - "GoogleUtilities/NSData+zlib (~> 8.1)" - nanopb (~> 3.30910.0) - - FirebaseCore (12.8.0): - - FirebaseCoreInternal (~> 12.8.0) + - FirebaseCore (12.10.0): + - FirebaseCoreInternal (~> 12.10.0) - GoogleUtilities/Environment (~> 8.1) - GoogleUtilities/Logger (~> 8.1) - - FirebaseCoreExtension (12.8.0): - - FirebaseCore (~> 12.8.0) - - FirebaseCoreInternal (12.8.0): + - FirebaseCoreExtension (12.10.0): + - FirebaseCore (~> 12.10.0) + - FirebaseCoreInternal (12.10.0): - "GoogleUtilities/NSData+zlib (~> 8.1)" - - FirebaseCrashlytics (12.8.0): - - FirebaseCore (~> 12.8.0) - - FirebaseInstallations (~> 12.8.0) - - FirebaseRemoteConfigInterop (~> 12.8.0) - - FirebaseSessions (~> 12.8.0) + - FirebaseCrashlytics (12.10.0): + - FirebaseCore (~> 12.10.0) + - FirebaseInstallations (~> 12.10.0) + - FirebaseRemoteConfigInterop (~> 12.10.0) + - FirebaseSessions (~> 12.10.0) - GoogleDataTransport (~> 10.1) - GoogleUtilities/Environment (~> 8.1) - nanopb (~> 3.30910.0) - PromisesObjC (~> 2.4) - - FirebaseInstallations (12.8.0): - - FirebaseCore (~> 12.8.0) + - FirebaseInstallations (12.10.0): + - FirebaseCore (~> 12.10.0) - GoogleUtilities/Environment (~> 8.1) - GoogleUtilities/UserDefaults (~> 8.1) - PromisesObjC (~> 2.4) - - FirebaseRemoteConfigInterop (12.8.0) - - FirebaseSessions (12.8.0): - - FirebaseCore (~> 12.8.0) - - FirebaseCoreExtension (~> 12.8.0) - - FirebaseInstallations (~> 12.8.0) + - FirebaseRemoteConfigInterop (12.10.0) + - FirebaseSessions (12.10.0): + - FirebaseCore (~> 12.10.0) + - FirebaseCoreExtension (~> 12.10.0) + - FirebaseInstallations (~> 12.10.0) - GoogleDataTransport (~> 10.1) - GoogleUtilities/Environment (~> 8.1) - GoogleUtilities/UserDefaults (~> 8.1) - nanopb (~> 3.30910.0) - PromisesSwift (~> 2.1) - - fmt (11.0.2) - - glog (0.3.5) - - GoogleAppMeasurement/Core (12.8.0): + - GoogleAppMeasurement/Core (12.10.0): - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - GoogleUtilities/MethodSwizzler (~> 8.1) - GoogleUtilities/Network (~> 8.1) - "GoogleUtilities/NSData+zlib (~> 8.1)" - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/IdentitySupport (12.8.0): - - GoogleAppMeasurement/Core (= 12.8.0) + - GoogleAppMeasurement/IdentitySupport (12.10.0): + - GoogleAppMeasurement/Core (= 12.10.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - GoogleUtilities/MethodSwizzler (~> 8.1) - GoogleUtilities/Network (~> 8.1) @@ -420,122 +451,84 @@ PODS: - GoogleDataTransport (10.1.1): - nanopb (~> 3.30910.0) - PromisesObjC (~> 2.4) - - GoogleSignIn (9.1.0): - - AppAuth (~> 2.0) + - GoogleSignIn (9.2.0): + - AppAuth (~> 2.1) - AppCheckCore (~> 11.0) - GTMAppAuth (~> 5.0) - GTMSessionFetcher/Core (~> 3.3) - - GoogleUtilities/AppDelegateSwizzler (8.1.0): + - GoogleUtilities/AppDelegateSwizzler (8.1.3): - GoogleUtilities/Environment - GoogleUtilities/Logger - GoogleUtilities/Network - GoogleUtilities/Privacy - - GoogleUtilities/Environment (8.1.0): + - GoogleUtilities/Environment (8.1.3): - GoogleUtilities/Privacy - - GoogleUtilities/Logger (8.1.0): + - GoogleUtilities/Logger (8.1.3): - GoogleUtilities/Environment - GoogleUtilities/Privacy - - GoogleUtilities/MethodSwizzler (8.1.0): + - GoogleUtilities/MethodSwizzler (8.1.3): - GoogleUtilities/Logger - GoogleUtilities/Privacy - - GoogleUtilities/Network (8.1.0): + - GoogleUtilities/Network (8.1.3): - GoogleUtilities/Logger - "GoogleUtilities/NSData+zlib" - GoogleUtilities/Privacy - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (8.1.0)": + - "GoogleUtilities/NSData+zlib (8.1.3)": - GoogleUtilities/Privacy - - GoogleUtilities/Privacy (8.1.0) - - GoogleUtilities/Reachability (8.1.0): + - GoogleUtilities/Privacy (8.1.3) + - GoogleUtilities/Reachability (8.1.3): - GoogleUtilities/Logger - GoogleUtilities/Privacy - - GoogleUtilities/UserDefaults (8.1.0): + - GoogleUtilities/UserDefaults (8.1.3): - GoogleUtilities/Logger - GoogleUtilities/Privacy - GTMAppAuth (5.0.0): - AppAuth/Core (~> 2.0) - GTMSessionFetcher/Core (< 4.0, >= 3.3) - GTMSessionFetcher/Core (3.5.0) - - hermes-engine (0.81.5): - - hermes-engine/Pre-built (= 0.81.5) - - hermes-engine/Pre-built (0.81.5) - - libavif/core (0.11.1) - - libavif/libdav1d (0.11.1): - - libavif/core - - libdav1d (>= 0.6.0) - - libdav1d (1.2.0) - - libwebp (1.6.0): - - libwebp/demux (= 1.6.0) - - libwebp/mux (= 1.6.0) - - libwebp/sharpyuv (= 1.6.0) - - libwebp/webp (= 1.6.0) - - libwebp/demux (1.6.0): - - libwebp/webp - - libwebp/mux (1.6.0): - - libwebp/demux - - libwebp/sharpyuv (1.6.0) - - libwebp/webp (1.6.0): - - libwebp/sharpyuv + - hermes-engine (250829098.0.10): + - hermes-engine/Pre-built (= 250829098.0.10) + - hermes-engine/Pre-built (250829098.0.10) - nanopb (3.30910.0): - nanopb/decode (= 3.30910.0) - nanopb/encode (= 3.30910.0) - nanopb/decode (3.30910.0) - nanopb/encode (3.30910.0) - - PromisesObjC (2.4.0) - - PromisesSwift (2.4.0): - - PromisesObjC (= 2.4.0) - - PurchasesHybridCommon (17.30.1): - - RevenueCat (= 5.56.0) - - RCT-Folly (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 11.0.2) - - glog - - RCT-Folly/Default (= 2024.11.18.00) - - RCT-Folly/Default (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 11.0.2) - - glog - - RCT-Folly/Fabric (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 11.0.2) - - glog - - RCTDeprecation (0.81.5) - - RCTRequired (0.81.5) - - RCTTypeSafety (0.81.5): - - FBLazyVector (= 0.81.5) - - RCTRequired (= 0.81.5) - - React-Core (= 0.81.5) - - React (0.81.5): - - React-Core (= 0.81.5) - - React-Core/DevSupport (= 0.81.5) - - React-Core/RCTWebSocket (= 0.81.5) - - React-RCTActionSheet (= 0.81.5) - - React-RCTAnimation (= 0.81.5) - - React-RCTBlob (= 0.81.5) - - React-RCTImage (= 0.81.5) - - React-RCTLinking (= 0.81.5) - - React-RCTNetwork (= 0.81.5) - - React-RCTSettings (= 0.81.5) - - React-RCTText (= 0.81.5) - - React-RCTVibration (= 0.81.5) - - React-callinvoker (0.81.5) - - React-Core (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - PromisesObjC (2.4.1) + - PromisesSwift (2.4.1): + - PromisesObjC (= 2.4.1) + - PurchasesHybridCommon (17.55.1): + - RevenueCat (= 5.67.1) + - RCTDeprecation (0.85.3) + - RCTRequired (0.85.3) + - RCTSwiftUI (0.85.3) + - RCTSwiftUIWrapper (0.85.3): + - RCTSwiftUI + - RCTTypeSafety (0.85.3): + - FBLazyVector (= 0.85.3) + - RCTRequired (= 0.85.3) + - React-Core (= 0.85.3) + - ReachabilitySwift (5.2.4) + - React (0.85.3): + - React-Core (= 0.85.3) + - React-Core/DevSupport (= 0.85.3) + - React-Core/RCTWebSocket (= 0.85.3) + - React-RCTActionSheet (= 0.85.3) + - React-RCTAnimation (= 0.85.3) + - React-RCTBlob (= 0.85.3) + - React-RCTImage (= 0.85.3) + - React-RCTLinking (= 0.85.3) + - React-RCTNetwork (= 0.85.3) + - React-RCTSettings (= 0.85.3) + - React-RCTText (= 0.85.3) + - React-RCTVibration (= 0.85.3) + - React-callinvoker (0.85.3) + - React-Core (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.5) + - React-Core-prebuilt + - React-Core/Default (= 0.85.3) - React-cxxreact - React-featureflags - React-hermes @@ -548,18 +541,14 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/CoreModulesHeaders (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-Core-prebuilt (0.85.3): + - ReactNativeDependencies + - React-Core/CoreModulesHeaders (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -573,18 +562,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/Default (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-Core/Default (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-cxxreact - React-featureflags - React-hermes @@ -597,20 +580,14 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/DevSupport (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-Core/DevSupport (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.5) - - React-Core/RCTWebSocket (= 0.81.5) + - React-Core-prebuilt + - React-Core/Default (= 0.85.3) + - React-Core/RCTWebSocket (= 0.85.3) - React-cxxreact - React-featureflags - React-hermes @@ -623,18 +600,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/RCTActionSheetHeaders (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-Core/RCTActionSheetHeaders (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -648,18 +619,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/RCTAnimationHeaders (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-Core/RCTAnimationHeaders (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -673,18 +638,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/RCTBlobHeaders (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-Core/RCTBlobHeaders (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -698,18 +657,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/RCTImageHeaders (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-Core/RCTImageHeaders (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -723,18 +676,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/RCTLinkingHeaders (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-Core/RCTLinkingHeaders (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -748,18 +695,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/RCTNetworkHeaders (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-Core/RCTNetworkHeaders (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -773,18 +714,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/RCTSettingsHeaders (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-Core/RCTSettingsHeaders (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -798,18 +733,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/RCTTextHeaders (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-Core/RCTTextHeaders (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -823,18 +752,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/RCTVibrationHeaders (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-Core/RCTVibrationHeaders (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -848,19 +771,13 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/RCTWebSocket (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-Core/RCTWebSocket (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.5) + - React-Core-prebuilt + - React-Core/Default (= 0.85.3) - React-cxxreact - React-featureflags - React-hermes @@ -873,76 +790,64 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-CoreModules (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - RCTTypeSafety (= 0.81.5) - - React-Core/CoreModulesHeaders (= 0.81.5) - - React-jsi (= 0.81.5) + - React-CoreModules (0.85.3): + - RCTTypeSafety (= 0.85.3) + - React-Core-prebuilt + - React-Core/CoreModulesHeaders (= 0.85.3) + - React-debug + - React-featureflags + - React-jsi (= 0.85.3) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-NativeModulesApple - React-RCTBlob - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.81.5) + - React-RCTImage (= 0.85.3) - React-runtimeexecutor + - React-utils - ReactCommon - - SocketRocket - - React-cxxreact (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-cxxreact (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker (= 0.81.5) - - React-debug (= 0.81.5) - - React-jsi (= 0.81.5) + - React-callinvoker (= 0.85.3) + - React-Core-prebuilt + - React-debug (= 0.85.3) + - React-jsi (= 0.85.3) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-logger (= 0.81.5) - - React-perflogger (= 0.81.5) + - React-logger (= 0.85.3) + - React-perflogger (= 0.85.3) - React-runtimeexecutor - - React-timing (= 0.81.5) - - SocketRocket - - React-debug (0.81.5) - - React-defaultsnativemodule (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-timing (= 0.85.3) + - React-utils + - ReactNativeDependencies + - React-debug (0.85.3): + - React-debug/redbox (= 0.85.3) + - React-debug/redbox (0.85.3) + - React-defaultsnativemodule (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-domnativemodule + - React-Fabric/animated + - React-featureflags - React-featureflagsnativemodule - React-idlecallbacksnativemodule + - React-intersectionobservernativemodule - React-jsi - React-jsiexecutor - React-microtasksnativemodule + - React-mutationobservernativemodule - React-RCTFBReactNativeSpec - - SocketRocket - - React-domnativemodule (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-webperformancenativemodule + - ReactNativeDependencies + - Yoga + - React-domnativemodule (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-Fabric - React-Fabric/bridging - React-FabricComponents @@ -952,39 +857,34 @@ PODS: - React-RCTFBReactNativeSpec - React-runtimeexecutor - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Fabric (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-Fabric (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - - React-Fabric/animations (= 0.81.5) - - React-Fabric/attributedstring (= 0.81.5) - - React-Fabric/bridging (= 0.81.5) - - React-Fabric/componentregistry (= 0.81.5) - - React-Fabric/componentregistrynative (= 0.81.5) - - React-Fabric/components (= 0.81.5) - - React-Fabric/consistency (= 0.81.5) - - React-Fabric/core (= 0.81.5) - - React-Fabric/dom (= 0.81.5) - - React-Fabric/imagemanager (= 0.81.5) - - React-Fabric/leakchecker (= 0.81.5) - - React-Fabric/mounting (= 0.81.5) - - React-Fabric/observers (= 0.81.5) - - React-Fabric/scheduler (= 0.81.5) - - React-Fabric/telemetry (= 0.81.5) - - React-Fabric/templateprocessor (= 0.81.5) - - React-Fabric/uimanager (= 0.81.5) + - React-Fabric/animated (= 0.85.3) + - React-Fabric/animationbackend (= 0.85.3) + - React-Fabric/animations (= 0.85.3) + - React-Fabric/attributedstring (= 0.85.3) + - React-Fabric/bridging (= 0.85.3) + - React-Fabric/componentregistry (= 0.85.3) + - React-Fabric/componentregistrynative (= 0.85.3) + - React-Fabric/components (= 0.85.3) + - React-Fabric/consistency (= 0.85.3) + - React-Fabric/core (= 0.85.3) + - React-Fabric/dom (= 0.85.3) + - React-Fabric/imagemanager (= 0.85.3) + - React-Fabric/leakchecker (= 0.85.3) + - React-Fabric/mounting (= 0.85.3) + - React-Fabric/observers (= 0.85.3) + - React-Fabric/scheduler (= 0.85.3) + - React-Fabric/telemetry (= 0.85.3) + - React-Fabric/uimanager (= 0.85.3) - React-featureflags - React-graphics - React-jsi @@ -995,19 +895,33 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/animations (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-Fabric/animated (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt + - React-cxxreact + - 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.85.3): + - hermes-engine + - RCTRequired + - RCTTypeSafety + - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1020,19 +934,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/attributedstring (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-Fabric/animations (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1045,19 +953,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/bridging (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-Fabric/attributedstring (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1070,19 +972,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/componentregistry (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-Fabric/bridging (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1095,19 +991,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/componentregistrynative (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-Fabric/componentregistry (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1120,48 +1010,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-Fabric/componentregistrynative (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.81.5) - - React-Fabric/components/root (= 0.81.5) - - React-Fabric/components/scrollview (= 0.81.5) - - React-Fabric/components/view (= 0.81.5) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components/legacyviewmanagerinterop (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1174,19 +1029,36 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components/root (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-Fabric/components (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt + - React-cxxreact + - React-debug + - React-Fabric/components/legacyviewmanagerinterop (= 0.85.3) + - React-Fabric/components/root (= 0.85.3) + - React-Fabric/components/scrollview (= 0.85.3) + - React-Fabric/components/view (= 0.85.3) + - 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.85.3): + - hermes-engine + - RCTRequired + - RCTTypeSafety + - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1199,19 +1071,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components/scrollview (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-Fabric/components/root (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1224,19 +1090,32 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components/view (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-Fabric/components/scrollview (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - ReactNativeDependencies + - React-Fabric/components/view (0.85.3): + - hermes-engine + - RCTRequired + - RCTTypeSafety + - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1250,20 +1129,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Fabric/consistency (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-Fabric/consistency (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1276,19 +1149,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/core (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-Fabric/core (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1301,19 +1168,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/dom (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-Fabric/dom (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1326,19 +1187,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/imagemanager (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-Fabric/imagemanager (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1351,19 +1206,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/leakchecker (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-Fabric/leakchecker (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1376,19 +1225,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/mounting (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-Fabric/mounting (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1401,22 +1244,18 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/observers (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-Fabric/observers (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.81.5) + - React-Fabric/observers/events (= 0.85.3) + - React-Fabric/observers/intersection (= 0.85.3) + - React-Fabric/observers/mutation (= 0.85.3) - React-featureflags - React-graphics - React-jsi @@ -1427,19 +1266,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/observers/events (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-Fabric/observers/events (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1452,46 +1285,74 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/scheduler (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-Fabric/observers/intersection (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - ReactNativeDependencies + - React-Fabric/observers/mutation (0.85.3): + - hermes-engine + - RCTRequired + - RCTTypeSafety + - React-Core + - React-Core-prebuilt + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - ReactNativeDependencies + - React-Fabric/scheduler (0.85.3): + - hermes-engine + - RCTRequired + - RCTTypeSafety + - React-Core + - React-Core-prebuilt + - React-cxxreact + - React-debug + - React-Fabric/animationbackend - React-Fabric/observers/events - 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 - - SocketRocket - - React-Fabric/telemetry (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-Fabric/telemetry (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1504,47 +1365,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/templateprocessor (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-Fabric/uimanager (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/uimanager (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/uimanager/consistency (= 0.81.5) + - React-Fabric/uimanager/consistency (= 0.85.3) - React-featureflags - React-graphics - React-jsi @@ -1556,19 +1386,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/uimanager/consistency (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-Fabric/uimanager/consistency (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1582,24 +1406,18 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-FabricComponents (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-FabricComponents (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.81.5) - - React-FabricComponents/textlayoutmanager (= 0.81.5) + - React-FabricComponents/components (= 0.85.3) + - React-FabricComponents/textlayoutmanager (= 0.85.3) - React-featureflags - React-graphics - React-jsi @@ -1610,34 +1428,28 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-FabricComponents/components (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.81.5) - - React-FabricComponents/components/iostextinput (= 0.81.5) - - React-FabricComponents/components/modal (= 0.81.5) - - React-FabricComponents/components/rncore (= 0.81.5) - - React-FabricComponents/components/safeareaview (= 0.81.5) - - React-FabricComponents/components/scrollview (= 0.81.5) - - React-FabricComponents/components/switch (= 0.81.5) - - React-FabricComponents/components/text (= 0.81.5) - - React-FabricComponents/components/textinput (= 0.81.5) - - React-FabricComponents/components/unimplementedview (= 0.81.5) - - React-FabricComponents/components/virtualview (= 0.81.5) + - React-FabricComponents/components/inputaccessory (= 0.85.3) + - React-FabricComponents/components/iostextinput (= 0.85.3) + - React-FabricComponents/components/modal (= 0.85.3) + - React-FabricComponents/components/rncore (= 0.85.3) + - React-FabricComponents/components/safeareaview (= 0.85.3) + - React-FabricComponents/components/scrollview (= 0.85.3) + - React-FabricComponents/components/switch (= 0.85.3) + - React-FabricComponents/components/text (= 0.85.3) + - React-FabricComponents/components/textinput (= 0.85.3) + - React-FabricComponents/components/unimplementedview (= 0.85.3) + - React-FabricComponents/components/virtualview (= 0.85.3) - React-featureflags - React-graphics - React-jsi @@ -1648,20 +1460,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/inputaccessory (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-FabricComponents/components/inputaccessory (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1675,20 +1481,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/iostextinput (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-FabricComponents/components/iostextinput (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1702,20 +1502,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/modal (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-FabricComponents/components/modal (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1729,20 +1523,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/rncore (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-FabricComponents/components/rncore (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1756,20 +1544,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/safeareaview (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-FabricComponents/components/safeareaview (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1783,20 +1565,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/scrollview (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-FabricComponents/components/scrollview (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1810,20 +1586,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/switch (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-FabricComponents/components/switch (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1837,20 +1607,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/text (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-FabricComponents/components/text (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1864,20 +1628,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/textinput (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-FabricComponents/components/textinput (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1891,20 +1649,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/unimplementedview (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-FabricComponents/components/unimplementedview (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1918,20 +1670,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/virtualview (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-FabricComponents/components/virtualview (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1945,20 +1691,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/textlayoutmanager (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-FabricComponents/textlayoutmanager (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1972,272 +1712,200 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricImage (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-FabricImage (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired (= 0.81.5) - - RCTTypeSafety (= 0.81.5) + - RCTRequired (= 0.85.3) + - RCTTypeSafety (= 0.85.3) + - React-Core-prebuilt - React-Fabric - React-featureflags - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.81.5) + - React-jsiexecutor (= 0.85.3) - React-logger - React-rendererdebug - React-utils - ReactCommon - - SocketRocket + - ReactNativeDependencies - Yoga - - React-featureflags (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-featureflagsnativemodule (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-featureflags (0.85.3): + - React-Core-prebuilt + - ReactNativeDependencies + - React-featureflagsnativemodule (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-featureflags - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - - SocketRocket - - React-graphics (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-graphics (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt + - React-featureflags - React-jsi - React-jsiexecutor - React-utils - - SocketRocket - - React-hermes (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-hermes (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-cxxreact (= 0.81.5) + - React-Core-prebuilt + - React-cxxreact (= 0.85.3) - React-jsi - - React-jsiexecutor (= 0.81.5) + - React-jsiexecutor (= 0.85.3) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.5) + - React-jsitooling + - React-oscompat + - React-perflogger (= 0.85.3) - React-runtimeexecutor - - SocketRocket - - React-idlecallbacksnativemodule (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-idlecallbacksnativemodule (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - React-runtimeexecutor - React-runtimescheduler - ReactCommon/turbomodule/core - - SocketRocket - - React-ImageManager (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-ImageManager (0.85.3): + - React-Core-prebuilt - React-Core/Default - React-debug - React-Fabric - React-graphics - React-rendererdebug - React-utils - - SocketRocket - - React-jserrorhandler (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-intersectionobservernativemodule (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt + - React-cxxreact + - 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.85.3): + - hermes-engine + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags - React-jsi - ReactCommon/turbomodule/bridging - - SocketRocket - - React-jsi (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-jsi (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-jsiexecutor (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-Core-prebuilt + - ReactNativeDependencies + - React-jsiexecutor (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-cxxreact (= 0.81.5) - - React-jsi (= 0.81.5) + - React-Core-prebuilt + - React-cxxreact + - React-debug + - React-jserrorhandler + - React-jsi - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.5) + - React-jsitooling + - React-perflogger - React-runtimeexecutor - - SocketRocket - - React-jsinspector (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-utils + - ReactNativeDependencies + - React-jsinspector (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-featureflags - React-jsi - React-jsinspectorcdp - React-jsinspectornetwork - React-jsinspectortracing - React-oscompat - - React-perflogger (= 0.81.5) + - React-perflogger (= 0.85.3) - React-runtimeexecutor - - SocketRocket - - React-jsinspectorcdp (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-jsinspectornetwork (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-featureflags + - React-utils + - ReactNativeDependencies + - React-jsinspectorcdp (0.85.3): + - React-Core-prebuilt + - ReactNativeDependencies + - React-jsinspectornetwork (0.85.3): + - React-Core-prebuilt - React-jsinspectorcdp - - React-performancetimeline - - React-timing - - SocketRocket - - React-jsinspectortracing (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-jsinspectortracing (0.85.3): + - hermes-engine + - React-Core-prebuilt + - React-jsi + - React-jsinspectornetwork - React-oscompat - React-timing - - SocketRocket - - React-jsitooling (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-cxxreact (= 0.81.5) - - React-jsi (= 0.81.5) + - React-utils + - ReactNativeDependencies + - React-jsitooling (0.85.3): + - hermes-engine + - React-Core-prebuilt + - React-cxxreact (= 0.85.3) + - React-debug + - React-jsi (= 0.85.3) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-runtimeexecutor - - SocketRocket - - React-jsitracing (0.81.5): + - React-utils + - ReactNativeDependencies + - React-jsitracing (0.85.3): - React-jsi - - React-logger (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-Mapbuffer (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-logger (0.85.3): + - React-Core-prebuilt + - ReactNativeDependencies + - React-Mapbuffer (0.85.3): + - React-Core-prebuilt - React-debug - - SocketRocket - - React-microtasksnativemodule (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-microtasksnativemodule (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - - SocketRocket - - react-native-compressor (1.16.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-mutationobservernativemodule (0.85.3): + - hermes-engine + - React-Core-prebuilt + - React-cxxreact + - 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-compressor (1.19.4): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2252,28 +1920,22 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - react-native-safe-area-context (5.6.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - react-native-safe-area-context (5.7.0): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags - React-graphics - React-ImageManager - React-jsi - - react-native-safe-area-context/common (= 5.6.2) - - react-native-safe-area-context/fabric (= 5.6.2) + - react-native-safe-area-context/common (= 5.7.0) + - react-native-safe-area-context/fabric (= 5.7.0) - React-NativeModulesApple - React-RCTFabric - React-renderercss @@ -2282,20 +1944,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - react-native-safe-area-context/common (5.6.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - react-native-safe-area-context/common (5.7.0): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2310,20 +1966,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - react-native-safe-area-context/fabric (5.6.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - react-native-safe-area-context/fabric (5.7.0): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2339,22 +1989,16 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - react-native-skia (2.2.12): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - react-native-skia (2.6.9): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2369,20 +2013,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - react-native-view-shot (4.0.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - react-native-view-shot (5.1.0): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2397,20 +2035,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-NativeModulesApple (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-NativeModulesApple (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - React-callinvoker - React-Core + - React-Core-prebuilt - React-cxxreact + - React-debug - React-featureflags - React-jsi - React-jsinspector @@ -2418,60 +2051,53 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket - - React-oscompat (0.81.5) - - React-perflogger (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-performancetimeline (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-networking (0.85.3): + - React-Core-prebuilt + - React-jsinspectornetwork + - React-jsinspectortracing + - React-performancetimeline + - React-timing + - ReactNativeDependencies + - React-oscompat (0.85.3) + - React-perflogger (0.85.3): + - React-Core-prebuilt + - ReactNativeDependencies + - React-performancecdpmetrics (0.85.3): + - hermes-engine + - React-Core-prebuilt + - React-jsi + - React-performancetimeline + - React-runtimeexecutor + - React-timing + - ReactNativeDependencies + - React-performancetimeline (0.85.3): + - React-Core-prebuilt - React-featureflags + - React-jsinspector - React-jsinspectortracing - React-perflogger - React-timing - - SocketRocket - - React-RCTActionSheet (0.81.5): - - React-Core/RCTActionSheetHeaders (= 0.81.5) - - React-RCTAnimation (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-RCTActionSheet (0.85.3): + - React-Core/RCTActionSheetHeaders (= 0.85.3) + - React-RCTAnimation (0.85.3): - RCTTypeSafety + - React-Core-prebuilt - React-Core/RCTAnimationHeaders + - React-debug - React-featureflags - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - SocketRocket - - React-RCTAppDelegate (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-RCTAppDelegate (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-CoreModules - React-debug - React-defaultsnativemodule @@ -2493,16 +2119,10 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon - - SocketRocket - - React-RCTBlob (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-RCTBlob (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-Core/RCTBlobHeaders - React-Core/RCTWebSocket - React-jsi @@ -2512,17 +2132,12 @@ PODS: - React-RCTFBReactNativeSpec - React-RCTNetwork - ReactCommon - - SocketRocket - - React-RCTFabric (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-RCTFabric (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - RCTSwiftUIWrapper - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-FabricComponents @@ -2533,8 +2148,9 @@ PODS: - React-jsi - React-jsinspector - React-jsinspectorcdp - - React-jsinspectornetwork - React-jsinspectortracing + - React-networking + - React-performancecdpmetrics - React-performancetimeline - React-RCTAnimation - React-RCTFBReactNativeSpec @@ -2546,37 +2162,25 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-RCTFBReactNativeSpec (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-RCTFBReactNativeSpec (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-jsi - React-NativeModulesApple - - React-RCTFBReactNativeSpec/components (= 0.81.5) + - React-RCTFBReactNativeSpec/components (= 0.85.3) - ReactCommon - - SocketRocket - - React-RCTFBReactNativeSpec/components (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-RCTFBReactNativeSpec/components (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2586,59 +2190,44 @@ PODS: - React-rendererdebug - React-utils - ReactCommon - - SocketRocket + - ReactNativeDependencies - Yoga - - React-RCTImage (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-RCTImage (0.85.3): - RCTTypeSafety + - React-Core-prebuilt - React-Core/RCTImageHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - React-RCTNetwork - ReactCommon - - SocketRocket - - React-RCTLinking (0.81.5): - - React-Core/RCTLinkingHeaders (= 0.81.5) - - React-jsi (= 0.81.5) + - ReactNativeDependencies + - React-RCTLinking (0.85.3): + - React-Core/RCTLinkingHeaders (= 0.85.3) + - React-jsi (= 0.85.3) - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule/core (= 0.81.5) - - React-RCTNetwork (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - ReactCommon/turbomodule/core (= 0.85.3) + - React-RCTNetwork (0.85.3): - RCTTypeSafety + - React-Core-prebuilt - React-Core/RCTNetworkHeaders + - React-debug - React-featureflags - React-jsi - React-jsinspectorcdp - React-jsinspectornetwork - React-NativeModulesApple + - React-networking - React-RCTFBReactNativeSpec - ReactCommon - - SocketRocket - - React-RCTRuntime (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-RCTRuntime (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - React-Core + - React-Core-prebuilt + - React-debug - React-jsi - React-jsinspector - React-jsinspectorcdp @@ -2648,63 +2237,40 @@ PODS: - React-RuntimeCore - React-runtimeexecutor - React-RuntimeHermes - - SocketRocket - - React-RCTSettings (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-utils + - ReactNativeDependencies + - React-RCTSettings (0.85.3): - RCTTypeSafety + - React-Core-prebuilt - React-Core/RCTSettingsHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - SocketRocket - - React-RCTText (0.81.5): - - React-Core/RCTTextHeaders (= 0.81.5) + - ReactNativeDependencies + - React-RCTText (0.85.3): + - React-Core/RCTTextHeaders (= 0.85.3) - Yoga - - React-RCTVibration (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-RCTVibration (0.85.3): + - React-Core-prebuilt - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - SocketRocket - - React-rendererconsistency (0.81.5) - - React-renderercss (0.81.5): + - ReactNativeDependencies + - React-rendererconsistency (0.85.3) + - React-renderercss (0.85.3): - React-debug - React-utils - - React-rendererdebug (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-rendererdebug (0.85.3): + - React-Core-prebuilt - React-debug - - SocketRocket - - React-RuntimeApple (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-RuntimeApple (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - React-callinvoker + - React-Core-prebuilt - React-Core/Default - React-CoreModules - React-cxxreact @@ -2723,16 +2289,10 @@ PODS: - React-RuntimeHermes - React-runtimescheduler - React-utils - - SocketRocket - - React-RuntimeCore (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-RuntimeCore (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-cxxreact - React-Fabric - React-featureflags @@ -2745,29 +2305,17 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket - - React-runtimeexecutor (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-runtimeexecutor (0.85.3): + - React-Core-prebuilt - React-debug - React-featureflags - - React-jsi (= 0.81.5) + - React-jsi (= 0.85.3) - React-utils - - SocketRocket - - React-RuntimeHermes (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-RuntimeHermes (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-featureflags - React-hermes - React-jsi @@ -2779,17 +2327,11 @@ PODS: - React-RuntimeCore - React-runtimeexecutor - React-utils - - SocketRocket - - React-runtimescheduler (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-runtimescheduler (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - React-callinvoker + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -2801,35 +2343,34 @@ PODS: - React-runtimeexecutor - React-timing - React-utils - - SocketRocket - - React-timing (0.81.5): + - ReactNativeDependencies + - React-timing (0.85.3): - React-debug - - React-utils (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-utils (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-debug - - React-jsi (= 0.81.5) - - SocketRocket - - ReactAppDependencyProvider (0.81.5): + - React-jsi (= 0.85.3) + - ReactNativeDependencies + - React-webperformancenativemodule (0.85.3): + - hermes-engine + - React-Core-prebuilt + - React-cxxreact + - React-jsi + - React-jsiexecutor + - React-performancetimeline + - React-RCTFBReactNativeSpec + - React-runtimeexecutor + - ReactCommon/turbomodule/core + - ReactNativeDependencies + - ReactAppDependencyProvider (0.85.3): - ReactCodegen - - ReactCodegen (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactCodegen (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-FabricImage @@ -2843,80 +2384,52 @@ PODS: - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket - - ReactCommon (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - ReactCommon/turbomodule (= 0.81.5) - - SocketRocket - - ReactCommon/turbomodule (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - ReactCommon (0.85.3): + - React-Core-prebuilt + - ReactCommon/turbomodule (= 0.85.3) + - ReactNativeDependencies + - ReactCommon/turbomodule (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker (= 0.81.5) - - React-cxxreact (= 0.81.5) - - React-jsi (= 0.81.5) - - React-logger (= 0.81.5) - - React-perflogger (= 0.81.5) - - ReactCommon/turbomodule/bridging (= 0.81.5) - - ReactCommon/turbomodule/core (= 0.81.5) - - SocketRocket - - ReactCommon/turbomodule/bridging (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-callinvoker (= 0.85.3) + - React-Core-prebuilt + - React-cxxreact (= 0.85.3) + - React-jsi (= 0.85.3) + - React-logger (= 0.85.3) + - React-perflogger (= 0.85.3) + - ReactCommon/turbomodule/bridging (= 0.85.3) + - ReactCommon/turbomodule/core (= 0.85.3) + - ReactNativeDependencies + - ReactCommon/turbomodule/bridging (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker (= 0.81.5) - - React-cxxreact (= 0.81.5) - - React-jsi (= 0.81.5) - - React-logger (= 0.81.5) - - React-perflogger (= 0.81.5) - - SocketRocket - - ReactCommon/turbomodule/core (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - React-callinvoker (= 0.85.3) + - React-Core-prebuilt + - React-cxxreact (= 0.85.3) + - React-jsi (= 0.85.3) + - React-logger (= 0.85.3) + - React-perflogger (= 0.85.3) + - ReactNativeDependencies + - ReactCommon/turbomodule/core (0.85.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker (= 0.81.5) - - React-cxxreact (= 0.81.5) - - React-debug (= 0.81.5) - - React-featureflags (= 0.81.5) - - React-jsi (= 0.81.5) - - React-logger (= 0.81.5) - - React-perflogger (= 0.81.5) - - React-utils (= 0.81.5) - - SocketRocket - - RevenueCat (5.56.0) + - React-callinvoker (= 0.85.3) + - React-Core-prebuilt + - React-cxxreact (= 0.85.3) + - React-debug (= 0.85.3) + - React-featureflags (= 0.85.3) + - React-jsi (= 0.85.3) + - React-logger (= 0.85.3) + - React-perflogger (= 0.85.3) + - React-utils (= 0.85.3) + - ReactNativeDependencies + - ReactNativeDependencies (0.85.3) + - RecaptchaInterop (101.0.0) + - RevenueCat (5.67.1) - RNCAsyncStorage (2.2.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2931,22 +2444,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - RNFBAnalytics (23.8.5): - - boost - - DoubleConversion - - fast_float - - FirebaseAnalytics/Core (= 12.8.0) - - FirebaseAnalytics/IdentitySupport (= 12.8.0) - - fmt - - glog + - RNCMaskedView (0.3.2): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2961,22 +2466,40 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies + - Yoga + - RNFBAnalytics (23.8.8): + - FirebaseAnalytics/Core (= 12.10.0) + - FirebaseAnalytics/IdentitySupport (= 12.10.0) + - hermes-engine + - RCTRequired + - RCTTypeSafety + - React-Core + - React-Core-prebuilt + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - ReactNativeDependencies - RNFBApp - - SocketRocket - Yoga - - RNFBApp (23.8.5): - - boost - - DoubleConversion - - fast_float - - Firebase/CoreOnly (= 12.8.0) - - fmt - - glog + - RNFBApp (23.8.8): + - Firebase/CoreOnly (= 12.10.0) - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2991,22 +2514,16 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - RNFBCrashlytics (23.8.5): - - boost - - DoubleConversion - - fast_float - - Firebase/Crashlytics (= 12.8.0) + - RNFBCrashlytics (23.8.8): + - Firebase/Crashlytics (= 12.10.0) - FirebaseCoreExtension - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3021,21 +2538,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - RNFBApp - - SocketRocket - Yoga - - RNGestureHandler (2.28.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - RNGestureHandler (2.31.2): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-FabricComponents @@ -3051,21 +2562,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - RNGoogleSignin (16.1.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - RNGoogleSignin (16.1.4): - GoogleSignIn (~> 9.0) - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3080,23 +2585,17 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - RNPurchases (9.7.5): - - PurchasesHybridCommon (= 17.30.1) + - RNPurchases (9.15.2): + - PurchasesHybridCommon (= 17.55.1) - React-Core - - RNReanimated (4.1.7): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - RNReanimated (4.3.1): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3112,22 +2611,17 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated (= 4.1.7) + - ReactNativeDependencies + - RNReanimated/apple (= 4.3.1) + - RNReanimated/common (= 4.3.1) - RNWorklets - - SocketRocket - Yoga - - RNReanimated/reanimated (4.1.7): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - RNReanimated/apple (4.3.1): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3143,22 +2637,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated/apple (= 4.1.7) + - ReactNativeDependencies - RNWorklets - - SocketRocket - Yoga - - RNReanimated/reanimated/apple (4.1.7): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - RNReanimated/common (4.3.1): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3174,21 +2661,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - RNWorklets - - SocketRocket - Yoga - - RNScreens (4.16.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - RNScreens (4.26.2): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3204,21 +2685,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNScreens/common (= 4.16.0) - - SocketRocket + - ReactNativeDependencies + - RNScreens/common (= 4.26.2) - Yoga - - RNScreens/common (4.16.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - RNScreens/common (4.26.2): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3234,20 +2709,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - RNShare (12.3.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3262,20 +2731,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - RNSVG (15.12.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - RNSVG (15.15.4): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3290,21 +2753,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNSVG/common (= 15.12.1) - - SocketRocket + - ReactNativeDependencies + - RNSVG/common (= 15.15.4) - Yoga - - RNSVG/common (15.12.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - RNSVG/common (15.15.4): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3319,20 +2776,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - RNWorklets (0.5.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - RNWorklets (0.8.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3348,21 +2799,16 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNWorklets/worklets (= 0.5.1) - - SocketRocket + - ReactNativeDependencies + - RNWorklets/apple (= 0.8.3) + - RNWorklets/common (= 0.8.3) - Yoga - - RNWorklets/worklets (0.5.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - RNWorklets/apple (0.8.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3378,21 +2824,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNWorklets/worklets/apple (= 0.5.1) - - SocketRocket + - ReactNativeDependencies - Yoga - - RNWorklets/worklets/apple (0.5.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - RNWorklets/common (0.8.3): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3408,34 +2847,18 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - SDWebImage (5.21.7): - - SDWebImage/Core (= 5.21.7) - - SDWebImage/Core (5.21.7) - - SDWebImageAVIFCoder (0.11.1): - - libavif/core (>= 0.11.0) - - SDWebImage (~> 5.10) - - SDWebImageSVGCoder (1.7.0): - - SDWebImage/Core (~> 5.6) - - SDWebImageWebPCoder (0.14.6): - - libwebp (~> 1.0) - - SDWebImage/Core (~> 5.17) - - SocketRocket (0.7.1) - WidgetBridge (0.0.1): - ExpoModulesCore - Yoga (0.0.0) DEPENDENCIES: - - boost (from `../../../node_modules/react-native/third-party-podspecs/boost.podspec`) - - DoubleConversion (from `../../../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) + - EASClient (from `../../../node_modules/expo-eas-client/ios`) - EXApplication (from `../../../node_modules/expo-application/ios`) - - EXAV (from `../../../node_modules/expo-av/ios`) - EXConstants (from `../../../node_modules/expo-constants/ios`) - - EXImageLoader (from `../../../node_modules/expo-image-loader/ios`) - EXJSONUtils (from `../../../node_modules/expo-json-utils/ios`) - EXManifests (from `../../../node_modules/expo-manifests/ios`) - - EXNotifications (from `../../../node_modules/expo-notifications/ios`) - Expo (from `../../../node_modules/expo`) - expo-dev-client (from `../../../node_modules/expo-dev-client/ios`) - expo-dev-launcher (from `../../../node_modules/expo-dev-launcher`) @@ -3443,38 +2866,54 @@ DEPENDENCIES: - expo-dev-menu-interface (from `../../../node_modules/expo-dev-menu-interface/ios`) - "ExpoAdapterGoogleSignIn (from `../../../node_modules/@react-native-google-signin/google-signin/expo/ios`)" - ExpoAppleAuthentication (from `../../../node_modules/expo-apple-authentication/ios`) + - ExpoAppMetrics (from `../../../node_modules/expo-app-metrics/ios`) - ExpoAsset (from `../../../node_modules/expo-asset/ios`) + - ExpoAudio (from `../../../node_modules/expo-audio/ios`) - ExpoBlur (from `../../../node_modules/expo-blur/ios`) - ExpoClipboard (from `../../../node_modules/expo-clipboard/ios`) - - ExpoFileSystem (from `../../../node_modules/expo-file-system/ios`) - - ExpoFont (from `../../../node_modules/expo-font/ios`) + - "ExpoDomWebView (from `../../../node_modules/@expo/dom-webview/ios`)" + - ExpoFileSystem (from `../../../node_modules/expo-file-system/ios/ExpoFileSystem.podspec`) + - ExpoFont (from `../../../node_modules/expo-font/ios/ExpoFont.podspec`) + - ExpoGlassEffect (from `../../../node_modules/expo-glass-effect/ios`) - ExpoHaptics (from `../../../node_modules/expo-haptics/ios`) - - ExpoHead (from `../../../node_modules/expo-router/ios`) - - ExpoImage (from `../../../node_modules/expo-image/ios`) + - ExpoImage (from `../../../node_modules/expo-image/ios/ExpoImage.podspec`) - ExpoImagePicker (from `../../../node_modules/expo-image-picker/ios`) - ExpoKeepAwake (from `../../../node_modules/expo-keep-awake/ios`) - ExpoLinearGradient (from `../../../node_modules/expo-linear-gradient/ios`) - ExpoLinking (from `../../../node_modules/expo-linking/ios`) - ExpoLocalAuthentication (from `../../../node_modules/expo-local-authentication/ios`) - - ExpoMediaLibrary (from `../../../node_modules/expo-media-library/ios`) - - ExpoModulesCore (from `../../../node_modules/expo-modules-core`) + - "ExpoLogBox (from `../../../node_modules/@expo/log-box`)" + - ExpoMediaLibrary (from `../../../node_modules/expo-media-library/ios/ExpoMediaLibrary.podspec`) + - ExpoModulesCore (from `../../../node_modules/expo-modules-core/ExpoModulesCore.podspec`) + - ExpoModulesJSI (from `../../../node_modules/expo-modules-jsi/apple`) + - ExpoModulesWorklets (from `../../../node_modules/expo-modules-core/ExpoModulesWorklets.podspec`) + - ExpoModulesWorkletsAdapter (from `../../../node_modules/expo-modules-core`) + - ExpoNotifications (from `../../../node_modules/expo-notifications/ios`) + - ExpoObserve (from `../../../node_modules/expo-observe/ios`) + - ExpoRouter (from `../../../node_modules/expo-router/ios`) - ExpoSecureStore (from `../../../node_modules/expo-secure-store/ios`) - ExpoSharing (from `../../../node_modules/expo-sharing/ios`) + - ExpoSplashScreen (from `../../../node_modules/expo-splash-screen/ios`) + - ExpoSymbols (from `../../../node_modules/expo-symbols/ios`) + - ExpoSystemUI (from `../../../node_modules/expo-system-ui/ios`) + - "ExpoUI (from `../../../node_modules/@expo/ui/ios`)" + - ExpoVideo (from `../../../node_modules/expo-video/ios/ExpoVideo.podspec`) - "ExpoWidgets (from `../../../node_modules/@bittingz/expo-widgets/ios`)" + - EXStructuredHeaders (from `../../../node_modules/expo-structured-headers/ios`) - "ExtensionStorage (from `../../../node_modules/@bacons/apple-targets/ios`)" + - EXUpdates (from `../../../node_modules/expo-updates/ios`) - EXUpdatesInterface (from `../../../node_modules/expo-updates-interface/ios`) - - fast_float (from `../../../node_modules/react-native/third-party-podspecs/fast_float.podspec`) - FBLazyVector (from `../../../node_modules/react-native/Libraries/FBLazyVector`) - - fmt (from `../../../node_modules/react-native/third-party-podspecs/fmt.podspec`) - - glog (from `../../../node_modules/react-native/third-party-podspecs/glog.podspec`) - hermes-engine (from `../../../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) - - RCT-Folly (from `../../../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCTDeprecation (from `../../../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) - RCTRequired (from `../../../node_modules/react-native/Libraries/Required`) + - 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-callinvoker (from `../../../node_modules/react-native/ReactCommon/callinvoker`) - React-Core (from `../../../node_modules/react-native/`) + - React-Core-prebuilt (from `../../../node_modules/react-native/React-Core-prebuilt.podspec`) - React-Core/RCTWebSocket (from `../../../node_modules/react-native/`) - React-CoreModules (from `../../../node_modules/react-native/React/CoreModules`) - React-cxxreact (from `../../../node_modules/react-native/ReactCommon/cxxreact`) @@ -3490,6 +2929,7 @@ DEPENDENCIES: - 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`) @@ -3502,13 +2942,16 @@ DEPENDENCIES: - 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-compressor (from `../../../node_modules/react-native-compressor`) - react-native-safe-area-context (from `../../../node_modules/react-native-safe-area-context`) - "react-native-skia (from `../node_modules/@shopify/react-native-skia`)" - react-native-view-shot (from `../../../node_modules/react-native-view-shot`) - 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-RCTAnimation (from `../../../node_modules/react-native/Libraries/NativeAnimation`) @@ -3533,22 +2976,24 @@ DEPENDENCIES: - React-runtimescheduler (from `../../../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) - React-timing (from `../../../node_modules/react-native/ReactCommon/react/timing`) - React-utils (from `../../../node_modules/react-native/ReactCommon/react/utils`) - - ReactAppDependencyProvider (from `build/generated/ios`) - - ReactCodegen (from `build/generated/ios`) + - 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`) - - "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)" + - ReactNativeDependencies (from `../../../node_modules/react-native/third-party-podspecs/ReactNativeDependencies.podspec`) + - "RNCAsyncStorage (from `../../../node_modules/@react-native-async-storage/async-storage`)" + - "RNCMaskedView (from `../../../node_modules/@react-native-masked-view/masked-view`)" - "RNFBAnalytics (from `../node_modules/@react-native-firebase/analytics`)" - "RNFBApp (from `../node_modules/@react-native-firebase/app`)" - "RNFBCrashlytics (from `../node_modules/@react-native-firebase/crashlytics`)" - RNGestureHandler (from `../../../node_modules/react-native-gesture-handler`) - "RNGoogleSignin (from `../../../node_modules/@react-native-google-signin/google-signin`)" - RNPurchases (from `../../../node_modules/react-native-purchases`) - - RNReanimated (from `../node_modules/react-native-reanimated`) + - RNReanimated (from `../../../node_modules/react-native-reanimated`) - RNScreens (from `../../../node_modules/react-native-screens`) - RNShare (from `../../../node_modules/react-native-share`) - RNSVG (from `../../../node_modules/react-native-svg`) - RNWorklets (from `../../../node_modules/react-native-worklets`) - - SocketRocket (~> 0.7.1) - WidgetBridge (from `../modules/widget-bridge/ios`) - Yoga (from `../../../node_modules/react-native/ReactCommon/yoga`) @@ -3571,39 +3016,25 @@ SPEC REPOS: - GoogleUtilities - GTMAppAuth - GTMSessionFetcher - - libavif - - libdav1d - - libwebp - nanopb - PromisesObjC - PromisesSwift - PurchasesHybridCommon + - ReachabilitySwift + - RecaptchaInterop - RevenueCat - - SDWebImage - - SDWebImageAVIFCoder - - SDWebImageSVGCoder - - SDWebImageWebPCoder - - SocketRocket EXTERNAL SOURCES: - boost: - :podspec: "../../../node_modules/react-native/third-party-podspecs/boost.podspec" - DoubleConversion: - :podspec: "../../../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" + EASClient: + :path: "../../../node_modules/expo-eas-client/ios" EXApplication: :path: "../../../node_modules/expo-application/ios" - EXAV: - :path: "../../../node_modules/expo-av/ios" EXConstants: :path: "../../../node_modules/expo-constants/ios" - EXImageLoader: - :path: "../../../node_modules/expo-image-loader/ios" EXJSONUtils: :path: "../../../node_modules/expo-json-utils/ios" EXManifests: :path: "../../../node_modules/expo-manifests/ios" - EXNotifications: - :path: "../../../node_modules/expo-notifications/ios" Expo: :path: "../../../node_modules/expo" expo-dev-client: @@ -3618,22 +3049,28 @@ EXTERNAL SOURCES: :path: "../../../node_modules/@react-native-google-signin/google-signin/expo/ios" ExpoAppleAuthentication: :path: "../../../node_modules/expo-apple-authentication/ios" + ExpoAppMetrics: + :path: "../../../node_modules/expo-app-metrics/ios" ExpoAsset: :path: "../../../node_modules/expo-asset/ios" + ExpoAudio: + :path: "../../../node_modules/expo-audio/ios" ExpoBlur: :path: "../../../node_modules/expo-blur/ios" ExpoClipboard: :path: "../../../node_modules/expo-clipboard/ios" + ExpoDomWebView: + :path: "../../../node_modules/@expo/dom-webview/ios" ExpoFileSystem: - :path: "../../../node_modules/expo-file-system/ios" + :podspec: "../../../node_modules/expo-file-system/ios/ExpoFileSystem.podspec" ExpoFont: - :path: "../../../node_modules/expo-font/ios" + :podspec: "../../../node_modules/expo-font/ios/ExpoFont.podspec" + ExpoGlassEffect: + :path: "../../../node_modules/expo-glass-effect/ios" ExpoHaptics: :path: "../../../node_modules/expo-haptics/ios" - ExpoHead: - :path: "../../../node_modules/expo-router/ios" ExpoImage: - :path: "../../../node_modules/expo-image/ios" + :podspec: "../../../node_modules/expo-image/ios/ExpoImage.podspec" ExpoImagePicker: :path: "../../../node_modules/expo-image-picker/ios" ExpoKeepAwake: @@ -3644,37 +3081,61 @@ EXTERNAL SOURCES: :path: "../../../node_modules/expo-linking/ios" ExpoLocalAuthentication: :path: "../../../node_modules/expo-local-authentication/ios" + ExpoLogBox: + :path: "../../../node_modules/@expo/log-box" ExpoMediaLibrary: - :path: "../../../node_modules/expo-media-library/ios" + :podspec: "../../../node_modules/expo-media-library/ios/ExpoMediaLibrary.podspec" ExpoModulesCore: + :podspec: "../../../node_modules/expo-modules-core/ExpoModulesCore.podspec" + ExpoModulesJSI: + :path: "../../../node_modules/expo-modules-jsi/apple" + ExpoModulesWorklets: + :podspec: "../../../node_modules/expo-modules-core/ExpoModulesWorklets.podspec" + ExpoModulesWorkletsAdapter: :path: "../../../node_modules/expo-modules-core" + ExpoNotifications: + :path: "../../../node_modules/expo-notifications/ios" + ExpoObserve: + :path: "../../../node_modules/expo-observe/ios" + ExpoRouter: + :path: "../../../node_modules/expo-router/ios" ExpoSecureStore: :path: "../../../node_modules/expo-secure-store/ios" ExpoSharing: :path: "../../../node_modules/expo-sharing/ios" + ExpoSplashScreen: + :path: "../../../node_modules/expo-splash-screen/ios" + ExpoSymbols: + :path: "../../../node_modules/expo-symbols/ios" + ExpoSystemUI: + :path: "../../../node_modules/expo-system-ui/ios" + ExpoUI: + :path: "../../../node_modules/@expo/ui/ios" + ExpoVideo: + :podspec: "../../../node_modules/expo-video/ios/ExpoVideo.podspec" ExpoWidgets: :path: "../../../node_modules/@bittingz/expo-widgets/ios" + EXStructuredHeaders: + :path: "../../../node_modules/expo-structured-headers/ios" ExtensionStorage: :path: "../../../node_modules/@bacons/apple-targets/ios" + EXUpdates: + :path: "../../../node_modules/expo-updates/ios" EXUpdatesInterface: :path: "../../../node_modules/expo-updates-interface/ios" - fast_float: - :podspec: "../../../node_modules/react-native/third-party-podspecs/fast_float.podspec" FBLazyVector: :path: "../../../node_modules/react-native/Libraries/FBLazyVector" - fmt: - :podspec: "../../../node_modules/react-native/third-party-podspecs/fmt.podspec" - glog: - :podspec: "../../../node_modules/react-native/third-party-podspecs/glog.podspec" hermes-engine: :podspec: "../../../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" - :tag: hermes-2025-07-07-RNv0.81.0-e0fc67142ec0763c6b6153ca2bf96df815539782 - RCT-Folly: - :podspec: "../../../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" + :tag: hermes-v250829098.0.10 RCTDeprecation: :path: "../../../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" RCTRequired: :path: "../../../node_modules/react-native/Libraries/Required" + 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: @@ -3683,6 +3144,8 @@ EXTERNAL SOURCES: :path: "../../../node_modules/react-native/ReactCommon/callinvoker" React-Core: :path: "../../../node_modules/react-native/" + React-Core-prebuilt: + :podspec: "../../../node_modules/react-native/React-Core-prebuilt.podspec" React-CoreModules: :path: "../../../node_modules/react-native/React/CoreModules" React-cxxreact: @@ -3711,6 +3174,8 @@ EXTERNAL SOURCES: :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: @@ -3735,6 +3200,8 @@ EXTERNAL SOURCES: :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-compressor: :path: "../../../node_modules/react-native-compressor" react-native-safe-area-context: @@ -3745,10 +3212,14 @@ EXTERNAL SOURCES: :path: "../../../node_modules/react-native-view-shot" 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: @@ -3797,14 +3268,20 @@ EXTERNAL SOURCES: :path: "../../../node_modules/react-native/ReactCommon/react/timing" React-utils: :path: "../../../node_modules/react-native/ReactCommon/react/utils" + React-webperformancenativemodule: + :path: "../../../node_modules/react-native/ReactCommon/react/nativemodule/webperformance" ReactAppDependencyProvider: - :path: build/generated/ios + :path: build/generated/ios/ReactAppDependencyProvider ReactCodegen: - :path: build/generated/ios + :path: build/generated/ios/ReactCodegen ReactCommon: :path: "../../../node_modules/react-native/ReactCommon" + ReactNativeDependencies: + :podspec: "../../../node_modules/react-native/third-party-podspecs/ReactNativeDependencies.podspec" RNCAsyncStorage: - :path: "../node_modules/@react-native-async-storage/async-storage" + :path: "../../../node_modules/@react-native-async-storage/async-storage" + RNCMaskedView: + :path: "../../../node_modules/@react-native-masked-view/masked-view" RNFBAnalytics: :path: "../node_modules/@react-native-firebase/analytics" RNFBApp: @@ -3818,7 +3295,7 @@ EXTERNAL SOURCES: RNPurchases: :path: "../../../node_modules/react-native-purchases" RNReanimated: - :path: "../node_modules/react-native-reanimated" + :path: "../../../node_modules/react-native-reanimated" RNScreens: :path: "../../../node_modules/react-native-screens" RNShare: @@ -3833,159 +3310,172 @@ EXTERNAL SOURCES: :path: "../../../node_modules/react-native/ReactCommon/yoga" SPEC CHECKSUMS: - AppAuth: 1c1a8afa7e12f2ec3a294d9882dfa5ab7d3cb063 - AppCheckCore: cc8fd0a3a230ddd401f326489c99990b013f0c4f - boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 - DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb - EXApplication: 1e98d4b1dccdf30627f92917f4b2c5a53c330e5f - EXAV: b60fcf142fae6684d295bc28cd7cfcb3335570ea - EXConstants: 18ac927605517285307ea8f7ffe6fe7ca538eb5d - EXImageLoader: 189e3476581efe3ad4d1d3fb4735b7179eb26f05 - EXJSONUtils: 1d3e4590438c3ee593684186007028a14b3686cd - EXManifests: 378c7742de02a8605093b1c82b5774d8f9875cec - EXNotifications: c67e92b9fdfe785ff9dbdc5f4c0ff935de357da7 - Expo: c3473549eabe0d0dbe3a4ed23610147bd6301c72 - expo-dev-client: b8adef5e6847b5335a3b95a1fd2edc731d4331ee - expo-dev-launcher: 4e02f66d36292f2d29864cd61658448d9de20d2c - expo-dev-menu: c464455bdf1bf1590e1335e053892b98f3a33dab - expo-dev-menu-interface: 600df12ea01efecdd822daaf13cc0ac091775533 - ExpoAdapterGoogleSignIn: 21ff1daeef3d21cb0b45772d8029102cc728d6b1 - ExpoAppleAuthentication: 9413ae9a5e631a424cc04c1b13b0694dbab7d594 - ExpoAsset: 9e5a7c9c0a9fb83ad5b2bb365141f2bd7f289b66 - ExpoBlur: b90747a3f22a8b6ceffd9cb0dc41a4184efdc656 - ExpoClipboard: b36b287d8356887844bb08ed5c84b5979bb4dd1e - ExpoFileSystem: 8e87545aef1d8d31f244edbfdd0780df4e5bac2e - ExpoFont: dfb7c572372b610da45b41e3b436321fd6a97215 - ExpoHaptics: d3a6375d8dcc3a1083d003bc2298ff654fafb536 - ExpoHead: 33924c5829f9a3f98a5bd432d23c0e02ef64afcc - ExpoImage: 686f972bff29525733aa13357f6691dc90aa03d8 - ExpoImagePicker: ade85e148f735fc7e6f27dfe3eef28eb3887e90a - ExpoKeepAwake: 55f75eca6499bb9e4231ebad6f3e9cb8f99c0296 - ExpoLinearGradient: 809102bdb979f590083af49f7fa4805cd931bd58 - ExpoLinking: 2ef632ad5013e3f1568fae9408d56ab9af5efc55 - ExpoLocalAuthentication: 58fadf98e9caeae82455d15e4bffc94691585c83 - ExpoMediaLibrary: a3093b04365b245bb23b25b6eba84eb6ab55fecb - ExpoModulesCore: 6294d9712874e86423c9f899c04ac1de9d468e1b - ExpoSecureStore: d32f751874a2ceb5aaeebeb3578e165c1ba2b24a - ExpoSharing: 0d983394ed4a80334bab5a0d5384f75710feb7e8 + AppAuth: ef4da5a3fc2e10b90c09a0a94a9baeaedc0341d5 + AppCheckCore: e215d35177a9cf469927863e69c13e220df32a8b + EASClient: 2321f8d99fa86c710a6f68e017f3b54366baed9f + EXApplication: e6040c92edc5522accd62852342e6b14742d42c0 + EXConstants: a6fea3d870546e8aba088aa2ed05f3c23c1b9030 + EXJSONUtils: dba2755f4e24009eaf87a876b2d615ea06c16e42 + EXManifests: 7e19be8df665a338493060a419847dae76ffcd43 + Expo: 9fa90573ae63da89914e947775a062bbb5d0caf5 + expo-dev-client: 76a100e8fcf404abdc791edc034a6df71c600e33 + expo-dev-launcher: 93776289ad115dc05e1ce5e505e4a239d59ce132 + expo-dev-menu: 38c734ffc02dcc771b2238193c38843bd555b192 + expo-dev-menu-interface: 65402d4affb8b418aa6cec29b3abb0e313c8f443 + ExpoAdapterGoogleSignIn: cfc75819d7d2490488250ce5634f57f92c60a2b8 + ExpoAppleAuthentication: 3dd8ddd3016396a8171f06af8cc5e3e008e8eaf4 + ExpoAppMetrics: b4eefdedbb1b40b6649407e4d84922139e39ccf4 + ExpoAsset: 3f825e3c30de2d3e8a280b97602a8a607ce864fe + ExpoAudio: 2970e2d332b52bfbb64d88564105df4b422c78a4 + ExpoBlur: 234b3c1f42a35851428e10fa9d347701ae707c4d + ExpoClipboard: 342ae52697ff1cf89b8849bee624a9a320e77d3c + ExpoDomWebView: 4e53b05879dc73ba374f76bff93dd64c8a0d91b3 + ExpoFileSystem: 9d47583cbcc53ab2411901c601cd0a7ca18b3c11 + ExpoFont: 274487aa78f8c65d6551e2558eca3ec6ce3432ce + ExpoGlassEffect: 7d4233dc0727ee2b28dd757eda70e1b6abf662fd + ExpoHaptics: 89364cf3c3ca2cfd54cafed42f3be3169bab6d42 + ExpoImage: b5a447eeeef49930231150fad2e2c4cc588a0d31 + ExpoImagePicker: 01521e86df3fa75ed2b1b46a000006a15c0ba89f + ExpoKeepAwake: 359c47a1d9ccc3a3c519bca6e39562cce230c5bb + ExpoLinearGradient: 16c2b9c6105444883d34958d573725de1293b8d0 + ExpoLinking: 2e7b346a5a60e1f5de25fc207a8105832bf12214 + ExpoLocalAuthentication: d8dc72d217facafed303ef3417c3f448edf74819 + ExpoLogBox: cdad5c9402a186574fb5924ea91df1f08ba9a98a + ExpoMediaLibrary: 2597e4d61e8d990bdb9013fe8dc44224f36bdb62 + ExpoModulesCore: fbda8071d061c427e06988f5332ad566b893f926 + ExpoModulesJSI: 45a52183c66764d10846ac2493cc8bbc05e1d340 + ExpoModulesWorklets: 19afe32682aa1d17fd0f73b3db85ae0850ed6431 + ExpoModulesWorkletsAdapter: 983091842e6474031ed2a8137f5347eb51e0cc22 + ExpoNotifications: 341b29647a07fada79e8bf721e5f191531534c9b + ExpoObserve: fbe06ac189d512e85553ba68528da50349c3c10c + ExpoRouter: 58319874f097ad589b691813db905812b1b7d59b + ExpoSecureStore: f1bd083c1b7b8d4142013ffcc0082d377d9f49f4 + ExpoSharing: 5e3ac486863cd9fd6d8a22b11295386609cc8d33 + ExpoSplashScreen: 06ea4c812a646bf65802fe0f87f5fcd8d68a22bf + ExpoSymbols: 37e96a38eed3fb50af4b7c86b8a80ed3054a0a01 + ExpoSystemUI: 8f4fb641c6a6ebe2a01dda0fbd3fdd952ab5823a + ExpoUI: 15c5293922df464aefcfb528396c4db211795322 + ExpoVideo: 292b8c6be12bacf0b2e5a697276788280cdccdfb ExpoWidgets: 366fe61c681044e13b7cc344bdbd319ff5d54b28 - ExtensionStorage: 5796de20bf181317c376d693fedb64c6781a33ba - EXUpdatesInterface: 5adf50cb41e079c861da6d9b4b954c3db9a50734 - fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 - FBLazyVector: 5beb8028d5a2e75dd9634917f23e23d3a061d2aa - Firebase: 9a58fdbc9d8655ed7b79a19cf9690bb007d3d46d - FirebaseAnalytics: f20bbad8cb7f65d8a5eaefeb424ae8800a31bdfc - FirebaseCore: 0dbad74bda10b8fb9ca34ad8f375fb9dd3ebef7c - FirebaseCoreExtension: 6605938d51f765d8b18bfcafd2085276a252bee2 - FirebaseCoreInternal: fe5fa466aeb314787093a7dce9f0beeaad5a2a21 - FirebaseCrashlytics: fb31c6907e5b52aa252668394d3f1ab326df1511 - FirebaseInstallations: 6a14ab3d694ebd9f839c48d330da5547e9ca9dc0 - FirebaseRemoteConfigInterop: 869ddca16614f979e5c931ece11fbb0b8729ed41 - FirebaseSessions: d614ca154c63dbbc6c10d6c38259c2162c4e7c9b - fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd - glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 - GoogleAppMeasurement: 72c9a682fec6290327ea5e3c4b829b247fcb2c17 + EXStructuredHeaders: 9e89bcdd636ae2ecb59995cfba3230f5d7547c08 + ExtensionStorage: b1b89518395d9d556e00a1b1f299172e49be3dbe + EXUpdates: 6435091b0596fb4eabf14a0e51d9a18775d35b33 + EXUpdatesInterface: 25408a97d682355eb9fb37e5aa6e22caece1881f + FBLazyVector: 24e62c765683b8d89006a88a2c8f5cf019f0074d + Firebase: 99f203d3a114c6ba591f3b32263a9626e450af65 + FirebaseAnalytics: ef2970f65f3a2807e8f47a49cf3b8719d53e9fce + FirebaseCore: f4428e22415ea3b3eca652c2098413dabf2a23a9 + FirebaseCoreExtension: 3473a6ec16a91aee29fb75994a86c0220d2cddf3 + FirebaseCoreInternal: e7bbaeb00ab73011298f35ed223aa7371e212948 + FirebaseCrashlytics: cd1baeb80302ec5ea1012f732ab94df7d76f09f7 + FirebaseInstallations: 047343aa91fd6a1ebfa3eb374ddecf36a8aaddfd + FirebaseRemoteConfigInterop: a169873f4093b241eb5e27a4fbad91af36d64b8d + FirebaseSessions: dba7635960740ad77cc2f3387d90ff22a7942f82 + GoogleAppMeasurement: 57270ccc2b77472d7e85c4cbe45972564eff78bb GoogleDataTransport: a24e58982ab3ba2f64d79613e027fe7f57e88539 - GoogleSignIn: fcee2257188d5eda57a5e2b6a715550ffff9206d - GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 + GoogleSignIn: e449a40a92e9f2eea56e98b5214d13725dc5a00a + GoogleUtilities: 4e0c2ad9fa0d0d18b5c4df8bf57b461cba35b0bb GTMAppAuth: 217a876b249c3c585a54fd6f73e6b58c4f5c4238 GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6 - hermes-engine: 9f4dfe93326146a1c99eb535b1cb0b857a3cd172 - libavif: 84bbb62fb232c3018d6f1bab79beea87e35de7b7 - libdav1d: 23581a4d8ec811ff171ed5e2e05cd27bad64c39f - libwebp: af5937a13536ef73f3784d69cc342b98961acf33 + hermes-engine: 83e9d16623ba92520030c440a3f302e6453ff7e2 nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 - PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 - PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851 - PurchasesHybridCommon: c0bc3edee10a8742e9a238247944b4be044ff177 - RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 - RCTDeprecation: 5eb1d2eeff5fb91151e8a8eef45b6c7658b6c897 - RCTRequired: cebcf9442fc296c9b89ac791dfd463021d9f6f23 - RCTTypeSafety: b99aa872829ee18f6e777e0ef55852521c5a6788 - React: 914f8695f9bf38e6418228c2ffb70021e559f92f - React-callinvoker: 23cd4e33928608bd0cc35357597568b8b9a5f068 - React-Core: 6a0a97598e9455348113bfe4c573fe8edac34469 - React-CoreModules: a88a6ca48b668401b9780e272e2a607e70f9f955 - React-cxxreact: 06265fd7e8d5c3b6b49e00d328ef76e5f1ae9c8b - React-debug: 29aed758c756956a51b4560223edbd15191ca4c5 - React-defaultsnativemodule: c406bf7cd78036efffb7dec9df469257a1bca58c - React-domnativemodule: 925ea5ff8cb05c68e910057e6349e5898cce00f3 - React-Fabric: 13130d0a70f17e913865b04673ee64603d6c42fe - React-FabricComponents: 1f01ea24a1314bf9abcac4743bb7ad8791336be6 - React-FabricImage: f364dc54fcf8b0ef77192674a009aa4f65b34d75 - React-featureflags: 32217ac18a8c216fc571044186fb04164af72772 - React-featureflagsnativemodule: 9c552bb908a7434baa846002ee1752a77b1a5520 - React-graphics: 3034a698e46e947f74a443e761f1feef742e9d71 - React-hermes: a852be3ab9e1f515e46ba3ea9f48c31d4a9df437 - React-idlecallbacksnativemodule: c43fe1f2221b0548cc366bf15f88efb3b3221bbf - React-ImageManager: 7efd7b19cdfaa3a82482e9e6ac0b56606a3ec271 - React-jserrorhandler: 597057d0b9d158c03e02aa376a4a95f64f46a910 - React-jsi: 7b53959aea60909ac6bbe4dd0bdec6c10d7dc597 - React-jsiexecutor: 19938072af05ade148474bac41e0324a2d733f44 - React-jsinspector: eb6bb244a75cbd56f32767daf2efdb344e2ff10c - React-jsinspectorcdp: 727f37537e9c7ab22b6b86c802d879efae5e2757 - React-jsinspectornetwork: 11d47e644701c58038ef8d7f54a405ddd62b3b16 - React-jsinspectortracing: 8875637e6c65b3b9a3852b006856562e874e7a78 - React-jsitooling: b6e6a2551459a6ef9e1529df2ea981fa27ed3a91 - React-jsitracing: 879e2b2f80dd33d84175989de0a8db5d662505db - React-logger: a913317214a26565cd4c045347edf1bcacb80a3f - React-Mapbuffer: 017336879e2e0fb7537bbc08c24f34e2384c9260 - React-microtasksnativemodule: 63ee6730cec233feab9cdcc0c100dc28a12e4165 - react-native-compressor: 63c0f1c04098029486d8a4ac49a4d3d397864b7b - react-native-safe-area-context: 0a3b034bb63a5b684dd2f5fffd3c90ef6ed41ee8 - react-native-skia: 0a5a68da2c0f044df6fa819113eeddb35f7534d7 - react-native-view-shot: aab9ffbcc2f01035ee8ffd9a00c773e215b35c8b - React-NativeModulesApple: cbceb3c4cb726838c461b13802a76cefa6f3476f - React-oscompat: eb0626e8ba1a2c61673c991bf9dc21834898475d - React-perflogger: 509e1f9a3ee28df71b0a66de806ac515ce951246 - React-performancetimeline: 9ce28cce1cded27410c293283f99fe62bebdb920 - React-RCTActionSheet: 30fe8f9f8d86db4a25ff34595a658ecd837485fc - React-RCTAnimation: 3126eb1cb8e7a6ca33a52fd833d8018aa9311af1 - React-RCTAppDelegate: b03981c790aa40cf26e0f78cc0f1f2df8287ead4 - React-RCTBlob: 53c35e85c85d6bdaa55dc81a0b290d4e78431095 - React-RCTFabric: 59ad9008775f123019c508efff260594a8509791 - React-RCTFBReactNativeSpec: 82b605ab4f6f8da0a7ad88641161df5a0bafb1fb - React-RCTImage: 074b2faa71a152a456c974e118b60c9eeda94a64 - React-RCTLinking: e5ca17a4f7ae2ad7b0c0483be77e1b383ecd0a8a - React-RCTNetwork: c508d7548c9eceac30a8100a846ea00033a03366 - React-RCTRuntime: 6979568c0bc276fe785e085894f954fa15e0ec7e - React-RCTSettings: dd84c857a4fce42c1e08c1dabcda894e25af4a6e - React-RCTText: 6e4b177d047f98bccb90d6fb1ebdd3391cf8b299 - React-RCTVibration: 9572d4a06a0c92650bcc62913e50eb2a89f19fb6 - React-rendererconsistency: a7b47f8b186af64ff8509c8caec4114a2f1ae63f - React-renderercss: 9845c5063b3a2d0462ed4e4c7fc34219a5d608ed - React-rendererdebug: 3905e346c06347b86c6e49d427062cdd638a3044 - React-RuntimeApple: 97233caf2b635c40819bf5be38d818777f8229ab - React-RuntimeCore: dc41f86fcdf1fbb42a5b8388a29bf59dfa56b2f8 - React-runtimeexecutor: d16d045faaf6cd7de8d1aa8e31a51c13d8db84a4 - React-RuntimeHermes: 5a9d132554c8d6b416d794cd4ac7d927b2f88f7b - React-runtimescheduler: 689d805d43c28b8fb1ab390914e042d10e2ea2ab - React-timing: c39eeb992274aeaeb9f4666dc97a36a31d33fe94 - React-utils: 2f9ba0088251788ad66aa1855ff99ed2424024d2 - ReactAppDependencyProvider: 1bcd3527ac0390a1c898c114f81ff954be35ed79 - ReactCodegen: cc4afb1cabd4dc96a6d6f1d99539bceb3bebe437 - ReactCommon: 6d0fa86a4510730da7c72560e0ced14258292ab9 - RevenueCat: 9e2a13bead55198a72272ff105a7265e9510cd11 - RNCAsyncStorage: fd44f4b03e007e642e98df6726737bc66e9ba609 - RNFBAnalytics: 793176cbbdbfdc3602d158a2c3f2df4391da6901 - RNFBApp: ecfd6567af4c73409c36103f7968e27696a92901 - RNFBCrashlytics: fe7e86f8d125d3957f079100abd9e35fad996073 - RNGestureHandler: b8d2e75c2e88fc2a1f6be3b3beeeed80b88fa37d - RNGoogleSignin: c1de96d92d6dd4335fa8e0f0ed4312a9d34e4ecb - RNPurchases: ae1f8f522674a7938dd26eba6c103c40d049dfee - RNReanimated: 45bfba06751010ae2f6a1cd8b9f618ac4ce1a12c - RNScreens: 2e9c41cd099b1ca50136af8d57c3594214d0086a - RNShare: 61cad1e65b8e3788c97ee7c5cac4bcbb25a8df40 - RNSVG: 94a1be05fab4043354bcf7104f0f9b0e2231ef05 - RNWorklets: 09a47bd92d3da6e00420a060fcc86e23b745e980 - SDWebImage: e9fc87c1aab89a8ab1bbd74eba378c6f53be8abf - SDWebImageAVIFCoder: afe194a084e851f70228e4be35ef651df0fc5c57 - SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c - SDWebImageWebPCoder: e38c0a70396191361d60c092933e22c20d5b1380 - SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 + PromisesObjC: 752c3227f599e3467650e47ea36f433eeb10c273 + PromisesSwift: 217dea0fd5d2ad65222a109c48698add13cc1c5b + PurchasesHybridCommon: ecd9d7c586287625f1225b8de5e24c1021502270 + RCTDeprecation: a4c521821fab57cbb125b36effe84d897d0dfa12 + RCTRequired: 9f3a7e5645d4bc3f551593de7550bb66ab6e42bc + RCTSwiftUI: 239ed2eb9e73de5a6f518810630f0c95e01c8702 + RCTSwiftUIWrapper: 966ca7f5f22ac0b2b2255fb09cffc381f5440b03 + RCTTypeSafety: 2a6403ba3492c04510e7c15bd635461646c43bb2 + ReachabilitySwift: 32793e867593cfc1177f5d16491e3a197d2fccda + React: e2dc35338068bbd299c66f043ae0d7f25de8499e + React-callinvoker: 28b25d21b124c26cebaea713ba7d801b9351dc48 + React-Core: 02ed7d2ffb70437bdf2aba074a13078a7b0b9ff0 + React-Core-prebuilt: db384cdc31379a5bd7c9a060e3bba6b0f4ebaea1 + React-CoreModules: b3a5a42dadcde3b5d47b325bd912eb2ced89e146 + React-cxxreact: fe8f88dda044e5905e99a00f41b7a874c3908716 + React-debug: 9af1e96a6069c996e3d9f1e493603e74bc9f1593 + React-defaultsnativemodule: ef8c2a55daadc1208d72237c20638a937fc99d1e + React-domnativemodule: 022dc420df8409c2c9b724f872d678f0e73e254c + React-Fabric: feb1cf67568bf2201aa2180f6ed104106edff14f + React-FabricComponents: c6a7ae46e80f1152ada1d13b9e90c8f61689cab7 + React-FabricImage: 6b478ee0986b6c6f8ef925fc1539dbd73ee8c6e1 + React-featureflags: 25925b2a222c4d27fa7625083f9eee3ecc50edf9 + React-featureflagsnativemodule: 0fc8626dc9708a55f8ac0f556b1982ecfa31a6fb + React-graphics: 35f524ebf597dfa00965efeacebab35608b8229b + React-hermes: 663286153a8ad6bf752b742654c766ff5e8991e7 + React-idlecallbacksnativemodule: b02adbab676f22ad603a7db55344b99890db597d + React-ImageManager: bb1606f3c8a8681b98933839d1b3776e74e11cb6 + React-intersectionobservernativemodule: e81bf037d9a4e08efb03a0cccb61361ec5cb9e8d + React-jserrorhandler: 2a5f316dee142d671cec8b9940956120a26225cb + React-jsi: eb7cc4cffcf24796cc302d5b2bca0e92544139a9 + React-jsiexecutor: 65006f60e64c72c6b82f62ef6bd17c84846e73f8 + React-jsinspector: a5cc10871111ac6ae6f60d0030be6546b98c3917 + React-jsinspectorcdp: 9c456fc9218c5ba16531273591cd8e40db38d047 + React-jsinspectornetwork: 8e9ac32459b7af5efa4d5962be734bdc387db090 + React-jsinspectortracing: a36ce197288a347d43aa1dbc09d72dee24269646 + React-jsitooling: 2870fce5bfd23414d39ea141ea6ca4fe67d82b12 + React-jsitracing: d66fb487dd177cf5e1136229de8675da35afac01 + React-logger: bf149dea4343a9037b74bade36cced8b63f03f46 + React-Mapbuffer: 33e3bcefb14c2ce5ba867d908ff16cced1f9b487 + React-microtasksnativemodule: 3a42e75434099fd10030e36fe9f3b27e3811afd5 + React-mutationobservernativemodule: a7f3dc483d3e0e0fade0ea00e2cc95e2e462e023 + react-native-compressor: f2f7040aa578b68b1690b41e920140979965b08f + react-native-safe-area-context: ba7283e541a5f57c6b27a7e33f2c40b8977888c0 + react-native-skia: b685cf397470d1cae3d62235d6223e26718e5e01 + react-native-view-shot: 6da2aaa0404b8d617ab1689550acdb251d759af9 + React-NativeModulesApple: deba264b03bd79c6bd61014fa30e40321b5e443a + React-networking: 905170b05255ad7025dd16e9d0cf5a7b9458208a + React-oscompat: 64a0c7ef5441855dc6e2a6afe8ba8f92aa05075e + React-perflogger: ca04287f205086a1edb5c95882be7b6068458889 + React-performancecdpmetrics: bb76b28a76f5384e69174652747f5feb9a4914ac + React-performancetimeline: df497e95ce4439bdef5d5c751c7ca5fbcab47633 + React-RCTActionSheet: ab545c1e7b5f1ce4f8b40b6fa06afe2869095884 + React-RCTAnimation: 343147a9cd68c93d0ca280799fedfc7102d76ce4 + React-RCTAppDelegate: 5054754e92aaa9f8bfabe0f1022b84e46f3dcb57 + React-RCTBlob: 8c7ae3422ca4e72bc64b7a0142fd730efc5d4dfb + React-RCTFabric: b6d57f19439c1b02c1dbcf11ee70b9dc6fab8026 + React-RCTFBReactNativeSpec: b57aa2c72a1ea985d49999a8f0fc8f79ad481c9c + React-RCTImage: 481457bca63e039eb997f7d16c7560472f49657e + React-RCTLinking: 76cbb871240cec2dc5e7aa26c60f59e0ebbcf5a2 + React-RCTNetwork: e23a778225b7672e38545d3c5c24e1f4aad6d15f + React-RCTRuntime: 43cf561d276a46b8ba217f7c5161547ff35ae43e + React-RCTSettings: 96196b535bef147381f96cc60ce9bda85d8be848 + React-RCTText: 749ebbd1a999fd84d80f37002ea3bf597fcea6df + React-RCTVibration: 5b41a7f274757c2928845981d970916ef9e4ca14 + React-rendererconsistency: 136a8589d3317a8aed2cbc4a42d8db59d4ca82cc + React-renderercss: 2ca0e84b561309c1d6a80885affa22a669bdfb6a + React-rendererdebug: e994176289d0f50d03e7b8dd512b2ccdba83f79c + React-RuntimeApple: 0a875de8b8210035fd107ca5b91779383a4c0e4e + React-RuntimeCore: cc3e105f674079e2d535bd1508601ff90b3243b2 + React-runtimeexecutor: 2dcc6f4e167a026f7a72268e4b395f5e41c8e641 + React-RuntimeHermes: 6d654deb1405f48a0dd7f5d4b72f9fd6181b4b28 + React-runtimescheduler: bea6c85aa0cc603c5c15789661d0a40b1030df88 + React-timing: 344568a2d138d9beaf1b7815716faf2382472789 + React-utils: 892f56c9e4e0aeadce0391b181af87f419c41758 + React-webperformancenativemodule: 9d79deafb4623b6f7716abdf38294cd6a2f7d4d7 + ReactAppDependencyProvider: 25c9c516839be2c5e3d3344f95dc7da5f7e63fc2 + ReactCodegen: 5b2b5c009cec17b5e848bde3bc067c339009390d + ReactCommon: 7dfc3250793bf36cf221096ff59e1179e13eef7f + ReactNativeDependencies: 1058da702bda6f5989c4af19919dd162cb52fd02 + RecaptchaInterop: 11e0b637842dfb48308d242afc3f448062325aba + RevenueCat: 9357239a9f0978285e68983637b8a602e65c94f0 + RNCAsyncStorage: d90e523830fa7705f8c61632479abde871bc792f + RNCMaskedView: 8069b4d4e23b3d28b4fcac70bf266be43ffc3d2e + RNFBAnalytics: ebed3f7a674f0d980f8114450e49076cbed18873 + RNFBApp: 79b63f3ffec455179e6cebb37d5750be022c6fb8 + RNFBCrashlytics: 33c6bfac7a9e6a907b095a86c98dc6f26c9bf526 + RNGestureHandler: a97cc64efbfcb7a53969a38310a189a3d5246c65 + RNGoogleSignin: 41b189ae99a41175130c55c88a2985a55f826a14 + RNPurchases: 4f6b0209e2fb4152bda0d0276a2a46d2b3416752 + RNReanimated: 7a16183cabf799cf59e42ffeade5da8d689e3309 + RNScreens: 82c8a2b21dfd8b06a627ad48a543a54c2fb97abf + RNShare: 26c9524aee8cc3eedbab6d6b98cacce2f5247893 + RNSVG: 2d3af77f13e69994bb8957f69d46d8bcba1a6be8 + RNWorklets: 2b1732dea513e38333481dc919029c1e14dc647d WidgetBridge: 15f1466d7f79505a5e600e1400fcff1a40f807a4 - Yoga: cc4a6600d61e4e9276e860d4d68eebb834a050ba + Yoga: e240fec777ff1f21ef42ccebbb44b6d262125855 -PODFILE CHECKSUM: fa3d5fa10e0ed7db5a11b50a5a66865694aea535 +PODFILE CHECKSUM: a686de17c13e42c959153734d16cafb6d8617eed COCOAPODS: 1.16.2 diff --git a/apps/mobile/ios/Podfile.properties.json b/apps/mobile/ios/Podfile.properties.json index 42a0ecc..7e7c5ca 100644 --- a/apps/mobile/ios/Podfile.properties.json +++ b/apps/mobile/ios/Podfile.properties.json @@ -1,9 +1,10 @@ { "expo.jsEngine": "hermes", "EX_DEV_CLIENT_NETWORK_INSPECTOR": "true", - "newArchEnabled": "true", - "ios.useFrameworks": "static", - "apple.extraPods": "[]", - "apple.ccacheEnabled": "false", - "apple.privacyManifestAggregationEnabled": "true" + "expo.inlineModules.watchedDirectories": "[]", + "expo.inlineModules.xcodeProjectTargets": "{\"mainTarget\":\"Sauci\",\"targets\":[]}", + "ios.forceStaticLinking": "[]", + "apple.privacyManifestAggregationEnabled": "true", + "EXPO_USE_PRECOMPILED_MODULES": "true", + "ios.useFrameworks": "static" } diff --git a/apps/mobile/ios/Sauci.xcodeproj/project.pbxproj b/apps/mobile/ios/Sauci.xcodeproj/project.pbxproj index cb38d3c..d68d17e 100644 --- a/apps/mobile/ios/Sauci.xcodeproj/project.pbxproj +++ b/apps/mobile/ios/Sauci.xcodeproj/project.pbxproj @@ -3,19 +3,18 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; }; - 5254BDADE70741A0B2504FB1 /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = F744EAD4ABA54509966475D6 /* noop-file.swift */; }; - 7B71EEB2AF682FA7AFF556D5 /* Pods_Sauci.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDDAD8C12C38D3BD0A76D345 /* Pods_Sauci.framework */; }; - B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; }; + 3F202C2A859975F48A83ADD7 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 779267BD380A5D29590F1BDC /* ExpoModulesProvider.swift */; }; + 45941E25D336B6152BFCEFB9 /* Pods_Sauci.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B482C7D915C22B3F33CA9841 /* Pods_Sauci.framework */; }; + 804CD03F6B584D08B7803C63 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 69E91809C21A4977A3249D53 /* PrivacyInfo.xcprivacy */; }; BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; }; - CEF2F278ABBC5FBFD470A0F7 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = D7B5C17768E3B74AC152531F /* PrivacyInfo.xcprivacy */; }; + D60EEEF252214D45B67A0063 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = D58CE235EF5F40F58FB8111D /* GoogleService-Info.plist */; }; F11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11748412D0307B40044C1D9 /* AppDelegate.swift */; }; - FDFABE1A1A3547B1B22DD2DD /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = A9280FDF3E0D43AC90382DBC /* GoogleService-Info.plist */; }; XX12B55A1EDABF083C3B51XX /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = XX470101BAEB8E0BBC8B0DXX /* WidgetKit.framework */; }; XX1A6800511A685AB346D2XX /* AppIntents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = XXA12889081EB894481655XX /* AppIntents.framework */; }; XX3C562DEF346B45594832XX /* ActivityKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = XXCAF23C3FC41F82140FA1XX /* ActivityKit.framework */; }; @@ -24,11 +23,11 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - XXA7C7D5580082A497FD95XX /* PBXContainerItemProxy */ = { + XX77D941E1DB38490B8F4EXX /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; proxyType = 1; - remoteGlobalIDString = XX540FB4ABC75CE91A6036XX; + remoteGlobalIDString = XXB3405CC208C2ECA4797FXX; remoteInfo = LiveDrawWidget; }; /* End PBXContainerItemProxy section */ @@ -51,18 +50,17 @@ 13B07F961A680F5B00A75B9A /* Sauci.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; fileEncoding = 4; includeInIndex = 0; path = Sauci.app; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Sauci/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = text.plist.xml; name = Info.plist; path = Sauci/Info.plist; sourceTree = ""; }; - 6C2E3173556A471DD304B334 /* Pods-Sauci.debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Sauci.debug.xcconfig"; path = "Target Support Files/Pods-Sauci/Pods-Sauci.debug.xcconfig"; sourceTree = ""; }; - 7A4D352CD337FB3A3BF06240 /* Pods-Sauci.release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Sauci.release.xcconfig"; path = "Target Support Files/Pods-Sauci/Pods-Sauci.release.xcconfig"; sourceTree = ""; }; - A9280FDF3E0D43AC90382DBC /* GoogleService-Info.plist */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Sauci/GoogleService-Info.plist"; sourceTree = ""; }; + 69E91809C21A4977A3249D53 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = PrivacyInfo.xcprivacy; path = Sauci/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 779267BD380A5D29590F1BDC /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-Sauci/ExpoModulesProvider.swift"; sourceTree = ""; }; + A172EA788EF476A7083810FE /* Pods-Sauci.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Sauci.release.xcconfig"; path = "Target Support Files/Pods-Sauci/Pods-Sauci.release.xcconfig"; sourceTree = ""; }; AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = Sauci/SplashScreen.storyboard; sourceTree = ""; }; + B482C7D915C22B3F33CA9841 /* Pods_Sauci.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Sauci.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = ""; }; - D7B5C17768E3B74AC152531F /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 1; lastKnownFileType = undefined; name = PrivacyInfo.xcprivacy; path = Sauci/PrivacyInfo.xcprivacy; sourceTree = ""; }; - DA536CAC88B349A59DFC1F1E /* Sauci-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "Sauci-Bridging-Header.h"; path = "Sauci/Sauci-Bridging-Header.h"; sourceTree = ""; }; - DDDAD8C12C38D3BD0A76D345 /* Pods_Sauci.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; fileEncoding = 4; includeInIndex = undefined; path = Pods_Sauci.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D58CE235EF5F40F58FB8111D /* GoogleService-Info.plist */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Sauci/GoogleService-Info.plist"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = undefined; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; F11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = Sauci/AppDelegate.swift; sourceTree = ""; }; - F744EAD4ABA54509966475D6 /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "Sauci/noop-file.swift"; sourceTree = ""; }; - FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-Sauci/ExpoModulesProvider.swift"; sourceTree = ""; }; + F11748442D0722820044C1D9 /* Sauci-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "Sauci-Bridging-Header.h"; path = "Sauci/Sauci-Bridging-Header.h"; sourceTree = ""; }; + FEACE2E5B4EA50AFBF4DDF34 /* Pods-Sauci.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Sauci.debug.xcconfig"; path = "Target Support Files/Pods-Sauci/Pods-Sauci.debug.xcconfig"; sourceTree = ""; }; XX470101BAEB8E0BBC8B0DXX /* WidgetKit.framework */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = undefined; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; }; XX4DFF38D47332D6BF0183XX /* SwiftUI.framework */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = undefined; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; }; XXA12889081EB894481655XX /* AppIntents.framework */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = undefined; lastKnownFileType = wrapper.framework; name = AppIntents.framework; path = System/Library/Frameworks/AppIntents.framework; sourceTree = SDKROOT; }; @@ -71,21 +69,21 @@ /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ - XX020388E3BB9C764E774FXX /* Exceptions for "widget" folder in "LiveDrawWidget" target */ = { + XX6FB9E6678087E3AAC658XX /* Exceptions for "widget" folder in "LiveDrawWidget" target */ = { isa = PBXFileSystemSynchronizedBuildFileExceptionSet; membershipExceptions = ( Info.plist, "expo-target.config.js", ); - target = XX540FB4ABC75CE91A6036XX /* LiveDrawWidget */; + target = XXB3405CC208C2ECA4797FXX /* LiveDrawWidget */; }; /* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ /* Begin PBXFileSystemSynchronizedRootGroup section */ - XX683E29AD7AD8279E17B2XX /* widget */ = { + XXBB44BF07EB68666150ABXX /* widget */ = { isa = PBXFileSystemSynchronizedRootGroup; exceptions = ( - XX020388E3BB9C764E774FXX /* Exceptions for "widget" folder in "LiveDrawWidget" target */, + XX6FB9E6678087E3AAC658XX /* Exceptions for "widget" folder in "LiveDrawWidget" target */, ); explicitFileTypes = { }; @@ -101,7 +99,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7B71EEB2AF682FA7AFF556D5 /* Pods_Sauci.framework in Frameworks */, + 45941E25D336B6152BFCEFB9 /* Pods_Sauci.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -122,15 +120,32 @@ 13B07FAE1A68108700A75B9A /* Sauci */ = { isa = PBXGroup; children = ( - BB2F792B24A3F905000567C9 /* Supporting */, F11748412D0307B40044C1D9 /* AppDelegate.swift */, + F11748442D0722820044C1D9 /* Sauci-Bridging-Header.h */, + BB2F792B24A3F905000567C9 /* Supporting */, 13B07FB51A68108700A75B9A /* Images.xcassets */, 13B07FB61A68108700A75B9A /* Info.plist */, AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */, - A9280FDF3E0D43AC90382DBC /* GoogleService-Info.plist */, - F744EAD4ABA54509966475D6 /* noop-file.swift */, - DA536CAC88B349A59DFC1F1E /* Sauci-Bridging-Header.h */, - D7B5C17768E3B74AC152531F /* PrivacyInfo.xcprivacy */, + 69E91809C21A4977A3249D53 /* PrivacyInfo.xcprivacy */, + D58CE235EF5F40F58FB8111D /* GoogleService-Info.plist */, + ); + name = Sauci; + sourceTree = ""; + }; + 1957149DB83AAF8603C60859 /* Pods */ = { + isa = PBXGroup; + children = ( + FEACE2E5B4EA50AFBF4DDF34 /* Pods-Sauci.debug.xcconfig */, + A172EA788EF476A7083810FE /* Pods-Sauci.release.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + 2BFCD64E7EEB594CC2D9E261 /* Sauci */ = { + isa = PBXGroup; + children = ( + 779267BD380A5D29590F1BDC /* ExpoModulesProvider.swift */, ); name = Sauci; sourceTree = ""; @@ -141,9 +156,9 @@ ED297162215061F000B7C4FE /* JavaScriptCore.framework */, XX470101BAEB8E0BBC8B0DXX /* WidgetKit.framework */, XX4DFF38D47332D6BF0183XX /* SwiftUI.framework */, - DDDAD8C12C38D3BD0A76D345 /* Pods_Sauci.framework */, XXCAF23C3FC41F82140FA1XX /* ActivityKit.framework */, XXA12889081EB894481655XX /* AppIntents.framework */, + B482C7D915C22B3F33CA9841 /* Pods_Sauci.framework */, ); name = Frameworks; sourceTree = ""; @@ -163,8 +178,8 @@ 832341AE1AAA6A7D00B99B32 /* Libraries */, 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, - D65327D7A22EEC0BE12398D9 /* Pods */, - D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */, + 1957149DB83AAF8603C60859 /* Pods */, + CC8FEB5C5178B9E5E71D4F61 /* ExpoModulesProviders */, ); indentWidth = 2; sourceTree = ""; @@ -180,14 +195,6 @@ name = Products; sourceTree = ""; }; - 92DBD88DE9BF7D494EA9DA96 /* Sauci */ = { - isa = PBXGroup; - children = ( - FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */, - ); - name = Sauci; - sourceTree = ""; - }; BB2F792B24A3F905000567C9 /* Supporting */ = { isa = PBXGroup; children = ( @@ -197,19 +204,10 @@ path = Sauci/Supporting; sourceTree = ""; }; - D65327D7A22EEC0BE12398D9 /* Pods */ = { + CC8FEB5C5178B9E5E71D4F61 /* ExpoModulesProviders */ = { isa = PBXGroup; children = ( - 6C2E3173556A471DD304B334 /* Pods-Sauci.debug.xcconfig */, - 7A4D352CD337FB3A3BF06240 /* Pods-Sauci.release.xcconfig */, - ); - path = Pods; - sourceTree = ""; - }; - D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = { - isa = PBXGroup; - children = ( - 92DBD88DE9BF7D494EA9DA96 /* Sauci */, + 2BFCD64E7EEB594CC2D9E261 /* Sauci */, ); name = ExpoModulesProviders; sourceTree = ""; @@ -217,7 +215,7 @@ XX3E41C1850246162C0061XX /* expo:targets */ = { isa = PBXGroup; children = ( - XX683E29AD7AD8279E17B2XX /* widget */, + XXBB44BF07EB68666150ABXX /* widget */, ); name = "expo:targets"; path = ../targets; @@ -231,30 +229,31 @@ buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Sauci" */; buildPhases = ( 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */, - DC3D179C6B62F16DA5F17C2F /* [Expo] Configure project */, + E6F7433229E3C1448FC9F062 /* [Expo] Configure project */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */, + D58CF933D4804A0CB49C2891 /* [Expo Dev Launcher] Strip Local Network Keys for Release */, XX72A8CFBF0FBA13A79902XX /* Embed Foundation Extensions */, - A1248897D24903117793599B /* [CP] Embed Pods Frameworks */, - FB4B019D835055733ACDE109 /* [CP-User] [RNFB] Core Configuration */, - 563ACE2651AC39438F3B399B /* [CP-User] [RNFB] Crashlytics Configuration */, + 503A0FD3DBA862B4BE649BBB /* [CP] Embed Pods Frameworks */, + 8490E10253F91A7BEB80F555 /* [CP-User] [RNFB] Core Configuration */, + 0EE1B67C9AAD8BD8562E800E /* [CP-User] [RNFB] Crashlytics Configuration */, ); buildRules = ( ); dependencies = ( - XX97289CEC7994AD5F4142XX /* PBXTargetDependency */, + XX5D3A21868E45E6E5BDC3XX /* PBXTargetDependency */, ); name = Sauci; productName = Sauci; productReference = 13B07F961A680F5B00A75B9A /* Sauci.app */; productType = "com.apple.product-type.application"; }; - XX540FB4ABC75CE91A6036XX /* LiveDrawWidget */ = { + XXB3405CC208C2ECA4797FXX /* LiveDrawWidget */ = { isa = PBXNativeTarget; - buildConfigurationList = XX63FAB1BD532DA0D8AE18XX /* Build configuration list for PBXNativeTarget "LiveDrawWidget" */; + buildConfigurationList = XX35D62F4FBF2C9086E8C9XX /* Build configuration list for PBXNativeTarget "LiveDrawWidget" */; buildPhases = ( XX074B8811C1CF8E8A3D74XX /* Frameworks */, XXE45443DC38DCFE1DB622XX /* Sources */, @@ -265,7 +264,7 @@ dependencies = ( ); fileSystemSynchronizedGroups = ( - XX683E29AD7AD8279E17B2XX /* widget */, + XXBB44BF07EB68666150ABXX /* widget */, ); name = LiveDrawWidget; productName = LiveDrawWidget; @@ -283,7 +282,7 @@ 13B07F861A680F5B00A75B9A = { LastSwiftMigration = 1250; }; - XX540FB4ABC75CE91A6036XX = { + XXB3405CC208C2ECA4797FXX = { CreatedOnToolsVersion = 14.3; DevelopmentTeam = BXVPBATDZY; ProvisioningStyle = Automatic; @@ -304,7 +303,7 @@ projectRoot = ""; targets = ( 13B07F861A680F5B00A75B9A /* Sauci */, - XX540FB4ABC75CE91A6036XX /* LiveDrawWidget */, + XXB3405CC208C2ECA4797FXX /* LiveDrawWidget */, ); }; /* End PBXProject section */ @@ -317,8 +316,8 @@ BB2F792D24A3F905000567C9 /* Expo.plist in Resources */, 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */, - FDFABE1A1A3547B1B22DD2DD /* GoogleService-Info.plist in Resources */, - CEF2F278ABBC5FBFD470A0F7 /* PrivacyInfo.xcprivacy in Resources */, + 804CD03F6B584D08B7803C63 /* PrivacyInfo.xcprivacy in Resources */, + D60EEEF252214D45B67A0063 /* GoogleService-Info.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -341,6 +340,8 @@ inputFileListPaths = ( ); inputPaths = ( + "$(SRCROOT)/.xcode.env", + "$(SRCROOT)/.xcode.env.local", ); name = "Bundle React Native code and images"; outputFileListPaths = ( @@ -373,7 +374,7 @@ 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; }; - 563ACE2651AC39438F3B399B /* [CP-User] [RNFB] Crashlytics Configuration */ = { + 0EE1B67C9AAD8BD8562E800E /* [CP-User] [RNFB] Crashlytics Configuration */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -387,6 +388,52 @@ shellPath = /bin/sh; shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\nif [[ ${PODS_ROOT} ]]; then\n echo \"info: Exec FirebaseCrashlytics Run from Pods\"\n \"${PODS_ROOT}/FirebaseCrashlytics/run\"\nelse\n echo \"info: Exec FirebaseCrashlytics Run from framework\"\n \"${PROJECT_DIR}/FirebaseCrashlytics.framework/run\"\nfi\n"; }; + 503A0FD3DBA862B4BE649BBB /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Sauci/Pods-Sauci-frameworks.sh", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem.framework/ExpoFileSystem", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ExpoFont/ExpoFont.framework/ExpoFont", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ExpoImage/ExpoImage.framework/ExpoImage", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ExpoImage/SDWebImage.framework/SDWebImage", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ExpoImage/SDWebImageAVIFCoder.framework/SDWebImageAVIFCoder", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ExpoImage/SDWebImageSVGCoder.framework/SDWebImageSVGCoder", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ExpoImage/SDWebImageWebPCoder.framework/SDWebImageWebPCoder", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ExpoImage/libavif.framework/libavif", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ExpoMediaLibrary/ExpoMediaLibrary.framework/ExpoMediaLibrary", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ExpoModulesCore/ExpoModulesCore.framework/ExpoModulesCore", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ExpoModulesJSI/ExpoModulesJSI.framework/ExpoModulesJSI", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ExpoModulesWorklets/ExpoModulesWorklets.framework/ExpoModulesWorklets", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/React-Core-prebuilt/React.framework/React", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ReactNativeDependencies/ReactNativeDependencies.framework/ReactNativeDependencies", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermesvm.framework/hermesvm", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ExpoFileSystem.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ExpoFont.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ExpoImage.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageAVIFCoder.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageSVGCoder.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageWebPCoder.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libavif.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ExpoMediaLibrary.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ExpoModulesCore.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ExpoModulesJSI.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ExpoModulesWorklets.framework", + "${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-Sauci/Pods-Sauci-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -398,9 +445,10 @@ "${PODS_CONFIGURATION_BUILD_DIR}/EXApplication/ExpoApplication_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/EXNotifications/ExpoNotifications_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/EXUpdates/EXUpdates.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/ExpoMediaLibrary/ExpoMediaLibrary_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/ExpoNotifications/ExpoNotifications_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension/FirebaseCoreExtension_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal/FirebaseCoreInternal_Privacy.bundle", @@ -414,18 +462,16 @@ "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/PromisesSwift/Promises_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/PurchasesHybridCommon/PurchasesHybridCommon.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly/RCT-Folly_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RNCAsyncStorage/RNCAsyncStorage_resources.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RNSVG/RNSVGFilters.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/ReachabilitySwift.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/React-Core_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact/React-cxxreact_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RevenueCat/RevenueCat.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/boost/boost_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/expo-dev-launcher/EXDevLauncher.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/expo-dev-menu/EXDevMenu.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/glog/glog_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/react-native-view-shot/RNViewShotPrivacyInfo.bundle", ); name = "[CP] Copy Pods Resources"; outputPaths = ( @@ -433,9 +479,10 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoApplication_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoConstants_privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoNotifications_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXUpdates.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoMediaLibrary_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoNotifications_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCore_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCoreExtension_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCoreInternal_Privacy.bundle", @@ -449,43 +496,54 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FBLPromises_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Promises_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/PurchasesHybridCommon.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCT-Folly_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNCAsyncStorage_resources.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNSVGFilters.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ReachabilitySwift.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-Core_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-cxxreact_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RevenueCat.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SDWebImage.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boost_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXDevLauncher.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXDevMenu.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/glog_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/nanopb_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNViewShotPrivacyInfo.bundle", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Sauci/Pods-Sauci-resources.sh\"\n"; showEnvVarsInLog = 0; }; - A1248897D24903117793599B /* [CP] Embed Pods Frameworks */ = { + 8490E10253F91A7BEB80F555 /* [CP-User] [RNFB] Core Configuration */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Sauci/Pods-Sauci-frameworks.sh", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", + "$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", + ); + name = "[CP-User] [RNFB] Core Configuration"; + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##########################################################################\n##########################################################################\n#\n# NOTE THAT IF YOU CHANGE THIS FILE YOU MUST RUN pod install AFTERWARDS\n#\n# This file is installed as an Xcode build script in the project file\n# by cocoapods, and you will not see your changes until you pod install\n#\n##########################################################################\n##########################################################################\n\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"note: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"note: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -Ku -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"note: -> RNFB build script started\"\necho \"note: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"note: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"note: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n if ! _RN_ROOT_EXISTS=$(ruby -Ku -e \"require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\"); then\n echo \"error: Failed to parse firebase.json, check for syntax errors.\"\n exit 1\n fi\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n if ! python3 --version >/dev/null 2>&1; then echo \"error: python3 not found, firebase.json file processing error.\" && exit 1; fi\n _JSON_OUTPUT_BASE64=$(python3 -c 'import json,sys,base64;print(base64.b64encode(bytes(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"', '\"'rb'\"').read())['${_JSON_ROOT}']), '\"'utf-8'\"')).decode())' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_analytics_storage\n _ANALYTICS_STORAGE=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_analytics_storage\")\n if [[ $_ANALYTICS_STORAGE ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_ANALYTICS_STORAGE\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_STORAGE\")\")\n fi\n\n # config.analytics_default_allow_ad_storage\n _ANALYTICS_AD_STORAGE=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_storage\")\n if [[ $_ANALYTICS_AD_STORAGE ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_STORAGE\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AD_STORAGE\")\")\n fi\n\n # config.analytics_default_allow_ad_user_data\n _ANALYTICS_AD_USER_DATA=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_user_data\")\n if [[ $_ANALYTICS_AD_USER_DATA ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_USER_DATA\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AD_USER_DATA\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.analytics_registration_with_ad_network_enabled\n _ANALYTICS_REGISTRATION_WITH_AD_NETWORK=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_registration_with_ad_network_enabled\")\n if [[ $_ANALYTICS_REGISTRATION_WITH_AD_NETWORK ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_REGISTRATION_WITH_AD_NETWORK_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_REGISTRATION_WITH_AD_NETWORK\")\")\n fi\n\n # config.google_analytics_automatic_screen_reporting_enabled\n _ANALYTICS_AUTO_SCREEN_REPORTING=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_automatic_screen_reporting_enabled\")\n if [[ $_ANALYTICS_AUTO_SCREEN_REPORTING ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAutomaticScreenReportingEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_SCREEN_REPORTING\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"note: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"note: <- RNFB build script finished\"\n"; + }; + D58CF933D4804A0CB49C2891 /* [Expo Dev Launcher] Strip Local Network Keys for Release */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "[Expo Dev Launcher] Strip Local Network Keys for Release"; + outputFileListPaths = ( ); - name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Sauci/Pods-Sauci-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "# Strip dev-launcher-specific local network permission keys from non-Debug builds\n# This only removes _expo._tcp Bonjour services and the dev-launcher usage description.\n# Other Bonjour services and custom descriptions are preserved for production use.\n\nif [ \"$CONFIGURATION\" != \"Debug\" ]; then\n PLIST_PATH=\"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}\"\n if [ -f \"$PLIST_PATH\" ]; then\n # Check if NSBonjourServices exists\n if /usr/libexec/PlistBuddy -c \"Print :NSBonjourServices\" \"$PLIST_PATH\" >/dev/null 2>&1; then\n # Get the count of services\n COUNT=$(/usr/libexec/PlistBuddy -c \"Print :NSBonjourServices\" \"$PLIST_PATH\" 2>/dev/null | grep \"^ \" | wc -l | tr -d ' ')\n\n # Remove _expo._tcp\n for ((i=COUNT-1; i>=0; i--)); do\n SERVICE=$(/usr/libexec/PlistBuddy -c \"Print :NSBonjourServices:$i\" \"$PLIST_PATH\" 2>/dev/null || echo \"\")\n if echo \"$SERVICE\" | grep -q \"_expo._tcp\"; then\n /usr/libexec/PlistBuddy -c \"Delete :NSBonjourServices:$i\" \"$PLIST_PATH\" 2>/dev/null || true\n fi\n done\n\n # If the array is now empty, remove it entirely\n REMAINING=$(/usr/libexec/PlistBuddy -c \"Print :NSBonjourServices\" \"$PLIST_PATH\" 2>/dev/null | grep \"^ \" | wc -l | tr -d ' ')\n if [ \"$REMAINING\" -eq \"0\" ]; then\n /usr/libexec/PlistBuddy -c \"Delete :NSBonjourServices\" \"$PLIST_PATH\" 2>/dev/null || true\n fi\n fi\n\n # Only delete the description if it matches the dev-launcher default text\n DESC=$(/usr/libexec/PlistBuddy -c \"Print :NSLocalNetworkUsageDescription\" \"$PLIST_PATH\" 2>/dev/null || echo \"\")\n if echo \"$DESC\" | grep -q \"Expo Dev Launcher\"; then\n /usr/libexec/PlistBuddy -c \"Delete :NSLocalNetworkUsageDescription\" \"$PLIST_PATH\" 2>/dev/null || true\n fi\n fi\nfi\n"; }; - DC3D179C6B62F16DA5F17C2F /* [Expo] Configure project */ = { + E6F7433229E3C1448FC9F062 /* [Expo] Configure project */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; @@ -509,19 +567,6 @@ shellPath = /bin/sh; shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-Sauci/expo-configure-project.sh\"\n"; }; - FB4B019D835055733ACDE109 /* [CP-User] [RNFB] Core Configuration */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", - ); - name = "[CP-User] [RNFB] Core Configuration"; - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##########################################################################\n##########################################################################\n#\n# NOTE THAT IF YOU CHANGE THIS FILE YOU MUST RUN pod install AFTERWARDS\n#\n# This file is installed as an Xcode build script in the project file\n# by cocoapods, and you will not see your changes until you pod install\n#\n##########################################################################\n##########################################################################\n\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"note: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"note: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -Ku -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"note: -> RNFB build script started\"\necho \"note: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"note: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"note: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n if ! _RN_ROOT_EXISTS=$(ruby -Ku -e \"require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\"); then\n echo \"error: Failed to parse firebase.json, check for syntax errors.\"\n exit 1\n fi\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n if ! python3 --version >/dev/null 2>&1; then echo \"error: python3 not found, firebase.json file processing error.\" && exit 1; fi\n _JSON_OUTPUT_BASE64=$(python3 -c 'import json,sys,base64;print(base64.b64encode(bytes(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"', '\"'rb'\"').read())['${_JSON_ROOT}']), '\"'utf-8'\"')).decode())' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_analytics_storage\n _ANALYTICS_STORAGE=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_analytics_storage\")\n if [[ $_ANALYTICS_STORAGE ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_ANALYTICS_STORAGE\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_STORAGE\")\")\n fi\n\n # config.analytics_default_allow_ad_storage\n _ANALYTICS_AD_STORAGE=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_storage\")\n if [[ $_ANALYTICS_AD_STORAGE ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_STORAGE\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AD_STORAGE\")\")\n fi\n\n # config.analytics_default_allow_ad_user_data\n _ANALYTICS_AD_USER_DATA=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_user_data\")\n if [[ $_ANALYTICS_AD_USER_DATA ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_USER_DATA\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AD_USER_DATA\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.analytics_registration_with_ad_network_enabled\n _ANALYTICS_REGISTRATION_WITH_AD_NETWORK=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_registration_with_ad_network_enabled\")\n if [[ $_ANALYTICS_REGISTRATION_WITH_AD_NETWORK ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_REGISTRATION_WITH_AD_NETWORK_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_REGISTRATION_WITH_AD_NETWORK\")\")\n fi\n\n # config.google_analytics_automatic_screen_reporting_enabled\n _ANALYTICS_AUTO_SCREEN_REPORTING=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_automatic_screen_reporting_enabled\")\n if [[ $_ANALYTICS_AUTO_SCREEN_REPORTING ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAutomaticScreenReportingEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_SCREEN_REPORTING\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"note: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"note: <- RNFB build script finished\"\n"; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -530,8 +575,7 @@ buildActionMask = 2147483647; files = ( F11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */, - B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */, - 5254BDADE70741A0B2504FB1 /* noop-file.swift in Sources */, + 3F202C2A859975F48A83ADD7 /* ExpoModulesProvider.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -545,17 +589,17 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - XX97289CEC7994AD5F4142XX /* PBXTargetDependency */ = { + XX5D3A21868E45E6E5BDC3XX /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = XX540FB4ABC75CE91A6036XX /* LiveDrawWidget */; - targetProxy = XXA7C7D5580082A497FD95XX /* PBXContainerItemProxy */; + target = XXB3405CC208C2ECA4797FXX /* LiveDrawWidget */; + targetProxy = XX77D941E1DB38490B8F4EXX /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-Sauci.debug.xcconfig */; + baseConfigurationReference = FEACE2E5B4EA50AFBF4DDF34 /* Pods-Sauci.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; @@ -568,9 +612,13 @@ "FB_SONARKIT_ENABLED=1", ); INFOPLIST_FILE = Sauci/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.0.7; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 13.4; + MARKETING_VERSION = 1.0.8; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -589,7 +637,7 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-Sauci.release.xcconfig */; + baseConfigurationReference = A172EA788EF476A7083810FE /* Pods-Sauci.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; @@ -597,9 +645,13 @@ CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = BXVPBATDZY; INFOPLIST_FILE = Sauci/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.0.7; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 13.4; + MARKETING_VERSION = 1.0.8; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -664,29 +716,39 @@ GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "$(inherited)", - "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", - "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core", - "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers", - "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers/platform/ios", - "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", - "${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers", - "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", - "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios", - "${PODS_CONFIGURATION_BUILD_DIR}/React-runtimeexecutor/React_runtimeexecutor.framework/Headers", - "${PODS_CONFIGURATION_BUILD_DIR}/React-runtimeexecutor/React_runtimeexecutor.framework/Headers/platform/ios", + "${PODS_ROOT}/ReactCommon", + "${PODS_ROOT}/ReactCommon/react/nativemodule/core", + "${PODS_ROOT}/React-runtimeexecutor", + "${PODS_ROOT}/React-runtimeexecutor/platform/ios", + "${PODS_ROOT}/ReactCommon-Samples", + "${PODS_ROOT}/ReactCommon-Samples/platform/ios", + "${PODS_ROOT}/React-Fabric/react/renderer/components/view/platform/cxx", + "${PODS_ROOT}/React-NativeModulesApple", + "${PODS_ROOT}/React-graphics", + "${PODS_ROOT}/React-graphics/react/renderer/graphics/platform/ios", + "${PODS_ROOT}/React-featureflags", + "${PODS_ROOT}/React-renderercss", + ); + IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", ); - IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\""; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = ( + OTHER_CFLAGS = ( "$(inherited)", - " ", + "-DRCT_REMOVE_LEGACY_ARCH=1", + ); + OTHER_CPLUSPLUSFLAGS = ( + "$(inherited)", + "-DRCT_REMOVE_LEGACY_ARCH=1", ); REACT_NATIVE_PATH = "${PODS_ROOT}/../../../../node_modules/react-native"; SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; + SWIFT_ENABLE_EXPLICIT_MODULES = NO; USE_HERMES = true; }; name = Debug; @@ -733,33 +795,43 @@ GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "$(inherited)", - "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", - "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core", - "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers", - "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers/platform/ios", - "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", - "${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers", - "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", - "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios", - "${PODS_CONFIGURATION_BUILD_DIR}/React-runtimeexecutor/React_runtimeexecutor.framework/Headers", - "${PODS_CONFIGURATION_BUILD_DIR}/React-runtimeexecutor/React_runtimeexecutor.framework/Headers/platform/ios", + "${PODS_ROOT}/ReactCommon", + "${PODS_ROOT}/ReactCommon/react/nativemodule/core", + "${PODS_ROOT}/React-runtimeexecutor", + "${PODS_ROOT}/React-runtimeexecutor/platform/ios", + "${PODS_ROOT}/ReactCommon-Samples", + "${PODS_ROOT}/ReactCommon-Samples/platform/ios", + "${PODS_ROOT}/React-Fabric/react/renderer/components/view/platform/cxx", + "${PODS_ROOT}/React-NativeModulesApple", + "${PODS_ROOT}/React-graphics", + "${PODS_ROOT}/React-graphics/react/renderer/graphics/platform/ios", + "${PODS_ROOT}/React-featureflags", + "${PODS_ROOT}/React-renderercss", + ); + IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", ); - IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\""; MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ( + OTHER_CFLAGS = ( "$(inherited)", - " ", + "-DRCT_REMOVE_LEGACY_ARCH=1", + ); + OTHER_CPLUSPLUSFLAGS = ( + "$(inherited)", + "-DRCT_REMOVE_LEGACY_ARCH=1", ); REACT_NATIVE_PATH = "${PODS_ROOT}/../../../../node_modules/react-native"; SDKROOT = iphoneos; + SWIFT_ENABLE_EXPLICIT_MODULES = NO; USE_HERMES = true; VALIDATE_PRODUCT = YES; }; name = Release; }; - XX1230635DC14DD95E28A2XX /* Release */ = { + XX0A0FB078256184BF7EA2XX /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ANALYZER_NONNULL = YES; @@ -772,7 +844,7 @@ CODE_SIGN_ENTITLEMENTS = ../targets/widget/generated.entitlements; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 46; + CURRENT_PROJECT_VERSION = 47; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = BXVPBATDZY; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -781,12 +853,17 @@ INFOPLIST_KEY_CFBundleDisplayName = LiveDrawWidget; INFOPLIST_KEY_NSHumanReadableCopyright = ""; IPHONEOS_DEPLOYMENT_TARGET = 16.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 1.0.7; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0.8; MTL_FAST_MATH = YES; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; PRODUCT_BUNDLE_IDENTIFIER = com.sauci.app.LiveDrawWidget; PRODUCT_NAME = "$(TARGET_NAME)"; + REGISTER_APP_GROUPS = YES; SKIP_INSTALL = YES; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_EMIT_LOC_STRINGS = YES; @@ -796,7 +873,7 @@ }; name = Release; }; - XX710DB962925BCE8D59ACXX /* Debug */ = { + XX42CD38636C47E26CBE73XX /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ANALYZER_NONNULL = YES; @@ -808,7 +885,7 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_ENTITLEMENTS = ../targets/widget/generated.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 46; + CURRENT_PROJECT_VERSION = 47; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = BXVPBATDZY; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -817,13 +894,18 @@ INFOPLIST_KEY_CFBundleDisplayName = LiveDrawWidget; INFOPLIST_KEY_NSHumanReadableCopyright = ""; IPHONEOS_DEPLOYMENT_TARGET = 16.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 1.0.7; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0.8; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; PRODUCT_BUNDLE_IDENTIFIER = com.sauci.app.LiveDrawWidget; PRODUCT_NAME = "$(TARGET_NAME)"; + REGISTER_APP_GROUPS = YES; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_EMIT_LOC_STRINGS = YES; @@ -854,11 +936,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - XX63FAB1BD532DA0D8AE18XX /* Build configuration list for PBXNativeTarget "LiveDrawWidget" */ = { + XX35D62F4FBF2C9086E8C9XX /* Build configuration list for PBXNativeTarget "LiveDrawWidget" */ = { isa = XCConfigurationList; buildConfigurations = ( - XX710DB962925BCE8D59ACXX /* Debug */, - XX1230635DC14DD95E28A2XX /* Release */, + XX42CD38636C47E26CBE73XX /* Debug */, + XX0A0FB078256184BF7EA2XX /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/apps/mobile/ios/Sauci/AppDelegate.swift b/apps/mobile/ios/Sauci/AppDelegate.swift index 0f152f0..0dd1f0a 100644 --- a/apps/mobile/ios/Sauci/AppDelegate.swift +++ b/apps/mobile/ios/Sauci/AppDelegate.swift @@ -1,10 +1,10 @@ -import Expo +internal import Expo import FirebaseCore import React import ReactAppDependencyProvider -@UIApplicationMain -public class AppDelegate: ExpoAppDelegate { +@main +class AppDelegate: ExpoAppDelegate { var window: UIWindow? var reactNativeDelegate: ExpoReactNativeFactoryDelegate? @@ -20,11 +20,12 @@ public class AppDelegate: ExpoAppDelegate { reactNativeDelegate = delegate reactNativeFactory = factory - bindReactNativeFactory(factory) #if os(iOS) || os(tvOS) window = UIWindow(frame: UIScreen.main.bounds) - FirebaseApp.configure() +// @generated begin @react-native-firebase/app-didFinishLaunchingWithOptions - expo prebuild (DO NOT MODIFY) sync-10e8520570672fd76b2403b7e1e27f5198a6349a +FirebaseApp.configure() +// @generated end @react-native-firebase/app-didFinishLaunchingWithOptions factory.startReactNative( withModuleName: "main", in: window, @@ -34,42 +35,39 @@ public class AppDelegate: ExpoAppDelegate { return super.application(application, didFinishLaunchingWithOptions: launchOptions) } + // Linking API public override func application( _ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:] ) -> Bool { - super.application(app, open: url, options: options) - || RCTLinkingManager.application(app, open: url, options: options) + return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options) } + // Universal Links public override func application( _ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void ) -> Bool { - let result = RCTLinkingManager.application( - application, - continue: userActivity, - restorationHandler: restorationHandler) - return super.application( - application, - continue: userActivity, - restorationHandler: restorationHandler) || result + let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler) + return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result } } class ReactNativeDelegate: ExpoReactNativeFactoryDelegate { + // Extension point for config-plugins + override func sourceURL(for bridge: RCTBridge) -> URL? { + // needed to return the correct URL for expo-dev-client. bridge.bundleURL ?? bundleURL() } override func bundleURL() -> URL? { #if DEBUG - RCTBundleURLProvider.sharedSettings() - .jsBundleURL(forBundleRoot: ".expo/.virtual-metro-entry") + return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: ".expo/.virtual-metro-entry") #else - Bundle.main.url(forResource: "main", withExtension: "jsbundle") + return Bundle.main.url(forResource: "main", withExtension: "jsbundle") #endif } } diff --git a/apps/mobile/ios/Sauci/Images.xcassets/SplashScreenLogo.imageset/image.png b/apps/mobile/ios/Sauci/Images.xcassets/SplashScreenLogo.imageset/image.png index f65d487..8cc4087 100644 Binary files a/apps/mobile/ios/Sauci/Images.xcassets/SplashScreenLogo.imageset/image.png and b/apps/mobile/ios/Sauci/Images.xcassets/SplashScreenLogo.imageset/image.png differ diff --git a/apps/mobile/ios/Sauci/Images.xcassets/SplashScreenLogo.imageset/image@2x.png b/apps/mobile/ios/Sauci/Images.xcassets/SplashScreenLogo.imageset/image@2x.png index f65d487..77861b5 100644 Binary files a/apps/mobile/ios/Sauci/Images.xcassets/SplashScreenLogo.imageset/image@2x.png and b/apps/mobile/ios/Sauci/Images.xcassets/SplashScreenLogo.imageset/image@2x.png differ diff --git a/apps/mobile/ios/Sauci/Images.xcassets/SplashScreenLogo.imageset/image@3x.png b/apps/mobile/ios/Sauci/Images.xcassets/SplashScreenLogo.imageset/image@3x.png index f65d487..09951bf 100644 Binary files a/apps/mobile/ios/Sauci/Images.xcassets/SplashScreenLogo.imageset/image@3x.png and b/apps/mobile/ios/Sauci/Images.xcassets/SplashScreenLogo.imageset/image@3x.png differ diff --git a/apps/mobile/ios/Sauci/Info.plist b/apps/mobile/ios/Sauci/Info.plist index a01fe89..6bfa55a 100644 --- a/apps/mobile/ios/Sauci/Info.plist +++ b/apps/mobile/ios/Sauci/Info.plist @@ -21,7 +21,7 @@ CFBundlePackageType $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString - 1.0.7 + 1.0.8 CFBundleSignature ???? CFBundleURLTypes @@ -47,7 +47,7 @@ CFBundleVersion - 46 + 47 GOOGLE_ANALYTICS_INAPURCHASE_COLLECTION_ENABLED ITSAppUsesNonExemptEncryption @@ -103,13 +103,6 @@ UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - UIUserInterfaceStyle Automatic UIViewControllerBasedStatusBarAppearance diff --git a/apps/mobile/ios/Sauci/PrivacyInfo.xcprivacy b/apps/mobile/ios/Sauci/PrivacyInfo.xcprivacy index 02a8a05..9c0f287 100644 --- a/apps/mobile/ios/Sauci/PrivacyInfo.xcprivacy +++ b/apps/mobile/ios/Sauci/PrivacyInfo.xcprivacy @@ -24,6 +24,14 @@ C56D.1 + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategorySystemBootTime + NSPrivacyAccessedAPITypeReasons + + 35F9.1 + + NSPrivacyAccessedAPIType NSPrivacyAccessedAPICategoryDiskSpace @@ -33,18 +41,171 @@ 85F4.1 - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategorySystemBootTime - NSPrivacyAccessedAPITypeReasons - - 35F9.1 - - NSPrivacyCollectedDataTypes - + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeEmailAddress + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + + NSPrivacyCollectedDataTypeTracking + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeName + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + + NSPrivacyCollectedDataTypeTracking + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeSensitiveInfo + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + NSPrivacyCollectedDataTypePurposeProductPersonalization + + NSPrivacyCollectedDataTypeTracking + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeUserID + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + NSPrivacyCollectedDataTypePurposeAnalytics + + NSPrivacyCollectedDataTypeTracking + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeDeviceID + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + + NSPrivacyCollectedDataTypeTracking + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypePhotosorVideos + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + + NSPrivacyCollectedDataTypeTracking + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeAudioData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + + NSPrivacyCollectedDataTypeTracking + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeOtherUserContent + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + + NSPrivacyCollectedDataTypeTracking + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeProductInteraction + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAnalytics + + NSPrivacyCollectedDataTypeTracking + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeCrashData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAnalytics + + NSPrivacyCollectedDataTypeTracking + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypePerformanceData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAnalytics + + NSPrivacyCollectedDataTypeTracking + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeOtherDiagnosticData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAnalytics + + NSPrivacyCollectedDataTypeTracking + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypePurchaseHistory + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + + NSPrivacyCollectedDataTypeTracking + + + NSPrivacyTracking + NSPrivacyTrackingDomains + diff --git a/apps/mobile/ios/Sauci/Sauci-Bridging-Header.h b/apps/mobile/ios/Sauci/Sauci-Bridging-Header.h index e11d920..8361941 100644 --- a/apps/mobile/ios/Sauci/Sauci-Bridging-Header.h +++ b/apps/mobile/ios/Sauci/Sauci-Bridging-Header.h @@ -1,3 +1,3 @@ // -// Use this file to import your target's public headers that you would like to expose to Swift. +// Use this file to import your target's public headers that you would like to expose to Swift. // diff --git a/apps/mobile/ios/Sauci/Sauci.entitlements b/apps/mobile/ios/Sauci/Sauci.entitlements index 543c74e..e10fe23 100644 --- a/apps/mobile/ios/Sauci/Sauci.entitlements +++ b/apps/mobile/ios/Sauci/Sauci.entitlements @@ -17,4 +17,4 @@ group.com.sauci.app - + \ No newline at end of file diff --git a/apps/mobile/ios/Sauci/SplashScreen.storyboard b/apps/mobile/ios/Sauci/SplashScreen.storyboard index 6580fb1..7152b9b 100644 --- a/apps/mobile/ios/Sauci/SplashScreen.storyboard +++ b/apps/mobile/ios/Sauci/SplashScreen.storyboard @@ -1,11 +1,12 @@ - + - + + @@ -17,15 +18,13 @@ - + - - - - + + @@ -36,7 +35,10 @@ - + + + + diff --git a/apps/mobile/ios/Sauci/Supporting/Expo.plist b/apps/mobile/ios/Sauci/Supporting/Expo.plist index 64298e4..c0361ba 100644 --- a/apps/mobile/ios/Sauci/Supporting/Expo.plist +++ b/apps/mobile/ios/Sauci/Supporting/Expo.plist @@ -31,6 +31,8 @@ Ug== alg rsa-v1_5-sha256 + EXUpdatesEnableBsdiffPatchSupport + EXUpdatesEnabled EXUpdatesLaunchWaitMs @@ -45,7 +47,7 @@ Ug== EXUpdatesRuntimeVersion - 1.0.7 + 1.0.8 EXUpdatesURL https://ota.apps.jbrunton.co.uk/manifest diff --git a/apps/mobile/ios/Sauci/noop-file.swift b/apps/mobile/ios/Sauci/noop-file.swift deleted file mode 100644 index b2ffafb..0000000 --- a/apps/mobile/ios/Sauci/noop-file.swift +++ /dev/null @@ -1,4 +0,0 @@ -// -// @generated -// A blank Swift file must be created for native modules with Swift files to work correctly. -// diff --git a/apps/mobile/jest.config.js b/apps/mobile/jest.config.js index d20f75c..0e71ff1 100644 --- a/apps/mobile/jest.config.js +++ b/apps/mobile/jest.config.js @@ -12,6 +12,12 @@ module.exports = { ], moduleNameMapper: { '^@/(.*)$': '/src/$1', + // react-native-worklets ships a JS-only mock for its native module at + // this path (react-native-reanimated depends on it internally and has + // no equivalent of its own). Without this, requiring the real + // react-native-worklets under Jest throws because no native module is + // registered. + '^react-native-worklets$': '/../../node_modules/react-native-worklets/src/mock.ts', }, testMatch: [ '/src/**/__tests__/**/*.(spec|test).(ts|tsx)', diff --git a/apps/mobile/package.json b/apps/mobile/package.json index 8e5e88c..e388b7b 100644 --- a/apps/mobile/package.json +++ b/apps/mobile/package.json @@ -19,6 +19,11 @@ "release:android": "dotenv -e .env -- eas build --platform android --profile production --local", "release:android:preview": "dotenv -e .env -- eas build --platform android --profile preview --local", "release:android:upload": "bundle exec fastlane android upload", + "release:android:ship": "bundle exec fastlane android release", + "release:ios:upload": "bundle exec fastlane ios upload", + "release:ios:ship": "bundle exec fastlane ios release", + "release:preflight": "node scripts/release-preflight.mjs", + "release:preflight:local-eas": "node scripts/release-preflight.mjs --local-eas", "ota:preflight:staging": "node scripts/ota-publish.mjs staging --preflight", "ota:preflight:production": "node scripts/ota-publish.mjs production --preflight", "ota:publish:staging": "node scripts/ota-publish.mjs staging", @@ -29,7 +34,7 @@ "ota:doctor:production": "node scripts/ota-publish.mjs production --doctor" }, "dependencies": { - "@bacons/apple-targets": "^0.1.6", + "@bacons/apple-targets": "^5.0.0", "@bittingz/expo-widgets": "^3.0.2", "@expo/ngrok": "^4.1.0", "@expo/vector-icons": "^15.0.3", @@ -39,54 +44,55 @@ "@react-native-firebase/app": "^23.8.2", "@react-native-firebase/crashlytics": "^23.8.4", "@react-native-google-signin/google-signin": "^16.1.1", - "@react-navigation/bottom-tabs": "^7.0.0", - "@react-navigation/native": "^7.0.0", - "@react-navigation/native-stack": "^7.0.0", - "@shopify/react-native-skia": "2.2.12", + "@shopify/react-native-skia": "^2.6.9", "@supabase/supabase-js": "^2.39.0", "@tanstack/react-query": "^5.17.0", - "babel-preset-expo": "~54.0.12", + "babel-preset-expo": "~56.0.0", "base64-arraybuffer": "^1.0.2", - "expo": "~54.0.0", - "expo-apple-authentication": "~8.0.8", - "expo-asset": "~12.0.13", - "expo-av": "~16.0.8", - "expo-blur": "~15.0.8", - "expo-build-properties": "~1.0.10", - "expo-clipboard": "~8.0.8", - "expo-constants": "~18.0.14", - "expo-dev-client": "~6.0.21", - "expo-file-system": "~19.0.24", - "expo-font": "~14.0.12", - "expo-haptics": "~15.0.8", - "expo-image": "~3.0.11", - "expo-image-picker": "~17.0.11", - "expo-linear-gradient": "~15.0.8", - "expo-linking": "~8.0.12", - "expo-local-authentication": "~17.0.9", - "expo-media-library": "~18.2.1", - "expo-notifications": "~0.32.17", - "expo-router": "~6.0.24", - "expo-secure-store": "~15.0.8", - "expo-sharing": "~14.0.8", - "expo-status-bar": "~3.0.9", - "expo-updates": "~29.0.20", - "react": "19.1.0", - "react-dom": "19.1.0", - "react-native": "0.81.5", + "expo": "^56.0.0", + "expo-apple-authentication": "~56.0.4", + "expo-asset": "~56.0.24", + "expo-audio": "~56.0.13", + "expo-blur": "~56.0.4", + "expo-build-properties": "~56.0.27", + "expo-clipboard": "~56.0.4", + "expo-constants": "~56.0.25", + "expo-dev-client": "~56.0.26", + "expo-file-system": "~56.0.11", + "expo-font": "~56.0.7", + "expo-haptics": "~56.0.3", + "expo-image": "~56.0.12", + "expo-image-picker": "~56.0.25", + "expo-linear-gradient": "~56.0.4", + "expo-linking": "~56.0.17", + "expo-local-authentication": "~56.0.5", + "expo-media-library": "~56.0.11", + "expo-notifications": "~56.0.25", + "expo-observe": "~56.0.29", + "expo-router": "~56.2.20", + "expo-secure-store": "~56.0.4", + "expo-sharing": "~56.0.26", + "expo-splash-screen": "~56.0.15", + "expo-status-bar": "~56.0.4", + "expo-system-ui": "~56.0.5", + "expo-updates": "~56.0.26", + "expo-video": "~56.1.4", + "react": "19.2.3", + "react-dom": "19.2.3", + "react-native": "0.85.3", "react-native-android-widget": "^0.22.1", "react-native-compressor": "^1.13.0", - "react-native-gesture-handler": "~2.28.0", + "react-native-gesture-handler": "~2.31.1", "react-native-purchases": "^9.6.12", - "react-native-reanimated": "~4.1.1", - "react-native-safe-area-context": "~5.6.0", - "react-native-screens": "~4.16.0", + "react-native-reanimated": "4.3.1", + "react-native-safe-area-context": "~5.7.0", + "react-native-screens": "~4.26.0", "react-native-share": "^12.3.1", - "react-native-svg": "15.12.1", + "react-native-svg": "15.15.4", "react-native-url-polyfill": "^2.0.0", - "react-native-view-shot": "^4.0.3", + "react-native-view-shot": "5.1.0", "react-native-web": "~0.21.0", - "react-native-worklets": "0.5.1", + "react-native-worklets": "0.8.3", "zustand": "^4.4.7" }, "devDependencies": { @@ -94,15 +100,16 @@ "@testing-library/jest-native": "^5.4.3", "@testing-library/react-native": "^13.3.3", "@types/jest": "29.5.14", - "@types/react": "~19.1.10", + "@types/node": "^20.19.0", + "@types/react": "~19.2.14", "@types/react-test-renderer": "^19.1.0", "dotenv-cli": "^11.0.0", "eoas": "^3.1.3", "eslint": "^8.57.0", - "eslint-config-expo": "~10.0.0", + "eslint-config-expo": "~56.0.4", "jest": "^29.7.0", - "jest-expo": "~54.0.18", - "react-test-renderer": "19.1.0", - "typescript": "~5.9.2" + "jest-expo": "~56.0.5", + "react-test-renderer": "19.2.3", + "typescript": "~6.0.3" } } diff --git a/apps/mobile/scripts/ota-publish.mjs b/apps/mobile/scripts/ota-publish.mjs index 0245e39..b2817b8 100644 --- a/apps/mobile/scripts/ota-publish.mjs +++ b/apps/mobile/scripts/ota-publish.mjs @@ -3,6 +3,7 @@ import { mkdtempSync, readFileSync, rmSync } from 'node:fs'; import { tmpdir } from 'node:os'; import { join, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; import { spawnSync } from 'node:child_process'; const projectDir = resolve(import.meta.dirname, '..'); @@ -140,4 +141,8 @@ export function main(args = process.argv.slice(2), environment = process.env) { run('npx', ['eoas', 'publish', '--branch', branch, ...parsePublishArgs(rawPublishArgs)], exportEnv); } -if (process.argv[1] === new URL(import.meta.url).pathname) main(); +// Compare real filesystem paths. A URL pathname percent-encodes spaces, so +// comparing it to process.argv[1] silently skips main() under any checkout +// whose absolute path contains a space, and every ota:* script then exits 0 +// having done nothing. +if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) main(); diff --git a/apps/mobile/scripts/release-preflight.mjs b/apps/mobile/scripts/release-preflight.mjs new file mode 100644 index 0000000..67e6c61 --- /dev/null +++ b/apps/mobile/scripts/release-preflight.mjs @@ -0,0 +1,116 @@ +#!/usr/bin/env node + +import { existsSync, readFileSync, statSync, statfsSync } from 'node:fs'; +import { spawnSync } from 'node:child_process'; +import { resolve, join } from 'node:path'; + +const projectDir = resolve(import.meta.dirname, '..'); +const repoRoot = resolve(projectDir, '../..'); +const certificatePath = 'apps/mobile/certs/certificate.pem'; +const semverPattern = /^\d+\.\d+\.\d+$/; +const minimumFreeBuildBytes = 20 * 1024 ** 3; + +function fail(message) { + throw new Error(`Mobile release preflight: ${message}`); +} + +function plistValue(source, key, label) { + const values = [...source.matchAll(new RegExp(`${key}\\s*([^<]+)`, 'g'))].map((match) => match[1]); + if (values.length !== 1) fail(`expected one ${label} ${key}`); + return values[0]; +} + +function allMatches(source, expression, label) { + const values = [...source.matchAll(expression)].map((match) => match[1].trim()); + if (!values.length) fail(`found no ${label}`); + return values; +} + +function gitStatus(args, root = repoRoot) { + const result = spawnSync('git', ['-C', root, ...args], { encoding: 'utf8' }); + if (result.error) fail(`could not run git ${args.join(' ')}: ${result.error.message}`); + return result.status; +} + +export function validateReleaseSources({ root = repoRoot, isTracked } = {}) { + const file = (relative) => readFileSync(join(root, relative), 'utf8'); + const app = JSON.parse(file('apps/mobile/app.json')).expo; + const appConfig = file('apps/mobile/app.config.js'); + const androidGradle = file('apps/mobile/android/app/build.gradle'); + const androidStrings = file('apps/mobile/android/app/src/main/res/values/strings.xml'); + const xcode = file('apps/mobile/ios/Sauci.xcodeproj/project.pbxproj'); + const iosInfo = file('apps/mobile/ios/Sauci/Info.plist'); + const widgetInfo = file('apps/mobile/targets/widget/Info.plist'); + const iosExpo = file('apps/mobile/ios/Sauci/Supporting/Expo.plist'); + const publicVersion = app.version; + const appConfigRuntime = allMatches(appConfig, /runtimeVersion:\s*['"]([^'"]+)['"]/g, 'explicit app.config.js runtimeVersion'); + const androidVersion = allMatches(androidGradle, /\bversionName\s+["']([^"']+)["']/g, 'Android versionName'); + const androidRuntime = allMatches(androidStrings, /([^<]+)<\/string>/g, 'Android Expo runtime version'); + const xcodeMarketing = allMatches(xcode, /\bMARKETING_VERSION\s*=\s*([^;]+);/g, 'iOS MARKETING_VERSION settings'); + const widgetBuildSettings = [...xcode.matchAll(/CURRENT_PROJECT_VERSION\s*=\s*([^;]+);[\s\S]{0,900}?PRODUCT_BUNDLE_IDENTIFIER\s*=\s*com\.sauci\.app\.LiveDrawWidget;/g)].map((match) => match[1].trim()); + if (widgetBuildSettings.length !== 2) fail('expected Debug and Release LiveDrawWidget CURRENT_PROJECT_VERSION settings'); + + const versions = [ + publicVersion, + ...appConfigRuntime, + ...androidVersion, + ...androidRuntime, + ...xcodeMarketing, + plistValue(iosInfo, 'CFBundleShortVersionString', 'iOS app Info.plist'), + plistValue(widgetInfo, 'CFBundleShortVersionString', 'widget Info.plist'), + plistValue(iosExpo, 'EXUpdatesRuntimeVersion', 'iOS Expo.plist'), + ]; + if (!versions.every((version) => semverPattern.test(version))) fail(`versions must be numeric SemVer: ${versions.join(', ')}`); + if (new Set(versions).size !== 1) fail(`public or OTA runtime versions disagree: ${versions.join(', ')}`); + + const appBuild = plistValue(iosInfo, 'CFBundleVersion', 'iOS app Info.plist'); + const widgetBuild = plistValue(widgetInfo, 'CFBundleVersion', 'widget Info.plist'); + if (!/^\d+$/.test(appBuild) || !/^\d+$/.test(widgetBuild)) fail('iOS build numbers must be positive integers'); + if (appBuild !== widgetBuild || widgetBuildSettings.some((build) => build !== appBuild)) { + fail(`iOS app, widget, and effective widget Xcode build numbers disagree: app ${appBuild}; widget plist ${widgetBuild}; widget settings ${widgetBuildSettings.join(', ')}`); + } + + const tracked = isTracked ?? ((relative) => gitStatus(['ls-files', '--error-unmatch', relative], root) === 0); + if (!tracked(certificatePath)) fail(`${certificatePath} must be tracked`); + const archiveIgnore = existsSync(join(root, '.easignore')) ? '.easignore' : '.gitignore'; + if (!existsSync(join(root, archiveIgnore))) fail(`missing root ${archiveIgnore} archive rules`); + const archiveRules = file(archiveIgnore).split(/\r?\n/).map((line) => line.trim()); + const pemRules = archiveRules.map((line, index) => line === '*.pem' ? index : -1).filter((index) => index >= 0); + const certificateAllowlist = archiveRules.lastIndexOf(`!${certificatePath}`); + if (!pemRules.length) fail(`${archiveIgnore} must retain the private-key-safe *.pem archive rule`); + if (certificateAllowlist <= Math.max(...pemRules)) { + fail(`${archiveIgnore} must later allowlist !${certificatePath} for the public OTA certificate`); + } + if (!file(certificatePath).trim()) fail(`${certificatePath} is empty`); + + return { publicVersion, iosBuild: appBuild }; +} + +export function validateLocalEas(environment = process.env) { + const pluginPath = environment.EAS_LOCAL_BUILD_PLUGIN_PATH; + if (!pluginPath) fail('EAS_LOCAL_BUILD_PLUGIN_PATH must name the matching local-build plugin executable bin/run'); + if (!pluginPath.endsWith('/bin/run') || !existsSync(pluginPath) || !statSync(pluginPath).isFile()) { + fail('EAS_LOCAL_BUILD_PLUGIN_PATH must point to an existing executable bin/run, not a package directory'); + } + if (!statSync(pluginPath).mode.toString(8).match(/[1357][0-7][0-7]$/)) fail('EAS_LOCAL_BUILD_PLUGIN_PATH bin/run is not executable'); +} + +export function validateFreeDisk(root = repoRoot, readStats = statfsSync) { + const stats = readStats(root); + const freeBytes = Number(stats.bavail) * Number(stats.bsize); + if (freeBytes < minimumFreeBuildBytes) { + fail(`need at least 20 GiB free before a local build; found ${(freeBytes / 1024 ** 3).toFixed(1)} GiB`); + } +} + +export function main(args = process.argv.slice(2), environment = process.env) { + if (args.length > 1 || (args.length === 1 && args[0] !== '--local-eas')) { + fail('usage: node scripts/release-preflight.mjs [--local-eas]'); + } + const result = validateReleaseSources(); + validateFreeDisk(); + if (args.includes('--local-eas')) validateLocalEas(environment); + console.log(`Mobile release source preflight passed for v${result.publicVersion}, iOS build ${result.iosBuild}`); +} + +if (process.argv[1] === new URL(import.meta.url).pathname) main(); diff --git a/apps/mobile/scripts/release-preflight.test.mjs b/apps/mobile/scripts/release-preflight.test.mjs new file mode 100644 index 0000000..192c7b4 --- /dev/null +++ b/apps/mobile/scripts/release-preflight.test.mjs @@ -0,0 +1,97 @@ +import assert from 'node:assert/strict'; +import test from 'node:test'; +import { chmodSync, cpSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import { validateFreeDisk, validateLocalEas, validateReleaseSources } from './release-preflight.mjs'; + +const repoRoot = join(import.meta.dirname, '..', '..', '..'); + +function fixture() { + const root = mkdtempSync(join(tmpdir(), 'sauci-release-preflight-')); + cpSync(join(repoRoot, 'apps', 'mobile'), join(root, 'apps', 'mobile'), { recursive: true }); + cpSync(join(repoRoot, '.gitignore'), join(root, '.gitignore')); + return root; +} + +function replace(root, relative, from, to) { + const file = join(root, relative); + writeFileSync(file, readFileSync(file, 'utf8').replace(from, to)); +} + +function validate(root) { + return validateReleaseSources({ root, isTracked: () => true }); +} + +test('accepts current checked-in mobile release sources', () => { + const root = fixture(); + try { + const result = validate(root); + assert.match(result.publicVersion, /^\d+\.\d+\.\d+$/); + assert.match(result.iosBuild, /^\d+$/); + } finally { + rmSync(root, { recursive: true, force: true }); + } +}); + +test('rejects a widget Xcode build setting that overrides its plist', () => { + const root = fixture(); + try { + const { iosBuild } = validate(root); + const project = 'apps/mobile/ios/Sauci.xcodeproj/project.pbxproj'; + const source = readFileSync(join(root, project), 'utf8'); + const expected = `CURRENT_PROJECT_VERSION = ${iosBuild};`; + const replacement = `CURRENT_PROJECT_VERSION = ${Number(iosBuild) + 1};`; + assert.ok(source.includes(expected)); + replace(root, project, expected, replacement); + assert.ok(readFileSync(join(root, project), 'utf8').includes(replacement)); + assert.throws(() => validate(root), /iOS app, widget, and effective widget Xcode build numbers disagree/); + } finally { + rmSync(root, { recursive: true, force: true }); + } +}); + +test('rejects an OTA certificate without its root archive allowlist', () => { + const root = fixture(); + try { + const archiveRules = readFileSync(join(root, '.gitignore'), 'utf8'); + assert.ok(archiveRules.includes('!apps/mobile/certs/certificate.pem')); + replace(root, '.gitignore', '!apps/mobile/certs/certificate.pem', ''); + assert.ok(!readFileSync(join(root, '.gitignore'), 'utf8').includes('!apps/mobile/certs/certificate.pem')); + assert.throws( + () => validate(root), + /must later allowlist !apps\/mobile\/certs\/certificate\.pem/, + ); + } finally { + rmSync(root, { recursive: true, force: true }); + } +}); + +test('requires the local EAS plugin executable rather than its package directory', () => { + const root = mkdtempSync(join(tmpdir(), 'sauci-eas-plugin-')); + const executable = join(root, 'bin-run'); + try { + writeFileSync(executable, '#!/bin/sh\n'); + chmodSync(executable, 0o755); + assert.throws( + () => validateLocalEas({ EAS_LOCAL_BUILD_PLUGIN_PATH: root }), + /executable bin\/run, not a package directory/, + ); + const bin = join(root, 'bin'); + mkdirSync(bin); + const run = join(bin, 'run'); + cpSync(executable, run); + chmodSync(run, 0o755); + validateLocalEas({ EAS_LOCAL_BUILD_PLUGIN_PATH: run }); + } finally { + rmSync(root, { recursive: true, force: true }); + } +}); + +test('requires enough disk before an expensive local build', () => { + assert.throws( + () => validateFreeDisk('/fixture', () => ({ bavail: 19, bsize: 1024 ** 3 })), + /need at least 20 GiB free/, + ); + validateFreeDisk('/fixture', () => ({ bavail: 20, bsize: 1024 ** 3 })); +}); diff --git a/apps/mobile/src/__tests__/hooks/useAudioRecorder.test.ts b/apps/mobile/src/__tests__/hooks/useAudioRecorder.test.ts index ac58182..11e3582 100644 --- a/apps/mobile/src/__tests__/hooks/useAudioRecorder.test.ts +++ b/apps/mobile/src/__tests__/hooks/useAudioRecorder.test.ts @@ -1,31 +1,43 @@ import { act, renderHook } from '@testing-library/react-native'; import { Alert } from 'react-native'; -import { Audio } from 'expo-av'; +import { AudioModule, requestRecordingPermissionsAsync, setAudioModeAsync } from 'expo-audio'; import { useAudioRecorder } from '@/hooks/useAudioRecorder'; +// eslint-plugin-import's namespace rule cannot statically resolve the +// `AudioRecorder` class exposed on the `AudioModule` native module instance. +// Alias it once here so the mock constructor is only dereferenced this way +// in a single, deliberately suppressed spot. +// eslint-disable-next-line import/namespace +const AudioRecorderMock = AudioModule.AudioRecorder as jest.Mock; + const makeRecording = (overrides: Record = {}) => ({ - getStatusAsync: jest.fn(async () => ({ isRecording: true, durationMillis: 2400 })), - stopAndUnloadAsync: jest.fn(async () => undefined), - getURI: jest.fn(() => 'file://recording.m4a'), - setOnRecordingStatusUpdate: jest.fn(), - setProgressUpdateInterval: jest.fn(), + getStatus: jest.fn(() => ({ isRecording: true, durationMillis: 2400, canRecord: true, url: null })), + prepareToRecordAsync: jest.fn(async () => undefined), + record: jest.fn(), + stop: jest.fn(async () => undefined), + uri: 'file://recording.m4a', ...overrides, }); describe('useAudioRecorder', () => { beforeEach(() => { + jest.useFakeTimers(); jest.clearAllMocks(); jest.spyOn(Alert, 'alert').mockImplementation(() => undefined); jest.spyOn(console, 'error').mockImplementation(() => undefined); - (Audio.requestPermissionsAsync as jest.Mock).mockResolvedValue({ status: 'granted' }); - (Audio.setAudioModeAsync as jest.Mock).mockResolvedValue(undefined); + (requestRecordingPermissionsAsync as jest.Mock).mockResolvedValue({ status: 'granted' }); + (setAudioModeAsync as jest.Mock).mockResolvedValue(undefined); }); - afterEach(() => jest.restoreAllMocks()); + afterEach(() => { + jest.runOnlyPendingTimers(); + jest.useRealTimers(); + jest.restoreAllMocks(); + }); it('alerts and refuses to start without microphone permission', async () => { - (Audio.requestPermissionsAsync as jest.Mock).mockResolvedValueOnce({ status: 'denied' }); + (requestRecordingPermissionsAsync as jest.Mock).mockResolvedValueOnce({ status: 'denied' }); const { result } = renderHook(() => useAudioRecorder()); let started = true; @@ -36,21 +48,22 @@ describe('useAudioRecorder', () => { 'Microphone Permission', 'Please allow microphone access to record audio.' ); - expect(Audio.Recording.createAsync).not.toHaveBeenCalled(); + expect(AudioRecorderMock).not.toHaveBeenCalled(); }); it('starts, reports duration, and returns the completed recording', async () => { const recording = makeRecording(); - (Audio.Recording.createAsync as jest.Mock).mockResolvedValue({ recording }); + AudioRecorderMock.mockImplementation(() => recording); const onComplete = jest.fn(); const { result } = renderHook(() => useAudioRecorder({ onRecordingComplete: onComplete })); await act(async () => { expect(await result.current.startRecording()).toBe(true); }); expect(result.current.state).toBe('recording'); - expect(recording.setProgressUpdateInterval).toHaveBeenCalledWith(100); + expect(recording.prepareToRecordAsync).toHaveBeenCalled(); + expect(recording.record).toHaveBeenCalled(); - const statusCallback = recording.setOnRecordingStatusUpdate.mock.calls[0][0]; - act(() => statusCallback({ isRecording: true, durationMillis: 2400 })); + // Duration is reported by polling the recorder status, not by a push event. + await act(async () => { jest.advanceTimersByTime(100); }); expect(result.current.durationSeconds).toBe(2); let completed: unknown; @@ -66,50 +79,55 @@ describe('useAudioRecorder', () => { it('auto-stops when the configured duration is reached', async () => { const recording = makeRecording({ - getStatusAsync: jest.fn(async () => ({ isRecording: true, durationMillis: 1000 })), + getStatus: jest.fn(() => ({ isRecording: true, durationMillis: 1000, canRecord: true, url: null })), }); - (Audio.Recording.createAsync as jest.Mock).mockResolvedValue({ recording }); + AudioRecorderMock.mockImplementation(() => recording); const onComplete = jest.fn(); const { result } = renderHook(() => useAudioRecorder({ maxDurationSeconds: 1, onRecordingComplete: onComplete })); await act(async () => { await result.current.startRecording(); }); - const statusCallback = recording.setOnRecordingStatusUpdate.mock.calls[0][0]; - await act(async () => { statusCallback({ isRecording: true, durationMillis: 1000 }); }); + await act(async () => { jest.advanceTimersByTime(100); }); + // Flush the microtasks queued by the auto-stop call. + await act(async () => { await Promise.resolve(); }); - expect(recording.stopAndUnloadAsync).toHaveBeenCalled(); + expect(recording.stop).toHaveBeenCalled(); expect(onComplete).toHaveBeenCalledWith('file://recording.m4a', 1); }); it('resets an active recording and cleans it up on unmount', async () => { const first = makeRecording(); const second = makeRecording(); - (Audio.Recording.createAsync as jest.Mock) - .mockResolvedValueOnce({ recording: first }) - .mockResolvedValueOnce({ recording: second }); + AudioRecorderMock + .mockImplementationOnce(() => first) + .mockImplementationOnce(() => second); const view = renderHook(() => useAudioRecorder()); await act(async () => { await view.result.current.startRecording(); }); act(() => view.result.current.resetRecording()); - expect(first.stopAndUnloadAsync).toHaveBeenCalled(); + expect(first.stop).toHaveBeenCalled(); expect(view.result.current.state).toBe('idle'); await act(async () => { await view.result.current.startRecording(); }); view.unmount(); - expect(second.stopAndUnloadAsync).toHaveBeenCalled(); - expect(Audio.setAudioModeAsync).toHaveBeenLastCalledWith({ - allowsRecordingIOS: false, - playsInSilentModeIOS: true, + expect(second.stop).toHaveBeenCalled(); + expect(setAudioModeAsync).toHaveBeenLastCalledWith({ + allowsRecording: false, + playsInSilentMode: true, }); }); it('recovers when starting or stopping throws', async () => { - (Audio.Recording.createAsync as jest.Mock).mockRejectedValueOnce(new Error('native unavailable')); + AudioRecorderMock.mockImplementationOnce(() => { + throw new Error('native unavailable'); + }); const first = renderHook(() => useAudioRecorder()); await act(async () => { expect(await first.result.current.startRecording()).toBe(false); }); expect(first.result.current.state).toBe('idle'); - const recording = makeRecording({ getStatusAsync: jest.fn(async () => { throw new Error('lost'); }) }); - (Audio.Recording.createAsync as jest.Mock).mockResolvedValueOnce({ recording }); + const recording = makeRecording({ + getStatus: jest.fn(() => { throw new Error('lost'); }), + }); + AudioRecorderMock.mockImplementationOnce(() => recording); const second = renderHook(() => useAudioRecorder()); await act(async () => { await second.result.current.startRecording(); }); await act(async () => { expect(await second.result.current.stopRecording()).toBeNull(); }); diff --git a/apps/mobile/src/__tests__/lib/observe.test.ts b/apps/mobile/src/__tests__/lib/observe.test.ts new file mode 100644 index 0000000..87610a4 --- /dev/null +++ b/apps/mobile/src/__tests__/lib/observe.test.ts @@ -0,0 +1,113 @@ +jest.mock('expo-observe', () => ({ + Observe: { + logEvent: jest.fn(), + }, +})); + +// eslint-disable-next-line @typescript-eslint/no-var-requires +const { Observe } = require('expo-observe'); +const logEventMock = Observe.logEvent as jest.Mock; + +type ErrorHandler = (error: unknown, isFatal: boolean) => void; + +function withFreshObserveModule(run: (mod: typeof import('@/lib/observe')) => T): T { + let result!: T; + jest.isolateModules(() => { + // eslint-disable-next-line @typescript-eslint/no-var-requires + const mod = require('@/lib/observe') as typeof import('@/lib/observe'); + result = run(mod); + }); + return result; +} + +function installFakeErrorUtils(previousHandler: jest.Mock) { + let installedHandler: ErrorHandler = () => undefined; + const globalWithErrorUtils = global as unknown as { + ErrorUtils: { getGlobalHandler: () => unknown; setGlobalHandler: (fn: unknown) => void }; + }; + globalWithErrorUtils.ErrorUtils = { + getGlobalHandler: () => previousHandler, + setGlobalHandler: (fn) => { + installedHandler = fn as ErrorHandler; + }, + }; + return () => installedHandler; +} + +describe('observe', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + it('logs app_started only once per module instance', () => { + withFreshObserveModule(({ logAppStarted }) => { + logAppStarted(); + logAppStarted(); + }); + + expect(logEventMock).toHaveBeenCalledTimes(1); + expect(logEventMock).toHaveBeenCalledWith('app_started'); + }); + + it('does not throw when Observe.logEvent fails', () => { + logEventMock.mockImplementationOnce(() => { + throw new Error('native module unavailable'); + }); + + withFreshObserveModule(({ logAppStarted }) => { + expect(() => logAppStarted()).not.toThrow(); + }); + }); + + it('wraps the previous ErrorUtils handler, logging xprem_js_crash and delegating', () => { + const previousHandler = jest.fn(); + const getInstalledHandler = installFakeErrorUtils(previousHandler); + + withFreshObserveModule(({ installObserveGlobalErrorHandler }) => { + installObserveGlobalErrorHandler(); + }); + + const error = new Error('boom'); + getInstalledHandler()(error, true); + + expect(logEventMock).toHaveBeenCalledWith( + 'xprem_js_crash', + expect.objectContaining({ + severity: 'fatal', + body: 'boom', + }) + ); + expect(previousHandler).toHaveBeenCalledWith(error, true); + }); + + it('does not log xprem_js_crash for non-fatal errors but still delegates', () => { + const previousHandler = jest.fn(); + const getInstalledHandler = installFakeErrorUtils(previousHandler); + + withFreshObserveModule(({ installObserveGlobalErrorHandler }) => { + installObserveGlobalErrorHandler(); + }); + + const error = new Error('handled'); + getInstalledHandler()(error, false); + + expect(logEventMock).not.toHaveBeenCalled(); + expect(previousHandler).toHaveBeenCalledWith(error, false); + }); + + it('still calls the previous handler when Observe.logEvent throws', () => { + const previousHandler = jest.fn(); + const getInstalledHandler = installFakeErrorUtils(previousHandler); + logEventMock.mockImplementationOnce(() => { + throw new Error('native module unavailable'); + }); + + withFreshObserveModule(({ installObserveGlobalErrorHandler }) => { + installObserveGlobalErrorHandler(); + }); + + getInstalledHandler()(new Error('boom'), true); + + expect(previousHandler).toHaveBeenCalledWith(expect.any(Error), true); + }); +}); diff --git a/apps/mobile/src/components/BoutiquePackCard.tsx b/apps/mobile/src/components/BoutiquePackCard.tsx index c8a037e..8a9ebb6 100644 --- a/apps/mobile/src/components/BoutiquePackCard.tsx +++ b/apps/mobile/src/components/BoutiquePackCard.tsx @@ -310,7 +310,7 @@ const styles = StyleSheet.create({ color: colors.textTertiary, }, lockOverlay: { - ...StyleSheet.absoluteFillObject, + ...StyleSheet.absoluteFill, backgroundColor: 'rgba(0, 0, 0, 0.5)', justifyContent: 'center', alignItems: 'center', diff --git a/apps/mobile/src/components/MatchConfetti.tsx b/apps/mobile/src/components/MatchConfetti.tsx index 379806a..5b15927 100644 --- a/apps/mobile/src/components/MatchConfetti.tsx +++ b/apps/mobile/src/components/MatchConfetti.tsx @@ -307,7 +307,7 @@ export const MatchConfetti: React.FC = ({ visible, onAnimationComplete }) const styles = StyleSheet.create({ container: { - ...StyleSheet.absoluteFillObject, + ...StyleSheet.absoluteFill, zIndex: 1000, }, particle: { diff --git a/apps/mobile/src/components/MatchNotificationModal.tsx b/apps/mobile/src/components/MatchNotificationModal.tsx index f159ae7..c87174b 100644 --- a/apps/mobile/src/components/MatchNotificationModal.tsx +++ b/apps/mobile/src/components/MatchNotificationModal.tsx @@ -344,7 +344,7 @@ export const MatchNotificationModal: React.FC = ({ const styles = StyleSheet.create({ overlay: { - ...StyleSheet.absoluteFillObject, + ...StyleSheet.absoluteFill, backgroundColor: 'rgba(0, 0, 0, 0.75)', justifyContent: 'center', alignItems: 'center', @@ -377,7 +377,7 @@ const styles = StyleSheet.create({ borderColor: colors.border, }, flatBackground: { - ...StyleSheet.absoluteFillObject, + ...StyleSheet.absoluteFill, backgroundColor: colors.backgroundLight, }, // Removed blur/gradient styles diff --git a/apps/mobile/src/components/PackTeaser.tsx b/apps/mobile/src/components/PackTeaser.tsx index 8fe9696..935eb16 100644 --- a/apps/mobile/src/components/PackTeaser.tsx +++ b/apps/mobile/src/components/PackTeaser.tsx @@ -269,7 +269,7 @@ const styles = StyleSheet.create({ justifyContent: "flex-end", }, overlay: { - ...StyleSheet.absoluteFillObject, + ...StyleSheet.absoluteFill, backgroundColor: "rgba(0, 0, 0, 0.85)", }, content: { diff --git a/apps/mobile/src/components/discovery/ContentTile.tsx b/apps/mobile/src/components/discovery/ContentTile.tsx index 499c71b..ee544f6 100644 --- a/apps/mobile/src/components/discovery/ContentTile.tsx +++ b/apps/mobile/src/components/discovery/ContentTile.tsx @@ -101,7 +101,7 @@ const styles = StyleSheet.create({ position: 'relative', }, overlay: { - ...StyleSheet.absoluteFillObject, + ...StyleSheet.absoluteFill, backgroundColor: 'rgba(0, 0, 0, 0.05)', borderRadius: radius.lg, pointerEvents: 'none', diff --git a/apps/mobile/src/components/discovery/DaresTile.tsx b/apps/mobile/src/components/discovery/DaresTile.tsx index d4709ab..1247915 100644 --- a/apps/mobile/src/components/discovery/DaresTile.tsx +++ b/apps/mobile/src/components/discovery/DaresTile.tsx @@ -115,7 +115,7 @@ const styles = StyleSheet.create({ fontWeight: '700', }, overlay: { - ...StyleSheet.absoluteFillObject, + ...StyleSheet.absoluteFill, backgroundColor: 'rgba(0, 0, 0, 0.05)', borderRadius: radius.lg, pointerEvents: 'none', diff --git a/apps/mobile/src/components/discovery/LiveDrawTile.tsx b/apps/mobile/src/components/discovery/LiveDrawTile.tsx index b3f0ff1..f6afaf2 100644 --- a/apps/mobile/src/components/discovery/LiveDrawTile.tsx +++ b/apps/mobile/src/components/discovery/LiveDrawTile.tsx @@ -110,7 +110,7 @@ const styles = StyleSheet.create({ marginTop: 2, }, overlay: { - ...StyleSheet.absoluteFillObject, + ...StyleSheet.absoluteFill, backgroundColor: 'rgba(0, 0, 0, 0.05)', borderRadius: radius.lg, pointerEvents: 'none', diff --git a/apps/mobile/src/components/discovery/QuizTile.tsx b/apps/mobile/src/components/discovery/QuizTile.tsx index 6a6c7ec..0c98da4 100644 --- a/apps/mobile/src/components/discovery/QuizTile.tsx +++ b/apps/mobile/src/components/discovery/QuizTile.tsx @@ -90,7 +90,7 @@ const styles = StyleSheet.create({ marginTop: 2, }, overlay: { - ...StyleSheet.absoluteFillObject, + ...StyleSheet.absoluteFill, backgroundColor: 'rgba(0, 0, 0, 0.05)', borderRadius: radius.lg, pointerEvents: 'none', diff --git a/apps/mobile/src/components/feedback/FeedbackModal.tsx b/apps/mobile/src/components/feedback/FeedbackModal.tsx index 9f60459..08547e2 100644 --- a/apps/mobile/src/components/feedback/FeedbackModal.tsx +++ b/apps/mobile/src/components/feedback/FeedbackModal.tsx @@ -336,7 +336,7 @@ const styles = StyleSheet.create({ zIndex: 1000, }, backdrop: { - ...StyleSheet.absoluteFillObject, + ...StyleSheet.absoluteFill, backgroundColor: 'rgba(0, 0, 0, 0.8)', }, keyboardView: { diff --git a/apps/mobile/src/components/paywall/Paywall.tsx b/apps/mobile/src/components/paywall/Paywall.tsx index 65fb33f..fae4f73 100644 --- a/apps/mobile/src/components/paywall/Paywall.tsx +++ b/apps/mobile/src/components/paywall/Paywall.tsx @@ -615,7 +615,7 @@ const styles = StyleSheet.create({ borderColor: colors.premium.goldLight, }, annualBackground: { - ...StyleSheet.absoluteFillObject, + ...StyleSheet.absoluteFill, backgroundColor: colors.premium.goldLight, opacity: 0.3, }, @@ -804,7 +804,7 @@ const styles = StyleSheet.create({ // Guest confirm modal guestConfirmOverlay: { - ...StyleSheet.absoluteFillObject, + ...StyleSheet.absoluteFill, backgroundColor: "rgba(0, 0, 0, 0.8)", justifyContent: "center", alignItems: "center", diff --git a/apps/mobile/src/components/questions/QuestionCardAudio.tsx b/apps/mobile/src/components/questions/QuestionCardAudio.tsx index 96179c2..129ff1e 100644 --- a/apps/mobile/src/components/questions/QuestionCardAudio.tsx +++ b/apps/mobile/src/components/questions/QuestionCardAudio.tsx @@ -1,7 +1,7 @@ import { useState, useEffect } from "react"; import { View, Text, StyleSheet, Platform, TouchableOpacity } from "react-native"; import { LinearGradient } from "expo-linear-gradient"; -import { Audio } from "expo-av"; +import { createAudioPlayer, type AudioPlayer } from "expo-audio"; import Animated, { useSharedValue, useAnimatedStyle, @@ -59,7 +59,7 @@ export default function QuestionCardAudio({ question, packInfo, onAnswer, onRepo maxDurationSeconds: maxDuration, }); - const [sound, setSound] = useState(null); + const [sound, setSound] = useState(null); const [isPlaying, setIsPlaying] = useState(false); const [playbackPosition, setPlaybackPosition] = useState(0); @@ -86,7 +86,7 @@ export default function QuestionCardAudio({ question, packInfo, onAnswer, onRepo useEffect(() => { return () => { if (sound) { - sound.unloadAsync(); + sound.remove(); } }; }, [sound]); @@ -113,30 +113,26 @@ export default function QuestionCardAudio({ question, packInfo, onAnswer, onRepo await triggerHaptic('light'); if (isPlaying && sound) { - await sound.pauseAsync(); + sound.pause(); setIsPlaying(false); return; } if (sound) { - await sound.playAsync(); + sound.play(); setIsPlaying(true); return; } - const { sound: newSound } = await Audio.Sound.createAsync( - { uri: recordingUri }, - { shouldPlay: true }, - (status) => { - if (status.isLoaded) { - setPlaybackPosition(status.positionMillis / 1000); - if (status.didJustFinish) { - setIsPlaying(false); - setPlaybackPosition(0); - } - } + const newSound = createAudioPlayer({ uri: recordingUri }); + newSound.addListener('playbackStatusUpdate', (status) => { + setPlaybackPosition(status.currentTime); + if (status.didJustFinish) { + setIsPlaying(false); + setPlaybackPosition(0); } - ); + }); + newSound.play(); setSound(newSound); setIsPlaying(true); }; @@ -145,7 +141,7 @@ export default function QuestionCardAudio({ question, packInfo, onAnswer, onRepo if (!recordingUri) return; await triggerHaptic('medium'); if (sound) { - await sound.unloadAsync(); + sound.remove(); setSound(null); } onAnswer('yes', { type: 'audio', media_path: recordingUri, duration_seconds: durationSeconds }); @@ -154,7 +150,7 @@ export default function QuestionCardAudio({ question, packInfo, onAnswer, onRepo const handleReRecord = async () => { await triggerHaptic('light'); if (sound) { - await sound.unloadAsync(); + sound.remove(); setSound(null); } setIsPlaying(false); @@ -165,7 +161,7 @@ export default function QuestionCardAudio({ question, packInfo, onAnswer, onRepo const handleCancel = async () => { await triggerHaptic('light'); if (sound) { - await sound.unloadAsync(); + sound.remove(); setSound(null); } setIsPlaying(false); @@ -176,7 +172,7 @@ export default function QuestionCardAudio({ question, packInfo, onAnswer, onRepo const handleSkip = async () => { await triggerHaptic('light'); if (sound) { - await sound.unloadAsync(); + sound.remove(); setSound(null); } onAnswer('skip'); diff --git a/apps/mobile/src/components/responses/DeleteMatchConfirmModal.tsx b/apps/mobile/src/components/responses/DeleteMatchConfirmModal.tsx index 2ad7cfc..4d253f5 100644 --- a/apps/mobile/src/components/responses/DeleteMatchConfirmModal.tsx +++ b/apps/mobile/src/components/responses/DeleteMatchConfirmModal.tsx @@ -131,7 +131,7 @@ const styles = StyleSheet.create({ padding: spacing.lg, }, backdrop: { - ...StyleSheet.absoluteFillObject, + ...StyleSheet.absoluteFill, backgroundColor: "rgba(0, 0, 0, 0.7)", }, modalContainer: { diff --git a/apps/mobile/src/components/responses/EditResponseSheet.tsx b/apps/mobile/src/components/responses/EditResponseSheet.tsx index a489c85..81736a0 100644 --- a/apps/mobile/src/components/responses/EditResponseSheet.tsx +++ b/apps/mobile/src/components/responses/EditResponseSheet.tsx @@ -629,7 +629,7 @@ const styles = StyleSheet.create({ justifyContent: "flex-end", }, backdrop: { - ...StyleSheet.absoluteFillObject, + ...StyleSheet.absoluteFill, backgroundColor: "rgba(0, 0, 0, 0.6)", }, sheetContainer: { diff --git a/apps/mobile/src/components/share/QuestionShareCard.tsx b/apps/mobile/src/components/share/QuestionShareCard.tsx index e74e526..d109af5 100644 --- a/apps/mobile/src/components/share/QuestionShareCard.tsx +++ b/apps/mobile/src/components/share/QuestionShareCard.tsx @@ -86,7 +86,7 @@ const styles = StyleSheet.create({ padding: spacing.lg, }, overlay: { - ...StyleSheet.absoluteFillObject, + ...StyleSheet.absoluteFill, backgroundColor: "rgba(0, 0, 0, 0.1)", }, header: { diff --git a/apps/mobile/src/components/share/SharePreviewModal.tsx b/apps/mobile/src/components/share/SharePreviewModal.tsx index bff969a..8d4591a 100644 --- a/apps/mobile/src/components/share/SharePreviewModal.tsx +++ b/apps/mobile/src/components/share/SharePreviewModal.tsx @@ -19,7 +19,7 @@ import Animated, { } from "react-native-reanimated"; import { Ionicons } from "@expo/vector-icons"; import { useSafeAreaInsets } from "react-native-safe-area-context"; -import ViewShot from "react-native-view-shot"; +import ViewShot, { type ViewShotRef } from "react-native-view-shot"; import * as Sharing from "expo-sharing"; import { colors, typography, spacing, blur } from "../../theme"; import { shareToInstagramStories } from "../../lib/instagramShare"; @@ -50,7 +50,7 @@ export function SharePreviewModal({ const insets = useSafeAreaInsets(); const { width: screenWidth } = useWindowDimensions(); const cardWidth = Math.min(screenWidth - 64, MAX_CARD_WIDTH); - const shareViewRef = useRef(null); + const shareViewRef = useRef(null); const [capturedUri, setCapturedUri] = useState(null); const [isCapturing, setIsCapturing] = useState(false); diff --git a/apps/mobile/src/components/tutorials/MatchesTutorial.tsx b/apps/mobile/src/components/tutorials/MatchesTutorial.tsx index 683aaa9..eb35b9d 100644 --- a/apps/mobile/src/components/tutorials/MatchesTutorial.tsx +++ b/apps/mobile/src/components/tutorials/MatchesTutorial.tsx @@ -308,7 +308,7 @@ export default function MatchesTutorial({ onComplete }: Props) { const styles = StyleSheet.create({ container: { - ...StyleSheet.absoluteFillObject, + ...StyleSheet.absoluteFill, zIndex: 1000, }, blur: { diff --git a/apps/mobile/src/components/ui/LoadingOverlay.tsx b/apps/mobile/src/components/ui/LoadingOverlay.tsx index 58ae1b0..b520098 100644 --- a/apps/mobile/src/components/ui/LoadingOverlay.tsx +++ b/apps/mobile/src/components/ui/LoadingOverlay.tsx @@ -152,7 +152,7 @@ const styles = StyleSheet.create({ padding: spacing.md, }, fullScreenContainer: { - ...StyleSheet.absoluteFillObject, + ...StyleSheet.absoluteFill, backgroundColor: 'rgba(13, 13, 26, 0.85)', alignItems: 'center', justifyContent: 'center', diff --git a/apps/mobile/src/components/ui/ShimmerEffect.tsx b/apps/mobile/src/components/ui/ShimmerEffect.tsx index 1ed7012..5eac954 100644 --- a/apps/mobile/src/components/ui/ShimmerEffect.tsx +++ b/apps/mobile/src/components/ui/ShimmerEffect.tsx @@ -118,7 +118,7 @@ const styles = StyleSheet.create({ overflow: 'hidden', }, glowContainer: { - ...StyleSheet.absoluteFillObject, + ...StyleSheet.absoluteFill, }, edgeGlowTop: { position: 'absolute', diff --git a/apps/mobile/src/features/chat/ChatScreen.tsx b/apps/mobile/src/features/chat/ChatScreen.tsx index 620cf85..7cc2b32 100644 --- a/apps/mobile/src/features/chat/ChatScreen.tsx +++ b/apps/mobile/src/features/chat/ChatScreen.tsx @@ -1,7 +1,6 @@ import { useState, useEffect, useCallback, useRef } from "react"; import { View, StyleSheet, KeyboardAvoidingView, Platform, Alert } from "react-native"; -import { useLocalSearchParams, useRouter } from "expo-router"; -import { useFocusEffect, useIsFocused } from "@react-navigation/native"; +import { useLocalSearchParams, useRouter, useFocusEffect, useIsFocused } from "expo-router"; import { useSafeAreaInsets } from "react-native-safe-area-context"; import { LinearGradient } from "expo-linear-gradient"; import Animated, { FadeInDown } from "react-native-reanimated"; diff --git a/apps/mobile/src/features/chat/components/ChatSettingsSheet.tsx b/apps/mobile/src/features/chat/components/ChatSettingsSheet.tsx index 79c6cb3..05cd267 100644 --- a/apps/mobile/src/features/chat/components/ChatSettingsSheet.tsx +++ b/apps/mobile/src/features/chat/components/ChatSettingsSheet.tsx @@ -159,7 +159,7 @@ const styles = StyleSheet.create({ justifyContent: "flex-end", }, backdrop: { - ...StyleSheet.absoluteFillObject, + ...StyleSheet.absoluteFill, backgroundColor: "rgba(0, 0, 0, 0.6)", }, sheetContainer: { diff --git a/apps/mobile/src/features/chat/components/ChatVideoPlayer.tsx b/apps/mobile/src/features/chat/components/ChatVideoPlayer.tsx index e017569..0db66c0 100644 --- a/apps/mobile/src/features/chat/components/ChatVideoPlayer.tsx +++ b/apps/mobile/src/features/chat/components/ChatVideoPlayer.tsx @@ -1,6 +1,6 @@ import React, { useState, useEffect, useRef, useCallback } from 'react'; import { View, Text, TouchableOpacity, ActivityIndicator, StyleSheet } from 'react-native'; -import { Video, ResizeMode, AVPlaybackStatus } from 'expo-av'; +import { useVideoPlayer, VideoView } from 'expo-video'; import { LinearGradient } from 'expo-linear-gradient'; import { Ionicons } from '@expo/vector-icons'; import { colors, gradients, spacing, radius } from '../../../theme'; @@ -30,7 +30,6 @@ const ChatVideoPlayerComponent: React.FC = ({ urlError, onFullScreen, }) => { - const videoRef = useRef