diff --git a/.detoxrc.js b/.detoxrc.js index c8ec4fca0..8d0745e3a 100644 --- a/.detoxrc.js +++ b/.detoxrc.js @@ -1,20 +1,6 @@ -const { execSync } = require( "child_process" ); const fs = require( "fs" ); const { version } = require( "./package.json" ); -function getAvailableAVD( ) { - try { - const avds = execSync( "emulator -list-avds", { encoding: "utf8", timeout: 5000 } ) - .trim() - .split( "\n" ) - .filter( Boolean ); - if ( avds.length > 0 ) return avds[0]; - } catch ( _e ) { - // default avd - } - return "Pixel_5_API_31_AOSP"; -} - const buildGradle = fs.readFileSync( "./android/app/build.gradle", "utf8" ); const versionCode = buildGradle.match( /versionCode (\d+)/ )[1]; const apkFilenamePrefix = `org.inaturalist.iNaturalistMobile-v${version}+${versionCode}`; @@ -32,15 +18,6 @@ module.exports = { teardownTimeout: 900000, }, }, - artifacts: { - rootDir: "e2e/artifacts", - plugins: { - screenshot: { - shouldTakeAutomaticSnapshots: true, - keepOnlyFailedTestsArtifacts: true, - }, - }, - }, apps: { "ios.debug": { type: "ios.app", @@ -79,14 +56,15 @@ module.exports = { simulator: { type: "ios.simulator", device: { - type: "iPhone 16 Pro", - os: "iOS 18.6", + type: "iPhone 17 Pro", }, }, emulator: { type: "android.emulator", device: { - avdName: getAvailableAVD(), + // Make sure to follow the guide to setup an AOSP if you plan to test locally + // https://wix.github.io/Detox/docs/guide/android-dev-env#android-aosp-emulators + avdName: "Pixel_5_API_34_AOSP", }, }, }, diff --git a/.eslintrc.js b/.eslintrc.js index 33734fe1c..e2bde2cdd 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -3,6 +3,8 @@ module.exports = { globals: { requestIdleCallback: "readonly", cancelIdleCallback: "readonly", + __DEV__: "readonly", + HermesInternal: "readonly", }, parser: "@typescript-eslint/parser", parserOptions: { @@ -13,21 +15,21 @@ module.exports = { }, extends: [ "airbnb", - "plugin:i18next/recommended", "plugin:@tanstack/query/recommended", + "plugin:@typescript-eslint/recommended", + "plugin:i18next/recommended", "plugin:react-hooks/recommended", "plugin:react-native-a11y/ios", - "plugin:@typescript-eslint/recommended", ], plugins: [ + "@stylistic", + "@tanstack/query", + "@typescript-eslint", + "lodash", "module-resolver", "react-hooks", "react-native", "simple-import-sort", - "@tanstack/query", - "@typescript-eslint", - "@stylistic", - "lodash", ], rules: { "arrow-parens": [2, "as-needed"], @@ -46,6 +48,7 @@ module.exports = { }, }, ], + "import/consistent-type-specifier-style": ["error", "prefer-top-level"], // The AirBNB approach at // https://github.com/airbnb/javascript/blob/master/packages/eslint-config-airbnb-base/rules/imports.js#L71 // is quite particular and forbids imports of devDependencies anywhere @@ -172,7 +175,6 @@ module.exports = { "@typescript-eslint/consistent-type-imports": ["error", { fixStyle: "separate-type-imports", }], - "import/consistent-type-specifier-style": ["error", "prefer-top-level"], "@stylistic/member-delimiter-style": "error", @@ -192,13 +194,13 @@ module.exports = { { files: ["*.js", "*.jsx"], rules: { - "@typescript-eslint/consistent-type-definitions": "off", - "@typescript-eslint/no-unsafe-function-type": "off", - "@typescript-eslint/no-wrapper-object-types": "off", - "@typescript-eslint/no-require-imports": "off", - "@typescript-eslint/consistent-type-imports": "off", "import/consistent-type-specifier-style": "off", "@stylistic/member-delimiter-style": "off", + "@typescript-eslint/consistent-type-definitions": "off", + "@typescript-eslint/consistent-type-imports": "off", + "@typescript-eslint/no-require-imports": "off", + "@typescript-eslint/no-unsafe-function-type": "off", + "@typescript-eslint/no-wrapper-object-types": "off", }, }, { diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 6294c8da5..000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -name: Bug report -about: Report a problem with expected functionality -title: '' -labels: bug -assignees: '' - ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Tap on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Context (please complete the following information):** - - Device: [e.g. iPhone6] - - OS: [e.g. iOS8.1] - - App version: [e.g. 1.0.0] - -**Additional context** -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..208a1dab6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,31 @@ +# This file disables blank issue creation and replaces the issue form with +# links that redirect users to the appropriate channels. +# +# Place this file at .github/ISSUE_TEMPLATE/config.yml in each repo. + +blank_issues_enabled: false + +contact_links: + - name: 🐛 Report a bug + url: https://forum.inaturalist.org/c/bug-reports + about: > + Please report bugs on the iNaturalist Forum. You're more likely to get + a response there, and other users can confirm or add context to your report. + + - name: 💡 Request a feature + url: https://forum.inaturalist.org/c/feature-requests + about: > + Please post feature requests on the iNaturalist Forum, where the + community can discuss and staff can weigh in on feasibility. + + - name: 💬 Ask a technical question about the code + url: https://github.com/inaturalist/inaturalistReactNative/discussions + about: > + If you have a question about how the code works, or you're building + an integration, open a GitHub Discussion instead of an issue. + + - name: 🔒 Report a security vulnerability + url: mailto:help+security@inaturalist.org + about: > + For security issues requiring confidential communication, + please email us directly rather than filing a public issue. diff --git a/.github/ISSUE_TEMPLATE/technical_bug_report.md b/.github/ISSUE_TEMPLATE/technical_bug_report.md new file mode 100644 index 000000000..60f209c29 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/technical_bug_report.md @@ -0,0 +1,34 @@ +--- +name: Report a code-level technical issue +about: Create a report to help us improve, with code-level/engineering specific concerns +title: '' +type: Bug +assignees: '' + +--- + +[//]: # (For feature requests and bug reports not specifically concerning code, please use https://forum.inaturalist.org/c/bug-reports. To request a feature, use https://forum.inaturalist.org/c/feature-requests. To ask a technical question, use https://github.com/inaturalist/inaturalist/discussions. To report a security vulnerability, email help+security@inaturalist.org) + +**Describe the bug** +A clear and concise description of what the bug is, preferably with citations to the relevant code in this github repo. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Tap on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Context (please complete the following information):** + - Device: [e.g. iPhone 16] + - OS: [e.g. iOS 26.5] + - App version: [e.g. 1.0.20] + +**Additional context** +Add any other context about the problem here. \ No newline at end of file diff --git a/.github/workflows/crowdin-pull.yml b/.github/workflows/crowdin-pull.yml index 9a0e73f80..f43e1cecc 100644 --- a/.github/workflows/crowdin-pull.yml +++ b/.github/workflows/crowdin-pull.yml @@ -27,7 +27,8 @@ jobs: - name: Install Node.js, NPM and Yarn uses: actions/setup-node@v6 with: - node-version: 22 + node-version-file: '.nvmrc' + cache: 'npm' - name: Cache node modules uses: actions/cache@v5 diff --git a/.github/workflows/e2e_android.new.yml b/.github/workflows/e2e_android.new.yml deleted file mode 100644 index 534dcd7ba..000000000 --- a/.github/workflows/e2e_android.new.yml +++ /dev/null @@ -1,208 +0,0 @@ -name: e2e-Android -permissions: - contents: read -on: - workflow_dispatch: - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - build: - # 4-core Ubunutu GitHub Larger Runner - # https://docs.github.com/en/enterprise-cloud@latest/billing/reference/actions-runner-pricing#x64-powered-larger-runners - runs-on: ubuntu-24.04-m - - steps: - - name: Check out Git repository - uses: actions/checkout@v6 - - # Generate the secret files needed for a release build - - name: Create .env file - env: - OAUTH_CLIENT_ID: ${{ secrets.OAUTH_CLIENT_ID }} - OAUTH_CLIENT_SECRET: ${{ secrets.OAUTH_CLIENT_SECRET }} - E2E_TEST_USERNAME: ${{ secrets.E2E_TEST_USERNAME }} - E2E_TEST_PASSWORD: ${{ secrets.E2E_TEST_PASSWORD }} - JWT_ANONYMOUS_API_SECRET: ${{ secrets.JWT_ANONYMOUS_API_SECRET }} - GMAPS_API_KEY: ${{ secrets.GMAPS_API_KEY }} - run: printf 'API_URL=https://stagingapi.inaturalist.org/v2\nOAUTH_API_URL=https://staging.inaturalist.org\nJWT_ANONYMOUS_API_SECRET=%s\nOAUTH_CLIENT_ID=%s\nOAUTH_CLIENT_SECRET=%s\nE2E_TEST_USERNAME=%s\nE2E_TEST_PASSWORD=%s\nGMAPS_API_KEY=%s\nANDROID_MODEL_FILE_NAME=INatVision_Small_2_fact256_8bit.tflite\nANDROID_TAXONOMY_FILE_NAME=taxonomy.csv\nANDROID_GEOMODEL_FILE_NAME=INatGeomodel_Small_2_8bit.tflite\nIOS_MODEL_FILE_NAME=INatVision_Small_2_fact256_8bit.mlmodel\nIOS_TAXONOMY_FILE_NAME=taxonomy.json\nIOS_GEOMODEL_FILE_NAME=INatGeomodel_Small_2_8bit.mlmodel\nCV_MODEL_VERSION=small_2\n' "$JWT_ANONYMOUS_API_SECRET" "$OAUTH_CLIENT_ID" "$OAUTH_CLIENT_SECRET" "$E2E_TEST_USERNAME" "$E2E_TEST_PASSWORD" "$GMAPS_API_KEY" > .env - - - name: Add secrets to google-services.json - env: - FIREBASE_PROJECT_NUMBER: ${{ secrets.FIREBASE_PROJECT_NUMBER }} - FIREBASE_PROJECT_ID: ${{ secrets.FIREBASE_PROJECT_ID }} - FIREBASE_STORAGE_BUCKET: ${{ secrets.FIREBASE_STORAGE_BUCKET }} - FIREBASE_STAGING_GOOGLE_APP_ID: ${{ secrets.FIREBASE_STAGING_GOOGLE_APP_ID }} - FIREBASE_STAGING_PACKAGE_NAME: ${{ secrets.FIREBASE_STAGING_PACKAGE_NAME }} - FIREBASE_STAGING_API_KEY: ${{ secrets.FIREBASE_STAGING_API_KEY }} - run: | - cp android/app/google-services.example.json android/app/google-services.json - sed -i "s/your_project_number/${FIREBASE_PROJECT_NUMBER//\//\\/}/g" "android/app/google-services.json" - sed -i "s/your_project_id/${FIREBASE_PROJECT_ID//\//\\/}/g" "android/app/google-services.json" - sed -i "s/your_storage_bucket/${FIREBASE_STORAGE_BUCKET//\//\\/}/g" "android/app/google-services.json" - sed -i "s/your_mobilesdk_app_id/${FIREBASE_STAGING_GOOGLE_APP_ID//\//\\/}/g" "android/app/google-services.json" - sed -i "s/your_package_name/${FIREBASE_STAGING_PACKAGE_NAME//\//\\/}/g" "android/app/google-services.json" - sed -i "s/your_current_key/${FIREBASE_STAGING_API_KEY//\//\\/}/g" "android/app/google-services.json" - - - name: Create keystore.properties file - env: - ANDROID_KEY_STORE_PASSWORD: ${{ secrets.ANDROID_KEY_STORE_PASSWORD }} - ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} - ANDROID_ALIAS: ${{ secrets.ANDROID_ALIAS }} - run: printf 'storePassword=%s\nkeyPassword=%s\nkeyAlias=%s\nstoreFile=release.keystore' "$ANDROID_KEY_STORE_PASSWORD" "$ANDROID_KEY_PASSWORD" "$ANDROID_ALIAS" > android/keystore.properties - - - name: Generate release keystore - env: - ANDROID_ALIAS: ${{ secrets.ANDROID_ALIAS }} - ANDROID_KEY_STORE_PASSWORD: ${{ secrets.ANDROID_KEY_STORE_PASSWORD }} - ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} - run: | - keytool -genkeypair -v -noprompt -storetype PKCS12 -keystore release.keystore -alias "$ANDROID_ALIAS" -keyalg RSA -keysize 2048 -validity 10000 -storepass "$ANDROID_KEY_STORE_PASSWORD" -keypass "$ANDROID_KEY_PASSWORD" -dname "CN=mqttserver.ibm.com, OU=ID, O=IBM, L=Hursley, S=Hants, C=GB" - - - name: Move keystore - run: mv release.keystore android/app/release.keystore - - - uses: actions/setup-node@v6 - with: - node-version-file: '.nvmrc' - cache: 'npm' - - - uses: actions/setup-java@v5 - with: - distribution: 'zulu' - java-version: '17' - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v5 - with: - gradle-version: '8.14.1' - - - name: Install JS dependencies - run: | - npm install - - - name: Download the small example cv and geomodel - run: | - npm run add-example-model -- -f=main - - - name: Android Build - run: | - cd android - # for the CI build, we can just target the x86 build for the emulator - # also, we can exclude linting tasks - ./gradlew build -PreactNativeArchitectures=x86 -x lint -x lintVitalRelease - - - name: Upload APK - uses: actions/upload-artifact@v6 - with: - name: release-apk - # note: clarifying because this is different from iOS: - # {myBuild}.apk is a single file so `release-apk` points to a single file - # in contrast, iOS's .ipa is actually a _directory_ - path: android/app/build/outputs/apk/release/*-release.apk - - test: - # 4-core Ubunutu GitHub Larger Runner - # https://docs.github.com/en/enterprise-cloud@latest/billing/reference/actions-runner-pricing#x64-powered-larger-runners - # `cores` setting for emulator actions should be updated to reflect changes to this - runs-on: ubuntu-24.04-m - needs: build - - steps: - # note: this step requires checkout for the test flows, but does _not_ require npm install w/ Maestro - - uses: actions/checkout@v6 - - - name: Download APK - uses: actions/download-artifact@v7 - with: - name: release-apk - # resulting file structure: $GITHUB_HOME/e2e-build/{myBuild}.apk - path: e2e-build - - - name: Install Maestro - run: | - export MAESTRO_VERSION="2.0.8"; curl -Ls "https://get.maestro.mobile.dev" | bash - echo "$HOME/.maestro/bin" >> "$GITHUB_PATH" - - # These KVM settings are in support of the android-emulator-runner action that takes advantage of them - # Further reading: - # - https://github.blog/changelog/2023-02-23-hardware-accelerated-android-virtualization-on-actions-windows-and-linux-larger-hosted-runners/ - # - https://github.com/reactivecircus/android-emulator-runner/tree/v2/?tab=readme-ov-file#github-action---android-emulator-runner - - - name: Enable KVM - run: | - echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules - sudo udevadm control --reload-rules - sudo udevadm trigger --name-match=kvm - - # AVD Cache: we can reuse a previously-created AVD to save time and make the test-run start step more dependable - # both android-emulator-runner steps should have the same image config for cores, api-level, target - - name: Attempt to restore AVD cache - uses: actions/cache/restore@v5 - id: avd-cache-restore - with: - path: | - ~/.android/avd/* - ~/.android/adb* - key: avd-29 - - name: Create AVD and generate snapshot for caching - if: steps.avd-cache-restore.outputs.cache-hit != 'true' - uses: reactivecircus/android-emulator-runner@v2 - with: - cores: 4 - api-level: 29 - target: google_apis - force-avd-creation: false - emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none - disable-animations: false - script: echo "Generated AVD snapshot for caching." - - name: Save AVD cache - if: steps.avd-cache-restore.outputs.cache-hit != 'true' - uses: actions/cache/save@v5 - with: - path: | - ~/.android/avd/* - ~/.android/adb* - key: avd-29 - - - name: run tests - uses: reactivecircus/android-emulator-runner@v2 - env: - MAESTRO_DRIVER_STARTUP_TIMEOUT: 60000 - MAESTRO_CLI_NO_ANALYTICS: 1 - # custom ENV var to drive recordings within test flows - # see README for details - MAESTRO_RECORD: true - with: - cores: 4 - api-level: 29 - target: google_apis - force-avd-creation: false - emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none - disable-animations: true - script: | - adb install -r e2e-build/*.apk - # single exemplary "smoketest" flow for now - maestro test --no-ansi e2e/maestro/android/signedOut.yaml - - - name: Upload test video - uses: actions/upload-artifact@v6 - if: ${{ success() || failure() }} - with: - # single exemplary flow artifact for now, generated by MAESTRO_RECORD configuration - path: signedOut.mp4 - name: Android - - notify: - name: Notify Slack - needs: test - if: ${{ success() || failure() }} - runs-on: macos-latest - steps: - - uses: iRoachie/slack-github-actions@v2.3.0 - if: env.SLACK_WEBHOOK_URL != null - env: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_BUILDS_WEBHOOK_URL }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/e2e_android.yml b/.github/workflows/e2e_android.yml index 185f94eed..1b0743158 100644 --- a/.github/workflows/e2e_android.yml +++ b/.github/workflows/e2e_android.yml @@ -1,85 +1,26 @@ -name: e2e-Android-old +name: e2e-Android +permissions: + contents: read on: workflow_dispatch: + pull_request: + push: + branches: + - 'main' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true - -jobs: - checksecret: - name: check for oauth client - runs-on: macos-latest - outputs: - is_SECRETS_PRESENT_set: ${{ steps.checksecret_job.outputs.is_SECRETS_PRESENT_set }} - steps: - - name: Check whether unity activation requests should be done - id: checksecret_job - env: - SECRETS_PRESENT: ${{ secrets.OAUTH_CLIENT_SECRET }} - run: | - echo "is_SECRETS_PRESENT_set: ${{ env.SECRETS_PRESENT != '' }}" - echo "::set-output name=is_SECRETS_PRESENT_set::${{ env.SECRETS_PRESENT != '' }}" - test: - needs: checksecret - if: needs.checksecret.outputs.is_SECRETS_PRESENT_set == 'true' - runs-on: macos-latest - # Kill the task if not finished after 60 minutes - timeout-minutes: 60 +jobs: + build: + # 4-core Ubunutu GitHub Larger Runner + # https://docs.github.com/en/enterprise-cloud@latest/billing/reference/actions-runner-pricing#x64-powered-larger-runners + runs-on: ubuntu-24.04-m steps: - name: Check out Git repository uses: actions/checkout@v6 - with: - fetch-depth: 1 - - - name: Install Node.js, NPM and Yarn - uses: actions/setup-node@v6 - with: - node-version: 22 - - # Use the Android command line tools to download an AOSP emulator image, and setup new avd - # The name of the device for testing has to be the same as on the .detoxrc.js file (even if it is not a Pixel) - # The mac-os latest runner has 3 different versions of Java pre-installed (8,11,17), and there were errors when setting to use either 11 or 17 explicitly here - # I am assuming (but haven't tested) it uses 8 and then this step works - - name: Download Android Emulator Image - run: | - echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --install "system-images;android-31;default;x86_64" - echo "no" | $ANDROID_HOME/tools/bin/avdmanager create avd --force --name Pixel_5_API_31_AOSP --device "Nexus 5X" -k 'system-images;android-31;default;x86_64' - $ANDROID_HOME/emulator/emulator -list-avds - - - name: Cache node modules - uses: actions/cache@v5 - id: cache - with: - path: node_modules - key: node-modules-${{ hashFiles('**/package-lock.json') }} - - - name: Rebuild detox from cache - if: steps.cache.outputs.cache-hit == 'true' - # Currently, (Detox 20) those two commands are macOS only - run: npx detox clean-framework-cache && npx detox build-framework-cache - - # supposedly our current cache includes native modules like Realm - # that have compiled binaries specific to the environment where they were installed - # which might not be the same as the github actions environment - # so we need to rebuild them - - name: Rebuild native modules - if: steps.cache.outputs.cache-hit == 'true' - run: npm rebuild - - - name: Install Dependencies - if: steps.cache.outputs.cache-hit != 'true' - run: npm install - - # We need these files to be present in the correct location for the build to succeed. - # TODO: this might potentially break the build if there are no actual keys in the example files - # it did so on iOS. - - name: Create google-services.json files from example - run: | - cp android/app/google-services.example.json android/app/src/debug/google-services.json - cp android/app/google-services.example.json android/app/src/release/google-services.json # Generate the secret files needed for a release build - name: Create .env file @@ -91,12 +32,31 @@ jobs: JWT_ANONYMOUS_API_SECRET: ${{ secrets.JWT_ANONYMOUS_API_SECRET }} GMAPS_API_KEY: ${{ secrets.GMAPS_API_KEY }} run: printf 'API_URL=https://stagingapi.inaturalist.org/v2\nOAUTH_API_URL=https://staging.inaturalist.org\nJWT_ANONYMOUS_API_SECRET=%s\nOAUTH_CLIENT_ID=%s\nOAUTH_CLIENT_SECRET=%s\nE2E_TEST_USERNAME=%s\nE2E_TEST_PASSWORD=%s\nGMAPS_API_KEY=%s\nANDROID_MODEL_FILE_NAME=INatVision_Small_2_fact256_8bit.tflite\nANDROID_TAXONOMY_FILE_NAME=taxonomy.csv\nANDROID_GEOMODEL_FILE_NAME=INatGeomodel_Small_2_8bit.tflite\nIOS_MODEL_FILE_NAME=INatVision_Small_2_fact256_8bit.mlmodel\nIOS_TAXONOMY_FILE_NAME=taxonomy.json\nIOS_GEOMODEL_FILE_NAME=INatGeomodel_Small_2_8bit.mlmodel\nCV_MODEL_VERSION=small_2\n' "$JWT_ANONYMOUS_API_SECRET" "$OAUTH_CLIENT_ID" "$OAUTH_CLIENT_SECRET" "$E2E_TEST_USERNAME" "$E2E_TEST_PASSWORD" "$GMAPS_API_KEY" > .env + + - name: Add secrets to google-services.json + env: + FIREBASE_PROJECT_NUMBER: ${{ secrets.FIREBASE_PROJECT_NUMBER }} + FIREBASE_PROJECT_ID: ${{ secrets.FIREBASE_PROJECT_ID }} + FIREBASE_STORAGE_BUCKET: ${{ secrets.FIREBASE_STORAGE_BUCKET }} + FIREBASE_STAGING_GOOGLE_APP_ID: ${{ secrets.FIREBASE_STAGING_GOOGLE_APP_ID }} + FIREBASE_STAGING_PACKAGE_NAME: ${{ secrets.FIREBASE_STAGING_PACKAGE_NAME }} + FIREBASE_STAGING_API_KEY: ${{ secrets.FIREBASE_STAGING_API_KEY }} + run: | + cp android/app/google-services.example.json android/app/google-services.json + sed -i "s/your_project_number/${FIREBASE_PROJECT_NUMBER//\//\\/}/g" "android/app/google-services.json" + sed -i "s/your_project_id/${FIREBASE_PROJECT_ID//\//\\/}/g" "android/app/google-services.json" + sed -i "s/your_storage_bucket/${FIREBASE_STORAGE_BUCKET//\//\\/}/g" "android/app/google-services.json" + sed -i "s/your_mobilesdk_app_id/${FIREBASE_STAGING_GOOGLE_APP_ID//\//\\/}/g" "android/app/google-services.json" + sed -i "s/your_package_name/${FIREBASE_STAGING_PACKAGE_NAME//\//\\/}/g" "android/app/google-services.json" + sed -i "s/your_current_key/${FIREBASE_STAGING_API_KEY//\//\\/}/g" "android/app/google-services.json" + - name: Create keystore.properties file env: ANDROID_KEY_STORE_PASSWORD: ${{ secrets.ANDROID_KEY_STORE_PASSWORD }} ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} ANDROID_ALIAS: ${{ secrets.ANDROID_ALIAS }} run: printf 'storePassword=%s\nkeyPassword=%s\nkeyAlias=%s\nstoreFile=release.keystore' "$ANDROID_KEY_STORE_PASSWORD" "$ANDROID_KEY_PASSWORD" "$ANDROID_ALIAS" > android/keystore.properties + - name: Generate release keystore env: ANDROID_ALIAS: ${{ secrets.ANDROID_ALIAS }} @@ -104,55 +64,226 @@ jobs: ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} run: | keytool -genkeypair -v -noprompt -storetype PKCS12 -keystore release.keystore -alias "$ANDROID_ALIAS" -keyalg RSA -keysize 2048 -validity 10000 -storepass "$ANDROID_KEY_STORE_PASSWORD" -keypass "$ANDROID_KEY_PASSWORD" -dname "CN=mqttserver.ibm.com, OU=ID, O=IBM, L=Hursley, S=Hants, C=GB" + - name: Move keystore run: mv release.keystore android/app/release.keystore - # Download the example model otherwise an error alert will be shown on app start, requires .env - - name: Download the small example cv and geomodel - run: npm run add-example-model -- -f=main - - # Macos-latest runner has 3 Java versions pre-installed, if not specified as here, the build step errors with requiring at least Java 11 or higher - # So, this step is needed for the apk build step, but somehow this is breaking emulator setup, so it is placed here - - name: Set up JDK 11 - uses: actions/setup-java@v4 + - uses: actions/setup-node@v6 + with: + node-version-file: '.nvmrc' + cache: 'npm' + + - uses: actions/setup-java@v5 with: - java-version: '11' distribution: 'zulu' + java-version: '17' - # This is by far the longest step in this job, currently we are building the apk everytime, maybe there should be a more specific trigger for the entire job - - name: Build for detox - run: npm run e2e:build:android - - # Starts the avd previously set-up by name - - name: Android Emulator - timeout-minutes: 10 - continue-on-error: true - run: | - echo "Starting emulator" - nohup $ANDROID_HOME/emulator/emulator -avd Pixel_5_API_31_AOSP -no-audio -no-snapshot -no-window -no-boot-anim -timezone America/Los_Angeles & - $ANDROID_HOME/platform-tools/adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do sleep 1; done; input keyevent 82' - $ANDROID_HOME/platform-tools/adb devices - $ANDROID_HOME/platform-tools/adb emu geo fix -121.45356 46.51119 4392 12 - echo "Emulator started" - - - name: Ensure servers are running - run: | - # is rails running? - curl -I --fail "https://staging.inaturalist.org/ping" - # is node running & is ES working? - curl -I --fail "https://stagingapi.inaturalist.org/v2/taxa" - - # Start the Android e2e tests with extensive logging and screen captures for failing tests - - name: Android Detox - run: npm run e2e:test:android -- --take-screenshots failing --record-videos failing -l debug - - # The artifacts for the failing tests are available for download on github.com on the page of the individual actions run - - name: Store Detox artifacts on test failure - uses: actions/upload-artifact@v6 - if: failure() + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v5 with: - name: detox-artifacts - path: artifacts + gradle-version: '9.0.0' + + - name: Install JS dependencies + run: | + npm install + + - name: Download the small example cv and geomodel + run: | + npm run add-example-model -- -f=main + + # https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#setting-an-environment-variable + # This will be available for all subsequent steps + - name: Set MOCK_MODE to e2e + run: echo "MOCK_MODE=e2e" >> "$GITHUB_ENV" + + - name: Android Build + run: | + cd android + ./gradlew assembleRelease assembleAndroidTest -DtestBuildType=release -PreactNativeArchitectures=x86_64 + + - name: Upload APK + uses: actions/upload-artifact@v6 + with: + name: release-apk + path: android/app/build/outputs/apk/release/*-release.apk + + - name: Upload Test Binary APK + uses: actions/upload-artifact@v6 + with: + name: release-androidTest-apk + path: android/app/build/outputs/apk/androidTest/release/*-release-androidTest.apk + + test: + # 4-core Ubunutu GitHub Larger Runner + # https://docs.github.com/en/enterprise-cloud@latest/billing/reference/actions-runner-pricing#x64-powered-larger-runners + # `cores` setting for emulator actions should be updated to reflect changes to this + runs-on: ubuntu-24.04-m + needs: build + + steps: + - name: Check out Git repository + uses: actions/checkout@v6 + with: + fetch-depth: 1 + + - name: Download Android Detox app APK + uses: actions/download-artifact@v7 + with: + name: release-apk + path: android/app/build/outputs/apk/release + + - name: Download Test Binary APK + uses: actions/download-artifact@v7 + with: + name: release-androidTest-apk + path: android/app/build/outputs/apk/androidTest/release + + - name: Install Node.js, NPM and Yarn + uses: actions/setup-node@v6 + with: + node-version-file: '.nvmrc' + cache: 'npm' + + - name: Cache node modules + uses: actions/cache@v5 + id: cache + with: + path: node_modules + key: node-modules-${{ hashFiles('**/package-lock.json') }} + + # supposedly our current cache includes native modules like Realm + # that have compiled binaries specific to the environment where they were installed + # which might not be the same as the github actions environment + # so we need to rebuild them + - name: Rebuild native modules + if: steps.cache.outputs.cache-hit == 'true' + run: npm rebuild + + - name: Install Dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: npm install + + # https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#setting-an-environment-variable + # This will be available for all subsequent steps + - name: Set MOCK_MODE to e2e + run: echo "MOCK_MODE=e2e" >> "$GITHUB_ENV" + + # Generate the secret files needed for a release build + - name: Create .env file + env: + OAUTH_CLIENT_ID: ${{ secrets.OAUTH_CLIENT_ID }} + OAUTH_CLIENT_SECRET: ${{ secrets.OAUTH_CLIENT_SECRET }} + E2E_TEST_USERNAME: ${{ secrets.E2E_TEST_USERNAME }} + E2E_TEST_PASSWORD: ${{ secrets.E2E_TEST_PASSWORD }} + JWT_ANONYMOUS_API_SECRET: ${{ secrets.JWT_ANONYMOUS_API_SECRET }} + run: | + printf 'API_URL=https://stagingapi.inaturalist.org/v2\nOAUTH_API_URL=https://staging.inaturalist.org\nJWT_ANONYMOUS_API_SECRET=%s\nOAUTH_CLIENT_ID=%s\nOAUTH_CLIENT_SECRET=%s\nE2E_TEST_USERNAME=%s\nE2E_TEST_PASSWORD=%s\nGMAPS_API_KEY=%s\nANDROID_MODEL_FILE_NAME=INatVision_Small_2_fact256_8bit.tflite\nANDROID_TAXONOMY_FILE_NAME=taxonomy.csv\nANDROID_GEOMODEL_FILE_NAME=INatGeomodel_Small_2_8bit.tflite\nIOS_MODEL_FILE_NAME=INatVision_Small_2_fact256_8bit.mlmodel\nIOS_TAXONOMY_FILE_NAME=taxonomy.json\nIOS_GEOMODEL_FILE_NAME=INatGeomodel_Small_2_8bit.mlmodel\nCV_MODEL_VERSION=small_2\n' \ + "$JWT_ANONYMOUS_API_SECRET" \ + "$OAUTH_CLIENT_ID" \ + "$OAUTH_CLIENT_SECRET" \ + "$E2E_TEST_USERNAME" \ + "$E2E_TEST_PASSWORD" \ + "$GMAPS_API_KEY" > .env + + # These KVM settings are in support of the android-emulator-runner action that takes advantage of them + # Further reading: + # - https://github.blog/changelog/2023-02-23-hardware-accelerated-android-virtualization-on-actions-windows-and-linux-larger-hosted-runners/ + # - https://github.com/reactivecircus/android-emulator-runner/tree/v2/?tab=readme-ov-file#github-action---android-emulator-runner + + - name: Enable KVM + run: | + echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules + sudo udevadm control --reload-rules + sudo udevadm trigger --name-match=kvm + + # AVD Cache: we can reuse a previously-created AVD to save time and make the test-run start step more dependable + # both android-emulator-runner steps should have the same image config for cores, api-level, target + - name: Attempt to restore AVD cache + uses: actions/cache/restore@v5 + id: avd-cache-restore + with: + path: | + ~/.android/avd/* + ~/.android/adb* + key: avd-34-aosp + - name: Create AVD and generate snapshot for caching + if: steps.avd-cache-restore.outputs.cache-hit != 'true' + uses: reactivecircus/android-emulator-runner@v2 + with: + cores: 4 + api-level: 34 + target: default + arch: x86_64 + profile: pixel_5 + avd-name: Pixel_5_API_34_AOSP + force-avd-creation: false + emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none + disable-animations: false + script: echo "Generated AVD snapshot for caching." + + - name: Save AVD cache + if: steps.avd-cache-restore.outputs.cache-hit != 'true' + uses: actions/cache/save@v5 + with: + path: | + ~/.android/avd/* + ~/.android/adb* + key: avd-34-aosp + + - name: Ensure servers are running + id: status_check + run: | + # is rails running? + curl -I --fail "https://staging.inaturalist.org/ping" + # is node running & is ES working? + curl -I --fail "https://stagingapi.inaturalist.org/v2/taxa" + + - name: Run e2e tests + uses: reactivecircus/android-emulator-runner@v2 + # don't mark job as error so that retries so that we can rely on the retry to succeed and mark job & workflow green + continue-on-error: true + id: first_test_run + with: + cores: 4 + api-level: 34 + target: default + arch: x86_64 + profile: pixel_5 + avd-name: Pixel_5_API_34_AOSP + force-avd-creation: false + emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none + disable-animations: true + script: | + npm run e2e:android:test -p e2e/signedOut.e2e.js e2e/aiCamera.e2e.js + + - name: Run e2e test (retry, with logs) + uses: reactivecircus/android-emulator-runner@v2 + # if first_test_run fails, but we `continue-on-error`, failure() is false. so we need to check it's specific _outcome_ + if: ${{ steps.first_test_run.outcome == 'failure' }} + with: + cores: 4 + api-level: 34 + target: default + arch: x86_64 + profile: pixel_5 + avd-name: Pixel_5_API_34_AOSP + force-avd-creation: false + emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none + disable-animations: true + script: | + # provide more debugging context on retry failure + # we're explicitly not using `detox test --retries` because we want to run them w/ different options + npx detox test --configuration android.release --take-screenshots failing --record-videos failing --record-logs all -l trace e2e/signedOut.e2e.js e2e/aiCamera.e2e.js + + + - name: Store Detox artifacts on test failure + uses: actions/upload-artifact@v6 + # don't run this if it's status check that failed or if our first test run passes (no first_test_run check needed) + if: ${{ failure() && steps.status_check.outcome != 'failure' }} + with: + name: detox-artifacts + path: artifacts + retention-days: 5 notify: name: Notify Slack diff --git a/.github/workflows/e2e_ios.yml b/.github/workflows/e2e_ios.yml index e0c3f641f..fd71e6eae 100644 --- a/.github/workflows/e2e_ios.yml +++ b/.github/workflows/e2e_ios.yml @@ -16,7 +16,7 @@ concurrency: jobs: checksecret: name: check for oauth client - runs-on: macos-15 + runs-on: macos-26 outputs: is_SECRETS_PRESENT_set: ${{ steps.checksecret_job.outputs.is_SECRETS_PRESENT_set }} steps: @@ -31,7 +31,7 @@ jobs: build: needs: checksecret if: needs.checksecret.outputs.is_SECRETS_PRESENT_set == 'true' - runs-on: macos-15 + runs-on: macos-26 # Kill the task if not finished after 120 minutes timeout-minutes: 120 @@ -44,12 +44,20 @@ jobs: - name: Install Node.js, NPM and Yarn uses: actions/setup-node@v6 with: - node-version: 22 + node-version-file: '.nvmrc' + cache: 'npm' - name: Setup Ruby version according to .ruby-version with cached gems uses: ruby/setup-ruby@v1 with: - bundler-cache: true + bundler-cache: true + + # Required workaround for Firebase & XCode >26.0.1 + # https://github.com/actions/runner-images/issues/13135#issuecomment-3397914993 + - name: Set Xcode Toolchain + shell: bash + run: | + echo "TOOLCHAINS=com.apple.dt.toolchain.XcodeDefault" >> $GITHUB_ENV - name: Cache node modules uses: actions/cache@v5 @@ -137,7 +145,7 @@ jobs: test: needs: build - runs-on: macos-15 + runs-on: macos-26 # Kill the task if not finished after 120 minutes timeout-minutes: 120 @@ -156,7 +164,8 @@ jobs: - name: Install Node.js, NPM and Yarn uses: actions/setup-node@v6 with: - node-version: 22 + node-version-file: '.nvmrc' + cache: 'npm' - name: Cache node modules uses: actions/cache@v5 @@ -249,7 +258,7 @@ jobs: name: Notify Slack needs: test if: ${{ success() || failure() }} - runs-on: macos-15 + runs-on: macos-26 steps: - uses: iRoachie/slack-github-actions@v2.3.0 if: env.SLACK_WEBHOOK_URL != null diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 014c261ca..7cf04035e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,7 +21,8 @@ jobs: - name: Install Node.js, NPM and Yarn uses: actions/setup-node@v6 with: - node-version: 22 + node-version-file: '.nvmrc' + cache: 'npm' - name: Cache node modules uses: actions/cache@v5 diff --git a/.gitignore b/.gitignore index 8a2a90116..fdc770e2f 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,8 @@ DerivedData *.hmap *.ipa *.xcuserstate +ios/license_plist.yml +ios/Settings.bundle # Might be used to customize further the path to node that xcode uses, see .xcode.env for our version controlled file **/.xcode.env.local @@ -36,6 +38,7 @@ local.properties *.keystore !debug.keystore .kotlin/ +android/config # node.js # diff --git a/.nvmrc b/.nvmrc index 89b93fd74..eefb690f4 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -22.18.0 \ No newline at end of file +24.15.0 \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 307b011f2..ef05e8697 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,5 +1,47 @@ # Contribution Guidelines for iNaturalistReactNative -Welcome! We're excited that you're interested in contributing to the iNaturalist React Native mobile application. Below you'll find some guidelines that will help you contribute to our project, whether you're on staff or a volunteer. + +## About this codebase + +iNaturalist's code is open source primarily for **transparency** — we want our community to be able to see how the platform works. Unlike many open source projects, we don't maintain this codebase as a general-purpose tool for forking or customization. We build it with one deployment in mind: iNaturalist.org and the iNaturalist mobile apps. + +We will probably close pull requests that don't address open issues. Again, if you want to change functionality, the discussion should start in the [Forum](https://forum.inaturalist.org/), and if staff agree something should change, we'll make an issue, label it, and then you can work on it. + +We're a small team. Our capacity to review and integrate external contributions is limited, and we can't commit to responding to every inquiry or pull request. + +## Bugs and feature requests + +**Please don't open GitHub issues for user-facing bug reports or feature requests.** + +We track our work internally and triage inbound requests through the [iNaturalist Forum](https://forum.inaturalist.org). Filing a GitHub issue is unlikely to result in action, and you're much more likely to get a response — and to hear from other community members with similar experiences — on the Forum. + +- **Bug reports:** [forum.inaturalist.org](https://forum.inaturalist.org) → Bug Reports category +- **Feature requests:** [forum.inaturalist.org](https://forum.inaturalist.org) → Feature Requests category + +If you've found a problem in the code, please supply detailed reproduction conditions, cite line numbers, include exceptions / stack traces, etc. If you can't supply this kind of information, we will probably close your issue and suggest you post to the forum links above. + +# Reporting Security Issues + +You should report security issues that require confidential communication to [help+security@inaturalist.org](mailto:help+security@inaturalist.org). We do not offer any rewards or bounties for reporting security issues, though we may offer to list your name and URL here if we act on your report. + +--- + +## Translations + +Translations are handled separately through [Crowdin](https://crowdin.com/project/inaturalistios), not through pull requests. If you'd like to help translate iNaturalist into another language, that's the place to start — and it's one of the most impactful ways to contribute to the project. + +--- + +## Code of conduct + +All contributors are expected to follow the [iNaturalist Community Guidelines](https://www.inaturalist.org/pages/community+guidelines), or at least the parts that aren't specific to using iNaturalist as a naturalist. + +--- + +## Questions about the code + +If you have a technical question about how something works — you're building an integration, you're curious about an architectural decision, or you've encountered something confusing — you can open a [GitHub Discussion](https://github.com/inaturalist/iNaturalistReactNative/discussions/3477). We can't promise a quick response, but discussions are more likely to get attention than issues, and they benefit others who have the same question. + +## Code contributions Please keep the following in mind: @@ -50,12 +92,4 @@ Please follow this guidance when committing to the main branch, including merge ## Pull Request Guidelines - Give your pull request a **clear and descriptive title** (e.g. "Remove predictions state on blur and focus in ARCamera") and a comment that includes a reference to the issue number (e.g. "Closes #123" or "Partially addresses #123" in case of an open issue) and maybe a detailed description of the changes you've made -- Please do not refer to the issue number in the PR title. Do that in the comment / body. -- If you're adding new features or functionality differing from the description in the issue, please provide a clear explanation of how this work differs from what the issue describes -- Feel free to ask any questions or raise any concerns you have - - -## Issues and Bugs -If you find an issue or bug in our application, please report it by opening a new issue in the repository. Please include a clear and detailed description of the issue, steps to reproduce the issue, and any relevant screenshots or error messages. - -Thank you for contributing to our React Native mobile application! +- Don't include new features or functionality differing from the description in the issue. \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index 4d69eddcf..9b54ac9c9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -24,8 +24,8 @@ GEM ast (2.4.3) atomos (0.1.3) aws-eventstream (1.4.0) - aws-partitions (1.1246.0) - aws-sdk-core (3.246.0) + aws-partitions (1.1259.0) + aws-sdk-core (3.251.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.992.0) aws-sigv4 (~> 1.9) @@ -33,11 +33,11 @@ GEM bigdecimal jmespath (~> 1, >= 1.6.1) logger - aws-sdk-kms (1.124.0) - aws-sdk-core (~> 3, >= 3.244.0) + aws-sdk-kms (1.129.0) + aws-sdk-core (~> 3, >= 3.248.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.221.0) - aws-sdk-core (~> 3, >= 3.244.0) + aws-sdk-s3 (1.225.0) + aws-sdk-core (~> 3, >= 3.248.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) aws-sigv4 (1.12.1) @@ -132,7 +132,7 @@ GEM faraday_middleware (1.2.1) faraday (~> 1.0) fastimage (2.4.1) - fastlane (2.234.0) + fastlane (2.236.0) CFPropertyList (>= 2.3, < 5.0.0) abbrev (~> 0.1) addressable (>= 2.8, < 3.0.0) @@ -141,7 +141,7 @@ GEM babosa (>= 1.0.3, < 2.0.0) base64 (~> 0.2) benchmark (>= 0.1.0) - bundler (>= 1.17.3, < 5.0.0) + bundler (>= 2.4.0, < 5.0.0) colored (~> 1.2) commander (~> 4.6) csv (~> 3.3) @@ -156,14 +156,15 @@ GEM gh_inspector (>= 1.1.2, < 2.0.0) google-apis-androidpublisher_v3 (~> 0.3) google-apis-playcustomapp_v1 (~> 0.1) - google-cloud-env (>= 1.6.0, <= 2.1.1) + google-cloud-env (>= 1.6.0, < 2.3.0) google-cloud-storage (~> 1.31) highline (~> 2.0) http-cookie (~> 1.0.5) json (< 3.0.0) - jwt (>= 2.1.0, < 3) + jwt (>= 2.10.3, < 4) logger (>= 1.6, < 2.0) mini_magick (>= 4.9.4, < 5.0.0) + multi_json (~> 1.12) multipart-post (>= 2.0.0, < 3.0.0) mutex_m (~> 0.3) naturally (~> 2.2) @@ -188,7 +189,7 @@ GEM fourflusher (2.3.1) fuzzy_match (2.0.4) gh_inspector (1.1.3) - google-apis-androidpublisher_v3 (0.100.0) + google-apis-androidpublisher_v3 (0.102.0) google-apis-core (>= 0.15.0, < 2.a) google-apis-core (0.18.0) addressable (~> 2.5, >= 2.5.1) @@ -202,12 +203,13 @@ GEM google-apis-core (>= 0.15.0, < 2.a) google-apis-playcustomapp_v1 (0.17.0) google-apis-core (>= 0.15.0, < 2.a) - google-apis-storage_v1 (0.62.0) + google-apis-storage_v1 (0.63.0) google-apis-core (>= 0.15.0, < 2.a) google-cloud-core (1.8.0) google-cloud-env (>= 1.0, < 3.a) google-cloud-errors (~> 1.0) - google-cloud-env (2.1.1) + google-cloud-env (2.2.2) + base64 (~> 0.2) faraday (>= 1.0, < 3.a) google-cloud-errors (1.6.0) google-cloud-storage (1.60.0) @@ -219,12 +221,14 @@ GEM google-cloud-core (~> 1.6) googleauth (~> 1.9) mini_mime (~> 1.0) - googleauth (1.11.2) + google-logging-utils (0.2.0) + googleauth (1.17.0) faraday (>= 1.0, < 3.a) - google-cloud-env (~> 2.1) - jwt (>= 1.4, < 3.0) - multi_json (~> 1.11) + google-cloud-env (~> 2.2) + google-logging-utils (~> 0.1) + jwt (>= 1.4, < 4.0) os (>= 0.9, < 2.0) + pstore (~> 0.1) signet (>= 0.16, < 2.a) highline (2.0.3) http-cookie (1.0.8) @@ -234,8 +238,8 @@ GEM i18n (1.14.8) concurrent-ruby (~> 1.0) jmespath (1.6.2) - json (2.19.5) - jwt (2.10.2) + json (2.19.8) + jwt (3.2.0) base64 language_server-protocol (3.17.0.5) lint_roller (1.1.0) @@ -265,6 +269,7 @@ GEM racc plist (3.7.2) prism (1.9.0) + pstore (0.2.1) public_suffix (4.0.7) racc (1.8.1) rainbow (3.1.1) @@ -274,7 +279,7 @@ GEM declarative (< 0.1.0) trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) - retriable (3.4.1) + retriable (3.8.0) rexml (3.4.4) rouge (3.28.0) rubocop (1.86.1) @@ -297,11 +302,10 @@ GEM rubyzip (2.4.1) securerandom (0.4.1) security (0.1.5) - signet (0.21.0) + signet (0.22.0) addressable (~> 2.8) faraday (>= 0.17.5, < 3.a) jwt (>= 1.5, < 4.0) - multi_json (~> 1.10) simctl (1.6.10) CFPropertyList naturally diff --git a/README.md b/README.md index 2072f4e47..83f649d2e 100644 --- a/README.md +++ b/README.md @@ -334,7 +334,8 @@ fastlane prod ### Release Script -1. Ensure all tests are passing on the main branch +1. Build from the beta branch +1. Ensure all tests are passing on the beta branch 1. Review and resolve [security alerts](https://github.com/inaturalist/iNaturalistReactNative/security) 1. Manual testing 1. Install a "Release" build on an iOS device @@ -372,6 +373,7 @@ fastlane prod 1. Write release notes based on commits since the last release. Try to keep them brief but emphasize what's new and what's fixed. Just keep them in a text editor; you'll save them at a later step. 1. Edit `package.json` and update the `version` per semantic versioning rules: bump the patch version if the only changes were bug fixes, bump minor version if there were new features, and bump the major version if the app was completely re-written or can't import data from previous versions. 1. `npm install` to set the version in `package-lock.json` +1. `npm run legal-generate` to re-generate the licenses to show in the app (based on current dependencies) 1. Commit changes 1. `bundle exec fastlane tag` to create a tag and bump the build number. You'll be prompted to enter those release notes you wrote. (:wq to save and exit) 1. `bundle exec fastlane release` to build and push a release to Github diff --git a/android/app/build.gradle b/android/app/build.gradle index 1c7bc9c0a..573c78143 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -107,8 +107,8 @@ android { applicationId "org.inaturalist.iNaturalistMobile" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 212 - versionName "1.0.21" + versionCode 216 + versionName "1.0.23" manifestPlaceholders = [ GMAPS_API_KEY:project.env.get("GMAPS_API_KEY") ] // Detox Android setup testBuildType System.getProperty('testBuildType', 'debug') @@ -173,3 +173,10 @@ dependencies { implementation jscFlavor } } + +apply plugin: 'com.mikepenz.aboutlibraries.plugin' + +aboutLibraries { + configPath = "config" + prettyPrint = true +} diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 8f6da3bce..2bd75ee61 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -69,6 +69,7 @@ + diff --git a/android/build.gradle b/android/build.gradle index 7b946eddc..d0720c3de 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -14,10 +14,12 @@ buildscript { litertVersion = "1.4.0" } repositories { + maven { url = uri("https://plugins.gradle.org/m2") } google() mavenCentral() } dependencies { + classpath("com.mikepenz.aboutlibraries.plugin:aboutlibraries-plugin:11.6.3") classpath("com.android.tools.build:gradle") classpath("com.facebook.react:react-native-gradle-plugin") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") diff --git a/android/gradle.properties b/android/gradle.properties index 1eedbd45a..f8aedd24b 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -36,8 +36,8 @@ newArchEnabled=true # Use this property to enable or disable the Hermes JS engine. # 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=false +edgeToEdgeEnabled=true diff --git a/e2e/animal.jpg b/e2e/animal.jpg new file mode 100644 index 000000000..6eb33f12d Binary files /dev/null and b/e2e/animal.jpg differ diff --git a/e2e/helpers.js b/e2e/helpers.js index 1cc38454f..6045134e9 100644 --- a/e2e/helpers.js +++ b/e2e/helpers.js @@ -19,30 +19,22 @@ function execPromise( command ) { export async function iNatE2eBeforeAll( device ) { await resetUserForTesting(); - if ( device.getPlatform() === "android" ) { - await device.launchApp( { - newInstance: true, - permissions: { - location: "always", - camera: "YES", - medialibrary: "YES", - photos: "YES", - }, - } ); - // Disable animations for test stability - await execPromise( "adb shell settings put global window_animation_scale 0" ); - await execPromise( "adb shell settings put global transition_animation_scale 0" ); - await execPromise( "adb shell settings put global animator_duration_scale 0" ); + if ( device.getPlatform( ) === "android" ) { + // Push a test image into the app's external files directory so the mock + // camera can use it as a photo source (copyAssetsFileIOS is iOS-only). + // The directory is created by the app on first launch, so we ensure it + // exists before pushing. + await execPromise( + "adb shell mkdir -p /sdcard/Android/data/org.inaturalist.iNaturalistMobile/files/", + ); + await execPromise( + "adb push e2e/animal.jpg" + + " /sdcard/Android/data/org.inaturalist.iNaturalistMobile/files/e2e_test.jpg", + ); } } export async function iNatE2eBeforeEach( device ) { - // device.launchApp would be preferred for an app of our complexity. It does work locally - // for both, but on CI for Android it does not work. So we use reloadReactNative for Android. - if ( device.getPlatform() === "android" ) { - await device.reloadReactNative(); - return; - } const launchAppOptions = { newInstance: true, permissions: { @@ -61,19 +53,21 @@ export async function iNatE2eBeforeEach( device ) { // Try it one more time await device.launchApp( launchAppOptions ); } - // disable password autofill - execSync( - // eslint-disable-next-line max-len - `plutil -replace restrictedBool.allowPasswordAutoFill.value -bool NO ~/Library/Developer/CoreSimulator/Devices/${device.id}/data/Containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles/Library/ConfigurationProfiles/UserSettings.plist`, - ); - execSync( - // eslint-disable-next-line max-len - `plutil -replace restrictedBool.allowPasswordAutoFill.value -bool NO ~/Library/Developer/CoreSimulator/Devices/${device.id}/data/Library/UserConfigurationProfiles/EffectiveUserSettings.plist`, - ); - execSync( - // eslint-disable-next-line max-len - `plutil -replace restrictedBool.allowPasswordAutoFill.value -bool NO ~/Library/Developer/CoreSimulator/Devices/${device.id}/data/Library/UserConfigurationProfiles/PublicInfo/PublicEffectiveUserSettings.plist`, - ); + if ( device.getPlatform( ) === "ios" ) { + // disable password autofill + execSync( + // eslint-disable-next-line max-len + `plutil -replace restrictedBool.allowPasswordAutoFill.value -bool NO ~/Library/Developer/CoreSimulator/Devices/${device.id}/data/Containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles/Library/ConfigurationProfiles/UserSettings.plist`, + ); + execSync( + // eslint-disable-next-line max-len + `plutil -replace restrictedBool.allowPasswordAutoFill.value -bool NO ~/Library/Developer/CoreSimulator/Devices/${device.id}/data/Library/UserConfigurationProfiles/EffectiveUserSettings.plist`, + ); + execSync( + // eslint-disable-next-line max-len + `plutil -replace restrictedBool.allowPasswordAutoFill.value -bool NO ~/Library/Developer/CoreSimulator/Devices/${device.id}/data/Library/UserConfigurationProfiles/PublicInfo/PublicEffectiveUserSettings.plist`, + ); + } } async function getSimulatorId() { diff --git a/e2e/sharedFlows/signIn.js b/e2e/sharedFlows/signIn.js index 7a7f76986..ebf511463 100644 --- a/e2e/sharedFlows/signIn.js +++ b/e2e/sharedFlows/signIn.js @@ -34,6 +34,8 @@ export default async function signIn() { await expect( passwordInput ).toBeVisible(); await element( by.id( "Login.password" ) ).tap(); await element( by.id( "Login.password" ) ).typeText( Config.E2E_TEST_PASSWORD ); + // Tap container to dismiss keyboard + await element( by.id( "Login.container" ) ).tap(); const loginButton = element( by.id( "Login.loginButton" ) ); await expect( loginButton ).toBeVisible(); await element( by.id( "Login.loginButton" ) ).tap(); diff --git a/fastlane/metadata/android/af/full_description.txt b/fastlane/metadata/android/af/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/af/full_description.txt +++ b/fastlane/metadata/android/af/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/ar/full_description.txt b/fastlane/metadata/android/ar/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/ar/full_description.txt +++ b/fastlane/metadata/android/ar/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/be/full_description.txt b/fastlane/metadata/android/be/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/be/full_description.txt +++ b/fastlane/metadata/android/be/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/bg/full_description.txt b/fastlane/metadata/android/bg/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/bg/full_description.txt +++ b/fastlane/metadata/android/bg/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/ca/full_description.txt b/fastlane/metadata/android/ca/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/ca/full_description.txt +++ b/fastlane/metadata/android/ca/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/cs-CZ/full_description.txt b/fastlane/metadata/android/cs-CZ/full_description.txt index 02e3e018f..5a94bdf2e 100644 --- a/fastlane/metadata/android/cs-CZ/full_description.txt +++ b/fastlane/metadata/android/cs-CZ/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist je sociální síť pro sdílení informací o biologické rozmanitosti a ke vzájemné pomoci při poznávání přírody. Hlavním cílem je propojit lidi s přírodou a vedlejším cílem je získat z těchto osobních setkání vědecky cenné údaje o biologické rozmanitosti. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist vám pomůže identifikovat rostliny a zvířata s vizuálně podobnými návrhy a ověřování prostřednictvím specializovaných přispěvatelů. Spojte se s komunitou více než milionu vědců a přírodovědců, kteří vám mohou pomoci dozvědět se více o přírodě! Nahráním a sdílením svých pozorování vytvoříte cenná výzkumná data pro vědce, kteří se snaží lépe porozumět přírodě a chránit ji. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/da-DK/full_description.txt b/fastlane/metadata/android/da-DK/full_description.txt index bc1d18646..ae7d98770 100644 --- a/fastlane/metadata/android/da-DK/full_description.txt +++ b/fastlane/metadata/android/da-DK/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist er et socialt netværk til deling af biodiversitetsoplysninger for at hjælpe hinanden til viden om naturen. Det primære mål er at forbinde folk med naturen, det sekundære er at generere videnskabeligt værdifulde biodiversitetsdata fra disse personlige oplevelser. +Dine fotos af planter, dyr, svampe og meget mere kan hjælpe med at beskytte naturen verden over. iNaturalist er gratis, nonprofit og fællesskabsdrevet. -Man får med iNaturalist hjælp til at identificere planter og dyr med visuelt sammenfaldende forslag og bekræftelse fra dedikerede bidragsydere. Bliv forbundet med et fællesskab på flere end 1 million videnskabsfolk og naturelskere, som kan bidrage med mere viden om naturen! Ved at registrere og dele sine observationer, skaber man derudover forskningskvalitetsdata til videnskabsfolk, som arbejder med bedre at forstå og beskytte naturen. +iNaturalist bistår millioner af personer med at lære om og dokumentere naturen omkring sig. Ret kameraet mod planter, dyr og svampe for øjeblikkelige identifikationsforslag, del dernæst fotos eller lydoptagelser som en "observation. Se derefter observationen blive gennemgået af et globalt fællesskab af kyndige naturelskere for at gøre den til et nyttigt datapunkt for videnskab og bevaringsindsats. Daglige øjeblikke af nysgerrighed kan direkte bidrage til at beskytte naturen, og ingen tidligere erfaring eller viden kræves for at komme i gang. + +iNaturalist er en missionsdrevet nonprofitorganisation dedikeret til at forbinde personer med naturen og fremme biodiversitetsvidenskab samt -bevaring og er frit tilgængelig takket være den generøse støtte fra vores fællesskab. + +NØGLEFUNKTIONER +• Identificér arter fra hvor som helst i verden +• Bidrag til videnskaben ved at dele observationer +• Før en fortegnelse over arter, som ses +• Udforsk og beskyt biodiversiteten +• Kom i kontakt med og lær af andre naturentusiaster diff --git a/fastlane/metadata/android/de-DE/full_description.txt b/fastlane/metadata/android/de-DE/full_description.txt index 33b81f9b2..32c4e1928 100644 --- a/fastlane/metadata/android/de-DE/full_description.txt +++ b/fastlane/metadata/android/de-DE/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist ist ein soziales Netzwerk, um Informationen über die biologische Vielfalt zu teilen und gemeinsam mehr über die Natur zu erfahren. Das vorrangige Ziel ist es, Menschen mit der Natur in Kontakt zu bringen, und das zweite Ziel ist es, aus diesen persönlichen Begegnungen wissenschaftlich wertvolle Daten über die biologische Vielfalt zu gewinnen. +Deine Fotos von Pflanzen, Tieren, Pilzen und anderen Organismen können dazu beitragen, Natur auf der ganzen Welt zu schützen. iNaturalist ist kostenlos, gemeinnützig und von der Gemeinschaft getragen. -iNaturalist hilft bei der Bestimmung von Pflanzen, Tieren und anderen Lebewesen durch Vorschläge ähnlich aussehender Arten sowie der Überprüfung durch engagierte Mitwirkende. Werde Teil einer Gemeinschaft von über einer Million Wissenschaftlern und Naturforschern, die dir helfen können, mehr über die Natur zu erfahren! Durch das Erstellen und Teilen von Naturbeobachtungen können Daten in Forschungsqualität für Wissenschaftler gewonnen werden, um die Natur besser zu verstehen und zu schützen. +iNaturalist hilft Millionen von Menschen, die Natur um sie herum kennen zu lernen und zu dokumentieren. Richte deine Kamera auf Pflanzen, Tiere und Pilze, um sofortige Bestimmungsvorschläge zu erhalten, und teile dann deine Fotos oder Tonaufnahmen als "Beobachtung". Dann wird deine Beobachtung von einer globalen Gemeinschaft sachkundiger Naturfreunde überprüft, um sie zu einem nützlichen Datenpunkt für Wissenschaft und Naturschutz zu machen. Deine alltäglichen Momente der Neugier können direkt zum Schutz der Natur beitragen, und du brauchst keine Vorerfahrung oder Wissen, um loszulegen. + +iNaturalist ist eine missionsorientierte gemeinnützige Organisation, die sich der Verbindung von Menschen mit der Natur und der Förderung von Biodiversitätswissenschaft und Naturschutz widmet und dank der großzügigen Unterstützung unserer Gemeinschaft frei verfügbar ist. + +HAUPTFUNKTIONEN +• Arten von überall auf der Welt bestimmen +• Zur Wissenschaft beitragen, indem du deine Beobachtungen teilst. +• ein Verzeichnis der Arten, die du beobachtet hast +• Biodiversität erforschen und schützen +• Kontakte zu anderen Naturbegeisterten knüpfen und von ihnen lernen diff --git a/fastlane/metadata/android/el-GR/full_description.txt b/fastlane/metadata/android/el-GR/full_description.txt index 039615ee0..5a94bdf2e 100644 --- a/fastlane/metadata/android/el-GR/full_description.txt +++ b/fastlane/metadata/android/el-GR/full_description.txt @@ -1,3 +1,12 @@ -Το iNaturalist είναι ένα κοινωνικό δίκτυο για την ανταλλαγή πληροφοριών σχετικά με τη βιοποικιλότητα, ώστε να βοηθήσει ο ένας τον άλλο να μάθει για τη φύση. Ο πρωταρχικός στόχος είναι η σύνδεση των ανθρώπων με τη φύση και ο δευτερεύων στόχος είναι η δημιουργία επιστημονικώς πολύτιμων δεδομένων για τη βιοποικιλότητα από αυτές τις προσωπικές συναντήσεις. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -Το iNaturalist σάς βοηθά να εντοπίσετε φυτά και ζώα με οπτικά παρόμοιες προτάσεις και επαλήθευση από ειδικούς συνεισφέροντες. Συνδεθείτε με μια κοινότητα άνω του ενός εκατομμυρίου επιστημόνων και φυσιολατρών που μπορούν να σας βοηθήσουν να μάθετε περισσότερα για τη φύση! Καταγράφοντας και κοινοποιώντας τις παρατηρήσεις σας, θα δημιουργήσετε ποιοτικά δεδομένα έρευνας για τους επιστήμονες που εργάζονται για την καλύτερη κατανόηση και προστασία της φύσης. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/en-AU/full_description.txt b/fastlane/metadata/android/en-AU/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/en-AU/full_description.txt +++ b/fastlane/metadata/android/en-AU/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/en-GB/full_description.txt b/fastlane/metadata/android/en-GB/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/en-GB/full_description.txt +++ b/fastlane/metadata/android/en-GB/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/en-US/changelogs/213.txt b/fastlane/metadata/android/en-US/changelogs/213.txt new file mode 100644 index 000000000..587270c68 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/213.txt @@ -0,0 +1,7 @@ +FIXED +* Multiple taps of submitting ID creates only one ID on observation +* Approximate location permission +* Map tile preference should be sticky + +UPDATED +* Performance improvements diff --git a/fastlane/metadata/android/en-US/changelogs/214.txt b/fastlane/metadata/android/en-US/changelogs/214.txt new file mode 100644 index 000000000..e52418dec --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/214.txt @@ -0,0 +1,7 @@ +FIXED +* Do not show media and comments hidden by moderators +* Potential Disagreement not allowing you to choose first option +* Deleting second standard camera photo blocks upload + +UPDATED +* Minor package and performance updates diff --git a/fastlane/metadata/android/en-US/changelogs/215.txt b/fastlane/metadata/android/en-US/changelogs/215.txt new file mode 100644 index 000000000..5ebb088d7 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/215.txt @@ -0,0 +1,9 @@ +FIXED +* Display proper error message if project is invite-only +* Gaps in the observation list +* Match-screen header button not working +* Location from LocationPicker was overwritten sometimes +* Explore: swiping back after adding ID from taxon page not working properly + +UPDATED +* Minor package and performance updates diff --git a/fastlane/metadata/android/en-US/changelogs/216.txt b/fastlane/metadata/android/en-US/changelogs/216.txt new file mode 100644 index 000000000..b8c82cbad --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/216.txt @@ -0,0 +1,8 @@ +FIXED +* Location picker map should zoom to fill location when tapping a search item +* Some screens should be from edge-to-edge +* Android: Add observation tooltip incorrectly positioned +* Back button from ObsEdit to Suggestions + +UPDATED +* Minor package and performance updates diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/en-US/full_description.txt +++ b/fastlane/metadata/android/en-US/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/es-ES/full_description.txt b/fastlane/metadata/android/es-ES/full_description.txt index 105ff10bc..5a94bdf2e 100644 --- a/fastlane/metadata/android/es-ES/full_description.txt +++ b/fastlane/metadata/android/es-ES/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist es una red social para compartir información sobre biodiversidad y aprender sobre la naturaleza en comunidad. El principal objetivo es conectar a la gente con la naturaleza, y además generar datos sobre biodiversidad a partir de esos descubrimientos personales que sean valiosos para la comunidad científica. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist te ayuda a identificar plantas y animales mediante sugerencias visualmente similares y verificaciones de contribuyentes. ¡Conecta con una comunidad de más de un millón de científicos y naturalistas que te pueden ayudar a aprender más sobre la naturaleza! Registrando y compartiendo tus observaciones, estarás proporcionando datos que los científicos pueden utilizar en sus investigaciones para comprender y proteger mejor la naturaleza. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/et/full_description.txt b/fastlane/metadata/android/et/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/et/full_description.txt +++ b/fastlane/metadata/android/et/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/eu-ES/full_description.txt b/fastlane/metadata/android/eu-ES/full_description.txt index f967d439b..5a94bdf2e 100644 --- a/fastlane/metadata/android/eu-ES/full_description.txt +++ b/fastlane/metadata/android/eu-ES/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist biodibertsitateari buruzko informazioa partekatzeko sare soziala da, naturari buruz ikasiz elkarri laguntzeko. Helburu nagusia pertsonak naturarekin konektatzea da, eta bigarren helburua da topaketa pertsonal horietatik abiatuta zientifikoki baliotsuak diren biodibertsitate-datuak sortzea. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalistek landareak eta animaliak identifikatzen laguntzen dizu, bisualki antzeko iradokizunak eginez eta laguntzaile arduratsuek egiaztatuta. Jar zaitez harremanetan naturari buruz gehiago ikasten lagun diezazuketen milioi bat zientzialari eta naturalista baino gehiagoko komunitate batekin! Behaketak egin eta partekatzean, ikerketaren kalitatezko datuak sortuko dituzu natura hobeto ulertzeko eta babesteko lan egiten duten zientzialarientzat. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/fa-IR/full_description.txt b/fastlane/metadata/android/fa-IR/full_description.txt index 078bdd34d..5a94bdf2e 100644 --- a/fastlane/metadata/android/fa-IR/full_description.txt +++ b/fastlane/metadata/android/fa-IR/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist یک شبکه اجتماعی برای به اشتراک گذاری اطلاعات تنوع زیستی برای کمک به یکدیگر در یادگیری طبیعت است. هدف اولیه اتصال مردم به طبیعت است و هدف ثانویه تولید داده های علمی ارزشمند از تنوع زیستی از این برخوردهای شخصی است. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist به شما کمک می کند گیاهان و حیوانات را با پیشنهادات بصری مشابه و تأیید توسط مشارکت کنندگان اختصاصی شناسایی کنید. با جامعه ای متشکل از بیش از یک میلیون دانشمند و طبیعت دان ارتباط برقرار کنید که می توانند به شما کمک کنند تا در مورد طبیعت بیشتر بدانید! با ثبت و به اشتراک گذاری مشاهدات خود، داده هایی با کیفیت تحقیقاتی برای دانشمندانی که برای درک بهتر و حفاظت از طبیعت کار می کنند، ایجاد می کنید. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/fi-FI/full_description.txt b/fastlane/metadata/android/fi-FI/full_description.txt index df9c5d851..5a94bdf2e 100644 --- a/fastlane/metadata/android/fi-FI/full_description.txt +++ b/fastlane/metadata/android/fi-FI/full_description.txt @@ -1,5 +1,12 @@ -iNaturalist on sosiaalinen verkosto, jossa voi jakaa luontotietoa ja auttaa toisia oppimaan lisää luonnosta. Päätavoite on yhdistää ihmiset luontoon, ja toissijaisena tavoitteena on tuottaa tieteellisesti arvokasta tietoa luonnon monimuotoisuudesta henkilökohtaisten havaintojen kautta. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist auttaa sinua tunnistamaan eläimet, kasvit ja sienet ehdottamalla ulkoisesti samannäköisiä lajeja, ja muiden käyttäjien tunnistusten avulla. - Liity mukaan yli miljoonan luonnontieteilijän ja luontoharrastajan kansainväliseen yhteisöön, jonka turvin opit lisää luonnosta! - Tallentamalla ja jakamalla havaintojasi tuotat laadukasta tietoa tutkijoille, jotka pyrkivät ymmärtämään ja suojelemaan luontoa. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/fil/full_description.txt b/fastlane/metadata/android/fil/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/fil/full_description.txt +++ b/fastlane/metadata/android/fil/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/fr-CA/full_description.txt b/fastlane/metadata/android/fr-CA/full_description.txt index 2ac3e1388..5a94bdf2e 100644 --- a/fastlane/metadata/android/fr-CA/full_description.txt +++ b/fastlane/metadata/android/fr-CA/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist est un réseau social créé pour partager des informations de biodiversité pour s'aider d'un les uns les autres à propos de la nature. Le but principal est de connecter les gens à la nature, le but secondaire est de générer des données de biodiversité scientifiquement précieuse à partir de ces rencontres personnelles. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist vous aide à identifier les plantes et les animaux avec des suggestions visuelles similaires and des vérifications par des donateurs dédiés Connectez-vous dans une communauté avec plus d'un million de scientifiques et de naturalistes qui vous aideront à en apprendre plus sur la nature ! En enregistrant et en partageant vos observations, vous créerez des données de qualité de recherche pour les scientifiques qui travaillent pour mieux comprendre et protéger la nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/fr-FR/full_description.txt b/fastlane/metadata/android/fr-FR/full_description.txt index 2ac3e1388..5a94bdf2e 100644 --- a/fastlane/metadata/android/fr-FR/full_description.txt +++ b/fastlane/metadata/android/fr-FR/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist est un réseau social créé pour partager des informations de biodiversité pour s'aider d'un les uns les autres à propos de la nature. Le but principal est de connecter les gens à la nature, le but secondaire est de générer des données de biodiversité scientifiquement précieuse à partir de ces rencontres personnelles. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist vous aide à identifier les plantes et les animaux avec des suggestions visuelles similaires and des vérifications par des donateurs dédiés Connectez-vous dans une communauté avec plus d'un million de scientifiques et de naturalistes qui vous aideront à en apprendre plus sur la nature ! En enregistrant et en partageant vos observations, vous créerez des données de qualité de recherche pour les scientifiques qui travaillent pour mieux comprendre et protéger la nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/gl-ES/full_description.txt b/fastlane/metadata/android/gl-ES/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/gl-ES/full_description.txt +++ b/fastlane/metadata/android/gl-ES/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/gu/full_description.txt b/fastlane/metadata/android/gu/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/gu/full_description.txt +++ b/fastlane/metadata/android/gu/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/hi-IN/full_description.txt b/fastlane/metadata/android/hi-IN/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/hi-IN/full_description.txt +++ b/fastlane/metadata/android/hi-IN/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/hr/full_description.txt b/fastlane/metadata/android/hr/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/hr/full_description.txt +++ b/fastlane/metadata/android/hr/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/hu-HU/full_description.txt b/fastlane/metadata/android/hu-HU/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/hu-HU/full_description.txt +++ b/fastlane/metadata/android/hu-HU/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/hy-AM/full_description.txt b/fastlane/metadata/android/hy-AM/full_description.txt new file mode 100644 index 000000000..5a94bdf2e --- /dev/null +++ b/fastlane/metadata/android/hy-AM/full_description.txt @@ -0,0 +1,12 @@ +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. + +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/hy-AM/short_description.txt b/fastlane/metadata/android/hy-AM/short_description.txt new file mode 100644 index 000000000..e9977f45a --- /dev/null +++ b/fastlane/metadata/android/hy-AM/short_description.txt @@ -0,0 +1 @@ +Observe and identify plants and animals with your friends diff --git a/fastlane/metadata/android/hy-AM/title.txt b/fastlane/metadata/android/hy-AM/title.txt new file mode 100644 index 000000000..902cecfec --- /dev/null +++ b/fastlane/metadata/android/hy-AM/title.txt @@ -0,0 +1 @@ +iNaturalist \ No newline at end of file diff --git a/fastlane/metadata/android/id/full_description.txt b/fastlane/metadata/android/id/full_description.txt index 970f49781..fd2c1df53 100644 --- a/fastlane/metadata/android/id/full_description.txt +++ b/fastlane/metadata/android/id/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist adalah jaringan sosial untuk membagikan informasi keanekaragaman hayati untuk membantu satu sama lain dalam belajar mengenai alam. Tujuan utamanya adalah untuk menghubungkan manusia dengan alam, dan tujuan lainnya adalah untuk menghasilkan data keanekaragaman hayati yang bernilai secara saintifik dari penemuan-penemuan pribadi ini. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist membantu Anda mengidentifikasi tumbuhan dan hewan dengan memberikan rekomendasi tumbuhan dan hewan yang serupa secara visual dan verifikasi oleh kontributor-kontributor yang berdedikasi. Terhubunglah dengan komunitas kami yang berisi lebih dari sejuta ilmuwan dan naturalis yang dapat membantu Anda belajar lebih banyak lagi tentang alam! Dengan mencatat dan membagikan pengamatan Anda, Anda dapat membuat data riset yang berkualitas bagi para ilmuwan yang bekerja untuk memahami dan menjaga alam. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +FITUR UTAMA +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/it-IT/full_description.txt b/fastlane/metadata/android/it-IT/full_description.txt index a364b9be6..5a94bdf2e 100644 --- a/fastlane/metadata/android/it-IT/full_description.txt +++ b/fastlane/metadata/android/it-IT/full_description.txt @@ -1,5 +1,12 @@ -iNaturalist è un social network per la condivisione di informazioni sulla biodiversità per aiutarsi a vicenda a conoscere la natura. L’obiettivo principale è connettere le persone alla natura, mentre l’obiettivo secondario è generare dati sulla biodiversità scientificamente preziosi da questi incontri personali. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist ti aiuta ad identificare piante e animali con suggerimenti visivamente simili e verifiche da parte di contributori dedicati. Entra in contatto con una comunità di oltre un milione di scienziati e naturalisti che possono aiutarti a saperne di più sulla natura! Registrando e condividendo le tue osservazioni, creerai dati di qualità di ricerca per gli scienziati che lavorano per comprendere e proteggere meglio la natura. L'obiettivo principale è connettere le persone alla natura, mentre l'obiettivo secondario è generare dati scientificamente validi sulla biodiversità a partire da questi incontri personali. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. -iNaturalist ti aiuta a identificare piante e animali con suggerimenti delle specie visivamente simili e verifiche da parte di persone che si dedicano a questo. Mettiti in contatto con una comunità di oltre un milione di scienziati e naturalisti che possono aiutarti a saperne di più sulla natura! Registrando e condividendo le tue osservazioni, fornirai dati di livello ricerca agli scienziati che studiano per comprendere meglio e proteggere la natura. +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/iw-IL/full_description.txt b/fastlane/metadata/android/iw-IL/full_description.txt index 193cf2e17..5a94bdf2e 100644 --- a/fastlane/metadata/android/iw-IL/full_description.txt +++ b/fastlane/metadata/android/iw-IL/full_description.txt @@ -1,3 +1,12 @@ -פלטפורמת iNaturalist היא רשת חברתית לשיתוף מידע על מגוון ביולוגי המיועדת ללמידה הדדית על הטבע. המטרה העיקרית היא לחבר אנשים לטבע, והמטרה המשנית היא לייצר נתוני מגוון ביולוגי בעלי ערך מדעי מהמפגשים האישיים הללו. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist עוזרת לך לזהות צמחים ובעלי חיים עם הצעות דומות מבחינה ויזואלית ואימות על ידי מומחים ומומחיות מסורים. הצטרפו לקהילה של מעל מיליון מדעניות ומדענים ואוהדות ואוהדי טבע שיכולים לעזור לך ללמוד עוד על הטבע! התצפיות שתעלו יתרמו מידע באיכות מחקרית למדענים אשר עובדים להבין ולשמר את הטבע. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/ja-JP/full_description.txt b/fastlane/metadata/android/ja-JP/full_description.txt index 9545b2f61..5a94bdf2e 100644 --- a/fastlane/metadata/android/ja-JP/full_description.txt +++ b/fastlane/metadata/android/ja-JP/full_description.txt @@ -1,3 +1,12 @@ -iNaturalistは、生物多様性に関する情報を共有し、自然について学び合うためのソーシャルネットワークです。 第一の目標は、人々を自然と結びつけることであり、第二の目標は、こうした自然との出会いから科学的に価値のある生物多様性のデータを収集することです。 +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalistは、視覚的に類似した提案と熱心な協力者による検証によって、植物や動物の同定をお手伝いします。 100万人を超える科学者やナチュラリストのコミュニティとつながり、自然についてより深く学ぶことができます! あなたの観察を記録・共有することで、自然をより深く理解し保全するために活動する科学者のための研究品質のデータを作成することができます。 +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/ka-GE/full_description.txt b/fastlane/metadata/android/ka-GE/full_description.txt index 045af9347..5a94bdf2e 100644 --- a/fastlane/metadata/android/ka-GE/full_description.txt +++ b/fastlane/metadata/android/ka-GE/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist მცენარეებისა და ცხოველების იდენტიფიკაციაში ვიზუალურად მსგავსი შეთავაზებებითა და თავდადებული კონტრიბუტორების მიერ მათი დადასტურებით დაგეხმარებათ. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/kk/full_description.txt b/fastlane/metadata/android/kk/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/kk/full_description.txt +++ b/fastlane/metadata/android/kk/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/kn-IN/full_description.txt b/fastlane/metadata/android/kn-IN/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/kn-IN/full_description.txt +++ b/fastlane/metadata/android/kn-IN/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/ko-KR/full_description.txt b/fastlane/metadata/android/ko-KR/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/ko-KR/full_description.txt +++ b/fastlane/metadata/android/ko-KR/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/lt/full_description.txt b/fastlane/metadata/android/lt/full_description.txt index ceaac4c13..5a94bdf2e 100644 --- a/fastlane/metadata/android/lt/full_description.txt +++ b/fastlane/metadata/android/lt/full_description.txt @@ -1,3 +1,12 @@ -„iNaturalist“ – tai socialinis tinklas skirtas dalintis informacija apie bioįvairovę ir padėti vieni kitiems susipažinti su gamta. Pagrindinis tikslas – priartinti žmones arčiau gamtos, o antrinis tikslas – surinkti moksliškai vertingų duomenų apie bioįvairovę iš tokių asmeninių patirčių. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -"iNaturalist" padeda atpažinti augalus ir gyvūnus iš nuotraukų ir patvirtinti jų pavadinimus kitų naudotojų. Prisijunkite prie bendruomenės, kurią sudaro daugiau nei milijonas mokslininkų ir gamtininkų, galinčių jums padėti apie gamtą sužinoti daugiau! Dokumentuodami ir dalindamiesi savo stebėjimais jūs surinksite mokslinio lygio duomenų, kuriuos mokslininkai panaudos, kad geriau suprastų ir apsaugotų gamtą. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/lv/full_description.txt b/fastlane/metadata/android/lv/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/lv/full_description.txt +++ b/fastlane/metadata/android/lv/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/mk-MK/full_description.txt b/fastlane/metadata/android/mk-MK/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/mk-MK/full_description.txt +++ b/fastlane/metadata/android/mk-MK/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/ml-IN/full_description.txt b/fastlane/metadata/android/ml-IN/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/ml-IN/full_description.txt +++ b/fastlane/metadata/android/ml-IN/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/mr-IN/full_description.txt b/fastlane/metadata/android/mr-IN/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/mr-IN/full_description.txt +++ b/fastlane/metadata/android/mr-IN/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/ms-MY/full_description.txt b/fastlane/metadata/android/ms-MY/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/ms-MY/full_description.txt +++ b/fastlane/metadata/android/ms-MY/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/nl-NL/full_description.txt b/fastlane/metadata/android/nl-NL/full_description.txt index 9d15d5e38..5a94bdf2e 100644 --- a/fastlane/metadata/android/nl-NL/full_description.txt +++ b/fastlane/metadata/android/nl-NL/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is een sociaal netwerk voor het delen van biodiversiteitsinformatie om elkaar te helpen om te leren over de natuur. Het primaire doel is het verbinden van mensen met de natuur en het secundaire doel is het genereren van wetenschappelijk waardevolle gegevens over biodiversiteit uit deze persoonlijke ontmoetingen. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helpt met het determineren van planten en dieren door suggesties te doen die visueel vergelijkbaar zijn en met verificatie door toegewijde bijdragers. Kom in contact met een gemeenschap van bijna vier miljoen wetenschappers en naturalisten die je kunnen helpen meer te leren over de natuur! Door je waarnemingen te registreren en te delen genereer je data van onderzoekskwaliteit voor wetenschappers die werken om de natuur beter te begrijpen en te beschermen. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/no-NO/full_description.txt b/fastlane/metadata/android/no-NO/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/no-NO/full_description.txt +++ b/fastlane/metadata/android/no-NO/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/pa/full_description.txt b/fastlane/metadata/android/pa/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/pa/full_description.txt +++ b/fastlane/metadata/android/pa/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/pl-PL/full_description.txt b/fastlane/metadata/android/pl-PL/full_description.txt index 41b26b6f2..5a94bdf2e 100644 --- a/fastlane/metadata/android/pl-PL/full_description.txt +++ b/fastlane/metadata/android/pl-PL/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist to sieć społecznościowa służąca wymianie informacji na temat różnorodności biologicznej, aby pomóc sobie nawzajem w nauce o przyrodzie. Głównym celem jest połączenie ludzi z przyrodą, a drugorzędnym celem jest generowanie z tych osobistych spotkań cennych naukowo danych na temat różnorodności biologicznej. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist pomaga w identyfikacji roślin i zwierząt z podobnymi wizualnie sugestiami i weryfikacją ze strony dedykowanych podmiotów przekazujących. Połącz się ze społecznością liczącą ponad milion naukowców i przyrodników, którzy pomogą Ci dowiedzieć się więcej o naturze! Rejestrując i udostępniając swoje obserwacje, tworzysz wysokiej jakości dane dla naukowców pracujących w celu lepszego zrozumienia i ochrony przyrody. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/pt-BR/full_description.txt b/fastlane/metadata/android/pt-BR/full_description.txt index 9b53c08f1..58c11dbd1 100644 --- a/fastlane/metadata/android/pt-BR/full_description.txt +++ b/fastlane/metadata/android/pt-BR/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist é uma rede social voltada para o compartilhamento de informações sobre biodiversidade, que visa a cooperação no aprendizado sobre a natureza. O objetivo principal é conectar as pessoas com a natureza, e o objetivo secundário é gerar dados científicos valiosos a partir dessas interações pessoais. +Suas fotos de plantas, animais, fungos e muito mais podem ajudar a proteger a natureza em todo o mundo. O iNaturalist é gratuito, sem fins lucrativos e movido pela comunidade. -iNaturalist te ajuda a identificar plantas e animais com sugestões visualmente similares e também verificações feitas por participantes dedicados. Conecte-se a uma comunidade com mais de um milhão de cientistas e naturalistas que podem te ajudar a aprender mais sobre a natureza! Ao registrar e compartilhar suas observações, você criará dados de qualidade científica para pesquisadores que trabalham para compreender melhor a natureza e a protegê-la. +O iNaturalist ajuda milhões de pessoas a aprender e documentar a natureza ao seu redor. Aponte sua câmera para as plantas, animais e fungos para obter sugestões instantâneas de identificação, e então compartilhe suas fotos ou gravações de som como uma "observação". Então, veja sua observação ser revisada por uma comunidade global de conhecedores e amantes da natureza para transformá-la em dados úteis para os esforços de ciência e conservação. Seus momentos diários de curiosidade podem contribuir diretamente para a proteção da natureza, e você não precisa de nenhuma experiência ou conhecimento anteriores para começar. + +iNaturalist é uma organização sem fins lucrativos dedicada a conectar pessoas à natureza e a promover a ciência e a conservação da biodiversidade, e está disponível sem custo, graças ao apoio generoso da nossa comunidade. + +KEY FEATURES +• Identificar espécies de qualquer lugar do mundo +• Contribua com a ciência compartilhando suas observações +• Mantenha um registro de espécies que você vê +• Explore e proteja a biodiversidade +• Conecte-se e aprenda com outros entusiastas da natureza diff --git a/fastlane/metadata/android/pt-PT/full_description.txt b/fastlane/metadata/android/pt-PT/full_description.txt index 4e3fe0b4f..5a94bdf2e 100644 --- a/fastlane/metadata/android/pt-PT/full_description.txt +++ b/fastlane/metadata/android/pt-PT/full_description.txt @@ -1,3 +1,12 @@ -O iNaturalist é uma rede social para compartilhar informações sobre biodiversidade por ajudar pessoas a aprender natureza. O objetivo principal do iNaturalist é ligar as pessoas à natureza, e o objetivo secundário é gerar dados da biodiversidade cientificamente valiosos desses encontros pessoais. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -O iNaturalist ajuda você a identificar plantas e animais com sugestões e verificação dos colaboradores dedicados. Se ligue a uma comunidade com mais de um milhão de cientistas e naturalistas que podem o ajudar a saber mais sobre a natureza! Após registar e partilhar as suas observações, é possível pelo senhor criar dados para as cientistas que trabalham para melhor compreender e proteger a natureza. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/ro/full_description.txt b/fastlane/metadata/android/ro/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/ro/full_description.txt +++ b/fastlane/metadata/android/ro/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/ru-RU/full_description.txt b/fastlane/metadata/android/ru-RU/full_description.txt index 3eecad567..5a94bdf2e 100644 --- a/fastlane/metadata/android/ru-RU/full_description.txt +++ b/fastlane/metadata/android/ru-RU/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist - это социальная сеть для обмена информацией о биоразнообразии, которая помогает людям познавать природу. Основная цель состоит в том, чтобы объединить людей и природу, а второстепенная цель - получить ценные с научной точки зрения данные о биоразнообразии на основе этого общения. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist поможет вам идентифицировать растения и животных при помощи визуально схожих предложений и проверки специальными авторами. Познакомьтесь с сообществом из более чем миллиона ученых и натуралистов, которые помогут вам узнать больше о природе! Регистрируя свои наблюдения и делясь ими, вы создаёте данные исследовательского уровня для ученых, работающих над тем, чтобы лучше понимать и защищать природу. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/si-LK/full_description.txt b/fastlane/metadata/android/si-LK/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/si-LK/full_description.txt +++ b/fastlane/metadata/android/si-LK/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/sk/full_description.txt b/fastlane/metadata/android/sk/full_description.txt index c7b681bf5..5a94bdf2e 100644 --- a/fastlane/metadata/android/sk/full_description.txt +++ b/fastlane/metadata/android/sk/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist je sociálna sieť na zdieľanie informácií o biodiverzite a na vzájomnú pomoc pri poznávaní prírody. Hlavným cieľom je prepojiť ľudí s prírodou a vedľajším cieľom je získať z týchto osobných stretnutí vedecky cenné údaje o biodiverzite. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist vám pomôže identifikovať rastliny a zvieratá s vizuálne podobnými návrhmi a overovania prostredníctvom špecializovaných prispievateľov. Spojte sa s komunitou viac ako milióna vedcov a prírodovedcov, ktorí vám môžu pomôcť dozvedieť sa viac o prírode! Nahraním a zdieľaním svojich pozorovaní vytvoríte cenné výskumné dáta pre vedcov, ktorí sa snažia lepšie porozumieť prírode a chrániť ju. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/sl/full_description.txt b/fastlane/metadata/android/sl/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/sl/full_description.txt +++ b/fastlane/metadata/android/sl/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/sq/full_description.txt b/fastlane/metadata/android/sq/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/sq/full_description.txt +++ b/fastlane/metadata/android/sq/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/sr/full_description.txt b/fastlane/metadata/android/sr/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/sr/full_description.txt +++ b/fastlane/metadata/android/sr/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/sv-SE/full_description.txt b/fastlane/metadata/android/sv-SE/full_description.txt index 4db7db0d6..5a94bdf2e 100644 --- a/fastlane/metadata/android/sv-SE/full_description.txt +++ b/fastlane/metadata/android/sv-SE/full_description.txt @@ -1,4 +1,12 @@ -iNaturalist är ett socialt nätverk för att dela information om biologisk mångfald så vi kan hjälpa varandra att lära oss om naturen. Det primära målet är att människor ska få kontakt med naturen, och det sekundära målet är att generera vetenskapligt värdefulla data om biologisk mångfald utifrån dessa personliga möten. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist hjälper dig bestämma växter och djur med visuellt liknande förslag och verifiering av hängivna användare. Få kontakt med en community bestående av över en miljon vetenskapsmän och naturforskare som kan hjälpa dig att lära dig mer om naturen! Genom att spara och dela dina fynd skapar du data av forskningskvalitet för vetenskapsmän som försöker förbättra förståelsen och skyddet av naturen. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/sw/full_description.txt b/fastlane/metadata/android/sw/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/sw/full_description.txt +++ b/fastlane/metadata/android/sw/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/ta-IN/full_description.txt b/fastlane/metadata/android/ta-IN/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/ta-IN/full_description.txt +++ b/fastlane/metadata/android/ta-IN/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/te-IN/full_description.txt b/fastlane/metadata/android/te-IN/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/te-IN/full_description.txt +++ b/fastlane/metadata/android/te-IN/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/th/full_description.txt b/fastlane/metadata/android/th/full_description.txt index d4bbee463..5a94bdf2e 100644 --- a/fastlane/metadata/android/th/full_description.txt +++ b/fastlane/metadata/android/th/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist คือเครือข่ายสังคมออนไลน์สำหรับการแบ่งปันข้อมูลความหลากหลายทางชีวภาพ เพื่อช่วยให้ผู้คนได้เรียนรู้เกี่ยวกับธรรมชาติร่วมกัน เป้าหมายหลักคือการเชื่อมโยงผู้คนกับธรรมชาติ และเป้าหมายรองคือการสร้างข้อมูลความหลากหลายทางชีวภาพที่มีคุณค่าทางวิทยาศาสตร์จากประสบการณ์ส่วนตัว +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist ช่วยคุณระบุชนิดของพืชและสัตว์ด้วยคำแนะนำที่มีลักษณะใกล้เคียงจากภาพ และการยืนยันโดยผู้เชี่ยวชาญ เข้าร่วมชุมชนที่มีนักวิทยาศาสตร์และผู้รักธรรมชาติกว่าล้านคน ที่จะช่วยให้คุณค้นพบความรู้ใหม่เกี่ยวกับธรรมชาติ! ด้วยการบันทึกและแบ่งปันการสังเกตของคุณ คุณจะช่วยสร้างข้อมูลที่มีคุณภาพสำหรับการวิจัย ซึ่งช่วยให้นักวิทยาศาสตร์ทำความเข้าใจและปกป้องธรรมชาติได้ดียิ่งขึ้น +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/tr-TR/full_description.txt b/fastlane/metadata/android/tr-TR/full_description.txt index 018972563..6a4ce6d71 100644 --- a/fastlane/metadata/android/tr-TR/full_description.txt +++ b/fastlane/metadata/android/tr-TR/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist, doğa hakkında daha fazla şey öğrenmemize yardımcı olmak için biyolojik çeşitlilik bilgilerini paylaşmak amacıyla kurulan bir sosyal ağdır. Ana hedef, insanları doğayla bağlamak, ikincil hedef ise bu kişisel karşılaşmalardan bilimsel açıdan değerli biyolojik çeşitlilik verileri üretmektir. +Bitkiler, hayvanlar, mantarlar ve daha fazlasına ait fotoğraflarınız, dünyanın dört bir yanında doğanın korunmasına katkı sağlayabilir. iNaturalist ücretsiz, kâr amacı gütmeyen ve topluluk destekli bir platformdur. -iNaturalist, bitkileri ve hayvanları görsel olarak benzer öneriler ve özel katılımcılar tarafından yapılan doğrulama ile belirlemenize yardımcı olur. Doğayla ilgili daha çok bilgi edinmenize yardımcı olabilecek bir milyondan çok bilim insanı ve doğa bilimcisinden oluşan bir toplulukla bağlantı kurun! Gözlemlerinizi kaydedip paylaşarak, doğayı daha iyi anlamak ve korumak için çalışan bilim insanları için araştırma niteliğinde veriler oluşturacaksınız. +iNaturalist, milyonlarca insanın çevresindeki doğayı öğrenmesine ve belgelemesine yardımcı olur. Kameranızı bitkilere, hayvanlara ve mantarlara doğrultarak anında tanımlama önerileri alın, ardından fotoğraflarınızı veya ses kayıtlarınızı bir “gözlem” olarak paylaşın. Daha sonra gözleminizin, bilim ve koruma çalışmalarına katkı sağlayacak bir veriye dönüşmesi için doğa konusunda bilgili küresel bir topluluk tarafından incelenmesini takip edin. Günlük meraklarınız doğanın korunmasına doğrudan katkıda bulunabilir ve başlamak için herhangi bir deneyim ya da ön bilgiye ihtiyaç duymazsınız. + +iNaturalist, insanları doğayla buluşturmaya ve biyolojik çeşitlilik bilimi ile koruma çalışmalarını ilerletmeye adanmış, misyon odaklı kâr amacı gütmeyen bir kuruluştur ve topluluğumuzun cömert desteği sayesinde ücretsiz olarak sunulmaktadır. + +TEMEL ÖZELLİKLER +• Dünyanın herhangi bir yerinden türleri tanımlayın +• Gözlemlerinizi paylaşarak bilime katkıda bulunun +• Gördüğünüz türlerin kaydını tutun +• Biyolojik çeşitliliği keşfedin ve koruyun +• Diğer doğa meraklılarıyla bağlantı kurun ve onlardan öğrenin diff --git a/fastlane/metadata/android/uk/full_description.txt b/fastlane/metadata/android/uk/full_description.txt index d2dbd429c..5a94bdf2e 100644 --- a/fastlane/metadata/android/uk/full_description.txt +++ b/fastlane/metadata/android/uk/full_description.txt @@ -1,4 +1,12 @@ -iNaturalist — це соціальна мережа для обміну інформацією про біорізноманіття з метою допомоги один одному у вивченні природи. Основною метою є поєднання людей з природою, а вторинною метою є отримання науково цінних даних про біорізноманіття з цих особистих зустрічей. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist допомагає вам ідентифікувати рослини та тварин за допомогою візуально схожих пропозицій та верифікації від відданих учасників. Приєднуйтесь до спільноти з понад мільйоном науковців і натуралістів, які можуть допомогти вам дізнатися більше про природу! Записуючи та поширюючи свої спостереження, ви створите дані дослідницької якості для науковців, які працюють над кращим розумінням і захистом природи. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/vi/full_description.txt b/fastlane/metadata/android/vi/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/vi/full_description.txt +++ b/fastlane/metadata/android/vi/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/zh-CN/full_description.txt b/fastlane/metadata/android/zh-CN/full_description.txt index 91084f58d..5a94bdf2e 100644 --- a/fastlane/metadata/android/zh-CN/full_description.txt +++ b/fastlane/metadata/android/zh-CN/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist 是一个通过分享生物多样性信息来帮助人们了解自然的社会网络。 主要目标是把人与大自然联系起来,其次目标是通过这些个人接触产生具有科学价值的生物多样性数据。 +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist 使用人工智能提供视觉上相似的建议来帮助您识别植物和动物,并由热心的网站用户进行验证。 与超过100万科学家和自然学家组成的社区建立联系能帮助您了解更多关于大自然的知识! 通过记录和分享您的观察,您将为科学家们提供高质量的研究数据以便更好地理解和保护自然。 +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/zh-HK/full_description.txt b/fastlane/metadata/android/zh-HK/full_description.txt index 6f2ebeac8..5a94bdf2e 100644 --- a/fastlane/metadata/android/zh-HK/full_description.txt +++ b/fastlane/metadata/android/zh-HK/full_description.txt @@ -1,3 +1,12 @@ -iNaturalist is a social network for sharing biodiversity information to help each other learn about nature. The primary goal is to connect people to nature, and the secondary goal is to generate scientifically valuable biodiversity data from these personal encounters. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist helps you identify plants and animals with visually similar suggestions and verification by dedicated contributors. Get connected with a community of over a million scientists and naturalists who can help you learn more about nature! By recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/android/zh-TW/full_description.txt b/fastlane/metadata/android/zh-TW/full_description.txt index 339876253..5a94bdf2e 100644 --- a/fastlane/metadata/android/zh-TW/full_description.txt +++ b/fastlane/metadata/android/zh-TW/full_description.txt @@ -1,3 +1,12 @@ -愛自然(iNaturalist)是一個分享生物多樣性資訊的社交網路,旨在幫助彼此學習有關自然的知識。 首要目標是連結人與大自然,次要目標則是透過這些個人觀察紀錄,產生具有科學價值的生物多樣性資料。 +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -愛自然透過視覺相似建議與熱心的使用者驗證機制,以協助您辨識動植物。 連結超過一百萬名科學家與自然觀察家組成的專業社群,讓您深入探索自然知識! 透過記錄並分享觀察紀錄,您所產出的研究等級資料將協助科學家更深入地理解自然生態,以保護大自然。 +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. + +KEY FEATURES +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/ar-SA/description.txt b/fastlane/metadata/ios/ar-SA/description.txt index 520fdff8a..5a94bdf2e 100644 --- a/fastlane/metadata/ios/ar-SA/description.txt +++ b/fastlane/metadata/ios/ar-SA/description.txt @@ -1,14 +1,12 @@ -Point the camera at plants, animals, & fungi to see species suggestions while you’re outside, or import photos from your library. iNaturalist helps millions of people like you learn more about nature using AI suggestions backed up by a global community of knowledgeable nature lovers. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist goes far beyond AI identifications—your observations are reviewed by real people and shared for science to help protect species. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. KEY FEATURES -Identify species from anywhere in the world -Keep a record of species you see -Contribute to science by sharing your observations -Explore and protect biodiversity -Connect with and learn from other nature enthusiasts - -iNaturalist’s nonprofit mission is to connect people to nature and advance science and conservation. iNaturalist is freely available thanks to generous support from our community of donors. - -Explore and learn even more at https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/ca/description.txt b/fastlane/metadata/ios/ca/description.txt index 520fdff8a..5a94bdf2e 100644 --- a/fastlane/metadata/ios/ca/description.txt +++ b/fastlane/metadata/ios/ca/description.txt @@ -1,14 +1,12 @@ -Point the camera at plants, animals, & fungi to see species suggestions while you’re outside, or import photos from your library. iNaturalist helps millions of people like you learn more about nature using AI suggestions backed up by a global community of knowledgeable nature lovers. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist goes far beyond AI identifications—your observations are reviewed by real people and shared for science to help protect species. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. KEY FEATURES -Identify species from anywhere in the world -Keep a record of species you see -Contribute to science by sharing your observations -Explore and protect biodiversity -Connect with and learn from other nature enthusiasts - -iNaturalist’s nonprofit mission is to connect people to nature and advance science and conservation. iNaturalist is freely available thanks to generous support from our community of donors. - -Explore and learn even more at https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/cs/description.txt b/fastlane/metadata/ios/cs/description.txt index e1b3b2f45..3fddd4ec0 100644 --- a/fastlane/metadata/ios/cs/description.txt +++ b/fastlane/metadata/ios/cs/description.txt @@ -1,14 +1,12 @@ -Namiřte fotoaparát na rostliny, zvířata a houby, abyste viděli návrhy druhů, když jste venku, nebo importujte fotografie ze své knihovny. iNaturalist pomáhá milionům lidí, jako je Vy, dozvědět se více o přírodě pomocí návrhů AI podporovaných globální komunitou znalých milovníků přírody. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist daleko přesahuje identifikaci AI — vaše pozorování jsou přezkoumávána skutečnými lidmi a sdílena pro vědu za účelem ochrany druhů. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. KLÍČOVÉ FUNKCE -Identifikujte druhy odkudkoliv na světě -Uchovejte si záznam o druzích, které vidíte -Přispějte k vědě sdílením svých pozorování -Prozkoumejte a chraňte biodiverzitu -Spojte se s ostatními nadšenci přírody a učte se od nich - -Neziskovým posláním iNaturalist je spojovat lidi s přírodou a podporovat vědu a ochranu přírody. iNaturalist je volně dostupný díky velkorysé podpoře naší komunity dárců. - -Prozkoumejte a zjistěte ještě více na https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/da/description.txt b/fastlane/metadata/ios/da/description.txt index 71d8a1e99..ae7d98770 100644 --- a/fastlane/metadata/ios/da/description.txt +++ b/fastlane/metadata/ios/da/description.txt @@ -1,14 +1,12 @@ -Ret kameraet mod planter, dyr, og svampe for at se artsforslag, mens man er udenfor, eller importér fotos fra galleriet. iNaturalist hjælper millioner af folk med at lære mere om naturen via AI-forslag understøttet af et globalt fællesskab af kyndige naturelskere. +Dine fotos af planter, dyr, svampe og meget mere kan hjælpe med at beskytte naturen verden over. iNaturalist er gratis, nonprofit og fællesskabsdrevet. -iNaturalist går langt ud over AI-identifikationer — observationer, man foretager, gennemgås af virkelige personer og deles i videnskabsregi for at hjælpe med at beskytte arter. +iNaturalist bistår millioner af personer med at lære om og dokumentere naturen omkring sig. Ret kameraet mod planter, dyr og svampe for øjeblikkelige identifikationsforslag, del dernæst fotos eller lydoptagelser som en "observation. Se derefter observationen blive gennemgået af et globalt fællesskab af kyndige naturelskere for at gøre den til et nyttigt datapunkt for videnskab og bevaringsindsats. Daglige øjeblikke af nysgerrighed kan direkte bidrage til at beskytte naturen, og ingen tidligere erfaring eller viden kræves for at komme i gang. + +iNaturalist er en missionsdrevet nonprofitorganisation dedikeret til at forbinde personer med naturen og fremme biodiversitetsvidenskab samt -bevaring og er frit tilgængelig takket være den generøse støtte fra vores fællesskab. NØGLEFUNKTIONER -Identificér arter fra hvor som helst i verden -Før fortegnelse over arter, man ser -Bidrag til videnskaben ved at dele observationerne -Udforsk og beskyt biodiversiteten -Kom i kontakt med og lær af andre naturentusiaster - -iNaturalists non-profit mission er at forbinde folk med naturen og fremme videnskab og bevaring. iNaturalist er frit tilgængeligt takket være generøs støtte fra vores donorfællesskab. - -Udforsk og lær endnu mere på https://www.inaturalist.org. +• Identificér arter fra hvor som helst i verden +• Bidrag til videnskaben ved at dele observationer +• Før en fortegnelse over arter, som ses +• Udforsk og beskyt biodiversiteten +• Kom i kontakt med og lær af andre naturentusiaster diff --git a/fastlane/metadata/ios/de-DE/description.txt b/fastlane/metadata/ios/de-DE/description.txt index d56a73c16..32c4e1928 100644 --- a/fastlane/metadata/ios/de-DE/description.txt +++ b/fastlane/metadata/ios/de-DE/description.txt @@ -1,14 +1,12 @@ -Richte die Kamera auf Pflanzen, Tiere und Pilze, um Artenvorschläge zu erhalten, während du draußen bist, oder importiere Fotos aus deiner Bibliothek. iNaturalist hilft Millionen von Menschen wie dir, mehr über die Natur zu erfahren, indem es KI-Vorschläge nutzt, die von einer globalen Gemeinschaft von sachkundigen Naturliebhabern unterstützt werden. +Deine Fotos von Pflanzen, Tieren, Pilzen und anderen Organismen können dazu beitragen, Natur auf der ganzen Welt zu schützen. iNaturalist ist kostenlos, gemeinnützig und von der Gemeinschaft getragen. -iNaturalist geht weit über KI-Identifizierungen hinaus – Ihre Beobachtungen werden von echten Menschen überprüft und für die Wissenschaft geteilt, um zum Artenschutz beizutragen. +iNaturalist hilft Millionen von Menschen, die Natur um sie herum kennen zu lernen und zu dokumentieren. Richte deine Kamera auf Pflanzen, Tiere und Pilze, um sofortige Bestimmungsvorschläge zu erhalten, und teile dann deine Fotos oder Tonaufnahmen als "Beobachtung". Dann wird deine Beobachtung von einer globalen Gemeinschaft sachkundiger Naturfreunde überprüft, um sie zu einem nützlichen Datenpunkt für Wissenschaft und Naturschutz zu machen. Deine alltäglichen Momente der Neugier können direkt zum Schutz der Natur beitragen, und du brauchst keine Vorerfahrung oder Wissen, um loszulegen. + +iNaturalist ist eine missionsorientierte gemeinnützige Organisation, die sich der Verbindung von Menschen mit der Natur und der Förderung von Biodiversitätswissenschaft und Naturschutz widmet und dank der großzügigen Unterstützung unserer Gemeinschaft frei verfügbar ist. HAUPTFUNKTIONEN -Arten von überall auf der Welt identifizieren -Erfasse jene Arten, die du siehst -Trage zur Wissenschaft bei, indem du deine Beobachtungen teilst -Erforsche und schütze die Artenvielfalt -Verbinde dich mit anderen Naturliebhabern und lerne von ihnen - -Die gemeinnützige Mission von iNaturalist ist es, Menschen mit der Natur zu verbinden und die Wissenschaft und Naturschutz voranzubringen. iNaturalist ist dank der großzügigen Unterstützung unserer Spendergemeinschaft gratis verfügbar. - -Entdecke und erfahre noch mehr unter https://www.inaturalist.org. +• Arten von überall auf der Welt bestimmen +• Zur Wissenschaft beitragen, indem du deine Beobachtungen teilst. +• ein Verzeichnis der Arten, die du beobachtet hast +• Biodiversität erforschen und schützen +• Kontakte zu anderen Naturbegeisterten knüpfen und von ihnen lernen diff --git a/fastlane/metadata/ios/de-DE/subtitle.txt b/fastlane/metadata/ios/de-DE/subtitle.txt index 65ae7f5fa..6ab822968 100644 --- a/fastlane/metadata/ios/de-DE/subtitle.txt +++ b/fastlane/metadata/ios/de-DE/subtitle.txt @@ -1 +1 @@ -Discover nature around you +Entdecke Natur um dich herum diff --git a/fastlane/metadata/ios/default/description.txt b/fastlane/metadata/ios/default/description.txt index 520fdff8a..5a94bdf2e 100644 --- a/fastlane/metadata/ios/default/description.txt +++ b/fastlane/metadata/ios/default/description.txt @@ -1,14 +1,12 @@ -Point the camera at plants, animals, & fungi to see species suggestions while you’re outside, or import photos from your library. iNaturalist helps millions of people like you learn more about nature using AI suggestions backed up by a global community of knowledgeable nature lovers. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist goes far beyond AI identifications—your observations are reviewed by real people and shared for science to help protect species. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. KEY FEATURES -Identify species from anywhere in the world -Keep a record of species you see -Contribute to science by sharing your observations -Explore and protect biodiversity -Connect with and learn from other nature enthusiasts - -iNaturalist’s nonprofit mission is to connect people to nature and advance science and conservation. iNaturalist is freely available thanks to generous support from our community of donors. - -Explore and learn even more at https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/el/description.txt b/fastlane/metadata/ios/el/description.txt index 2c2f4cf22..8b0479fce 100644 --- a/fastlane/metadata/ios/el/description.txt +++ b/fastlane/metadata/ios/el/description.txt @@ -1,14 +1,12 @@ -Στρέψτε την κάμερα σε φυτά, ζώα και μύκητες για να δείτε προτάσεις ειδών ενώ βρίσκεστε έξω ή εισαγάγετε φωτογραφίες από τη βιβλιοθήκη σας. Το iNaturalist βοηθά εκατομμύρια ανθρώπους σαν εσάς να μάθουν περισσότερα για τη φύση χρησιμοποιώντας προτάσεις AI που υποστηρίζονται από μια παγκόσμια κοινότητα έμπειρων λάτρεις της φύσης. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -Το iNaturalist πηγαίνει πολύ πέρα από τις ταυτοποιήσεις AI - οι παρατηρήσεις σας εξετάζονται από πραγματικούς ανθρώπους και μοιράζονται για την επιστήμη για να βοηθήσουν στην προστασία των ειδών. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. ΒΑΣΙΚΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ -Προσδιορίστε είδη από οπουδήποτε στον κόσμο -Κρατήστε αρχείο των ειδών που βλέπετε -Συνεισφέρετε στην επιστήμη μοιράζοντας τις παρατηρήσεις σας -Εξερεύνηση και προστασία της βιοποικιλότητας -Συνδεθείτε και μάθετε από άλλους λάτρεις της φύσης - -Η μη κερδοσκοπική αποστολή του iNaturalist είναι να συνδέσει τους ανθρώπους με τη φύση και να προωθήσει την επιστήμη και τη διατήρηση. Το iNaturalist είναι ελεύθερα διαθέσιμο χάρη στη γενναιόδωρη υποστήριξη από την κοινότητα των δωρητών μας. - -Εξερευνήστε και μάθετε ακόμα περισσότερα στο https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/en-AU/description.txt b/fastlane/metadata/ios/en-AU/description.txt index 93af362c1..5a94bdf2e 100644 --- a/fastlane/metadata/ios/en-AU/description.txt +++ b/fastlane/metadata/ios/en-AU/description.txt @@ -1,16 +1,12 @@ -Point the camera at plants, animals, & fungi to see species suggestions while you’re outside, or import photos from your library. iNaturalist helps millions of people like you learn more about nature using AI suggestions backed up by a global community of knowledgeable nature lovers. - -iNaturalist goes far beyond AI identifications—your observations are reviewed by real people and shared for science to help protect species. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. KEY FEATURES -Identify species from anywhere in the world -Keep a record of species you see -Contribute to science by sharing your observations -Explore and protect biodiversity -Connect with and learn from other nature enthusiasts - -iNaturalist's mission is to connect people to nature and advance biodiversity science and conservation. iNaturalist is freely available thanks to generous support from our community of donors. - -Explore and learn even more at https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/en-GB/description.txt b/fastlane/metadata/ios/en-GB/description.txt index 520fdff8a..5a94bdf2e 100644 --- a/fastlane/metadata/ios/en-GB/description.txt +++ b/fastlane/metadata/ios/en-GB/description.txt @@ -1,14 +1,12 @@ -Point the camera at plants, animals, & fungi to see species suggestions while you’re outside, or import photos from your library. iNaturalist helps millions of people like you learn more about nature using AI suggestions backed up by a global community of knowledgeable nature lovers. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist goes far beyond AI identifications—your observations are reviewed by real people and shared for science to help protect species. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. KEY FEATURES -Identify species from anywhere in the world -Keep a record of species you see -Contribute to science by sharing your observations -Explore and protect biodiversity -Connect with and learn from other nature enthusiasts - -iNaturalist’s nonprofit mission is to connect people to nature and advance science and conservation. iNaturalist is freely available thanks to generous support from our community of donors. - -Explore and learn even more at https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/en-US/description.txt b/fastlane/metadata/ios/en-US/description.txt index 520fdff8a..5a94bdf2e 100644 --- a/fastlane/metadata/ios/en-US/description.txt +++ b/fastlane/metadata/ios/en-US/description.txt @@ -1,14 +1,12 @@ -Point the camera at plants, animals, & fungi to see species suggestions while you’re outside, or import photos from your library. iNaturalist helps millions of people like you learn more about nature using AI suggestions backed up by a global community of knowledgeable nature lovers. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist goes far beyond AI identifications—your observations are reviewed by real people and shared for science to help protect species. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. KEY FEATURES -Identify species from anywhere in the world -Keep a record of species you see -Contribute to science by sharing your observations -Explore and protect biodiversity -Connect with and learn from other nature enthusiasts - -iNaturalist’s nonprofit mission is to connect people to nature and advance science and conservation. iNaturalist is freely available thanks to generous support from our community of donors. - -Explore and learn even more at https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/es-ES/description.txt b/fastlane/metadata/ios/es-ES/description.txt index 0a0c0e27a..b11d25f01 100644 --- a/fastlane/metadata/ios/es-ES/description.txt +++ b/fastlane/metadata/ios/es-ES/description.txt @@ -1,14 +1,12 @@ -Apunte la cámara a plantas, animales y hongos para ver sugerencias de especies mientras está afuera, o importe fotos de su biblioteca. iNaturalist ayuda a millones de personas como tú a aprender más sobre la naturaleza utilizando sugerencias de IA respaldadas por una comunidad global de amantes de la naturaleza bien informados. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist va mucho más allá de las identificaciones de IA: tus observaciones son revisadas por personas reales y compartidas para que la ciencia ayude a proteger las especies. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. CARACTERÍSTICAS PRINCIPALES -Identificar especies de cualquier parte del mundo -Lleva un registro de las especies que veas -Contribuye a la ciencia compartiendo tus observaciones -Explorar y proteger la biodiversidad -Conéctate y aprende de otros entusiastas de la naturaleza - -La misión sin fines de lucro de iNaturalist es conectar a las personas con la naturaleza y promover la ciencia y la conservación. iNaturalist está disponible de forma gratuita gracias al generoso apoyo de nuestra comunidad de donantes. - -Explore y aprenda aún más en https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/es-MX/description.txt b/fastlane/metadata/ios/es-MX/description.txt index 0a0c0e27a..b11d25f01 100644 --- a/fastlane/metadata/ios/es-MX/description.txt +++ b/fastlane/metadata/ios/es-MX/description.txt @@ -1,14 +1,12 @@ -Apunte la cámara a plantas, animales y hongos para ver sugerencias de especies mientras está afuera, o importe fotos de su biblioteca. iNaturalist ayuda a millones de personas como tú a aprender más sobre la naturaleza utilizando sugerencias de IA respaldadas por una comunidad global de amantes de la naturaleza bien informados. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist va mucho más allá de las identificaciones de IA: tus observaciones son revisadas por personas reales y compartidas para que la ciencia ayude a proteger las especies. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. CARACTERÍSTICAS PRINCIPALES -Identificar especies de cualquier parte del mundo -Lleva un registro de las especies que veas -Contribuye a la ciencia compartiendo tus observaciones -Explorar y proteger la biodiversidad -Conéctate y aprende de otros entusiastas de la naturaleza - -La misión sin fines de lucro de iNaturalist es conectar a las personas con la naturaleza y promover la ciencia y la conservación. iNaturalist está disponible de forma gratuita gracias al generoso apoyo de nuestra comunidad de donantes. - -Explore y aprenda aún más en https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/es-MX/keywords.txt b/fastlane/metadata/ios/es-MX/keywords.txt index 903d08f18..8cdb6b9d1 100644 --- a/fastlane/metadata/ios/es-MX/keywords.txt +++ b/fastlane/metadata/ios/es-MX/keywords.txt @@ -1 +1 @@ -naturaleza,vida salvaje,ID de planta,animal,identificar,biodiversidad,ciencia ciudadana,conservación +naturaleza,fauna,identificación,biodiversidad,ciencia ciudadana,conservación,guía de campo diff --git a/fastlane/metadata/ios/es-MX/subtitle.txt b/fastlane/metadata/ios/es-MX/subtitle.txt index 65ae7f5fa..2cf066599 100644 --- a/fastlane/metadata/ios/es-MX/subtitle.txt +++ b/fastlane/metadata/ios/es-MX/subtitle.txt @@ -1 +1 @@ -Discover nature around you +Descubre la naturaleza diff --git a/fastlane/metadata/ios/fi/description.txt b/fastlane/metadata/ios/fi/description.txt index 0a5a2496b..e0dbb24fe 100644 --- a/fastlane/metadata/ios/fi/description.txt +++ b/fastlane/metadata/ios/fi/description.txt @@ -1,14 +1,12 @@ -Osoita kameralla kasveja, eläimiä ja sieniä nähdäksesi lajiehdotuksia ulkona ollessasi tai tuo kuvia kirjastostasi. iNaturalist auttaa miljoonia kaltaisiasi ihmisiä oppimaan lisää luonnosta käyttämällä tekoälyehdotuksia, joita tukee asiantuntevien luonnonystävien maailmanlaajuinen yhteisö. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist menee paljon tekoälyn tunnistamista pidemmälle – oikeat ihmiset tarkistavat havaintosi ja ne jaetaan tieteelle lajien suojelemiseksi. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. AVAINOMINAISUUDET -Tunnista lajeja missä tahansa päin maailmaa -Pidä kirjaa näkemistäsi lajeista -Edistä tiedettä jakamalla havaintojasi -Tutki ja suojele luonnon monimuotoisuutta -Ole yhteydessä muihin luontoharrastajiin ja opi heiltä - -iNaturalistin voittoa tavoittelematon tehtävä on yhdistää ihmiset luontoon ja edistää tiedettä ja luonnonsuojelua. iNaturalist on vapaasti käytettävissä lahjoittajayhteisömme runsaan tuen ansiosta. - -Tutustu ja opi vielä enemmän https://www.inaturalist.org +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/fr-CA/description.txt b/fastlane/metadata/ios/fr-CA/description.txt index 1e3272c0d..4ffc81b7d 100644 --- a/fastlane/metadata/ios/fr-CA/description.txt +++ b/fastlane/metadata/ios/fr-CA/description.txt @@ -1,14 +1,12 @@ -Pointez l’appareil photo vers les plantes, les animaux et les champignons pour voir des suggestions d’espèces pendant que vous êtes à l’extérieur, ou importez des photos de votre bibliothèque. iNaturalist aide des millions de personnes comme vous à en apprendre davantage sur la nature en utilisant des suggestions d’IA soutenues par une communauté mondiale d’amoureux de la nature bien informés. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist va bien au-delà de l’identification par l’IA : vos observations sont examinées par de vraies personnes et partagées pour la science afin d’aider à protéger les espèces. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. CARACTÉRISTIQUES CLÉS -Identifiez les espèces de n’importe où dans le monde -Tenez un registre des espèces que vous voyez -Contribuez à la science en partageant vos observations -Explorer et protéger la biodiversité -Connectez-vous et apprenez d’autres passionnés de la nature - -La mission à but non lucratif d’iNaturalist est de connecter les gens à la nature et de faire progresser la science et la conservation. iNaturalist est disponible gratuitement grâce au généreux soutien de notre communauté de donateurs. - -Explorez et apprenez encore plus sur https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/fr-FR/description.txt b/fastlane/metadata/ios/fr-FR/description.txt index 1e3272c0d..4ffc81b7d 100644 --- a/fastlane/metadata/ios/fr-FR/description.txt +++ b/fastlane/metadata/ios/fr-FR/description.txt @@ -1,14 +1,12 @@ -Pointez l’appareil photo vers les plantes, les animaux et les champignons pour voir des suggestions d’espèces pendant que vous êtes à l’extérieur, ou importez des photos de votre bibliothèque. iNaturalist aide des millions de personnes comme vous à en apprendre davantage sur la nature en utilisant des suggestions d’IA soutenues par une communauté mondiale d’amoureux de la nature bien informés. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist va bien au-delà de l’identification par l’IA : vos observations sont examinées par de vraies personnes et partagées pour la science afin d’aider à protéger les espèces. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. CARACTÉRISTIQUES CLÉS -Identifiez les espèces de n’importe où dans le monde -Tenez un registre des espèces que vous voyez -Contribuez à la science en partageant vos observations -Explorer et protéger la biodiversité -Connectez-vous et apprenez d’autres passionnés de la nature - -La mission à but non lucratif d’iNaturalist est de connecter les gens à la nature et de faire progresser la science et la conservation. iNaturalist est disponible gratuitement grâce au généreux soutien de notre communauté de donateurs. - -Explorez et apprenez encore plus sur https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/he/description.txt b/fastlane/metadata/ios/he/description.txt index ece1e608b..13c0cefcb 100644 --- a/fastlane/metadata/ios/he/description.txt +++ b/fastlane/metadata/ios/he/description.txt @@ -1,14 +1,12 @@ -כוונו את המצלמה אל צמחים, בעלי חיים ופטריות כדי לראות הצעות למינים כשאתם בחוץ, או ייבאו תמונות מהספריה. iNaturalist עוזרת למיליוני אנשים כמוך ללמוד עוד על הטבע באמצעות הצעות בינה מלאכותית המגובות על ידי קהילה גלובלית של חובבי טבע בעלי ידע. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist הולכת הרבה מעבר לזיהויי בינה מלאכותית - התצפיות שלך נבדקות על ידי אנשים אמיתיים ומשותפות למדע כדי לסייע בהגנה על מינים. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. מאפיינים עיקריים -זיהוי מינים מכל מקום בעולם -תיעוד של כל המינים שראית -תרומה למדע על ידי שיתוף התצפיות שלכם -חקר המגוון הביולוגי והגנה עליו -התחברות לחובבי טבע אחרים ולמידה מהם - -המשימה ללא מטרות רווח של iNaturalist היא לחבר אנשים לטבע ולקדם את המדע ושמירת טבע. iNaturalist זמינה בחינם הודות לתמיכה נדיבה מקהילת התורמים שלנו. - -גלו ולמדו עוד ב-https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/hi/description.txt b/fastlane/metadata/ios/hi/description.txt index 520fdff8a..5a94bdf2e 100644 --- a/fastlane/metadata/ios/hi/description.txt +++ b/fastlane/metadata/ios/hi/description.txt @@ -1,14 +1,12 @@ -Point the camera at plants, animals, & fungi to see species suggestions while you’re outside, or import photos from your library. iNaturalist helps millions of people like you learn more about nature using AI suggestions backed up by a global community of knowledgeable nature lovers. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist goes far beyond AI identifications—your observations are reviewed by real people and shared for science to help protect species. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. KEY FEATURES -Identify species from anywhere in the world -Keep a record of species you see -Contribute to science by sharing your observations -Explore and protect biodiversity -Connect with and learn from other nature enthusiasts - -iNaturalist’s nonprofit mission is to connect people to nature and advance science and conservation. iNaturalist is freely available thanks to generous support from our community of donors. - -Explore and learn even more at https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/hr/description.txt b/fastlane/metadata/ios/hr/description.txt index 520fdff8a..5a94bdf2e 100644 --- a/fastlane/metadata/ios/hr/description.txt +++ b/fastlane/metadata/ios/hr/description.txt @@ -1,14 +1,12 @@ -Point the camera at plants, animals, & fungi to see species suggestions while you’re outside, or import photos from your library. iNaturalist helps millions of people like you learn more about nature using AI suggestions backed up by a global community of knowledgeable nature lovers. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist goes far beyond AI identifications—your observations are reviewed by real people and shared for science to help protect species. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. KEY FEATURES -Identify species from anywhere in the world -Keep a record of species you see -Contribute to science by sharing your observations -Explore and protect biodiversity -Connect with and learn from other nature enthusiasts - -iNaturalist’s nonprofit mission is to connect people to nature and advance science and conservation. iNaturalist is freely available thanks to generous support from our community of donors. - -Explore and learn even more at https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/hu/description.txt b/fastlane/metadata/ios/hu/description.txt index f1f8ac168..d47d4d9bc 100644 --- a/fastlane/metadata/ios/hu/description.txt +++ b/fastlane/metadata/ios/hu/description.txt @@ -1,14 +1,12 @@ -Point the camera at plants, animals, & fungi to see species suggestions while you’re outside, or import photos from your library. iNaturalist helps millions of people like you learn more about nature using AI suggestions backed up by a global community of knowledgeable nature lovers. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist goes far beyond AI identifications—your observations are reviewed by real people and shared for science to help protect species. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. FŐBB JELLEMZŐK -Identify species from anywhere in the world -Keep a record of species you see -Contribute to science by sharing your observations -Védd a biodiverzitást -Connect with and learn from other nature enthusiasts - -iNaturalist’s nonprofit mission is to connect people to nature and advance science and conservation. iNaturalist is freely available thanks to generous support from our community of donors. - -Explore and learn even more at https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/id/description.txt b/fastlane/metadata/ios/id/description.txt index 5b30e7010..b0c9576d2 100644 --- a/fastlane/metadata/ios/id/description.txt +++ b/fastlane/metadata/ios/id/description.txt @@ -1,14 +1,12 @@ -Arahkan kamera ke tumbuhan, hewan, & jamur untuk melihat rekomendasi spesies saat Anda berada di luar, atau impor foto dari galeri Anda. iNaturalist membantu jutaan orang seperti Anda untuk mempelajari alam lebih lanjut menggunakan rekomendasi AI yang didukung oleh komunitas pecinta alam global yang memiliki pengetahuan. +Foto tumbuhan, hewan, dan jamur kamu dapat membantu melindungi alam di seluruh dunia. iNaturalist gratis, nirlaba, dan didukung komunitas. -iNaturalist tidak hanya menggunakan identifikasi AI—pengamatan Anda akan ditinjau oleh orang-orang sungguhan dan dibagikan untuk ilmu pengetahuan untuk membantu melindungi spesies. +iNaturalist membantu jutaan orang mempelajari dan mendokumentasikan alam di sekitar mereka. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. FITUR UTAMA -Identifikasi spesies dari mana saja di dunia -Catat spesies yang Anda lihat -Berkontribusi untuk ilmu pengetahuan dengan membagikan pengamatan Anda -Jelajahi dan lindungi keanekaragaman hayati -Terhubung dan belajar dari penggemar alam lainnya - -Misi nirlaba iNaturalist adalah untuk menghubungkan orang-orang dengan alam dan memajukan ilmu pengetahuan serta konservasi. iNaturalist tersedia secara gratis berkat dukungan dari komunitas donatur kami yang murah hati. - -Jelajahi dan pelajari lebih banyak lagi di https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/it/description.txt b/fastlane/metadata/ios/it/description.txt index c2ea7ff90..04bcf2ee6 100644 --- a/fastlane/metadata/ios/it/description.txt +++ b/fastlane/metadata/ios/it/description.txt @@ -1,14 +1,12 @@ -Punta la fotocamera su piante, animali e funghi per vedere i suggerimenti delle specie mentre sei all'aperto, oppure importa le foto dalla tua libreria. iNaturalist aiuta milioni di persone come te a conoscere meglio la natura utilizzando i suggerimenti dell'intelligenza artificiale supportati da una comunità globale di amanti della natura esperti. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist va ben oltre le identificazioni dell'intelligenza artificiale: le tue osservazioni vengono esaminate da persone reali e condivise per la scienza per aiutare a proteggere le specie. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. CARATTERISTICHE PRINCIPALI -Identifica le specie da qualsiasi parte del mondo -Tieni un registro delle specie che vedi -Contribuisci alla scienza condividendo le tue osservazioni -Esplorare e proteggere la biodiversità -Connettiti e impara da altri appassionati di natura - -La missione senza scopo di lucro di iNaturalist è quella di connettere le persone alla natura e far progredire la scienza e la conservazione. iNaturalist è disponibile gratuitamente grazie al generoso sostegno della nostra comunità di donatori. - -Esplora e impara ancora di più su https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/ja/description.txt b/fastlane/metadata/ios/ja/description.txt index ee2704cce..568aeb1a7 100644 --- a/fastlane/metadata/ios/ja/description.txt +++ b/fastlane/metadata/ios/ja/description.txt @@ -1,14 +1,12 @@ -カメラを外出中、植物、動物や菌類に向け、提案された種を確認したり、ライブラリから写真をインポートできます。 iNaturalistは、知識豊富な自然愛好家のグローバルコミュニティによって支えられたAIの提案を使用して、何百万人もの人が、自然についてより多くのことを学ぶのに役立ちます。 +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalistはAIの識別をはるかに超えており、観察結果は実際の人々によってレビューされ、種の保護に役立つ科学のために共有されます。 +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. 主な特徴 -世界中のどこからでも種を識別 -目にした種の記録を残す -観察結果を共有することで科学に貢献する -生物多様性の探索と保護 -他の自然愛好家とつながり、そこから学ぶ - -iNaturalistの非営利団体の使命は、人々を自然と結びつけ、科学と保護を推進することです。 iNaturalistは、寄付者のコミュニティからの寛大な支援のおかげで無料で利用できます。 - -https://www.inaturalist.org でさらに詳しく調べて学びましょう。 +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/ko/description.txt b/fastlane/metadata/ios/ko/description.txt index 520fdff8a..5a94bdf2e 100644 --- a/fastlane/metadata/ios/ko/description.txt +++ b/fastlane/metadata/ios/ko/description.txt @@ -1,14 +1,12 @@ -Point the camera at plants, animals, & fungi to see species suggestions while you’re outside, or import photos from your library. iNaturalist helps millions of people like you learn more about nature using AI suggestions backed up by a global community of knowledgeable nature lovers. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist goes far beyond AI identifications—your observations are reviewed by real people and shared for science to help protect species. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. KEY FEATURES -Identify species from anywhere in the world -Keep a record of species you see -Contribute to science by sharing your observations -Explore and protect biodiversity -Connect with and learn from other nature enthusiasts - -iNaturalist’s nonprofit mission is to connect people to nature and advance science and conservation. iNaturalist is freely available thanks to generous support from our community of donors. - -Explore and learn even more at https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/ms/description.txt b/fastlane/metadata/ios/ms/description.txt index 520fdff8a..5a94bdf2e 100644 --- a/fastlane/metadata/ios/ms/description.txt +++ b/fastlane/metadata/ios/ms/description.txt @@ -1,14 +1,12 @@ -Point the camera at plants, animals, & fungi to see species suggestions while you’re outside, or import photos from your library. iNaturalist helps millions of people like you learn more about nature using AI suggestions backed up by a global community of knowledgeable nature lovers. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist goes far beyond AI identifications—your observations are reviewed by real people and shared for science to help protect species. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. KEY FEATURES -Identify species from anywhere in the world -Keep a record of species you see -Contribute to science by sharing your observations -Explore and protect biodiversity -Connect with and learn from other nature enthusiasts - -iNaturalist’s nonprofit mission is to connect people to nature and advance science and conservation. iNaturalist is freely available thanks to generous support from our community of donors. - -Explore and learn even more at https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/nl-NL/description.txt b/fastlane/metadata/ios/nl-NL/description.txt index 2ba462959..a23325d68 100644 --- a/fastlane/metadata/ios/nl-NL/description.txt +++ b/fastlane/metadata/ios/nl-NL/description.txt @@ -1,14 +1,12 @@ -Richt de camera op planten, dieren en schimmels om suggesties voor soorten te zien terwijl je buiten bent, of importeer foto's uit je bibliotheek. iNaturalist helpt miljoenen mensen zoals jij om meer te weten te komen over de natuur met behulp van AI-suggesties die worden ondersteund door een wereldwijde gemeenschap van deskundige natuurliefhebbers. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist gaat veel verder dan AI determinaties alleen — jouw waarnemingen worden beoordeeld door echte mensen en gedeeld met de wetenschap om soorten te beschermen. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. BELANGRIJKSTE FUNCTIES -Determineer soorten uit de hele wereld -Houd een overzicht bij van de soorten die je ziet -Draag bij aan de wetenschap door je waarnemingen te delen -Verkennen en beschermen van biodiversiteit -Maak verbinding met en leer van andere natuurliefhebbers - -iNaturalist's missie is om mensen te verbinden met de natuur en om wetenschap en natuurbehoud te bevorderen - en dat allemaal nonprofit. iNaturalist is gratis beschikbaar dankzij de genereuze steun van onze gemeenschap van donateurs. - -Ontdek, ervaar en lees nog meer op https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/pl/description.txt b/fastlane/metadata/ios/pl/description.txt index 57ebb10fa..ebb1d950e 100644 --- a/fastlane/metadata/ios/pl/description.txt +++ b/fastlane/metadata/ios/pl/description.txt @@ -1,14 +1,12 @@ -Skieruj aparat na rośliny, zwierzęta i grzyby, aby zobaczyć sugestie dotyczące gatunków, gdy jesteś na zewnątrz, lub zaimportuj zdjęcia z biblioteki. iNaturalist pomaga milionom ludzi, takich jak Ty, dowiedzieć się więcej o przyrodzie, korzystając z sugestii AI wspieranych przez globalną społeczność znających się na rzeczy miłośników przyrody. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist wykracza daleko poza identyfikację AI — Twoje obserwacje są przeglądane przez prawdziwych ludzi i udostępniane nauce, aby pomóc chronić gatunki. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. KLUCZOWE CECHY -Identyfikuj gatunki z dowolnego miejsca na świecie -Prowadź rejestr gatunków, które widzisz -Przyczyń się do nauki, dzieląc się swoimi obserwacjami -Odkrywanie i ochrona różnorodności biologicznej -Łącz się i ucz się od innych pasjonatów przyrody - -Misją organizacji non-profit iNaturalist jest łączenie ludzi z naturą oraz rozwój nauki i ochrony przyrody. iNaturalist jest dostępny za darmo dzięki hojnemu wsparciu naszej społeczności darczyńców. - -Odkrywaj i ucz się jeszcze więcej w https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/pt-BR/description.txt b/fastlane/metadata/ios/pt-BR/description.txt index 490759ddc..150aa5ca4 100644 --- a/fastlane/metadata/ios/pt-BR/description.txt +++ b/fastlane/metadata/ios/pt-BR/description.txt @@ -1,14 +1,12 @@ -Aponte câmera por plantas, animais e fungos por lhes perceber enquanto estiver ao ar livre ou importe fotos do seu álbum. O iNaturalist ajuda milhões de pessoas a aprender natureza, utilizando a IA apoiada por uma comunidade global dos amantes de natureza. +Suas fotos de plantas, animais, fungos e muito mais podem ajudar a proteger a natureza em todo o mundo. O iNaturalist é gratuito, sem fins lucrativos e movido pela comunidade. -O iNaturalist vai mais fora das identificações de IA: as suas observações são revisados por pessoas atuais e partilhadas pelas cientistas para proteger espécies. +O iNaturalist ajuda milhões de pessoas a aprender e documentar a natureza ao seu redor. Aponte sua câmera para as plantas, animais e fungos para obter sugestões instantâneas de identificação, e então compartilhe suas fotos ou gravações de som como uma "observação". Então, veja sua observação ser revisada por uma comunidade global de conhecedores e amantes da natureza para transformá-la em dados úteis para os esforços de ciência e conservação. Seus momentos diários de curiosidade podem contribuir diretamente para a proteção da natureza, e você não precisa de nenhuma experiência ou conhecimento anteriores para começar. + +iNaturalist é uma organização sem fins lucrativos dedicada a conectar pessoas à natureza e a promover a ciência e a conservação da biodiversidade, e está disponível sem custo, graças ao apoio generoso da nossa comunidade. CARACTERÍSTICAS PRINCIPAIS -Identificar espécies todo o mundo -Manter os registros das espécies que você vê -Contribuir à ciência compartilhando suas observações -Explorar e proteger a biodiversidade -Ligar com os entusiastas à natureza - -A missão do iNaturalist é conectar os entusiastas à natureza e promover a ciência e a conservação de biodiversidade. iNaturalist está disponível gratuitamente, graças ao apoio de doadores. - -Explore and learn even more at https://www.inaturalist.org. +• Identificar espécies de qualquer lugar do mundo +• Contribua com a ciência compartilhando suas observações +• Mantenha um registro de espécies que você vê +• Explore e proteja a biodiversidade +• Conecte-se e aprenda com outros entusiastas da natureza diff --git a/fastlane/metadata/ios/pt-BR/release_notes.txt b/fastlane/metadata/ios/pt-BR/release_notes.txt index bb7e2c935..5cf28e410 100644 --- a/fastlane/metadata/ios/pt-BR/release_notes.txt +++ b/fastlane/metadata/ios/pt-BR/release_notes.txt @@ -1,11 +1,11 @@ -Try the iNaturalist app! +Experimente o aplicativo iNaturalist! -Quick identification: Point your camera at a plant, animal, or other organism to get an instant identification. +Identificação rápida: Aponte sua câmera para uma planta, animal ou outro organismo para obter uma identificação instantânea. -More ways to observe: Press and hold the camera button for more observation options, like recording sounds and adding multiple photos. +Mais formas de observar: Pressione e segure o botão da câmera para mais opções de observação, como gravar sons e adicionar várias fotos. -Keep up with other naturalists: Check your notifications to see when other people in the iNaturalist community add identifications or ask questions about your observations. +Fique conectado com outros naturalistas: Confira suas notificações para ver quando outras pessoas da comunidade iNaturalist adicionam identificações ou fazem perguntas sobre suas observações. -Set your preferences: If you're a longtime user and want your app experience to feel more like earlier versions of iNaturalist, you can! Go into Settings, enable Advanced Mode, then select "Edit Observation" in the middle section. +Defina suas preferências: Se você é usuário antigo e quer que a experiência do seu app pareça mais com versões anteriores do iNaturalist, você pode! Vá em Configurações, ative o Modo Avançado e selecione "Editar Observação" na seção do meio. -Thank you for using iNaturalist! Please let us know what you think about the app by using the Feedback form available in the main menu. +Obrigado por usar o iNaturalist! Por favor, nos conte o que acha do aplicativo usando o formulário de Feedback disponível no menu principal. diff --git a/fastlane/metadata/ios/pt-PT/description.txt b/fastlane/metadata/ios/pt-PT/description.txt index f3bfa28ac..88c43e965 100644 --- a/fastlane/metadata/ios/pt-PT/description.txt +++ b/fastlane/metadata/ios/pt-PT/description.txt @@ -1,14 +1,12 @@ -Aponte a câmara para as plantas, animais e fungos para ver sugestões de espécies enquanto estiver fora ou importe fotos do seu álbum. iNaturalist ajuda milhões de pessoas como você a aprender mais sobre a natureza usando sugestões de IA apoiadas por uma comunidade global de amantes da natureza bem informados. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -O iNaturalist vai mais fora da identificação de IA — as suas observações são revistas por pessoas atuais e compartilhadas por cientistas para ajudar a proteger as espécies. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. CARACTERÍSTICAS PRINCIPAIS -Identificar espécies de qualquer lugar do mundo -Manter um registo de espécies que vê -Contribuir à ciência compartilhando as suas observações -Explorar e proteger a biodiversidade -Se conectar com e aprender de outros entusiastas da natureza - -A missão do iNaturalist é conectar as pessoas à natureza e promover a ciência e a conservação da biodiversidade. O iNaturalist está disponível gratuitamente graças ao generoso apoio da nossa comunidade de doadores. - -Explore e saiba ainda mais no https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/ro/description.txt b/fastlane/metadata/ios/ro/description.txt index 520fdff8a..5a94bdf2e 100644 --- a/fastlane/metadata/ios/ro/description.txt +++ b/fastlane/metadata/ios/ro/description.txt @@ -1,14 +1,12 @@ -Point the camera at plants, animals, & fungi to see species suggestions while you’re outside, or import photos from your library. iNaturalist helps millions of people like you learn more about nature using AI suggestions backed up by a global community of knowledgeable nature lovers. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist goes far beyond AI identifications—your observations are reviewed by real people and shared for science to help protect species. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. KEY FEATURES -Identify species from anywhere in the world -Keep a record of species you see -Contribute to science by sharing your observations -Explore and protect biodiversity -Connect with and learn from other nature enthusiasts - -iNaturalist’s nonprofit mission is to connect people to nature and advance science and conservation. iNaturalist is freely available thanks to generous support from our community of donors. - -Explore and learn even more at https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/ru/description.txt b/fastlane/metadata/ios/ru/description.txt index 5711a168e..79d3bd04c 100644 --- a/fastlane/metadata/ios/ru/description.txt +++ b/fastlane/metadata/ios/ru/description.txt @@ -1,14 +1,12 @@ -Наведите камеру на растения, животных и грибы, чтобы увидеть предложения видов, когда вы находитесь вне дома, или импортируйте фото из вашей галереи. iNaturalist помогает миллионам людей, таких же, как вы, узнать больше о природе, используя предложения искусственного интеллекта, подкрепленные глобальным сообществом знатоков природы. +Ваши фотографии растений, животных, грибов и многого другого могут помочь защитить природу по всему миру. iNaturalist ‒ это бесплатная, некоммерческая организация, основанная сообществом. -iNaturalist не только предлагает идентификации с помощью искусственного интеллекта — ваши наблюдения анализируются реальными людьми и доступны науке для защиты видов. +Журнал iNaturalist помогает миллионам людей узнавать и документировать окружающую их природу. Наведите камеру на растения, животных и грибы, чтобы получить мгновенные рекомендации по идентификации, а затем поделитесь своими фотографиями или звукозаписями в качестве "наблюдения". Затем посмотрите, как Ваше наблюдение будет рассмотрено мировым сообществом знающих любителей природы, чтобы превратить его в полезный источник данных для науки и природоохранных мероприятий. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. КЛЮЧЕВЫЕ ОСОБЕННОСТИ -Идентифицировать виды из любого места мира -Сохраняйте запись вида, который вы видите -Вносите вклад в науку, делясь своими наблюдениями -Изучайте и защищайте биоразнообразие -Общайтесь и учитесь у других энтузиастов природы - -Некоммерческая миссия iNaturalist'а состоит в том, чтобы связать людей с природой, современной наукой и охраной окружающей среды. iNaturalist доступен свободно благодаря щедрой поддержке нашего сообщества доноров. - -Изучайте и узнайте больше на https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/ru/subtitle.txt b/fastlane/metadata/ios/ru/subtitle.txt index 65ae7f5fa..f6d5a9307 100644 --- a/fastlane/metadata/ios/ru/subtitle.txt +++ b/fastlane/metadata/ios/ru/subtitle.txt @@ -1 +1 @@ -Discover nature around you +Откройте природу вокруг Вас diff --git a/fastlane/metadata/ios/sk/description.txt b/fastlane/metadata/ios/sk/description.txt index 3ac130452..e4e163736 100644 --- a/fastlane/metadata/ios/sk/description.txt +++ b/fastlane/metadata/ios/sk/description.txt @@ -1,14 +1,12 @@ -Namierte fotoaparát na rastliny, zvieratá a huby, aby ste videli návrhy druhov, keď ste vonku, alebo importujte fotografie zo svojej knižnice. iNaturalist pomáha miliónom ľudí, ako je Vy, dozvedieť sa viac o prírode pomocou návrhov AI podporovaných globálnou komunitou znalých milovníkov prírody. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist ďaleko presahuje identifikáciu AI - vaše pozorovania sú preskúmavané skutočnými ľuďmi a zdieľané pre vedu za účelom ochrany druhov. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. KĽÚČOVÉ FUNKCIE -Identifikujte druhy odkiaľkoľvek na svete -Uchovajte si záznam o druhoch, ktoré vidíte -Prispejte k vede zdieľaním svojich pozorovaní -Preskúmajte a chráňte biodiverzitu -Spojte sa s ostatnými nadšencami prírody a učte sa od nich - -Neziskovým poslaním iNaturalist je spájať ľudí s prírodou a podporovať vedu a ochranu prírody. iNaturalist je voľne dostupný vďaka veľkorysej podpore našej komunity darcov. - -Preskúmajte a zistite ešte viac na https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/sv/description.txt b/fastlane/metadata/ios/sv/description.txt index d1e77e788..c9a17d2e4 100644 --- a/fastlane/metadata/ios/sv/description.txt +++ b/fastlane/metadata/ios/sv/description.txt @@ -1,14 +1,12 @@ -Rikta kameran mot växter, djur och svampar för att se artförslag när du är utomhus, eller importera bilder från ditt bibliotek. iNaturalist hjälper miljontals människor som du att lära sig mer om naturen med hjälp av AI-förslag som backas upp av en global gemenskap av kunniga naturälskare. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist går långt utöver AI-identifieringar – dina observationer granskas av riktiga människor och delas för vetenskap för att hjälpa till att skydda arter. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. NYCKELFUNKTIONER -Identifiera arter från var som helst i världen -Håll ett register över arter du ser -Bidra till vetenskapen genom att dela med dig av dina observationer -Utforska och skydda den biologiska mångfalden -Få kontakt med och lär av andra naturentusiaster - -iNaturalists ideella uppdrag är att koppla samman människor med naturen och främja vetenskap och bevarande. iNaturalist är fritt tillgängligt tack vare generöst stöd från vår grupp av givare. - -Utforska och lär dig ännu mer på https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/th/description.txt b/fastlane/metadata/ios/th/description.txt index 520fdff8a..5a94bdf2e 100644 --- a/fastlane/metadata/ios/th/description.txt +++ b/fastlane/metadata/ios/th/description.txt @@ -1,14 +1,12 @@ -Point the camera at plants, animals, & fungi to see species suggestions while you’re outside, or import photos from your library. iNaturalist helps millions of people like you learn more about nature using AI suggestions backed up by a global community of knowledgeable nature lovers. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist goes far beyond AI identifications—your observations are reviewed by real people and shared for science to help protect species. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. KEY FEATURES -Identify species from anywhere in the world -Keep a record of species you see -Contribute to science by sharing your observations -Explore and protect biodiversity -Connect with and learn from other nature enthusiasts - -iNaturalist’s nonprofit mission is to connect people to nature and advance science and conservation. iNaturalist is freely available thanks to generous support from our community of donors. - -Explore and learn even more at https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/tr/description.txt b/fastlane/metadata/ios/tr/description.txt index d3317d190..faaa39592 100644 --- a/fastlane/metadata/ios/tr/description.txt +++ b/fastlane/metadata/ios/tr/description.txt @@ -1,14 +1,12 @@ -Dışarıdayken tür önerilerini görmek için kamerayı bitkilere, hayvanlara ve mantarlara doğrultun veya kitaplığınızdan fotoğraf aktarın. iNaturalist, bilgili doğa severlerden oluşan küresel bir topluluk tarafından desteklenen YZ önerilerini kullanarak sizin gibi milyonlarca insanın doğa hakkında daha fazla bilgi edinmesine yardımcı oluyor. +Bitkiler, hayvanlar, mantarlar ve daha fazlasına ait fotoğraflarınız, dünyanın dört bir yanında doğanın korunmasına yardımcı olabilir. iNaturalist ücretsiz, kâr amacı gütmeyen ve topluluk destekli bir platformdur. -iNaturalist YZ tanımlamalarının çok ötesine geçiyor; gözlemleriniz gerçek insanlar tarafından inceleniyor ve türlerin korunmasına yardımcı olmak üzere bilim için paylaşılıyor. +iNaturalist, milyonlarca insanın çevresindeki doğayı öğrenmesine ve belgelemesine yardımcı olur. Kameranızı bitkilere, hayvanlara ve mantarlara doğrultarak anında tanımlama önerileri alın, ardından fotoğraflarınızı veya ses kayıtlarınızı bir “gözlem” olarak paylaşın. Daha sonra gözleminizin, bilim ve koruma çalışmalarına katkı sağlayacak bir veriye dönüşmesi için doğa konusunda bilgili küresel bir topluluk tarafından incelenmesini takip edin. Günlük meraklarınız doğanın korunmasına doğrudan katkıda bulunabilir ve başlamak için herhangi bir deneyim ya da ön bilgiye ihtiyaç duymazsınız. + +iNaturalist, insanları doğayla buluşturmaya ve biyolojik çeşitlilik bilimi ile koruma çalışmalarını ilerletmeye adanmış, misyon odaklı kâr amacı gütmeyen bir kuruluştur ve topluluğumuzun cömert desteği sayesinde ücretsiz olarak sunulmaktadır. TEMEL ÖZELLİKLER -Dünyanın herhangi bir yerindeki türleri tanımlama -Gördüğün türlerin kaydını tut -Gözlemlerini paylaşarak bilime katkıda bulun -Biyoçeşitliliği keşfet ve koru -Diğer doğa meraklıları ile bağlantı kur ve onlardan bir şeyler öğren - -iNaturalist'in kâr amacı gütmeyen misyonu, insanları doğayla buluşturmak ve bilim ve korumayı ilerletmektir. iNaturalist, bağışçı topluluğumuzun cömert desteği sayesinde ücretsiz olarak kullanılabilir. - -https://www.inaturalist.org adresinde daha fazlasını keşfet ve öğren. +• Dünyanın herhangi bir yerinden türleri tanımlayın +• Gözlemlerinizi paylaşarak bilime katkıda bulunun +• Gördüğünüz türlerin kaydını tutun +• Biyolojik çeşitliliği keşfedin ve koruyun +• Diğer doğa meraklılarıyla bağlantı kurun ve onlardan öğrenin diff --git a/fastlane/metadata/ios/uk/description.txt b/fastlane/metadata/ios/uk/description.txt index 520fdff8a..5a94bdf2e 100644 --- a/fastlane/metadata/ios/uk/description.txt +++ b/fastlane/metadata/ios/uk/description.txt @@ -1,14 +1,12 @@ -Point the camera at plants, animals, & fungi to see species suggestions while you’re outside, or import photos from your library. iNaturalist helps millions of people like you learn more about nature using AI suggestions backed up by a global community of knowledgeable nature lovers. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist goes far beyond AI identifications—your observations are reviewed by real people and shared for science to help protect species. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. KEY FEATURES -Identify species from anywhere in the world -Keep a record of species you see -Contribute to science by sharing your observations -Explore and protect biodiversity -Connect with and learn from other nature enthusiasts - -iNaturalist’s nonprofit mission is to connect people to nature and advance science and conservation. iNaturalist is freely available thanks to generous support from our community of donors. - -Explore and learn even more at https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/vi/description.txt b/fastlane/metadata/ios/vi/description.txt index 520fdff8a..5a94bdf2e 100644 --- a/fastlane/metadata/ios/vi/description.txt +++ b/fastlane/metadata/ios/vi/description.txt @@ -1,14 +1,12 @@ -Point the camera at plants, animals, & fungi to see species suggestions while you’re outside, or import photos from your library. iNaturalist helps millions of people like you learn more about nature using AI suggestions backed up by a global community of knowledgeable nature lovers. +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist goes far beyond AI identifications—your observations are reviewed by real people and shared for science to help protect species. +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. KEY FEATURES -Identify species from anywhere in the world -Keep a record of species you see -Contribute to science by sharing your observations -Explore and protect biodiversity -Connect with and learn from other nature enthusiasts - -iNaturalist’s nonprofit mission is to connect people to nature and advance science and conservation. iNaturalist is freely available thanks to generous support from our community of donors. - -Explore and learn even more at https://www.inaturalist.org. +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/zh-Hans/description.txt b/fastlane/metadata/ios/zh-Hans/description.txt index c04fa2351..776bde474 100644 --- a/fastlane/metadata/ios/zh-Hans/description.txt +++ b/fastlane/metadata/ios/zh-Hans/description.txt @@ -1,14 +1,12 @@ -当你在户外时,把摄像头对准植物、动物、真菌以查看物种建议,或从您的资料库中导入照片。 iNaturalist 帮助数以百万计的人更深入地了解大自然,他们使用的 AI 建议得到了全球范围内博学的自然爱好者的支持。 +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -iNaturalist 远远超出了AI鉴定的范围——您的观察被真正的人审查并共享科学,以帮助保护物种。 +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. 关键功能 -在世界任何地方鉴定物种 -保持您所看到的物种的记录 -通过分享您的观察结果为科学做出贡献 -探索和保护生物多样性 -与其他自然爱好者联系并向他们学习 - -iNaturalist的非营利性的使命是把人们与大自然联系起来,促进生物多样性科学和保护。 iNaturalist是免费提供的,这归功于我们的捐助界的慷慨支持。 - -在 https://www.inaturalist.org 探索和了解更多信息。 +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/fastlane/metadata/ios/zh-Hant/description.txt b/fastlane/metadata/ios/zh-Hant/description.txt index fb11f6ccb..dec215f24 100644 --- a/fastlane/metadata/ios/zh-Hant/description.txt +++ b/fastlane/metadata/ios/zh-Hant/description.txt @@ -1,14 +1,12 @@ -將相機對準植物、動物和真菌,或者從您的照片庫中匯入照片後,就能看到物種鑑定上的建議。 《愛自然(iNaturalist)》 透過 AI 鑑定上的建議,結合全球知識豐富的自然愛好者社群,幫助像您一樣的數百萬人更深入地了解大自然。 +Your photos of plants, animals, fungi, and more can help protect nature all around the world. iNaturalist is free, nonprofit, and community-powered. -《愛自然》不單只是 AI 鑑定—您的觀察紀錄都有真人審閱並共享給科學研究以保護物種。 +iNaturalist helps millions of people learn about and document the nature around them. Point your camera at plants, animals, and fungi to get instant identification suggestions, then share your photos or sound recordings as an "observation." Then, see your observation get reviewed by a global community of knowledgeable nature-lovers to turn it into a useful data point for science and conservation efforts. Your everyday moments of curiosity can directly contribute to protecting nature, and you don't need any previous experience or knowledge to get started. + +iNaturalist is a mission-driven nonprofit dedicated to connecting people to nature and advancing biodiversity science and conservation, and is freely available thanks to the generous support of our community. 主要功能 -鑑定世界上任一地點的物種 -記錄您看到的物種 -分享您的觀察紀錄以貢獻於科學 -探索和保護生物多樣性 -連結其他自然愛好者並向他們學習 - -《愛自然》在非營利的使命上是連結人類與大自然,並推展生物多樣性科學與保育工作。 感謝我們捐款者社群的慷慨支援,《愛自然》是免費的。 - -在 https://www.inaturalist.org 探索和瞭解更多資訊。 +• Identify species from anywhere in the world +• Contribute to science by sharing your observations +• Keep a record of species you see +• Explore and protect biodiversity +• Connect with and learn from other nature enthusiasts diff --git a/index.js b/index.js index 23fd512fa..11fbccf81 100644 --- a/index.js +++ b/index.js @@ -31,7 +31,8 @@ import { SafeAreaProvider } from "react-native-safe-area-context"; import { getInstallID, store as installDataMMKVStorage } from "sharedHelpers/installData"; import { reactQueryRetry } from "sharedHelpers/logging"; import DeviceInfo from "react-native-device-info"; -import useRozenite from "sharedHooks/useRozenite"; +import useRozenite, { HaltedLaunch, shouldHaltLaunchForDebug } from "sharedHooks/useRozenite"; +import { createMMKVStorageAdapter } from "@rozenite/storage-plugin"; import { name as appName } from "./app.json"; import { log } from "./react-native-logs.config"; import { getUserAgent } from "./src/api/userAgent"; @@ -41,7 +42,6 @@ const logger = log.extend( "index.js" ); // Log all unhandled promise rejections in release builds. Otherwise they will // die in silence. Debug builds have a more useful UI w/ desymbolicated stack // traces -/* eslint-disable no-undef */ if ( !__DEV__ && typeof ( @@ -136,14 +136,20 @@ const queryClient = new QueryClient( { }, } ); +const storageAdapters = [ + createMMKVStorageAdapter( { + storages: { + "persisted-zustand": zustandMMKVBackingStorage, + "install-data": installDataMMKVStorage, + }, + } ), +]; + const AppWithProviders = ( ) => { // note: Rozenite plugins are automatically disabled / noops in Production builds useRozenite( { queryClient, - mmkvStorages: { - "persisted-zustand": zustandMMKVBackingStorage, - "install-data": installDataMMKVStorage, - }, + storageAdapters, } ); return ( @@ -167,4 +173,9 @@ const AppWithProviders = ( ) => { ); }; -AppRegistry.registerComponent( appName, ( ) => AppWithProviders ); +if ( __DEV__ && shouldHaltLaunchForDebug( ) ) { + const HaltedWrappedApp = ( ) => ; + AppRegistry.registerComponent( appName, ( ) => HaltedWrappedApp ); +} else { + AppRegistry.registerComponent( appName, ( ) => AppWithProviders ); +} diff --git a/ios/InfoPlist.xcstrings b/ios/InfoPlist.xcstrings index dee7228cb..7e3242620 100644 --- a/ios/InfoPlist.xcstrings +++ b/ios/InfoPlist.xcstrings @@ -221,6 +221,12 @@ "value" : "iNaturalist" } }, + "hy" : { + "stringUnit" : { + "state" : "new", + "value" : "iNaturalist" + } + }, "id" : { "stringUnit" : { "state" : "new", @@ -696,6 +702,12 @@ "value" : "iNaturalist" } }, + "hy" : { + "stringUnit" : { + "state" : "new", + "value" : "iNaturalist" + } + }, "id" : { "stringUnit" : { "state" : "new", @@ -1171,6 +1183,12 @@ "value" : "Meglévő hangok hozzáadása a megfigyelésedhez" } }, + "hy" : { + "stringUnit" : { + "state" : "new", + "value" : "Add existing sounds to your observations." + } + }, "id" : { "stringUnit" : { "state" : "translated", @@ -1645,6 +1663,12 @@ "value" : "A kamerához való hozzáférés feltétele az MI-kamera használatának és a fényképkészítésnek." } }, + "hy" : { + "stringUnit" : { + "state" : "new", + "value" : "Camera access lets you use the AI Camera and take photos." + } + }, "id" : { "stringUnit" : { "state" : "translated", @@ -2119,6 +2143,12 @@ "value" : "" } }, + "hy" : { + "stringUnit" : { + "state" : "new", + "value" : "" + } + }, "id" : { "stringUnit" : { "state" : "new", @@ -2594,6 +2624,12 @@ "value" : "GPS-koordináták a megfigyelésekhez, helyzetmegjelenítés és egyebek." } }, + "hy" : { + "stringUnit" : { + "state" : "new", + "value" : "Add GPS coordinates to observations, show your location on maps, and more." + } + }, "id" : { "stringUnit" : { "state" : "translated", @@ -3068,6 +3104,12 @@ "value" : "Hanggal rendelkező megfigyelések rögzítése" } }, + "hy" : { + "stringUnit" : { + "state" : "new", + "value" : "Record sound observations of nature." + } + }, "id" : { "stringUnit" : { "state" : "translated", @@ -3542,6 +3584,12 @@ "value" : "iNaturalist-fényképek exportálása a könyvtáradba" } }, + "hy" : { + "stringUnit" : { + "state" : "new", + "value" : "Export iNaturalist photos to your library." + } + }, "id" : { "stringUnit" : { "state" : "translated", @@ -4016,6 +4064,12 @@ "value" : "Fényképek exportálása és importálása az iNatutalist és a könyvtárad között." } }, + "hy" : { + "stringUnit" : { + "state" : "new", + "value" : "Export and import iNaturalist photos to and from your library." + } + }, "id" : { "stringUnit" : { "state" : "translated", diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 0293de8c8..50e8fc464 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -64,7 +64,7 @@ PODS: - React-Core - React-RCTFabric - ReactCommon/turbomodule/core - - FBLazyVector (0.83.6) + - FBLazyVector (0.83.9) - Firebase/CoreOnly (12.10.0): - FirebaseCore (~> 12.10.0) - Firebase/Performance (12.10.0): @@ -172,6 +172,7 @@ PODS: - hermes-engine (0.14.1): - hermes-engine/Pre-built (= 0.14.1) - hermes-engine/Pre-built (0.14.1) + - LicensePlist (3.27.9) - Mute (0.6.1) - nanopb (3.30910.0): - nanopb/decode (= 3.30910.0) @@ -200,31 +201,31 @@ PODS: - fast_float (= 8.0.0) - fmt (= 12.1.0) - glog - - RCTDeprecation (0.83.6) - - RCTRequired (0.83.6) - - RCTSwiftUI (0.83.6) - - RCTSwiftUIWrapper (0.83.6): + - RCTDeprecation (0.83.9) + - RCTRequired (0.83.9) + - RCTSwiftUI (0.83.9) + - RCTSwiftUIWrapper (0.83.9): - RCTSwiftUI - - RCTTypeSafety (0.83.6): - - FBLazyVector (= 0.83.6) - - RCTRequired (= 0.83.6) - - React-Core (= 0.83.6) - - React (0.83.6): - - React-Core (= 0.83.6) - - React-Core/DevSupport (= 0.83.6) - - React-Core/RCTWebSocket (= 0.83.6) - - React-RCTActionSheet (= 0.83.6) - - React-RCTAnimation (= 0.83.6) - - React-RCTBlob (= 0.83.6) - - React-RCTImage (= 0.83.6) - - React-RCTLinking (= 0.83.6) - - React-RCTNetwork (= 0.83.6) - - React-RCTSettings (= 0.83.6) - - React-RCTText (= 0.83.6) - - React-RCTVibration (= 0.83.6) - - React-callinvoker (0.83.6) + - RCTTypeSafety (0.83.9): + - FBLazyVector (= 0.83.9) + - RCTRequired (= 0.83.9) + - React-Core (= 0.83.9) + - React (0.83.9): + - React-Core (= 0.83.9) + - React-Core/DevSupport (= 0.83.9) + - React-Core/RCTWebSocket (= 0.83.9) + - React-RCTActionSheet (= 0.83.9) + - React-RCTAnimation (= 0.83.9) + - React-RCTBlob (= 0.83.9) + - React-RCTImage (= 0.83.9) + - React-RCTLinking (= 0.83.9) + - React-RCTNetwork (= 0.83.9) + - React-RCTSettings (= 0.83.9) + - React-RCTText (= 0.83.9) + - React-RCTVibration (= 0.83.9) + - React-callinvoker (0.83.9) - React-Codegen (0.1.0) - - React-Core (0.83.6): + - React-Core (0.83.9): - boost - DoubleConversion - fast_float @@ -234,7 +235,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.83.6) + - React-Core/Default (= 0.83.9) - React-cxxreact - React-featureflags - React-hermes @@ -249,7 +250,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/CoreModulesHeaders (0.83.6): + - React-Core/CoreModulesHeaders (0.83.9): - boost - DoubleConversion - fast_float @@ -274,7 +275,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/Default (0.83.6): + - React-Core/Default (0.83.9): - boost - DoubleConversion - fast_float @@ -298,7 +299,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/DevSupport (0.83.6): + - React-Core/DevSupport (0.83.9): - boost - DoubleConversion - fast_float @@ -308,8 +309,8 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.83.6) - - React-Core/RCTWebSocket (= 0.83.6) + - React-Core/Default (= 0.83.9) + - React-Core/RCTWebSocket (= 0.83.9) - React-cxxreact - React-featureflags - React-hermes @@ -324,7 +325,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTActionSheetHeaders (0.83.6): + - React-Core/RCTActionSheetHeaders (0.83.9): - boost - DoubleConversion - fast_float @@ -349,7 +350,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTAnimationHeaders (0.83.6): + - React-Core/RCTAnimationHeaders (0.83.9): - boost - DoubleConversion - fast_float @@ -374,7 +375,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTBlobHeaders (0.83.6): + - React-Core/RCTBlobHeaders (0.83.9): - boost - DoubleConversion - fast_float @@ -399,7 +400,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTImageHeaders (0.83.6): + - React-Core/RCTImageHeaders (0.83.9): - boost - DoubleConversion - fast_float @@ -424,7 +425,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTLinkingHeaders (0.83.6): + - React-Core/RCTLinkingHeaders (0.83.9): - boost - DoubleConversion - fast_float @@ -449,7 +450,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTNetworkHeaders (0.83.6): + - React-Core/RCTNetworkHeaders (0.83.9): - boost - DoubleConversion - fast_float @@ -474,7 +475,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTSettingsHeaders (0.83.6): + - React-Core/RCTSettingsHeaders (0.83.9): - boost - DoubleConversion - fast_float @@ -499,7 +500,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTTextHeaders (0.83.6): + - React-Core/RCTTextHeaders (0.83.9): - boost - DoubleConversion - fast_float @@ -524,7 +525,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTVibrationHeaders (0.83.6): + - React-Core/RCTVibrationHeaders (0.83.9): - boost - DoubleConversion - fast_float @@ -549,7 +550,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTWebSocket (0.83.6): + - React-Core/RCTWebSocket (0.83.9): - boost - DoubleConversion - fast_float @@ -559,7 +560,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.83.6) + - React-Core/Default (= 0.83.9) - React-cxxreact - React-featureflags - React-hermes @@ -574,7 +575,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-CoreModules (0.83.6): + - React-CoreModules (0.83.9): - boost - DoubleConversion - fast_float @@ -582,22 +583,23 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - RCTTypeSafety (= 0.83.6) - - React-Core/CoreModulesHeaders (= 0.83.6) + - RCTTypeSafety (= 0.83.9) + - React-Core/CoreModulesHeaders (= 0.83.9) - React-debug - - React-jsi (= 0.83.6) + - React-featureflags + - React-jsi (= 0.83.9) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-NativeModulesApple - React-RCTBlob - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.83.6) + - React-RCTImage (= 0.83.9) - React-runtimeexecutor - React-utils - ReactCommon - SocketRocket - - React-cxxreact (0.83.6): + - React-cxxreact (0.83.9): - boost - DoubleConversion - fast_float @@ -606,20 +608,22 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.83.6) - - React-debug (= 0.83.6) - - React-jsi (= 0.83.6) + - React-callinvoker (= 0.83.9) + - React-debug (= 0.83.9) + - React-jsi (= 0.83.9) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-logger (= 0.83.6) - - React-perflogger (= 0.83.6) + - React-logger (= 0.83.9) + - React-perflogger (= 0.83.9) - React-runtimeexecutor - - React-timing (= 0.83.6) + - React-timing (= 0.83.9) - React-utils - SocketRocket - - React-debug (0.83.6) - - React-defaultsnativemodule (0.83.6): + - React-debug (0.83.9): + - React-debug/redbox (= 0.83.9) + - React-debug/redbox (0.83.9) + - React-defaultsnativemodule (0.83.9): - boost - DoubleConversion - fast_float @@ -636,11 +640,12 @@ PODS: - React-jsi - React-jsiexecutor - React-microtasksnativemodule + - React-mutationobservernativemodule - React-RCTFBReactNativeSpec - React-webperformancenativemodule - SocketRocket - Yoga - - React-domnativemodule (0.83.6): + - React-domnativemodule (0.83.9): - boost - DoubleConversion - fast_float @@ -660,7 +665,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric (0.83.6): + - React-Fabric (0.83.9): - boost - DoubleConversion - fast_float @@ -674,25 +679,25 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animated (= 0.83.6) - - React-Fabric/animationbackend (= 0.83.6) - - React-Fabric/animations (= 0.83.6) - - React-Fabric/attributedstring (= 0.83.6) - - React-Fabric/bridging (= 0.83.6) - - React-Fabric/componentregistry (= 0.83.6) - - React-Fabric/componentregistrynative (= 0.83.6) - - React-Fabric/components (= 0.83.6) - - React-Fabric/consistency (= 0.83.6) - - React-Fabric/core (= 0.83.6) - - React-Fabric/dom (= 0.83.6) - - React-Fabric/imagemanager (= 0.83.6) - - React-Fabric/leakchecker (= 0.83.6) - - React-Fabric/mounting (= 0.83.6) - - React-Fabric/observers (= 0.83.6) - - React-Fabric/scheduler (= 0.83.6) - - React-Fabric/telemetry (= 0.83.6) - - React-Fabric/templateprocessor (= 0.83.6) - - React-Fabric/uimanager (= 0.83.6) + - React-Fabric/animated (= 0.83.9) + - React-Fabric/animationbackend (= 0.83.9) + - React-Fabric/animations (= 0.83.9) + - React-Fabric/attributedstring (= 0.83.9) + - React-Fabric/bridging (= 0.83.9) + - React-Fabric/componentregistry (= 0.83.9) + - React-Fabric/componentregistrynative (= 0.83.9) + - React-Fabric/components (= 0.83.9) + - React-Fabric/consistency (= 0.83.9) + - React-Fabric/core (= 0.83.9) + - React-Fabric/dom (= 0.83.9) + - React-Fabric/imagemanager (= 0.83.9) + - React-Fabric/leakchecker (= 0.83.9) + - React-Fabric/mounting (= 0.83.9) + - React-Fabric/observers (= 0.83.9) + - React-Fabric/scheduler (= 0.83.9) + - React-Fabric/telemetry (= 0.83.9) + - React-Fabric/templateprocessor (= 0.83.9) + - React-Fabric/uimanager (= 0.83.9) - React-featureflags - React-graphics - React-jsi @@ -704,7 +709,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/animated (0.83.6): + - React-Fabric/animated (0.83.9): - boost - DoubleConversion - fast_float @@ -729,7 +734,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/animationbackend (0.83.6): + - React-Fabric/animationbackend (0.83.9): - boost - DoubleConversion - fast_float @@ -754,7 +759,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/animations (0.83.6): + - React-Fabric/animations (0.83.9): - boost - DoubleConversion - fast_float @@ -779,7 +784,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/attributedstring (0.83.6): + - React-Fabric/attributedstring (0.83.9): - boost - DoubleConversion - fast_float @@ -804,7 +809,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/bridging (0.83.6): + - React-Fabric/bridging (0.83.9): - boost - DoubleConversion - fast_float @@ -829,7 +834,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistry (0.83.6): + - React-Fabric/componentregistry (0.83.9): - boost - DoubleConversion - fast_float @@ -854,7 +859,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistrynative (0.83.6): + - React-Fabric/componentregistrynative (0.83.9): - boost - DoubleConversion - fast_float @@ -879,7 +884,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components (0.83.6): + - React-Fabric/components (0.83.9): - boost - DoubleConversion - fast_float @@ -893,10 +898,10 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.83.6) - - React-Fabric/components/root (= 0.83.6) - - React-Fabric/components/scrollview (= 0.83.6) - - React-Fabric/components/view (= 0.83.6) + - React-Fabric/components/legacyviewmanagerinterop (= 0.83.9) + - React-Fabric/components/root (= 0.83.9) + - React-Fabric/components/scrollview (= 0.83.9) + - React-Fabric/components/view (= 0.83.9) - React-featureflags - React-graphics - React-jsi @@ -908,7 +913,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/legacyviewmanagerinterop (0.83.6): + - React-Fabric/components/legacyviewmanagerinterop (0.83.9): - boost - DoubleConversion - fast_float @@ -933,7 +938,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/root (0.83.6): + - React-Fabric/components/root (0.83.9): - boost - DoubleConversion - fast_float @@ -958,7 +963,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/scrollview (0.83.6): + - React-Fabric/components/scrollview (0.83.9): - boost - DoubleConversion - fast_float @@ -983,7 +988,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/view (0.83.6): + - React-Fabric/components/view (0.83.9): - boost - DoubleConversion - fast_float @@ -1010,7 +1015,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric/consistency (0.83.6): + - React-Fabric/consistency (0.83.9): - boost - DoubleConversion - fast_float @@ -1035,7 +1040,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/core (0.83.6): + - React-Fabric/core (0.83.9): - boost - DoubleConversion - fast_float @@ -1060,7 +1065,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/dom (0.83.6): + - React-Fabric/dom (0.83.9): - boost - DoubleConversion - fast_float @@ -1085,7 +1090,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/imagemanager (0.83.6): + - React-Fabric/imagemanager (0.83.9): - boost - DoubleConversion - fast_float @@ -1110,7 +1115,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/leakchecker (0.83.6): + - React-Fabric/leakchecker (0.83.9): - boost - DoubleConversion - fast_float @@ -1135,7 +1140,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/mounting (0.83.6): + - React-Fabric/mounting (0.83.9): - boost - DoubleConversion - fast_float @@ -1160,7 +1165,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers (0.83.6): + - React-Fabric/observers (0.83.9): - boost - DoubleConversion - fast_float @@ -1174,8 +1179,9 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.83.6) - - React-Fabric/observers/intersection (= 0.83.6) + - React-Fabric/observers/events (= 0.83.9) + - React-Fabric/observers/intersection (= 0.83.9) + - React-Fabric/observers/mutation (= 0.83.9) - React-featureflags - React-graphics - React-jsi @@ -1187,7 +1193,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers/events (0.83.6): + - React-Fabric/observers/events (0.83.9): - boost - DoubleConversion - fast_float @@ -1212,7 +1218,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers/intersection (0.83.6): + - React-Fabric/observers/intersection (0.83.9): - boost - DoubleConversion - fast_float @@ -1237,7 +1243,32 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/scheduler (0.83.6): + - React-Fabric/observers/mutation (0.83.9): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/scheduler (0.83.9): - boost - DoubleConversion - fast_float @@ -1265,7 +1296,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/telemetry (0.83.6): + - React-Fabric/telemetry (0.83.9): - boost - DoubleConversion - fast_float @@ -1290,7 +1321,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/templateprocessor (0.83.6): + - React-Fabric/templateprocessor (0.83.9): - boost - DoubleConversion - fast_float @@ -1315,7 +1346,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager (0.83.6): + - React-Fabric/uimanager (0.83.9): - boost - DoubleConversion - fast_float @@ -1329,7 +1360,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.83.6) + - React-Fabric/uimanager/consistency (= 0.83.9) - React-featureflags - React-graphics - React-jsi @@ -1342,7 +1373,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager/consistency (0.83.6): + - React-Fabric/uimanager/consistency (0.83.9): - boost - DoubleConversion - fast_float @@ -1368,7 +1399,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-FabricComponents (0.83.6): + - React-FabricComponents (0.83.9): - boost - DoubleConversion - fast_float @@ -1383,8 +1414,8 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.83.6) - - React-FabricComponents/textlayoutmanager (= 0.83.6) + - React-FabricComponents/components (= 0.83.9) + - React-FabricComponents/textlayoutmanager (= 0.83.9) - React-featureflags - React-graphics - React-jsi @@ -1397,7 +1428,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components (0.83.6): + - React-FabricComponents/components (0.83.9): - boost - DoubleConversion - fast_float @@ -1412,18 +1443,18 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.83.6) - - React-FabricComponents/components/iostextinput (= 0.83.6) - - React-FabricComponents/components/modal (= 0.83.6) - - React-FabricComponents/components/rncore (= 0.83.6) - - React-FabricComponents/components/safeareaview (= 0.83.6) - - React-FabricComponents/components/scrollview (= 0.83.6) - - React-FabricComponents/components/switch (= 0.83.6) - - React-FabricComponents/components/text (= 0.83.6) - - React-FabricComponents/components/textinput (= 0.83.6) - - React-FabricComponents/components/unimplementedview (= 0.83.6) - - React-FabricComponents/components/virtualview (= 0.83.6) - - React-FabricComponents/components/virtualviewexperimental (= 0.83.6) + - React-FabricComponents/components/inputaccessory (= 0.83.9) + - React-FabricComponents/components/iostextinput (= 0.83.9) + - React-FabricComponents/components/modal (= 0.83.9) + - React-FabricComponents/components/rncore (= 0.83.9) + - React-FabricComponents/components/safeareaview (= 0.83.9) + - React-FabricComponents/components/scrollview (= 0.83.9) + - React-FabricComponents/components/switch (= 0.83.9) + - React-FabricComponents/components/text (= 0.83.9) + - React-FabricComponents/components/textinput (= 0.83.9) + - React-FabricComponents/components/unimplementedview (= 0.83.9) + - React-FabricComponents/components/virtualview (= 0.83.9) + - React-FabricComponents/components/virtualviewexperimental (= 0.83.9) - React-featureflags - React-graphics - React-jsi @@ -1436,7 +1467,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/inputaccessory (0.83.6): + - React-FabricComponents/components/inputaccessory (0.83.9): - boost - DoubleConversion - fast_float @@ -1463,7 +1494,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/iostextinput (0.83.6): + - React-FabricComponents/components/iostextinput (0.83.9): - boost - DoubleConversion - fast_float @@ -1490,7 +1521,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/modal (0.83.6): + - React-FabricComponents/components/modal (0.83.9): - boost - DoubleConversion - fast_float @@ -1517,7 +1548,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/rncore (0.83.6): + - React-FabricComponents/components/rncore (0.83.9): - boost - DoubleConversion - fast_float @@ -1544,7 +1575,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/safeareaview (0.83.6): + - React-FabricComponents/components/safeareaview (0.83.9): - boost - DoubleConversion - fast_float @@ -1571,7 +1602,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/scrollview (0.83.6): + - React-FabricComponents/components/scrollview (0.83.9): - boost - DoubleConversion - fast_float @@ -1598,7 +1629,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/switch (0.83.6): + - React-FabricComponents/components/switch (0.83.9): - boost - DoubleConversion - fast_float @@ -1625,7 +1656,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/text (0.83.6): + - React-FabricComponents/components/text (0.83.9): - boost - DoubleConversion - fast_float @@ -1652,7 +1683,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/textinput (0.83.6): + - React-FabricComponents/components/textinput (0.83.9): - boost - DoubleConversion - fast_float @@ -1679,7 +1710,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/unimplementedview (0.83.6): + - React-FabricComponents/components/unimplementedview (0.83.9): - boost - DoubleConversion - fast_float @@ -1706,7 +1737,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/virtualview (0.83.6): + - React-FabricComponents/components/virtualview (0.83.9): - boost - DoubleConversion - fast_float @@ -1733,7 +1764,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/virtualviewexperimental (0.83.6): + - React-FabricComponents/components/virtualviewexperimental (0.83.9): - boost - DoubleConversion - fast_float @@ -1760,7 +1791,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/textlayoutmanager (0.83.6): + - React-FabricComponents/textlayoutmanager (0.83.9): - boost - DoubleConversion - fast_float @@ -1787,7 +1818,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricImage (0.83.6): + - React-FabricImage (0.83.9): - boost - DoubleConversion - fast_float @@ -1796,21 +1827,21 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - RCTRequired (= 0.83.6) - - RCTTypeSafety (= 0.83.6) + - RCTRequired (= 0.83.9) + - RCTTypeSafety (= 0.83.9) - React-Fabric - React-featureflags - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.83.6) + - React-jsiexecutor (= 0.83.9) - React-logger - React-rendererdebug - React-utils - ReactCommon - SocketRocket - Yoga - - React-featureflags (0.83.6): + - React-featureflags (0.83.9): - boost - DoubleConversion - fast_float @@ -1819,7 +1850,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-featureflagsnativemodule (0.83.6): + - React-featureflagsnativemodule (0.83.9): - boost - DoubleConversion - fast_float @@ -1834,7 +1865,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket - - React-graphics (0.83.6): + - React-graphics (0.83.9): - boost - DoubleConversion - fast_float @@ -1847,7 +1878,7 @@ PODS: - React-jsiexecutor - React-utils - SocketRocket - - React-hermes (0.83.6): + - React-hermes (0.83.9): - boost - DoubleConversion - fast_float @@ -1856,17 +1887,17 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.83.6) + - React-cxxreact (= 0.83.9) - React-jsi - - React-jsiexecutor (= 0.83.6) + - React-jsiexecutor (= 0.83.9) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-oscompat - - React-perflogger (= 0.83.6) + - React-perflogger (= 0.83.9) - React-runtimeexecutor - SocketRocket - - React-idlecallbacksnativemodule (0.83.6): + - React-idlecallbacksnativemodule (0.83.9): - boost - DoubleConversion - fast_float @@ -1882,7 +1913,7 @@ PODS: - React-runtimescheduler - ReactCommon/turbomodule/core - SocketRocket - - React-ImageManager (0.83.6): + - React-ImageManager (0.83.9): - boost - DoubleConversion - fast_float @@ -1897,7 +1928,7 @@ PODS: - React-rendererdebug - React-utils - SocketRocket - - React-intersectionobservernativemodule (0.83.6): + - React-intersectionobservernativemodule (0.83.9): - boost - DoubleConversion - fast_float @@ -1918,7 +1949,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-jserrorhandler (0.83.6): + - React-jserrorhandler (0.83.9): - boost - DoubleConversion - fast_float @@ -1933,7 +1964,7 @@ PODS: - React-jsi - ReactCommon/turbomodule/bridging - SocketRocket - - React-jsi (0.83.6): + - React-jsi (0.83.9): - boost - DoubleConversion - fast_float @@ -1943,7 +1974,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsiexecutor (0.83.6): + - React-jsiexecutor (0.83.9): - boost - DoubleConversion - fast_float @@ -1962,7 +1993,7 @@ PODS: - React-runtimeexecutor - React-utils - SocketRocket - - React-jsinspector (0.83.6): + - React-jsinspector (0.83.9): - boost - DoubleConversion - fast_float @@ -1977,11 +2008,11 @@ PODS: - React-jsinspectornetwork - React-jsinspectortracing - React-oscompat - - React-perflogger (= 0.83.6) + - React-perflogger (= 0.83.9) - React-runtimeexecutor - React-utils - SocketRocket - - React-jsinspectorcdp (0.83.6): + - React-jsinspectorcdp (0.83.9): - boost - DoubleConversion - fast_float @@ -1990,7 +2021,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsinspectornetwork (0.83.6): + - React-jsinspectornetwork (0.83.9): - boost - DoubleConversion - fast_float @@ -2000,7 +2031,7 @@ PODS: - RCT-Folly/Fabric - React-jsinspectorcdp - SocketRocket - - React-jsinspectortracing (0.83.6): + - React-jsinspectortracing (0.83.9): - boost - DoubleConversion - fast_float @@ -2015,7 +2046,7 @@ PODS: - React-timing - React-utils - SocketRocket - - React-jsitooling (0.83.6): + - React-jsitooling (0.83.9): - boost - DoubleConversion - fast_float @@ -2023,18 +2054,18 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.83.6) + - React-cxxreact (= 0.83.9) - React-debug - - React-jsi (= 0.83.6) + - React-jsi (= 0.83.9) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-runtimeexecutor - React-utils - SocketRocket - - React-jsitracing (0.83.6): + - React-jsitracing (0.83.9): - React-jsi - - React-logger (0.83.6): + - React-logger (0.83.9): - boost - DoubleConversion - fast_float @@ -2043,7 +2074,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-Mapbuffer (0.83.6): + - React-Mapbuffer (0.83.9): - boost - DoubleConversion - fast_float @@ -2053,7 +2084,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-microtasksnativemodule (0.83.6): + - React-microtasksnativemodule (0.83.9): - boost - DoubleConversion - fast_float @@ -2067,6 +2098,27 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket + - React-mutationobservernativemodule (0.83.9): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-cxxreact + - React-Fabric + - React-Fabric/bridging + - React-Fabric/observers/mutation + - React-featureflags + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - React-runtimeexecutor + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga - react-native-cameraroll (7.10.2): - boost - DoubleConversion @@ -2371,7 +2423,7 @@ PODS: - Yoga - react-native-restart (0.0.27): - React-Core - - react-native-safe-area-context (5.6.2): + - react-native-safe-area-context (5.8.0): - boost - DoubleConversion - fast_float @@ -2389,8 +2441,8 @@ PODS: - 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.8.0) + - react-native-safe-area-context/fabric (= 5.8.0) - React-NativeModulesApple - React-RCTFabric - React-renderercss @@ -2401,7 +2453,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - react-native-safe-area-context/common (5.6.2): + - react-native-safe-area-context/common (5.8.0): - boost - DoubleConversion - fast_float @@ -2429,7 +2481,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - react-native-safe-area-context/fabric (5.6.2): + - react-native-safe-area-context/fabric (5.8.0): - boost - DoubleConversion - fast_float @@ -2574,7 +2626,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-NativeModulesApple (0.83.6): + - React-NativeModulesApple (0.83.9): - boost - DoubleConversion - fast_float @@ -2595,7 +2647,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - React-networking (0.83.6): + - React-networking (0.83.9): - boost - DoubleConversion - fast_float @@ -2609,8 +2661,8 @@ PODS: - React-performancetimeline - React-timing - SocketRocket - - React-oscompat (0.83.6) - - React-perflogger (0.83.6): + - React-oscompat (0.83.9) + - React-perflogger (0.83.9): - boost - DoubleConversion - fast_float @@ -2619,7 +2671,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-performancecdpmetrics (0.83.6): + - React-performancecdpmetrics (0.83.9): - boost - DoubleConversion - fast_float @@ -2633,7 +2685,7 @@ PODS: - React-runtimeexecutor - React-timing - SocketRocket - - React-performancetimeline (0.83.6): + - React-performancetimeline (0.83.9): - boost - DoubleConversion - fast_float @@ -2646,9 +2698,9 @@ PODS: - React-perflogger - React-timing - SocketRocket - - React-RCTActionSheet (0.83.6): - - React-Core/RCTActionSheetHeaders (= 0.83.6) - - React-RCTAnimation (0.83.6): + - React-RCTActionSheet (0.83.9): + - React-Core/RCTActionSheetHeaders (= 0.83.9) + - React-RCTAnimation (0.83.9): - boost - DoubleConversion - fast_float @@ -2664,7 +2716,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTAppDelegate (0.83.6): + - React-RCTAppDelegate (0.83.9): - boost - DoubleConversion - fast_float @@ -2698,7 +2750,7 @@ PODS: - React-utils - ReactCommon - SocketRocket - - React-RCTBlob (0.83.6): + - React-RCTBlob (0.83.9): - boost - DoubleConversion - fast_float @@ -2717,7 +2769,7 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTFabric (0.83.6): + - React-RCTFabric (0.83.9): - boost - DoubleConversion - fast_float @@ -2754,7 +2806,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-RCTFBReactNativeSpec (0.83.6): + - React-RCTFBReactNativeSpec (0.83.9): - boost - DoubleConversion - fast_float @@ -2768,10 +2820,10 @@ PODS: - React-Core - React-jsi - React-NativeModulesApple - - React-RCTFBReactNativeSpec/components (= 0.83.6) + - React-RCTFBReactNativeSpec/components (= 0.83.9) - ReactCommon - SocketRocket - - React-RCTFBReactNativeSpec/components (0.83.6): + - React-RCTFBReactNativeSpec/components (0.83.9): - boost - DoubleConversion - fast_float @@ -2794,7 +2846,7 @@ PODS: - ReactCommon - SocketRocket - Yoga - - React-RCTImage (0.83.6): + - React-RCTImage (0.83.9): - boost - DoubleConversion - fast_float @@ -2810,14 +2862,14 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTLinking (0.83.6): - - React-Core/RCTLinkingHeaders (= 0.83.6) - - React-jsi (= 0.83.6) + - React-RCTLinking (0.83.9): + - React-Core/RCTLinkingHeaders (= 0.83.9) + - React-jsi (= 0.83.9) - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule/core (= 0.83.6) - - React-RCTNetwork (0.83.6): + - ReactCommon/turbomodule/core (= 0.83.9) + - React-RCTNetwork (0.83.9): - boost - DoubleConversion - fast_float @@ -2837,7 +2889,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTRuntime (0.83.6): + - React-RCTRuntime (0.83.9): - boost - DoubleConversion - fast_float @@ -2859,7 +2911,7 @@ PODS: - React-RuntimeHermes - React-utils - SocketRocket - - React-RCTSettings (0.83.6): + - React-RCTSettings (0.83.9): - boost - DoubleConversion - fast_float @@ -2874,10 +2926,10 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTText (0.83.6): - - React-Core/RCTTextHeaders (= 0.83.6) + - React-RCTText (0.83.9): + - React-Core/RCTTextHeaders (= 0.83.9) - Yoga - - React-RCTVibration (0.83.6): + - React-RCTVibration (0.83.9): - boost - DoubleConversion - fast_float @@ -2891,11 +2943,11 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-rendererconsistency (0.83.6) - - React-renderercss (0.83.6): + - React-rendererconsistency (0.83.9) + - React-renderercss (0.83.9): - React-debug - React-utils - - React-rendererdebug (0.83.6): + - React-rendererdebug (0.83.9): - boost - DoubleConversion - fast_float @@ -2905,7 +2957,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-RuntimeApple (0.83.6): + - React-RuntimeApple (0.83.9): - boost - DoubleConversion - fast_float @@ -2934,7 +2986,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-RuntimeCore (0.83.6): + - React-RuntimeCore (0.83.9): - boost - DoubleConversion - fast_float @@ -2956,7 +3008,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-runtimeexecutor (0.83.6): + - React-runtimeexecutor (0.83.9): - boost - DoubleConversion - fast_float @@ -2966,10 +3018,10 @@ PODS: - RCT-Folly/Fabric - React-debug - React-featureflags - - React-jsi (= 0.83.6) + - React-jsi (= 0.83.9) - React-utils - SocketRocket - - React-RuntimeHermes (0.83.6): + - React-RuntimeHermes (0.83.9): - boost - DoubleConversion - fast_float @@ -2990,7 +3042,7 @@ PODS: - React-runtimeexecutor - React-utils - SocketRocket - - React-runtimescheduler (0.83.6): + - React-runtimescheduler (0.83.9): - boost - DoubleConversion - fast_float @@ -3012,9 +3064,9 @@ PODS: - React-timing - React-utils - SocketRocket - - React-timing (0.83.6): + - React-timing (0.83.9): - React-debug - - React-utils (0.83.6): + - React-utils (0.83.9): - boost - DoubleConversion - fast_float @@ -3024,9 +3076,9 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - React-debug - - React-jsi (= 0.83.6) + - React-jsi (= 0.83.9) - SocketRocket - - React-webperformancenativemodule (0.83.6): + - React-webperformancenativemodule (0.83.9): - boost - DoubleConversion - fast_float @@ -3043,9 +3095,9 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/core - SocketRocket - - ReactAppDependencyProvider (0.83.6): + - ReactAppDependencyProvider (0.83.9): - ReactCodegen - - ReactCodegen (0.83.6): + - ReactCodegen (0.83.9): - boost - DoubleConversion - fast_float @@ -3071,7 +3123,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - ReactCommon (0.83.6): + - ReactCommon (0.83.9): - boost - DoubleConversion - fast_float @@ -3079,9 +3131,9 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - ReactCommon/turbomodule (= 0.83.6) + - ReactCommon/turbomodule (= 0.83.9) - SocketRocket - - ReactCommon/turbomodule (0.83.6): + - ReactCommon/turbomodule (0.83.9): - boost - DoubleConversion - fast_float @@ -3090,15 +3142,15 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.83.6) - - React-cxxreact (= 0.83.6) - - React-jsi (= 0.83.6) - - React-logger (= 0.83.6) - - React-perflogger (= 0.83.6) - - ReactCommon/turbomodule/bridging (= 0.83.6) - - ReactCommon/turbomodule/core (= 0.83.6) + - React-callinvoker (= 0.83.9) + - React-cxxreact (= 0.83.9) + - React-jsi (= 0.83.9) + - React-logger (= 0.83.9) + - React-perflogger (= 0.83.9) + - ReactCommon/turbomodule/bridging (= 0.83.9) + - ReactCommon/turbomodule/core (= 0.83.9) - SocketRocket - - ReactCommon/turbomodule/bridging (0.83.6): + - ReactCommon/turbomodule/bridging (0.83.9): - boost - DoubleConversion - fast_float @@ -3107,13 +3159,13 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.83.6) - - React-cxxreact (= 0.83.6) - - React-jsi (= 0.83.6) - - React-logger (= 0.83.6) - - React-perflogger (= 0.83.6) + - React-callinvoker (= 0.83.9) + - React-cxxreact (= 0.83.9) + - React-jsi (= 0.83.9) + - React-logger (= 0.83.9) + - React-perflogger (= 0.83.9) - SocketRocket - - ReactCommon/turbomodule/core (0.83.6): + - ReactCommon/turbomodule/core (0.83.9): - boost - DoubleConversion - fast_float @@ -3122,18 +3174,18 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.83.6) - - React-cxxreact (= 0.83.6) - - React-debug (= 0.83.6) - - React-featureflags (= 0.83.6) - - React-jsi (= 0.83.6) - - React-logger (= 0.83.6) - - React-perflogger (= 0.83.6) - - React-utils (= 0.83.6) + - React-callinvoker (= 0.83.9) + - React-cxxreact (= 0.83.9) + - React-debug (= 0.83.9) + - React-featureflags (= 0.83.9) + - React-jsi (= 0.83.9) + - React-logger (= 0.83.9) + - React-perflogger (= 0.83.9) + - React-utils (= 0.83.9) - SocketRocket - ReactNativeExceptionHandler (2.10.10): - React-Core - - ReactNativeFs (2.36.1): + - ReactNativeFs (2.38.2): - boost - DoubleConversion - fast_float @@ -3161,6 +3213,35 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga + - ReactNativeLegal (1.6.3): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - LicensePlist + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga - RealmJS (20.2.0): - React - RNAppleAuthentication (2.4.0): @@ -3929,6 +4010,7 @@ 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-cameraroll (from `../node_modules/@react-native-camera-roll/camera-roll`)" - react-native-config (from `../node_modules/react-native-config`) - react-native-geocoder-reborn (from `../node_modules/react-native-geocoder-reborn`) @@ -3984,6 +4066,7 @@ DEPENDENCIES: - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - ReactNativeExceptionHandler (from `../node_modules/react-native-exception-handler`) - "ReactNativeFs (from `../node_modules/@dr.pogodin/react-native-fs`)" + - ReactNativeLegal (from `../node_modules/react-native-legal`) - RealmJS (from `../node_modules/realm`) - "RNAppleAuthentication (from `../node_modules/@invertase/react-native-apple-authentication`)" - RNAudioRecorderPlayer (from `../node_modules/react-native-audio-recorder-player`) @@ -4031,6 +4114,7 @@ SPEC REPOS: - GoogleUtilities - GTMAppAuth - GTMSessionFetcher + - LicensePlist - Mute - nanopb - PromisesObjC @@ -4132,6 +4216,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-cameraroll: :path: "../node_modules/@react-native-camera-roll/camera-roll" react-native-config: @@ -4242,6 +4328,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-exception-handler" ReactNativeFs: :path: "../node_modules/@dr.pogodin/react-native-fs" + ReactNativeLegal: + :path: "../node_modules/react-native-legal" RealmJS: :path: "../node_modules/realm" RNAppleAuthentication: @@ -4299,7 +4387,7 @@ SPEC CHECKSUMS: Exify: 2f39027dc3fa5809c3fbbf32e11ba9d3d755a85b fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 FasterImage: 0543472141d8f64716efdeb3bb886a6fe814f3b9 - FBLazyVector: 06b1c8278e6e1b31ef68e9e14c296b7872e79e48 + FBLazyVector: 3bcb3055086e5d90a12f0fe1668e79f6eceabc17 Firebase: 99f203d3a114c6ba591f3b32263a9626e450af65 FirebaseABTesting: fae111fe5476bd9e249968d0c85cd036385404ba FirebaseAnalytics: ef2970f65f3a2807e8f47a49cf3b8719d53e9fce @@ -4321,47 +4409,49 @@ SPEC CHECKSUMS: GTMAppAuth: f69bd07d68cd3b766125f7e072c45d7340dea0de GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6 hermes-engine: 519ba93bfb8ec86f1e75f691899c3efcd409c449 + LicensePlist: 91465ee0724beab897ed5482775c5d3932a3f379 Mute: 20135a96076f140cc82bfc8b810e2d6150d8ec7e nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851 RCT-Folly: b29feb752b08042c62badaef7d453f3bb5e6ae23 - RCTDeprecation: c5e70bcdbc24b9edbca24b96f3997319f01ba8fb - RCTRequired: 7fbf6c9b97de59aab5c6a1ca5a5d91555d5ba403 - RCTSwiftUI: cff211c5e4d94e491dda240d663b8effd25296d7 - RCTSwiftUIWrapper: b731e4d3257895dfcc4bbe2dc3ae24249cd55f6e - RCTTypeSafety: 5937ceaab149032168467c48f06598e6aa99add2 - React: 9b033c7a99e1c8eec40960b6b2e6844e011e8bd1 - React-callinvoker: a860be36304d1f9fcd3b9fe6180daddd912bd2d2 + RCTDeprecation: c7d33f6bc08dbb8be7dfa70d219bfb034480a406 + RCTRequired: 42b13c9504609bae9a9f65673a6b4fcbd8d07bd1 + RCTSwiftUI: cef2010e1e5e699600b2064d3aa702e53c35816c + RCTSwiftUIWrapper: 18f0f0601b556e27593928c36697d5f651db760f + RCTTypeSafety: c5fd6a8092bee25eaa31d4cca03794e902b5fdfd + React: 6c36d83b2afecc1d45ec2a637158750edad20d87 + React-callinvoker: 813372c3165324939d57b849f2db0c99390b9aac React-Codegen: 4b8b4817cea7a54b83851d4c1f91f79aa73de30a - React-Core: a133a20afa1ab940309453cba1a3e4951d8f1730 - React-CoreModules: 045ee1aeb798a3423707acaa710330bf31577c26 - React-cxxreact: 144ac8b603c13649e02189dc2db525dfe3e588f0 - React-debug: dad3152bc699ba6f6f4c3a3f8826245283e7d7d2 - React-defaultsnativemodule: d508d720e97a961c80930a3dc4a3cca0f36b343e - React-domnativemodule: bc2c03de360acea444b8d69ea8669a05d565116a - React-Fabric: 73628f7a5075f0b8ebaa845bcc8ed046d938da1b - React-FabricComponents: d2ed55c111edd45cb1f3c0bdfb56b20dc5a62d4b - React-FabricImage: e3601966e9e4aae605a72001ad556564e112824c - React-featureflags: c6bbf818478de2d0ec7ad8d5bdfc04f3e2b1b5dd - React-featureflagsnativemodule: 4962a5b93ac2dd548e6bb51641c2aefc329d6357 - React-graphics: 254fcded6fa01d0f6887aabef4a3fcde4844f3a1 - React-hermes: dcf2af884219f74bc959ee2638c9646b04e52b93 - React-idlecallbacksnativemodule: 13be4d7a80aab451a14535a562d49701c4e14caf - React-ImageManager: dc221345432f00d8bd05fe76bba8c7c1e51119f1 - React-intersectionobservernativemodule: 6ecffd83c5e288e772e10963d2408f1bdfae4855 - React-jserrorhandler: ebce0be9a318a3b223cda8f85c05d7e37b095456 - React-jsi: 2a2c17e5a7c75b8ce3795c894a1986b588939690 - React-jsiexecutor: 8f488f898c1ee018bc56cbf4f826478ad768b7c4 - React-jsinspector: 0da9a63d4e9a3d60e6a54bfc6d2abd2df5f097aa - React-jsinspectorcdp: 227aea8eb6a2be0accec8bc4d7ced1396cee6fdb - React-jsinspectornetwork: daccd0d9ee57159ef0de2ed7dd02b2ab9849d100 - React-jsinspectortracing: 3cb2baabc65c118d8200d357caf35ae0b9ae86ee - React-jsitooling: ceb2a9aed506d2bf732bd38be8a757ae516962c1 - React-jsitracing: 5b3953bc7001abca1acb02ece754e94008d892fa - React-logger: 984bd45f1fddb75e49627ca13c9470a4f4abe7a7 - React-Mapbuffer: 07b91c9c46b1b6c545c80b718aee4b60ace4b39c - React-microtasksnativemodule: bae8aab9e55b0961eba139e54a0246d4e0be03b9 + React-Core: b2a189a7e16fc88a768908152201f14379708ac0 + React-CoreModules: 7ff1464d8c75a63c4028571217e4f4d01b008919 + React-cxxreact: 06aed26685cbd29a55d1648a14f13491549cea9d + React-debug: 2233bb5bc031fe8dfb43d320f907d30fd806c916 + React-defaultsnativemodule: 8789f6909cbe4168530205651ff3d8bb37ab1804 + React-domnativemodule: c0617a3935de3d1253743822d05c74371e304e36 + React-Fabric: bf1bc57cbadda2ed24c58c105931bfc2ddbb9dc3 + React-FabricComponents: 213b169045fe6d1a2d770684eba95ead04eebe1b + React-FabricImage: 62eacd410a24b46841d26a448f712e1894f716e2 + React-featureflags: dc72c24429f541f9b452e585906c38e873db4b4d + React-featureflagsnativemodule: bd56afad1dccd0beab5b6e7c0d82cce227409aa3 + React-graphics: 138ade7adcdc81af93caceae45a17b9002d9873f + React-hermes: f241babdb4e8595933d856ab78f5d5d49218cac0 + React-idlecallbacksnativemodule: cff02831f4fc3bf1ad9655f323a38195fd4c1ffd + React-ImageManager: 3b6ba10bd79616141fe10fd456c2089be409f6de + React-intersectionobservernativemodule: 5d81fd060120d91932d2ebd2b38be3436591eb47 + React-jserrorhandler: b6aab46da066ce676589a13b0ecb443dd111f4bc + React-jsi: ee1dbc3b2635ce07783e6638656c0b472573bb48 + React-jsiexecutor: 05fe7918c713a64a39474915f725fe0e61d65309 + React-jsinspector: 16c831b281c23733684ac1fdc06ef63bba6152b0 + React-jsinspectorcdp: a010c4cd959138d35936e0c8518f4d91d433004d + React-jsinspectornetwork: 1325a05bcf0f1ffc9913dd318935d927b5cccc67 + React-jsinspectortracing: 55107028cf38bfb871ddb68c35e3be65c06005be + React-jsitooling: 1a044a33269f5d708e13b9b9050cd2c23b764d00 + React-jsitracing: dd208bbb018a207bb2b963382e95ec77629e899b + React-logger: cf2064f903777a5bdca904c4265f17396d4d8568 + React-Mapbuffer: 6a42f63da7904746685b9f2785ef0e3e22f2d345 + React-microtasksnativemodule: 3f487e67e2e57ed19b0b450356b6080bf37827de + React-mutationobservernativemodule: c719720b2b995b81cae45c9635c6ecfbd8b1f25a react-native-cameraroll: ae31ba7ee17d31c5ee05d7bb248742e3af482783 react-native-config: 916e53e7333d5b2bcb7ee9882f5605143b4fc4c5 react-native-geocoder-reborn: a3c3d8460910309e750609c373b6887ec6f67a8f @@ -4377,46 +4467,47 @@ SPEC CHECKSUMS: react-native-orientation-locker: dbd3f6ddbe9e62389cb0807dc2af63f6c36dec36 react-native-performance: a7a65d0b0f3055c5db33e1433e4345143ef6a100 react-native-restart: 0bc732f4461709022a742bb29bcccf6bbc5b4863 - react-native-safe-area-context: 0a3b034bb63a5b684dd2f5fffd3c90ef6ed41ee8 + react-native-safe-area-context: 7794f18549493f369e4ca4b3cd66843bd050ac66 react-native-slider: 05e7080478df08489251c2a6739a0d5628b7c198 react-native-volume-manager: cdd3c3857158c1df7b9fbea071a9946395cee06c react-native-webview: d73728424a0e24989d71ffdc6fcf15d5f74ff4a2 react-native-worklets-core: 835d47ccea7d1fb664d2f9bb433a7c4307e69234 - React-NativeModulesApple: 2a5867780e763d07b598c4413d524d257641ff81 - React-networking: 8af3f9e7f3fc1b0788a5e70801218be3b85f0b98 - React-oscompat: f518cb4925e21c3ae08051c060dd054273613a4f - React-perflogger: ccc02e28f360ccaa5cdb4a7372e3d2bd9efb283f - React-performancecdpmetrics: ac711bb882a917bbb2aefdbe417204a0f07fa89a - React-performancetimeline: b9767d02431e4563118b3aadbf743ca5fc964c3b - React-RCTActionSheet: 46f6d7a9001ed24897e6388c88c65e8d22f2dac5 - React-RCTAnimation: e6f53e904627b1139e9e3954feba4306bde2ab57 - React-RCTAppDelegate: aa6fcd38ed16393d8a5e3198c73f6f25420504a6 - React-RCTBlob: 06afb6e3c79acc0965fdfed0790690ada1c0ce04 - React-RCTFabric: 17717e1e3babcb0465d0d7052e1a75720a62197d - React-RCTFBReactNativeSpec: d60791673aa78f5aa4f62b4fdbcc1d74eae54b0b - React-RCTImage: f3b2518d733229ec2f39f7a5c6b194fe15909438 - React-RCTLinking: 8fb6514d82535f07d9c4b20facb8d3f9f92e5140 - React-RCTNetwork: 3e5870de79ffe04e3c483d0ee934354af0bba582 - React-RCTRuntime: 133352c5fa504748fafc26d4394968b4aa5a7c10 - React-RCTSettings: 2d2fa1bc1841b17aaac2f30aaaf51a3208759258 - React-RCTText: c6c767054f6857fa137e85ae0714384da68e91af - React-RCTVibration: 932b4434f96a8ad9020ef3c231453547d69dd4e2 - React-rendererconsistency: 9280f3e99b036979c7d7dd1f2822589df03616f4 - React-renderercss: b1fd44db38ec257314ee5d19e4d91081652d9ae9 - React-rendererdebug: 91dcaefc66ab710842949542cb1aa63b212f998f - React-RuntimeApple: ae2484d4bbb8e74f5bf8861d052bded7d34e96d9 - React-RuntimeCore: 34be9f0933cfecb4ece9513d4136bae84721a75f - React-runtimeexecutor: a56b8e649b7d2865460027caadb81712053a94dc - React-RuntimeHermes: ddc61ba7e152a28ff9e87cb033c4afc340d25ce0 - React-runtimescheduler: 07b7990ee67636fb298242eca9165b1bf5f16b72 - React-timing: 52deaf05dc87ee1d90a2799db8c50b5ce240527a - React-utils: aedf1a66e416a4a75cecd6418507cd0bc82cf740 - React-webperformancenativemodule: 8303a760e189e83d8edb2be3099c6278b3a2957b - ReactAppDependencyProvider: 3ec8fc5d32ad422f5b805523a5a5ea5556d8b3a2 - ReactCodegen: cc3d2fde2f7d3674ff992ad73700aa6854c69000 - ReactCommon: fe0c37881180b5366786f21671908395be7e34ea + React-NativeModulesApple: b917ca8e4702a3c7f283be6c5ebbdf0af8516c61 + React-networking: fd886fda5c01a731b6d2d8660bf8632047a3ca4e + React-oscompat: 4524d8ccb12b7f07beb12e2ea9c5ea55b55d604b + React-perflogger: 2b2a2bc9173796cc58fece00d3df1c99b39c2b8e + React-performancecdpmetrics: f429b2e52df3c685b370174a72de83ac18a507f8 + React-performancetimeline: 668440472cf7d7bdedd143df19300eddb7349ca3 + React-RCTActionSheet: e1c8afe045a25f3a8d73da52bb28e6186718e206 + React-RCTAnimation: 7681b2367405b53d4e91ac76b36bd8fb1ce50a53 + React-RCTAppDelegate: e8d05c439051bd6860638e59fc8fb81cf3ac0f9b + React-RCTBlob: fa0e5ab89883e4bf5eb05e534b68ce2951ca514b + React-RCTFabric: 349e43b824b57abd6a927f76d314906970abd10d + React-RCTFBReactNativeSpec: 63a19207a5df13c3302fe55ca075774059bf7b15 + React-RCTImage: 8d32ede0e9f07aa7a446a54e924f23b3347d2960 + React-RCTLinking: ef0c625de1ce2b78189cb65391888628b5d2d6ed + React-RCTNetwork: 5e6a3678c23c0b8c4e2b69e85551215f1fcfe2b2 + React-RCTRuntime: 1d05620bbf1864e532f627fd7cd6421c2a6ca091 + React-RCTSettings: c7f2c32bee82c3f4e757d779fff3c2bf47cc7e46 + React-RCTText: cc134029a95773223502a9aeac47300586426ca5 + React-RCTVibration: 9ed48065a50d4a4311aed5c17272061f2cae910b + React-rendererconsistency: 345e67ceac81704cab35ca5f801ad1661b593121 + React-renderercss: f35b5778f9bd261a86095848152c2a2c9502b2c7 + React-rendererdebug: 2dfeef9bbc4b8b80acae1bf1a03a7928daf89a92 + React-RuntimeApple: 40d6558ab7dbf25b506da18852c8385da329967a + React-RuntimeCore: 942e1e98e27631e4c8e5c94f8d590f3c96aec6d2 + React-runtimeexecutor: 17f189fa2d15661afcbbd5a0364edbcd477cb8ae + React-RuntimeHermes: d8069161558d2c2a728e307e6fd29d9b9036cd9a + React-runtimescheduler: 5c845952ec91506065708414a034ebd4ea4150ed + React-timing: a1841068ce1738ece7dc4e4fb7f26757d56bec13 + React-utils: 792dd487537d43052fe2effa88bfaee6588076d4 + React-webperformancenativemodule: 4ec1e48bc997139f69b6ac3a127266ccb28a29bf + ReactAppDependencyProvider: 87593e9dfdba8dac1d7b2af1af05f0eff2a05684 + ReactCodegen: 0d7a23448e4c6a3547fe36b961b46156824df3db + ReactCommon: e3671aa40073668776ada8a2c328060613e33d00 ReactNativeExceptionHandler: a23922ca00122b050ae9412f960061791c232c47 - ReactNativeFs: 5a434035a6290b212fe23bdeb2eed70709df129d + ReactNativeFs: 89af775f1e97e80f486bc94693b11fceaba5d0dc + ReactNativeLegal: 7993c5eb52ac2874216ad0e21e351396f8d8ab0e RealmJS: 1c37c6bdfe060f4caa0f9175aa0eedb962622ee1 RNAppleAuthentication: 8d313d93fe2238d6b7ff0a39c67ebcf298d96653 RNAudioRecorderPlayer: b5ed41ccfe72a211a870bfe09ab36c046eb27d2a @@ -4441,7 +4532,7 @@ SPEC CHECKSUMS: SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 VisionCamera: 0044a94f7489f19e19d5938e97dfc36f4784af3c VisionCameraPluginInatVision: d29c27577b88822f59906fd8d3550054cffdbe55 - Yoga: 964ea66efa6611f56b4d857e68cc32c7212059bc + Yoga: e9fea23bf9b2766818ce9a8df72f584bf5ad36cd PODFILE CHECKSUM: 73e24a8590e365c9fec451abf69476ae07116d98 diff --git a/ios/Settings.bundle/Root.plist b/ios/Settings.bundle/Root.plist new file mode 100644 index 000000000..924ed2c0f --- /dev/null +++ b/ios/Settings.bundle/Root.plist @@ -0,0 +1,19 @@ + + + + + StringsTable + Root + PreferenceSpecifiers + + + Type + PSChildPaneSpecifier + Title + Licenses + File + com.mono0926.LicensePlist + + + + \ No newline at end of file diff --git a/ios/iNaturalistReactNative.xcodeproj/project.pbxproj b/ios/iNaturalistReactNative.xcodeproj/project.pbxproj index 3f4899f5c..738513971 100644 --- a/ios/iNaturalistReactNative.xcodeproj/project.pbxproj +++ b/ios/iNaturalistReactNative.xcodeproj/project.pbxproj @@ -18,6 +18,7 @@ 197A169E2A7C2567001A03DC /* taxonomy.json in Resources */ = {isa = PBXBuildFile; fileRef = 197A169C2A7C2567001A03DC /* taxonomy.json */; }; 3DE2C0F71E184822B561A1ED /* Lato-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3A54425709BB4844AFBC680D /* Lato-Italic.ttf */; }; 54EB1EFEC1F74152902EED02 /* Lato-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8C2D97D72EED451C887998A8 /* Lato-BoldItalic.ttf */; }; + 716F7BDCD8B943479083CFAC /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 26972DBD235E42B68E3D5DBC /* Settings.bundle */; }; 7196CC2D6D0934D0F4255B7E /* Pods_iNaturalistReactNative.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05015AADE3E87F2B8A8D3211 /* Pods_iNaturalistReactNative.framework */; }; 725BA058C5384A9185E8036A /* Lato-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 00752F4ADC554701A45A848A /* Lato-Bold.ttf */; }; 74A25CA93620CDD621ADDBE3 /* Pods_iNaturalistReactNative_ShareExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F15C1390617A309CE0A194B2 /* Pods_iNaturalistReactNative_ShareExtension.framework */; }; @@ -76,6 +77,7 @@ 19916F1F2B4F1871000A2D91 /* iNaturalistReactNativeRelease.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = iNaturalistReactNativeRelease.entitlements; path = iNaturalistReactNative/iNaturalistReactNativeRelease.entitlements; sourceTree = ""; }; 19A5877328F8E3310016D128 /* iNaturalistReactNative-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iNaturalistReactNative-Bridging-Header.h"; sourceTree = ""; }; 2026574BDF8A628C18EE2CBC /* Pods-iNaturalistReactNative-ShareExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iNaturalistReactNative-ShareExtension.debug.xcconfig"; path = "Target Support Files/Pods-iNaturalistReactNative-ShareExtension/Pods-iNaturalistReactNative-ShareExtension.debug.xcconfig"; sourceTree = ""; }; + 26972DBD235E42B68E3D5DBC /* Settings.bundle */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = "wrapper.plug-in"; name = Settings.bundle; path = Settings.bundle; sourceTree = ""; }; 3A3C226CE960FF6279D7C2EA /* Pods-iNaturalistReactNative.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iNaturalistReactNative.release.xcconfig"; path = "Target Support Files/Pods-iNaturalistReactNative/Pods-iNaturalistReactNative.release.xcconfig"; sourceTree = ""; }; 3A54425709BB4844AFBC680D /* Lato-Italic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Lato-Italic.ttf"; path = "../assets/fonts/Lato-Italic.ttf"; sourceTree = ""; }; 3A9BAF07FCF24F668E2EF5AB /* Lato-Medium.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Lato-Medium.ttf"; path = "../assets/fonts/Lato-Medium.ttf"; sourceTree = ""; }; @@ -136,6 +138,7 @@ 13B07FB61A68108700A75B9A /* Info.plist */, 13B07FB71A68108700A75B9A /* main.m */, 19A5877328F8E3310016D128 /* iNaturalistReactNative-Bridging-Header.h */, + 26972DBD235E42B68E3D5DBC /* Settings.bundle */, ); name = iNaturalistReactNative; sourceTree = ""; @@ -239,6 +242,7 @@ buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "iNaturalistReactNative" */; buildPhases = ( 25ED5682477FA4EE576828CE /* [CP] Check Pods Manifest.lock */, + 5959D1723F6546678B1239AA /* Generate licenses with LicensePlist */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, @@ -334,6 +338,7 @@ E5DFC1C6FBFA45739CE91C69 /* Lato-MediumItalic.ttf in Resources */, AE4DC81B3A87484CB3FD6750 /* Lato-Regular.ttf in Resources */, F0B9E287B2F441548F4A2DCB /* INatIcon.ttf in Resources */, + 716F7BDCD8B943479083CFAC /* Settings.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -405,6 +410,20 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-iNaturalistReactNative/Pods-iNaturalistReactNative-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + 5959D1723F6546678B1239AA /* Generate licenses with LicensePlist */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Generate licenses with LicensePlist"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "${PODS_ROOT}/LicensePlist/license-plist --add-version-numbers --output-path ./Settings.bundle"; + }; 8A9262B138E093B4963B9296 /* [CP-User] [RNFB] Core Configuration */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -529,7 +548,7 @@ CODE_SIGN_ENTITLEMENTS = iNaturalistReactNative/iNaturalistReactNative.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Development"; - CURRENT_PROJECT_VERSION = 212; + CURRENT_PROJECT_VERSION = 216; DEVELOPMENT_TEAM = N5J7L4P93Z; ENABLE_BITCODE = NO; "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; @@ -655,7 +674,7 @@ CODE_SIGN_ENTITLEMENTS = iNaturalistReactNative/iNaturalistReactNativeRelease.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Development"; - CURRENT_PROJECT_VERSION = 212; + CURRENT_PROJECT_VERSION = 216; DEVELOPMENT_TEAM = N5J7L4P93Z; "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; HEADER_SEARCH_PATHS = ( @@ -971,7 +990,7 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_ENTITLEMENTS = "iNaturalistReactNative-ShareExtension/iNaturalistReactNative-ShareExtension.entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 212; + CURRENT_PROJECT_VERSION = 216; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = N5J7L4P93Z; "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; @@ -986,7 +1005,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 1.0.23; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = org.inaturalist.iNaturalistMobile.ShareExtensionIOS; @@ -1016,7 +1035,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 212; + CURRENT_PROJECT_VERSION = 216; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = N5J7L4P93Z; "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; @@ -1031,7 +1050,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 1.0.23; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = org.inaturalist.iNaturalistMobile.ShareExtensionIOS; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/ios/iNaturalistReactNative/Info.plist b/ios/iNaturalistReactNative/Info.plist index 0b674e997..af1daa3b3 100644 --- a/ios/iNaturalistReactNative/Info.plist +++ b/ios/iNaturalistReactNative/Info.plist @@ -19,7 +19,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.0.21 + 1.0.23 CFBundleSignature ???? CFBundleURLTypes @@ -42,7 +42,7 @@ CFBundleVersion - 212 + 216 ITSAppUsesNonExemptEncryption LSApplicationQueriesSchemes diff --git a/package-lock.json b/package-lock.json index 9b4b29e4c..273cab5b4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,17 @@ { "name": "inaturalistreactnative", - "version": "1.0.21", + "version": "1.0.23", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "inaturalistreactnative", - "version": "1.0.21", + "version": "1.0.23", "hasInstallScript": true, "dependencies": { "@bam.tech/react-native-image-resizer": "^3.0.11", "@candlefinance/faster-image": "^1.7.2", - "@dr.pogodin/react-native-fs": "^2.36.1", + "@dr.pogodin/react-native-fs": "^2.38.2", "@formidable-webview/webshell": "^2.6.0", "@gorhom/bottom-sheet": "^5.2.8", "@invertase/react-native-apple-authentication": "^2.4.0", @@ -36,14 +36,14 @@ "@react-navigation/native": "^7.1.17", "@react-navigation/native-stack": "^7.3.25", "@realm/react": "^0.20.0", - "@rozenite/controls-plugin": "^1.7.0", - "@rozenite/file-system-plugin": "^1.7.0", - "@rozenite/metro": "^1.7.0", - "@rozenite/mmkv-plugin": "^1.7.0", - "@rozenite/network-activity-plugin": "^1.7.0", - "@rozenite/react-navigation-plugin": "^1.7.0", - "@rozenite/require-profiler-plugin": "^1.7.0", - "@rozenite/tanstack-query-plugin": "^1.7.0", + "@rozenite/controls-plugin": "^1.10.0", + "@rozenite/file-system-plugin": "^1.10.0", + "@rozenite/metro": "^1.10.0", + "@rozenite/network-activity-plugin": "^1.10.0", + "@rozenite/react-navigation-plugin": "^1.10.0", + "@rozenite/require-profiler-plugin": "^1.10.0", + "@rozenite/storage-plugin": "^1.10.0", + "@rozenite/tanstack-query-plugin": "^1.10.0", "@sayem314/react-native-keep-awake": "^1.3.1", "@shopify/flash-list": "^2.2.0", "@tanstack/react-query": "5.90.14", @@ -54,7 +54,7 @@ "i18next": "^26.0.4", "i18next-fluent": "^2.0.0", "i18next-resources-to-backend": "^1.2.1", - "inaturalistjs": "github:inaturalist/inaturalistjs", + "inaturalistjs": "github:inaturalist/inaturalistjs#70d6f5dd639aa10ae3208215ac6eef84825d6d2e", "intl-pluralrules": "^2.0.1", "jsrsasign": "^11.1.1", "linkify-html": "^4.3.2", @@ -66,7 +66,7 @@ "react": "19.2.0", "react-dom": "19.1.1", "react-i18next": "^17.0.2", - "react-native": "0.83.6", + "react-native": "0.83.9", "react-native-animated-dots-carousel": "^2.0.0", "react-native-audio-recorder-player": "^3.6.14", "react-native-bouncy-checkbox": "^3.0.7", @@ -82,6 +82,7 @@ "react-native-get-random-values": "^2.0.0", "react-native-image-picker": "^8.2.1", "react-native-keyboard-aware-scroll-view": "^0.9.5", + "react-native-legal": "^1.6.3", "react-native-linear-gradient": "^2.8.3", "react-native-localize": "^3.5.2", "react-native-logs": "^5.3.0", @@ -98,7 +99,7 @@ "react-native-reanimated": "^4.2.2", "react-native-reanimated-carousel": "^4.0.3", "react-native-restart": "^0.0.27", - "react-native-safe-area-context": "^5.6.2", + "react-native-safe-area-context": "^5.8.0", "react-native-screens": "4.15.4", "react-native-sensitive-info": "^5.6.2", "react-native-share-menu": "github:inaturalist/react-native-share-menu#iNaturalistReactNative", @@ -112,7 +113,7 @@ "react-native-worklets": "^0.7.0", "react-native-worklets-core": "^1.6.3", "realm": "^20.2.0", - "sanitize-html": "^2.17.3", + "sanitize-html": "^2.17.4", "uuid": "^11.1.1", "vision-camera-plugin-inatvision": "github:inaturalist/vision-camera-plugin-inatvision#5cb51942939f704acbb5d451a444f7aa36268c66", "zustand": "^4.5.7" @@ -129,10 +130,10 @@ "@react-native-community/cli": "20.0.0", "@react-native-community/cli-platform-android": "20.0.0", "@react-native-community/cli-platform-ios": "20.0.0", - "@react-native/babel-preset": "0.83.6", - "@react-native/eslint-config": "0.83.6", - "@react-native/metro-config": "0.83.6", - "@react-native/typescript-config": "0.83.6", + "@react-native/babel-preset": "0.83.9", + "@react-native/eslint-config": "0.83.9", + "@react-native/metro-config": "0.83.9", + "@react-native/typescript-config": "0.83.9", "@stylistic/eslint-plugin": "^3.1.0", "@tanstack/eslint-plugin-query": "^5.91.4", "@testing-library/jest-native": "^5.4.3", @@ -145,28 +146,28 @@ "@types/react-dom": "^19.1.0", "@types/react-test-renderer": "^19.1.0", "@types/sanitize-html": "^2.16.1", - "@typescript-eslint/eslint-plugin": "^8.32.1", + "@typescript-eslint/eslint-plugin": "^8.60.1", "babel-plugin-module-resolver": "^5.0.0", "babel-plugin-react-compiler": "^19.1.0-rc.3", "babel-plugin-transform-inline-environment-variables": "^0.4.4", "babel-plugin-transform-remove-console": "^6.9.4", "chalk": "^5.4.1", "decompress": "^4.2.1", - "detox": "^20.50.1", + "detox": "^20.51.3", "dotenv": "^16.4.7", "eslint": "^8.57.1", "eslint-config-airbnb": "^19.0.4", "eslint-import-resolver-babel-module": "^5.3.2", "eslint-plugin-i18next": "^6.1.1", - "eslint-plugin-import": "^2.29.1", + "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-lodash": "^7.4.0", "eslint-plugin-module-resolver": "^1.5.0", "eslint-plugin-react-hooks": "^7.1.1", "eslint-plugin-react-native": "^5.0.0", "eslint-plugin-react-native-a11y": "^3.5.1", - "eslint-plugin-simple-import-sort": "^12.0.0", - "eslint-plugin-testing-library": "^7.6.8", + "eslint-plugin-simple-import-sort": "^13.0.0", + "eslint-plugin-testing-library": "^7.16.2", "factoria": "^4.0.1", "flow-bin": "^0.182.0", "fluent_conv": "^3.3.0", @@ -2352,6 +2353,36 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@callstack/licenses": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@callstack/licenses/-/licenses-0.3.1.tgz", + "integrity": "sha512-Jo5dbCKY78oFS2Qo+bzIHHO1vX5sCqWN4mvkZytAP+BJxhAvICdnFLXewMPpJ3TtaeJK8sFcue6t0qkU3TtHfg==", + "license": "MIT", + "dependencies": { + "glob": "^7.1.3" + } + }, + "node_modules/@callstack/licenses/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@callstack/react-theme-provider": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/@callstack/react-theme-provider/-/react-theme-provider-3.0.9.tgz", @@ -2663,9 +2694,9 @@ } }, "node_modules/@dr.pogodin/react-native-fs": { - "version": "2.36.1", - "resolved": "https://registry.npmjs.org/@dr.pogodin/react-native-fs/-/react-native-fs-2.36.1.tgz", - "integrity": "sha512-wGYARpnkqCSDMCAFmC0SAxdEngnfo5l7H5sEqJAxHVCGzEYtV7F7PrmwrvRY4HhPB4XAGAwr6EUBjhh35oAACQ==", + "version": "2.38.2", + "resolved": "https://registry.npmjs.org/@dr.pogodin/react-native-fs/-/react-native-fs-2.38.2.tgz", + "integrity": "sha512-8s+mzstTq2IrZm4U/UfcBHEWHnFvVtn/9MUGtpqS/eiZBb9tJiM2DnNRYu9+LuMnc+r95cyAcJe4rRAtnC0xlw==", "license": "MIT", "workspaces": [ "example" @@ -3522,9 +3553,9 @@ } }, "node_modules/@grpc/grpc-js": { - "version": "1.9.15", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.15.tgz", - "integrity": "sha512-nqE7Hc0AzI+euzUwDAy0aY5hCp10r734gMGRdU+qOPX0XSceI2ULrcXB5U2xSc5VkWwalCj4M7GzCAygZl2KoQ==", + "version": "1.9.16", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.16.tgz", + "integrity": "sha512-wE4Ut/olIzfKqp631XrG+wbF0v1vWFN4YL9FyXC2LJiG33DsV7PLzURjrCvY/6je2ntdRkeLpPDluzSRGaVltQ==", "license": "Apache-2.0", "dependencies": { "@grpc/proto-loader": "^0.7.8", @@ -5882,32 +5913,32 @@ } }, "node_modules/@react-native/assets-registry": { - "version": "0.83.6", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.83.6.tgz", - "integrity": "sha512-iljb4ue1yWJ3EhySz7EjV6CzSVrI2uNtR8BI2jzP5+QS5E4Cl3fdIJRmVwDEx1pu8uE97PGEusGRHnoaZ9Q3jg==", + "version": "0.83.9", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.83.9.tgz", + "integrity": "sha512-9MrShFZWvHybyjN8nj/rKW53hLpPOXMdEF8FOdDXRNu8oQ396BLknCMFeSCFhAHiCDVqQfah5iIV8S1wqXnxFA==", "license": "MIT", "engines": { "node": ">= 20.19.4" } }, "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.83.6", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.83.6.tgz", - "integrity": "sha512-qfRXsHGeucT5c6mK+8Q7v4Ly3zmygfVmFlEtkiq7q07W1OTreld6nib4rJ/DBEeNiKBoBTuHjWliYGNuDjLFQA==", + "version": "0.83.9", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.83.9.tgz", + "integrity": "sha512-JSsi7mhyjnSOJ3Lx8PFefFmnWDb1h1KySZS3VSZ21Pbi6T0MFd8mH/3u1onhihm3jsTe86l7IwS5++hRT9gs6A==", "devOptional": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.83.6" + "@react-native/codegen": "0.83.9" }, "engines": { "node": ">= 20.19.4" } }, "node_modules/@react-native/babel-preset": { - "version": "0.83.6", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.83.6.tgz", - "integrity": "sha512-4/fXFDUvGOObETZq4+SUFkafld6OGgQWut5cQiqVghlhCB5z/p2lVhPgEUr/aTxTzeS3AmN+ztC+GpYPQ7tsTw==", + "version": "0.83.9", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.83.9.tgz", + "integrity": "sha512-/P7+jzOhq/Jt90vSreCL+r2gkApPc9nmM6sWgKTrn22E4Bo32LXtk/kARmpVBbkJI2h5pXvWeI6ODywbJw0slA==", "devOptional": true, "license": "MIT", "dependencies": { @@ -5952,7 +5983,7 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.83.6", + "@react-native/babel-plugin-codegen": "0.83.9", "babel-plugin-syntax-hermes-parser": "0.32.0", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" @@ -5965,9 +5996,9 @@ } }, "node_modules/@react-native/codegen": { - "version": "0.83.6", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.83.6.tgz", - "integrity": "sha512-doB/Pq6Cf6IjF3wlQXTIiZOnsX9X8mEEk+CdGfyuCwZjWrf7IB8KaZEXXckJmfUcIwvJ9u/a72ZoTTCIoxAc9A==", + "version": "0.83.9", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.83.9.tgz", + "integrity": "sha512-fUliGYOD1D/hS4pZMK+YyGb01DxQQNUTjL+i2iL6elt2AncXoYMWNxLT/AMT38jImxI4FbKyH4JO+mL2+t5yuA==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -6022,12 +6053,12 @@ } }, "node_modules/@react-native/community-cli-plugin": { - "version": "0.83.6", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.83.6.tgz", - "integrity": "sha512-Mko6mywoHYJmpBnjwAC95vQWaUUh//71knFadH0BrhHDq2m7i/IrpLwcQsPAy8855ucXflBs5zQyGTpNbPBAaw==", + "version": "0.83.9", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.83.9.tgz", + "integrity": "sha512-i8WhXYSEIB7kq99n6ZROI1lCckVEwz+Ti/oAT34UUU494MuSvZfd0UWEQ5cFpglPpIKq11KETPwmznHYF6xURg==", "license": "MIT", "dependencies": { - "@react-native/dev-middleware": "0.83.6", + "@react-native/dev-middleware": "0.83.9", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.83.6", @@ -6052,9 +6083,9 @@ } }, "node_modules/@react-native/community-cli-plugin/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", + "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -6064,18 +6095,18 @@ } }, "node_modules/@react-native/debugger-frontend": { - "version": "0.83.6", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.83.6.tgz", - "integrity": "sha512-TyWXEpAjVundrc87fPWg91piOUg75+X9iutcfDe7cO3NrAEYCsl7Z09rKHuiAGkxfG9/rFD13dPsYIixUFkSFA==", + "version": "0.83.9", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.83.9.tgz", + "integrity": "sha512-LEOJrHvVWnjHC+emTyybeHkrInrJBnchk3VEhW5qGMWhW3vSM421CrZSCKAvzy+fDg/viufwBfIJvwTdk066CA==", "license": "BSD-3-Clause", "engines": { "node": ">= 20.19.4" } }, "node_modules/@react-native/debugger-shell": { - "version": "0.83.6", - "resolved": "https://registry.npmjs.org/@react-native/debugger-shell/-/debugger-shell-0.83.6.tgz", - "integrity": "sha512-684TJMBCU0l0ZjJWzrnK0HH+ERaM9KLyxyArE1k7BrP+gVl4X9GO0Pi94RoInOxvW/nyV65sOU6Ip1F3ygS0cg==", + "version": "0.83.9", + "resolved": "https://registry.npmjs.org/@react-native/debugger-shell/-/debugger-shell-0.83.9.tgz", + "integrity": "sha512-vAqDG7+3HOz4VOSfccSNe06C1+evcp2AbMjoYOmOyeJtt5dCdmGUp0FICsnU7iuctsNXWnHqyhks9M0wn7zEzA==", "license": "MIT", "dependencies": { "cross-spawn": "^7.0.6", @@ -6086,14 +6117,14 @@ } }, "node_modules/@react-native/dev-middleware": { - "version": "0.83.6", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.83.6.tgz", - "integrity": "sha512-22xoddLTelpcVnF385SNH2hdP7X2av5pu7yRl/WnM5jBznbcl0+M9Ce94cj+WVeomsoUF/vlfuB0Ooy+RMlRiA==", + "version": "0.83.9", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.83.9.tgz", + "integrity": "sha512-4rW8KGkfqmZ5x1CTr+GrPBTdLG58UNkkJNQ8Dd9xdiVrZ/94sYKHm4HOo+UKTyOP0SNbZpZejDrf/2JNiqNL4Q==", "license": "MIT", "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.83.6", - "@react-native/debugger-shell": "0.83.6", + "@react-native/debugger-frontend": "0.83.9", + "@react-native/debugger-shell": "0.83.9", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", @@ -6125,15 +6156,15 @@ } }, "node_modules/@react-native/eslint-config": { - "version": "0.83.6", - "resolved": "https://registry.npmjs.org/@react-native/eslint-config/-/eslint-config-0.83.6.tgz", - "integrity": "sha512-LeObz64FgdeheJqSRJVlpRLX88PFOLHxwnXxqzHkFIWresqd/ipk0I7pwCew6VFDTmeGB17I9zYigvjDSYPm9A==", + "version": "0.83.9", + "resolved": "https://registry.npmjs.org/@react-native/eslint-config/-/eslint-config-0.83.9.tgz", + "integrity": "sha512-5dAT7bZ8h2vhWJFxGPFQkDCaLvHZ1VaLQlF+jKb5uD0By8Aas0xTXFSJPwBP3XIeRadQ54Vxwm6LRnMCNE0USQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", - "@react-native/eslint-plugin": "0.83.6", + "@react-native/eslint-plugin": "0.83.9", "@typescript-eslint/eslint-plugin": "^8.36.0", "@typescript-eslint/parser": "^8.36.0", "eslint-config-prettier": "^8.5.0", @@ -6166,9 +6197,9 @@ } }, "node_modules/@react-native/eslint-plugin": { - "version": "0.83.6", - "resolved": "https://registry.npmjs.org/@react-native/eslint-plugin/-/eslint-plugin-0.83.6.tgz", - "integrity": "sha512-uYKCnlSGL3VJArldWDRk61H4S7JAYCbQy14vekoYDnf0oItmIyFDSlZr9p1Yr+eRKJLSSOktozsB1NHa7CBTvA==", + "version": "0.83.9", + "resolved": "https://registry.npmjs.org/@react-native/eslint-plugin/-/eslint-plugin-0.83.9.tgz", + "integrity": "sha512-a0iyA3JGOaSOvs8+OUxpSaXYKdeXxQWGlzEDFFYfj7qFO6CGgMtER9MYxiyH26cGHZ41PRpd4xEMxoCENTuxLw==", "dev": true, "license": "MIT", "engines": { @@ -6176,32 +6207,32 @@ } }, "node_modules/@react-native/gradle-plugin": { - "version": "0.83.6", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.83.6.tgz", - "integrity": "sha512-5prXv7WWR1RgZ/kWGZP+mi7/y/IE2ymfOHIZO5Pv14tMOmRAcQSgSYogcRmOiWw5mJs2K0UFeMiQD49ZO9oCug==", + "version": "0.83.9", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.83.9.tgz", + "integrity": "sha512-v+iag7ft+fBRP54GthOiR70qrp0azgvW8PhNg0KFYw52xin09LoC0rk96CY+Hj5M1oGoQovrk0bdji7ipH2pGg==", "license": "MIT", "engines": { "node": ">= 20.19.4" } }, "node_modules/@react-native/js-polyfills": { - "version": "0.83.6", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.83.6.tgz", - "integrity": "sha512-VSev0LV2i5X0ibduHBSLqKj0YU2F+waCgjl2uvaGHMGCSV1ZRKNFX/vJFqvLwjvdzLbkAZoFT1Rg7k7jDv44UA==", + "version": "0.83.9", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.83.9.tgz", + "integrity": "sha512-6+OdNC3GSgNI3L31zo730AxdI3eXjwD74k0M11gpvXKTOX/NQuXe3On+K4yLFokD2BFr8bL6XaqxCniCUQ3Q+Q==", "license": "MIT", "engines": { "node": ">= 20.19.4" } }, "node_modules/@react-native/metro-babel-transformer": { - "version": "0.83.6", - "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.83.6.tgz", - "integrity": "sha512-bi3tvpCrLvN46C4UfKStgHhGOdaZXvEewyHb/ms0n9OjWJBtGePk5Fp/XtdFhsoYu4JjSUvfWPnHH/7zlQGUzw==", + "version": "0.83.9", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.83.9.tgz", + "integrity": "sha512-Fxio5YRZ3md5URlNgkjTqy1Rmdd2IPkM16ptqtZMoEUBLiKRkacIBO3nEPHvi1HgE4ExtTbnKX59MiRkTTmB6w==", "devOptional": true, "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.83.6", + "@react-native/babel-preset": "0.83.9", "hermes-parser": "0.32.0", "nullthrows": "^1.1.1" }, @@ -6230,14 +6261,14 @@ } }, "node_modules/@react-native/metro-config": { - "version": "0.83.6", - "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.83.6.tgz", - "integrity": "sha512-n0FrFPrvKb4/BFIVk5ty7hGYn+JPi55wS6sqQTwos4PqpN88qc5sESPqFrrQnO6EzJBmr4Z61Pk9xct69RnPnQ==", + "version": "0.83.9", + "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.83.9.tgz", + "integrity": "sha512-6dpqBWz9zbn0fhX7dc2oJBoSfxDdz1XRqHdUqvffdOSMXz2QmivQzBEs6o1UmnQ1fhSmGAk+LxdmWYRbRae3mg==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native/js-polyfills": "0.83.6", - "@react-native/metro-babel-transformer": "0.83.6", + "@react-native/js-polyfills": "0.83.9", + "@react-native/metro-babel-transformer": "0.83.9", "metro-config": "^0.83.6", "metro-runtime": "^0.83.6" }, @@ -6246,15 +6277,15 @@ } }, "node_modules/@react-native/normalize-colors": { - "version": "0.83.6", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.83.6.tgz", - "integrity": "sha512-bTM24b5v4qN3h52oflnv+OujFORn/kVi06WaWhnQQw14/ycilPqIsqsa+DpIBqdBrXxvLa9fXtCRrQtGATZCEw==", + "version": "0.83.9", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.83.9.tgz", + "integrity": "sha512-GSXSvH+siDF2z+XtoF3Kk6zRFMWhGIpfq9nalBd4DSV97g5yNRQ5Htm2fpq7vBYNN+hVgvGZf7rRqnjn8bvfHg==", "license": "MIT" }, "node_modules/@react-native/typescript-config": { - "version": "0.83.6", - "resolved": "https://registry.npmjs.org/@react-native/typescript-config/-/typescript-config-0.83.6.tgz", - "integrity": "sha512-8+sMNBE391MBZjAHGI5EAV14IHbREPyOEZe9yc1PmO/t2nirMPohe+HXRHkl/ANQusCE30EVVu4JGv76jw2WBw==", + "version": "0.83.9", + "resolved": "https://registry.npmjs.org/@react-native/typescript-config/-/typescript-config-0.83.9.tgz", + "integrity": "sha512-tdtS0wvsvPaFZjMwmaL+HxEN6TW0kriATmC2RQOjgUq5kLSTPrFFZPKFT8p5OtqnyAUevv6jzllYG5CVYULfgg==", "dev": true, "license": "MIT" }, @@ -6416,13 +6447,13 @@ } }, "node_modules/@rozenite/agent-bridge": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@rozenite/agent-bridge/-/agent-bridge-1.7.0.tgz", - "integrity": "sha512-VsHpjdCpTR3k45VJQuz3d2rNmvNKZEyVY1K/2O8j3x/zJf18iAb4O2JDPcPW7M3i+4/72PGKxv6y+lCCNjut/w==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@rozenite/agent-bridge/-/agent-bridge-1.10.0.tgz", + "integrity": "sha512-Rnfr85m3Ya91VG5r1x9+gSJ5gOCZLw4Yec0zBijdUSXxhH9LoChIuniG41hgxBYYKvMG22oeJnpI2atMdzFAgw==", "license": "MIT", "dependencies": { - "@rozenite/agent-shared": "1.7.0", - "@rozenite/plugin-bridge": "1.7.0", + "@rozenite/agent-shared": "1.10.0", + "@rozenite/plugin-bridge": "1.10.0", "tslib": "^2.3.0" }, "engines": { @@ -6433,9 +6464,9 @@ } }, "node_modules/@rozenite/agent-shared": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@rozenite/agent-shared/-/agent-shared-1.7.0.tgz", - "integrity": "sha512-6NEBpY82aoFPe8lswaO28lWSnfcjM6r+Msmt7HEE0rBYFNH8FBZN9RgFof3Y13qEY/NerlP+6v+pz8HM5df1uQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@rozenite/agent-shared/-/agent-shared-1.10.0.tgz", + "integrity": "sha512-iZimNxQFE0qsF4nucVYLt1AYrI6WRXlscL6QVHKkfaI0/AdI14cdGbJEoxuS7Twpkru4/4v0QScsM1OIPZxgqg==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -6445,13 +6476,14 @@ } }, "node_modules/@rozenite/controls-plugin": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@rozenite/controls-plugin/-/controls-plugin-1.7.0.tgz", - "integrity": "sha512-7NAqC1sS1VgiMUgoSp6Z2Il/glgQofjq4XSNz4E2EuTr2Q/LAYPq5sUzWOBObKNZ72eeH7+ZleUX/Au/n6HWmg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@rozenite/controls-plugin/-/controls-plugin-1.10.0.tgz", + "integrity": "sha512-Kc6CLpeerXq4r3RtiSoR/BH9LMFBDTDg0xDOzKloJsuTDfI0XlPYyVFojxsKiToRWMpBDPQA1GewJBQiUkKS1g==", "license": "MIT", "dependencies": { - "@rozenite/agent-bridge": "1.7.0", - "@rozenite/plugin-bridge": "1.7.0" + "@rozenite/agent-bridge": "1.10.0", + "@rozenite/agent-shared": "1.10.0", + "@rozenite/plugin-bridge": "1.10.0" }, "peerDependencies": { "react": "*", @@ -6459,13 +6491,14 @@ } }, "node_modules/@rozenite/file-system-plugin": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@rozenite/file-system-plugin/-/file-system-plugin-1.7.0.tgz", - "integrity": "sha512-N/rb/pK0hapKN6IWRCfFJk1MSzy0/TZ4QLg5otzQmV3JnRjI0wDMEO3om5utUuMbh+VUlI7NJfQL0oCnjQdKpA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@rozenite/file-system-plugin/-/file-system-plugin-1.10.0.tgz", + "integrity": "sha512-ilu9EaC6cN0mLZ/R8p25fpTxfW+Ivcm/8HJ4IPWi6am/ltIn6m5JdR6/90mOTfnaqo8Em7yCvA8JnuvD06TkfA==", "license": "MIT", "dependencies": { - "@rozenite/agent-bridge": "1.7.0", - "@rozenite/plugin-bridge": "1.7.0" + "@rozenite/agent-bridge": "1.10.0", + "@rozenite/agent-shared": "1.10.0", + "@rozenite/plugin-bridge": "1.10.0" }, "peerDependencies": { "react": "*", @@ -6473,13 +6506,13 @@ } }, "node_modules/@rozenite/metro": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@rozenite/metro/-/metro-1.7.0.tgz", - "integrity": "sha512-SCrbjH2Kel+4EBv82gEJvgpj0OPO6V50vb7pFdA06kkd/WEAWz+rJ0IFjY+AJ5R8RlayAdQUbym95GpkszIpMA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@rozenite/metro/-/metro-1.10.0.tgz", + "integrity": "sha512-0+FVgu4+UAr0c/qm6+iP+mY38XtfKgcWzX1Jh9QNVFVYAEo3nmr9DwOJsGIB++sOhnHwtqh4Ry21+ouXS8P4Kw==", "license": "MIT", "dependencies": { - "@rozenite/middleware": "1.7.0", - "@rozenite/tools": "1.7.0", + "@rozenite/middleware": "1.10.0", + "@rozenite/tools": "1.10.0", "tslib": "^2.3.0" }, "engines": { @@ -6487,14 +6520,14 @@ } }, "node_modules/@rozenite/middleware": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@rozenite/middleware/-/middleware-1.7.0.tgz", - "integrity": "sha512-uCMX1ULLM/+Fw9Gcir/hBJxthB7eLEZkxKo4PDJ+XK9A96xmZsQL5ZyRU+PnTLQ5D2OMA71vL98kaOIEDTx7gg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@rozenite/middleware/-/middleware-1.10.0.tgz", + "integrity": "sha512-w5HrGKwSNC8HRJe8BleL/i4EF4BXJq8uU37oZ6EnL4amGKnbOobfCGCoj4XSEwX5EJYHwVchRfZMAtHtCwUlWQ==", "license": "MIT", "dependencies": { - "@rozenite/agent-shared": "1.7.0", - "@rozenite/runtime": "1.7.0", - "@rozenite/tools": "1.7.0", + "@rozenite/agent-shared": "1.10.0", + "@rozenite/runtime": "1.10.0", + "@rozenite/tools": "1.10.0", "express": "^5.1.0", "semver": "^7.7.2", "tslib": "^2.3.0", @@ -6505,9 +6538,9 @@ } }, "node_modules/@rozenite/middleware/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", + "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -6517,9 +6550,9 @@ } }, "node_modules/@rozenite/middleware/node_modules/ws": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", - "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -6537,45 +6570,34 @@ } } }, - "node_modules/@rozenite/mmkv-plugin": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@rozenite/mmkv-plugin/-/mmkv-plugin-1.7.0.tgz", - "integrity": "sha512-DwOMHJA14Xq4n33hnSMpqO9ZWA+yWrVIXmSZGC76DNJdm3vn7go4xEEV9nmbUFcIHzXKiWYyf4zkP+OmLfo5iw==", - "license": "MIT", - "dependencies": { - "@rozenite/agent-bridge": "1.7.0", - "@rozenite/plugin-bridge": "1.7.0", - "nanoevents": "^9.1.0" - }, - "peerDependencies": { - "react": "*", - "react-native": "*", - "react-native-mmkv": "*" - } - }, "node_modules/@rozenite/network-activity-plugin": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@rozenite/network-activity-plugin/-/network-activity-plugin-1.7.0.tgz", - "integrity": "sha512-Xt73eZgJuUAHrON5EhwgXvgCET7/3XOHdvRkOiNDv1yUCyQyMJ3Ja+GgR47uEE3c4sx9tglo5PSf8shlP0yTIQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@rozenite/network-activity-plugin/-/network-activity-plugin-1.10.0.tgz", + "integrity": "sha512-1yxnFTQ4i+xLkQNmGrj80/Zg3KDRu3h/7wskV57OF7nxiCFYGQmkqbgCR+bmDPNBLVtwYtBuUdhzTjCOHh6LVw==", "license": "MIT", "dependencies": { - "@rozenite/agent-bridge": "1.7.0", - "@rozenite/plugin-bridge": "1.7.0", + "@rozenite/agent-bridge": "1.10.0", + "@rozenite/agent-shared": "1.10.0", + "@rozenite/plugin-bridge": "1.10.0", "nanoevents": "^9.1.0" }, "peerDependencies": { + "react-native-nitro-fetch": "*", "react-native-sse": "*" }, "peerDependenciesMeta": { + "react-native-nitro-fetch": { + "optional": true + }, "react-native-sse": { "optional": true } } }, "node_modules/@rozenite/plugin-bridge": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@rozenite/plugin-bridge/-/plugin-bridge-1.7.0.tgz", - "integrity": "sha512-yP9YvQOtw/WN7ZuKgdFMdu7D/SgzGvcs2MPCplRI+FI0HYfHAJNF58V6BwWLgMc4WH35j+0AVgaiMC/HY1fJYg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@rozenite/plugin-bridge/-/plugin-bridge-1.10.0.tgz", + "integrity": "sha512-kUu4UdDOoemJqB8wxfDaSgGKQuPjJPYCiC0QU5c/tNp16dIzrSA4IX12c7bYzkeM55YMU17MXnXpXH1MEGW1qw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -6588,13 +6610,14 @@ } }, "node_modules/@rozenite/react-navigation-plugin": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@rozenite/react-navigation-plugin/-/react-navigation-plugin-1.7.0.tgz", - "integrity": "sha512-S3lK0mMsns4CTfLj2vfJI1o+1IQZ1rwTxx/kVnVBZr8tPXv6RHwJWXwETUlo08paD3t+YXdY2EF4JBI98hL/3A==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@rozenite/react-navigation-plugin/-/react-navigation-plugin-1.10.0.tgz", + "integrity": "sha512-zE9ClWtjkhBL9gHFzZTwaULb/xYmxIcAhOpwJb5S1USaIXkhPLCLeakosztcCSWKJK0ur/3ZoNr2915lHuQlVQ==", "license": "MIT", "dependencies": { - "@rozenite/agent-bridge": "1.7.0", - "@rozenite/plugin-bridge": "1.7.0", + "@rozenite/agent-bridge": "1.10.0", + "@rozenite/agent-shared": "1.10.0", + "@rozenite/plugin-bridge": "1.10.0", "fast-deep-equal": "^3.1.3" }, "peerDependencies": { @@ -6602,13 +6625,13 @@ } }, "node_modules/@rozenite/require-profiler-plugin": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@rozenite/require-profiler-plugin/-/require-profiler-plugin-1.7.0.tgz", - "integrity": "sha512-vDRMqKkY48qVy9Ak53mgVgWzYYyCgRCMSyVP2FN0g0JXG4eY1Q+Ee31bFKJVhk9+wPm9zhrQSzar3nM8vClwVQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@rozenite/require-profiler-plugin/-/require-profiler-plugin-1.10.0.tgz", + "integrity": "sha512-/DFHUeW47wKxIneQEDiI/riut790o3YHolmAQIq5ouwkUF+il1DMDTuqLUUi/MUVIA4rMZFgTJ0S+lZ/GCz5zg==", "license": "MIT", "dependencies": { - "@rozenite/plugin-bridge": "1.7.0", - "@rozenite/tools": "1.7.0", + "@rozenite/plugin-bridge": "1.10.0", + "@rozenite/tools": "1.10.0", "nanoevents": "^9.1.0" }, "peerDependencies": { @@ -6617,9 +6640,9 @@ } }, "node_modules/@rozenite/runtime": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@rozenite/runtime/-/runtime-1.7.0.tgz", - "integrity": "sha512-3TzN480E6mkjpQo33TDYjFF4uy6MKk2XJ5N+1qmIYe//S9KwDPNtAk+4zMYOic0Gwt1KqmWQNC5mA/qq1Pw6zQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@rozenite/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-RvCBUl9g+fUTrGgKoY/0pVzrYXpKJzYddNDa0O/Pfgrevxn8E/hQ/5nzSXONH0I6X8lYDeQyDNvGLbbb96pgYg==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -6628,14 +6651,44 @@ "node": ">=20" } }, - "node_modules/@rozenite/tanstack-query-plugin": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@rozenite/tanstack-query-plugin/-/tanstack-query-plugin-1.7.0.tgz", - "integrity": "sha512-uPzjIi6jsThsiMG4wHlUboJ2XmFGJVlaMc4h1c8Xuatkvd3wIBpasXEKgXZVrNP/Pj8wOclJWG+8/3O46UPJgA==", + "node_modules/@rozenite/storage-plugin": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@rozenite/storage-plugin/-/storage-plugin-1.10.0.tgz", + "integrity": "sha512-fjRH1DGgSFf8HxSOmMJbyT2xeE1zA9lYxtWd3MKVHm1lC1p05+8V811uBb/EBgFWRyxAmo4RO1zD4QrIhPFLNg==", "license": "MIT", "dependencies": { - "@rozenite/agent-bridge": "1.7.0", - "@rozenite/plugin-bridge": "1.7.0", + "@rozenite/agent-bridge": "1.10.0", + "@rozenite/agent-shared": "1.10.0", + "@rozenite/plugin-bridge": "1.10.0" + }, + "peerDependencies": { + "@react-native-async-storage/async-storage": "*", + "expo-secure-store": "*", + "react": "*", + "react-native": "*", + "react-native-mmkv": "*" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + }, + "expo-secure-store": { + "optional": true + }, + "react-native-mmkv": { + "optional": true + } + } + }, + "node_modules/@rozenite/tanstack-query-plugin": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@rozenite/tanstack-query-plugin/-/tanstack-query-plugin-1.10.0.tgz", + "integrity": "sha512-+1Zv3y0VGQxPB8dhy7XJ5lL7zZ+GeAQSgXrYl+AVTZ8mpAPcQ6unqkehaVMyiPw9Z3bjiBgcFJy/AnE33rq46g==", + "license": "MIT", + "dependencies": { + "@rozenite/agent-bridge": "1.10.0", + "@rozenite/agent-shared": "1.10.0", + "@rozenite/plugin-bridge": "1.10.0", "fast-deep-equal": "^3.1.3" }, "peerDependencies": { @@ -6645,9 +6698,16 @@ } }, "node_modules/@rozenite/tools": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@rozenite/tools/-/tools-1.7.0.tgz", - "integrity": "sha512-WZ9NhzBV/6OgZutpwwHua3TsL0Zn6YZTgT6D6gef1EEhPtliozi4XUHrnQJ8SJ6nZvRVMK1gDwETi8FffXvUkQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@rozenite/tools/-/tools-1.10.0.tgz", + "integrity": "sha512-tbEz6fc7yXMCzRQwHQIOasaj/XvKVG/m+fnegl6sP8SVMR+xP141Zw6rMJS3OD5AO1ln1mH4CY78dpnPt7td1A==", + "license": "MIT" + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, "license": "MIT" }, "node_modules/@sayem314/react-native-keep-awake": { @@ -7712,20 +7772,20 @@ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.0.tgz", - "integrity": "sha512-qeu4rTHR3/IaFORbD16gmjq9+rEs9fGKdX0kF6BKSfi+gCuG3RCKLlSBYzn/bGsY9Tj7KE/DAQStbp8AHJGHEQ==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.60.1.tgz", + "integrity": "sha512-JQ4S5GB0tfjO8BuJ4fcX+HodkzJjYBV+7OJ+wLygaX7OGQ7FudyHL4NSCA6ob+w3Yn+5MkKIozOwQhXeM7opVg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.57.0", - "@typescript-eslint/type-utils": "8.57.0", - "@typescript-eslint/utils": "8.57.0", - "@typescript-eslint/visitor-keys": "8.57.0", + "@typescript-eslint/scope-manager": "8.60.1", + "@typescript-eslint/type-utils": "8.60.1", + "@typescript-eslint/utils": "8.60.1", + "@typescript-eslint/visitor-keys": "8.60.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.4.0" + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7735,9 +7795,9 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.57.0", + "@typescript-eslint/parser": "^8.60.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { @@ -7751,16 +7811,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.0.tgz", - "integrity": "sha512-XZzOmihLIr8AD1b9hL9ccNMzEMWt/dE2u7NyTY9jJG6YNiNthaD5XtUHVF2uCXZ15ng+z2hT3MVuxnUYhq6k1g==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.60.1.tgz", + "integrity": "sha512-A0M6ua6H252bVjPvvtSgl2QA4+ET9S5Mtkb2GDyTxIhH/C4qDItT7RQNO5PhMC6NXGYXOR9dIalcDDgBKT7oFA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.57.0", - "@typescript-eslint/types": "8.57.0", - "@typescript-eslint/typescript-estree": "8.57.0", - "@typescript-eslint/visitor-keys": "8.57.0", + "@typescript-eslint/scope-manager": "8.60.1", + "@typescript-eslint/types": "8.60.1", + "@typescript-eslint/typescript-estree": "8.60.1", + "@typescript-eslint/visitor-keys": "8.60.1", "debug": "^4.4.3" }, "engines": { @@ -7772,18 +7832,18 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.0.tgz", - "integrity": "sha512-pR+dK0BlxCLxtWfaKQWtYr7MhKmzqZxuii+ZjuFlZlIGRZm22HnXFqa2eY+90MUz8/i80YJmzFGDUsi8dMOV5w==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.60.1.tgz", + "integrity": "sha512-eXkTH2bxmXlqD1RnOPmLZ9ZM9D3VwSx04JOwBnP9RQ+yUA5a2Mu7SfW8uaV2Aon53NJzZlZYuX7tn91Izf+xaw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.57.0", - "@typescript-eslint/types": "^8.57.0", + "@typescript-eslint/tsconfig-utils": "^8.60.1", + "@typescript-eslint/types": "^8.60.1", "debug": "^4.4.3" }, "engines": { @@ -7794,18 +7854,18 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.0.tgz", - "integrity": "sha512-nvExQqAHF01lUM66MskSaZulpPL5pgy5hI5RfrxviLgzZVffB5yYzw27uK/ft8QnKXI2X0LBrHJFr1TaZtAibw==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.60.1.tgz", + "integrity": "sha512-gvI5OQoptnxQnchOirukCuQ55svJSTuD/4k5+pC267xyBtYry748R9/c3tYUzb/iE6RZfllRz2lVulLCHkTm4w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.57.0", - "@typescript-eslint/visitor-keys": "8.57.0" + "@typescript-eslint/types": "8.60.1", + "@typescript-eslint/visitor-keys": "8.60.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7816,9 +7876,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.0.tgz", - "integrity": "sha512-LtXRihc5ytjJIQEH+xqjB0+YgsV4/tW35XKX3GTZHpWtcC8SPkT/d4tqdf1cKtesryHm2bgp6l555NYcT2NLvA==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.60.1.tgz", + "integrity": "sha512-nh8w4qAteiKuZu3pSSzG/yGKpw0OlkrKnzFmbVRenKaD4qc+7i1GrmZaLVkr8rk4uipiPGMOW4YsM6WmKZ5CvA==", "dev": true, "license": "MIT", "engines": { @@ -7829,21 +7889,21 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.0.tgz", - "integrity": "sha512-yjgh7gmDcJ1+TcEg8x3uWQmn8ifvSupnPfjP21twPKrDP/pTHlEQgmKcitzF/rzPSmv7QjJ90vRpN4U+zoUjwQ==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.60.1.tgz", + "integrity": "sha512-sdwTrpjosW7ANQYJ39ZBF1ZyEMEGVB2UsikrserVM/30a/F1dTLnu9bGxEdosugyu5caigjLrR2qiD11asjI1A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.57.0", - "@typescript-eslint/typescript-estree": "8.57.0", - "@typescript-eslint/utils": "8.57.0", + "@typescript-eslint/types": "8.60.1", + "@typescript-eslint/typescript-estree": "8.60.1", + "@typescript-eslint/utils": "8.60.1", "debug": "^4.4.3", - "ts-api-utils": "^2.4.0" + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7854,13 +7914,13 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.0.tgz", - "integrity": "sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.60.1.tgz", + "integrity": "sha512-4h0tY8ppCkdCzcrl2YM5M3my0xsE1Tf8om3owEu5oPWmXwkKRmk0j0LGDzYBGUcAlesEbxBhazqu/K4cu3Ug7w==", "dev": true, "license": "MIT", "engines": { @@ -7872,21 +7932,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.0.tgz", - "integrity": "sha512-m7faHcyVg0BT3VdYTlX8GdJEM7COexXxS6KqGopxdtkQRvBanK377QDHr4W/vIPAR+ah9+B/RclSW5ldVniO1Q==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.60.1.tgz", + "integrity": "sha512-alpRkfG8hlVE5kdJW2GkfgDgXxold3e8e4l6EnmhRmRLbekgAPCCGDVD++sABy9FcgPFroq+uFcCSM1vR57Cew==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.57.0", - "@typescript-eslint/tsconfig-utils": "8.57.0", - "@typescript-eslint/types": "8.57.0", - "@typescript-eslint/visitor-keys": "8.57.0", + "@typescript-eslint/project-service": "8.60.1", + "@typescript-eslint/tsconfig-utils": "8.60.1", + "@typescript-eslint/types": "8.60.1", + "@typescript-eslint/visitor-keys": "8.60.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.4.0" + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7896,7 +7956,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { @@ -7910,9 +7970,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "dev": true, "license": "MIT", "dependencies": { @@ -7923,13 +7983,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", - "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^5.0.2" + "brace-expansion": "^5.0.5" }, "engines": { "node": "18 || 20 || >=22" @@ -7939,9 +7999,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", + "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", "dev": true, "license": "ISC", "bin": { @@ -7952,16 +8012,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.0.tgz", - "integrity": "sha512-5iIHvpD3CZe06riAsbNxxreP+MuYgVUsV0n4bwLH//VJmgtt54sQeY2GszntJ4BjYCpMzrfVh2SBnUQTtys2lQ==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.60.1.tgz", + "integrity": "sha512-h2MPBLoNtjc3qZWfY3Tl51yPorQ2McHn8pJfcMNTcIvrrZrr90Ykffit0yjrPFWQcRcUxzH20+6OcVdW4yHtUg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.57.0", - "@typescript-eslint/types": "8.57.0", - "@typescript-eslint/typescript-estree": "8.57.0" + "@typescript-eslint/scope-manager": "8.60.1", + "@typescript-eslint/types": "8.60.1", + "@typescript-eslint/typescript-estree": "8.60.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7972,17 +8032,17 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.0.tgz", - "integrity": "sha512-zm6xx8UT/Xy2oSr2ZXD0pZo7Jx2XsCoID2IUh9YSTFRu7z+WdwYTRk6LhUftm1crwqbuoF6I8zAFeCMw0YjwDg==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.60.1.tgz", + "integrity": "sha512-EbGRQg4FhrmwLodl+t3JNAnXHWVr9Vp+Zl1QBZVPY4ByfkzIT8cX3K6QWODHtkIZqqJVEWvhHSx3v5PDHsaQag==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.57.0", + "@typescript-eslint/types": "8.60.1", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -8360,17 +8420,20 @@ } }, "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -8400,16 +8463,19 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -8419,15 +8485,16 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8437,15 +8504,16 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8940,6 +9008,15 @@ } ] }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -8965,9 +9042,9 @@ "dev": true }, "node_modules/body-parser": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", - "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "version": "1.20.5", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.5.tgz", + "integrity": "sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==", "devOptional": true, "license": "MIT", "dependencies": { @@ -8979,7 +9056,7 @@ "http-errors": "~2.0.1", "iconv-lite": "~0.4.24", "on-finished": "~2.4.1", - "qs": "~6.14.0", + "qs": "~6.15.1", "raw-body": "~2.5.3", "type-is": "~1.6.18", "unpipe": "~1.0.0" @@ -9011,6 +9088,27 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, + "node_modules/bplist-creator": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", + "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", + "license": "MIT", + "dependencies": { + "stream-buffers": "2.2.x" + } + }, + "node_modules/bplist-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", + "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", + "license": "MIT", + "dependencies": { + "big-integer": "1.6.x" + }, + "engines": { + "node": ">= 5.10.0" + } + }, "node_modules/brace-expansion": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", @@ -10290,7 +10388,6 @@ "version": "1.11.19", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", - "devOptional": true, "license": "MIT" }, "node_modules/debug": { @@ -10698,9 +10795,9 @@ } }, "node_modules/detox": { - "version": "20.50.1", - "resolved": "https://registry.npmjs.org/detox/-/detox-20.50.1.tgz", - "integrity": "sha512-5L2dZpuzBkBoZPq24Ir2AxW177nZbgIZctmzZK6hYsPbAMRICa9a3GG+1YrhXh8GVyW0f5WGMEilbCVtFUrecA==", + "version": "20.51.3", + "resolved": "https://registry.npmjs.org/detox/-/detox-20.51.3.tgz", + "integrity": "sha512-wrR1Xr+mojmM+UsycyLalLmednc2ZMHasdzGZgdmqfcVXN5OcSyVzA/JGoTmmz3Q/Xqv4bvT3jg/HdfQwiQMiw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -11451,12 +11548,16 @@ } }, "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-to-primitive": { @@ -11674,10 +11775,11 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.13.0.tgz", + "integrity": "sha512-bLohSkT6469rRs8czj0tLTD8vaeIS/whvPRJVjDr7IuoTT1k5DYDERlNycjDj/HkOlvQdYurmfZ/g3fG5bgeLQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^3.2.7" }, @@ -11695,6 +11797,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } @@ -11761,35 +11864,37 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/node_modules/debug": { @@ -12019,30 +12124,30 @@ } }, "node_modules/eslint-plugin-simple-import-sort": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.0.0.tgz", - "integrity": "sha512-8o0dVEdAkYap0Cn5kNeklaKcT1nUsa3LITWEuFk3nJifOoD+5JQGoyDUW2W/iPWwBsNBJpyJS9y4je/BgxLcyQ==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-13.0.0.tgz", + "integrity": "sha512-McAc+/Nlvcg4byY/CABGH8kqnefWBj8s3JA2okEtz8ixbECQgU46p0HkTUKa4YS7wvgGceimlc34p1nXqbWqtA==", "dev": true, + "license": "MIT", "peerDependencies": { "eslint": ">=5.0.0" } }, "node_modules/eslint-plugin-testing-library": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-7.6.8.tgz", - "integrity": "sha512-8qvVtc9gzYsBWJd2bMJByAlOdr/GBBH2RZygvp70OTivsJkLkYRxSZFtHq1XQK8k+zNi8DcV7aiSx3avE0rf2w==", + "version": "7.16.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-7.16.2.tgz", + "integrity": "sha512-8gleGnQXK2ZA3hHwjCwpYTZvM+9VsrJ+/9kDI8CjqAQGAdMQOdn/rJNu7ZySENuiWlGKQWyZJ4ZjEg2zamaRHw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "^8.15.0", - "@typescript-eslint/utils": "^8.15.0" + "@typescript-eslint/scope-manager": "^8.56.0", + "@typescript-eslint/utils": "^8.56.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0", - "pnpm": "^9.14.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0" } }, "node_modules/eslint-scope": { @@ -12692,17 +12797,34 @@ } }, "node_modules/express/node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", "license": "MIT", "dependencies": { - "content-type": "^1.0.5", + "content-type": "^2.0.0", "media-typer": "^1.1.0", "mime-types": "^3.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/type-is/node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/extend": { @@ -13640,9 +13762,10 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -13960,8 +14083,9 @@ } }, "node_modules/inaturalistjs": { - "version": "2.17.0", - "resolved": "git+ssh://git@github.com/inaturalist/inaturalistjs.git#87366ca9f3f33074c0cabecad6fdfbffe6d0e0e4", + "version": "2.20.0", + "resolved": "git+ssh://git@github.com/inaturalist/inaturalistjs.git#70d6f5dd639aa10ae3208215ac6eef84825d6d2e", + "integrity": "sha512-BZhQvG7bhPuEa7AuHOSjXX4ApZZUKWj/R584spvqw8Wyc4zO68akOoBGY07Gk6DIzjozawZ/oxfXnyAJoFkxcA==", "license": "MIT", "dependencies": { "cross-fetch": "^4.0.0", @@ -14161,11 +14285,15 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -16365,6 +16493,15 @@ "shell-quote": "^1.8.3" } }, + "node_modules/launder": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/launder/-/launder-1.7.1.tgz", + "integrity": "sha512-mU6WRz5EusL9ZZuiZ5SO4Y6C0P9PAUR9iwdb6bzj4KDihm28DiHFw+/yk9DBH4f+Pv1wuzQ4e2jV3oQ7mkIqvw==", + "license": "MIT", + "dependencies": { + "dayjs": "^1.11.7" + } + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -18097,15 +18234,18 @@ } }, "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.hasown": { @@ -18126,12 +18266,14 @@ } }, "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, @@ -19249,9 +19391,9 @@ ] }, "node_modules/qs": { - "version": "6.14.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", - "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", + "version": "6.15.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", + "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -19431,19 +19573,19 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-native": { - "version": "0.83.6", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.83.6.tgz", - "integrity": "sha512-H513+8VzviNFXOdPnStRzX9S3/jiJGg++QZ1zd+ROyAvBEKqFqKUPHH0d82y3QyRPct5qKjdOa7J6vNehCvXYA==", + "version": "0.83.9", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.83.9.tgz", + "integrity": "sha512-bTQpaSJBbxOizI8SMNiCR/5aIvfO3ZlXAcWYxg6FmdbfJYCZ0zdUCK9mSZ4patureITGHNU94RXhxDAJhqsO7w==", "license": "MIT", "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.83.6", - "@react-native/codegen": "0.83.6", - "@react-native/community-cli-plugin": "0.83.6", - "@react-native/gradle-plugin": "0.83.6", - "@react-native/js-polyfills": "0.83.6", - "@react-native/normalize-colors": "0.83.6", - "@react-native/virtualized-lists": "0.83.6", + "@react-native/assets-registry": "0.83.9", + "@react-native/codegen": "0.83.9", + "@react-native/community-cli-plugin": "0.83.9", + "@react-native/gradle-plugin": "0.83.9", + "@react-native/js-polyfills": "0.83.9", + "@react-native/normalize-colors": "0.83.9", + "@react-native/virtualized-lists": "0.83.9", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", @@ -19714,6 +19856,48 @@ "react-native": ">=0.48.4" } }, + "node_modules/react-native-legal": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/react-native-legal/-/react-native-legal-1.6.3.tgz", + "integrity": "sha512-Usr/ssel/2xFGJN58FJTjxjTchwB9W2b3XAgSt28xL4sS7SxZa4U3ZGcYqJxVqzUSIIsNZ1xODUOY85BVr3JYg==", + "license": "MIT", + "dependencies": { + "@callstack/licenses": "^0.3.1", + "glob": "^7.1.3", + "xcode": "^3.0.1", + "xml2js": "^0.6.2" + }, + "peerDependencies": { + "expo": ">=52.0.0", + "react-native": ">=0.76.0" + }, + "peerDependenciesMeta": { + "expo": { + "optional": true + } + } + }, + "node_modules/react-native-legal/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/react-native-linear-gradient": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/react-native-linear-gradient/-/react-native-linear-gradient-2.8.3.tgz", @@ -19957,9 +20141,9 @@ } }, "node_modules/react-native-safe-area-context": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-5.6.2.tgz", - "integrity": "sha512-4XGqMNj5qjUTYywJqpdWZ9IG8jgkS3h06sfVjfw5yZQZfWnRFXczi0GnYyFyCc2EBps/qFmoCH8fez//WumdVg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-5.8.0.tgz", + "integrity": "sha512-t+ZsAVzY/wWzzx34vqGbo3/as9EEESJdbyZNL7Yg5EYX+toYMtMqFoDDCvqZUi35eeGVsXc6pAaEk4edMwbuCQ==", "license": "MIT", "peerDependencies": { "react": "*", @@ -20202,9 +20386,9 @@ } }, "node_modules/react-native/node_modules/@react-native/virtualized-lists": { - "version": "0.83.6", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.83.6.tgz", - "integrity": "sha512-gNSFXeb4P7qHtauLvl+zESroULIyX6Ltpvau3dhwy/QmfanBv0KUcrIU/7aVXxtWcXgp+54oWJyu2LIrsZ9+LQ==", + "version": "0.83.9", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.83.9.tgz", + "integrity": "sha512-fZ84faVUANrBU7GfL1wPSkGkn5cnCPVXxAwutKit1S5i8hlfwCnt0gE9Fu/0fpAIeuGxHVed00w2xxDVXyLxKQ==", "license": "MIT", "dependencies": { "invariant": "^2.2.4", @@ -20839,15 +21023,16 @@ } }, "node_modules/sanitize-html": { - "version": "2.17.3", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.17.3.tgz", - "integrity": "sha512-Kn4srCAo2+wZyvCNKCSyB2g8RQ8IkX/gQs2uqoSRNu5t9I2qvUyAVvRDiFUVAiX3N3PNuwStY0eNr+ooBHVWEg==", + "version": "2.17.4", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.17.4.tgz", + "integrity": "sha512-2HW7v2ol/uAM7sX4hbD8Z59OGWmAPrvjL8E71UWlBcj6m+kcF6ilQBLny+cIgY214QJeJT5tQuxKKqX0SQqjGQ==", "license": "MIT", "dependencies": { "deepmerge": "^4.2.2", "escape-string-regexp": "^4.0.0", "htmlparser2": "^10.1.0", "is-plain-object": "^5.0.0", + "launder": "^1.7.1", "parse-srcset": "^1.0.2", "postcss": "^8.3.11" } @@ -21190,9 +21375,10 @@ } }, "node_modules/shell-quote": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", - "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.4.tgz", + "integrity": "sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -21340,6 +21526,17 @@ "url": "https://github.com/steveukx/git-js?sponsor=1" } }, + "node_modules/simple-plist": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", + "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", + "license": "MIT", + "dependencies": { + "bplist-creator": "0.1.0", + "bplist-parser": "0.3.1", + "plist": "^3.0.5" + } + }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -21508,6 +21705,15 @@ "node": ">= 0.4" } }, + "node_modules/stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==", + "license": "Unlicense", + "engines": { + "node": ">= 0.10.0" + } + }, "node_modules/stream-chain": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", @@ -22190,14 +22396,14 @@ "license": "MIT" }, "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", - "picomatch": "^4.0.3" + "picomatch": "^4.0.4" }, "engines": { "node": ">=12.0.0" @@ -22238,9 +22444,9 @@ } }, "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.6.tgz", + "integrity": "sha512-5sJPdPjfI5Kx+qbrDesxkglRBxW//g7hCsqspEjwkewGvBMGIKMOTKzLt1hFVJzyadba3lDUN20O9qhvbQUSTA==", "dev": true, "license": "MIT", "engines": { @@ -22324,9 +22530,9 @@ } }, "node_modules/ts-api-utils": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", - "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", "dev": true, "license": "MIT", "engines": { @@ -23280,6 +23486,51 @@ } } }, + "node_modules/xcode": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", + "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", + "license": "Apache-2.0", + "dependencies": { + "simple-plist": "^1.1.0", + "uuid": "^7.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/xcode/node_modules/uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, "node_modules/xmlbuilder": { "version": "15.1.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", diff --git a/package.json b/package.json index aa3e8f6d0..d004d586f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "inaturalistreactnative", - "version": "1.0.21", + "version": "1.0.23", "private": true, "scripts": { "android": "react-native run-android", @@ -42,12 +42,13 @@ "e2e": "npm run e2e:build && npm run e2e:test", "icons": "./scripts/update-icon-font.sh", "add-example-model": "babel-node scripts/add-example-model.js", - "reassure": "reassure" + "reassure": "reassure", + "legal-generate": "react-native legal-generate" }, "dependencies": { "@bam.tech/react-native-image-resizer": "^3.0.11", "@candlefinance/faster-image": "^1.7.2", - "@dr.pogodin/react-native-fs": "^2.36.1", + "@dr.pogodin/react-native-fs": "^2.38.2", "@formidable-webview/webshell": "^2.6.0", "@gorhom/bottom-sheet": "^5.2.8", "@invertase/react-native-apple-authentication": "^2.4.0", @@ -72,14 +73,14 @@ "@react-navigation/native": "^7.1.17", "@react-navigation/native-stack": "^7.3.25", "@realm/react": "^0.20.0", - "@rozenite/controls-plugin": "^1.7.0", - "@rozenite/file-system-plugin": "^1.7.0", - "@rozenite/metro": "^1.7.0", - "@rozenite/mmkv-plugin": "^1.7.0", - "@rozenite/network-activity-plugin": "^1.7.0", - "@rozenite/react-navigation-plugin": "^1.7.0", - "@rozenite/require-profiler-plugin": "^1.7.0", - "@rozenite/tanstack-query-plugin": "^1.7.0", + "@rozenite/controls-plugin": "^1.10.0", + "@rozenite/file-system-plugin": "^1.10.0", + "@rozenite/metro": "^1.10.0", + "@rozenite/network-activity-plugin": "^1.10.0", + "@rozenite/react-navigation-plugin": "^1.10.0", + "@rozenite/require-profiler-plugin": "^1.10.0", + "@rozenite/storage-plugin": "^1.10.0", + "@rozenite/tanstack-query-plugin": "^1.10.0", "@sayem314/react-native-keep-awake": "^1.3.1", "@shopify/flash-list": "^2.2.0", "@tanstack/react-query": "5.90.14", @@ -90,7 +91,7 @@ "i18next": "^26.0.4", "i18next-fluent": "^2.0.0", "i18next-resources-to-backend": "^1.2.1", - "inaturalistjs": "github:inaturalist/inaturalistjs", + "inaturalistjs": "github:inaturalist/inaturalistjs#70d6f5dd639aa10ae3208215ac6eef84825d6d2e", "intl-pluralrules": "^2.0.1", "jsrsasign": "^11.1.1", "linkify-html": "^4.3.2", @@ -102,7 +103,7 @@ "react": "19.2.0", "react-dom": "19.1.1", "react-i18next": "^17.0.2", - "react-native": "0.83.6", + "react-native": "0.83.9", "react-native-animated-dots-carousel": "^2.0.0", "react-native-audio-recorder-player": "^3.6.14", "react-native-bouncy-checkbox": "^3.0.7", @@ -118,6 +119,7 @@ "react-native-get-random-values": "^2.0.0", "react-native-image-picker": "^8.2.1", "react-native-keyboard-aware-scroll-view": "^0.9.5", + "react-native-legal": "^1.6.3", "react-native-linear-gradient": "^2.8.3", "react-native-localize": "^3.5.2", "react-native-logs": "^5.3.0", @@ -134,7 +136,7 @@ "react-native-reanimated": "^4.2.2", "react-native-reanimated-carousel": "^4.0.3", "react-native-restart": "^0.0.27", - "react-native-safe-area-context": "^5.6.2", + "react-native-safe-area-context": "^5.8.0", "react-native-screens": "4.15.4", "react-native-sensitive-info": "^5.6.2", "react-native-share-menu": "github:inaturalist/react-native-share-menu#iNaturalistReactNative", @@ -148,7 +150,7 @@ "react-native-worklets": "^0.7.0", "react-native-worklets-core": "^1.6.3", "realm": "^20.2.0", - "sanitize-html": "^2.17.3", + "sanitize-html": "^2.17.4", "uuid": "^11.1.1", "vision-camera-plugin-inatvision": "github:inaturalist/vision-camera-plugin-inatvision#5cb51942939f704acbb5d451a444f7aa36268c66", "zustand": "^4.5.7" @@ -165,10 +167,10 @@ "@react-native-community/cli": "20.0.0", "@react-native-community/cli-platform-android": "20.0.0", "@react-native-community/cli-platform-ios": "20.0.0", - "@react-native/babel-preset": "0.83.6", - "@react-native/eslint-config": "0.83.6", - "@react-native/metro-config": "0.83.6", - "@react-native/typescript-config": "0.83.6", + "@react-native/babel-preset": "0.83.9", + "@react-native/eslint-config": "0.83.9", + "@react-native/metro-config": "0.83.9", + "@react-native/typescript-config": "0.83.9", "@stylistic/eslint-plugin": "^3.1.0", "@tanstack/eslint-plugin-query": "^5.91.4", "@testing-library/jest-native": "^5.4.3", @@ -181,28 +183,28 @@ "@types/react-dom": "^19.1.0", "@types/react-test-renderer": "^19.1.0", "@types/sanitize-html": "^2.16.1", - "@typescript-eslint/eslint-plugin": "^8.32.1", + "@typescript-eslint/eslint-plugin": "^8.60.1", "babel-plugin-module-resolver": "^5.0.0", "babel-plugin-react-compiler": "^19.1.0-rc.3", "babel-plugin-transform-inline-environment-variables": "^0.4.4", "babel-plugin-transform-remove-console": "^6.9.4", "chalk": "^5.4.1", "decompress": "^4.2.1", - "detox": "^20.50.1", + "detox": "^20.51.3", "dotenv": "^16.4.7", "eslint": "^8.57.1", "eslint-config-airbnb": "^19.0.4", "eslint-import-resolver-babel-module": "^5.3.2", "eslint-plugin-i18next": "^6.1.1", - "eslint-plugin-import": "^2.29.1", + "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-lodash": "^7.4.0", "eslint-plugin-module-resolver": "^1.5.0", "eslint-plugin-react-hooks": "^7.1.1", "eslint-plugin-react-native": "^5.0.0", "eslint-plugin-react-native-a11y": "^3.5.1", - "eslint-plugin-simple-import-sort": "^12.0.0", - "eslint-plugin-testing-library": "^7.6.8", + "eslint-plugin-simple-import-sort": "^13.0.0", + "eslint-plugin-testing-library": "^7.16.2", "factoria": "^4.0.1", "flow-bin": "^0.182.0", "fluent_conv": "^3.3.0", diff --git a/patches/react-native+0.83.6.patch b/patches/react-native+0.83.9.patch similarity index 100% rename from patches/react-native+0.83.6.patch rename to patches/react-native+0.83.9.patch diff --git a/patches/react-native-draggable-flatlist+4.0.1.patch b/patches/react-native-draggable-flatlist+4.0.1.patch index bc70ea669..2d9cc982e 100644 --- a/patches/react-native-draggable-flatlist+4.0.1.patch +++ b/patches/react-native-draggable-flatlist+4.0.1.patch @@ -1,5 +1,5 @@ diff --git a/node_modules/react-native-draggable-flatlist/lib/commonjs/context/animatedValueContext.js b/node_modules/react-native-draggable-flatlist/lib/commonjs/context/animatedValueContext.js -index 19eec62..5a7aae2 100644 +index 19eec62..ab919d8 100644 --- a/node_modules/react-native-draggable-flatlist/lib/commonjs/context/animatedValueContext.js +++ b/node_modules/react-native-draggable-flatlist/lib/commonjs/context/animatedValueContext.js @@ -1,2 +1,288 @@ @@ -326,6 +326,91 @@ index ab6d37c..8b7a9e1 100644 \ No newline at end of file +{"version":3,"names":["React","useMemo","useEffect","useCallback","useContext","useAnimatedReaction","useDerivedValue","useSharedValue","State","GestureState","useProps","AnimatedValueContext","createContext","undefined","AnimatedValueProvider","children","value","useSetupAnimatedValues","useAnimatedValues","Error","props","DEFAULT_VAL","containerSize","scrollViewSize","panGestureState","UNDETERMINED","touchTranslate","isTouchActiveNative","hasMoved","disabled","horizontalAnim","horizontal","activeIndexAnim","spacerIndexAnim","activeCellSize","activeCellOffset","scrollOffset","scrollInit","viewableIndexMin","viewableIndexMax","outerScrollOffset","outerScrollInit","cur","prev","placeholderOffset","isDraggingCell","autoScrollDistance","innerScrollDiff","outerScrollDiff","scrollDiff","touchPositionDiff","extraTranslate","touchPositionDiffConstrained","containerMinusActiveCell","offsetRelativeToScrollTop","constrained","Math","min","max","maxTranslateNegative","maxTranslatePositive","constrainedBase","hoverAnim","dragItemOverflow","hoverOffset","isHovering","resetTouchedCell","onAnimValInit"],"sources":["animatedValueContext.tsx"],"sourcesContent":["import React, { useMemo, useEffect, useCallback, useContext } from \"react\";\nimport {\n useAnimatedReaction,\n useDerivedValue,\n useSharedValue,\n} from \"react-native-reanimated\";\nimport { State as GestureState } from \"react-native-gesture-handler\";\nimport { useProps } from \"./propsContext\";\n\nconst AnimatedValueContext = React.createContext<\n ReturnType | undefined\n>(undefined);\n\nexport default function AnimatedValueProvider({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const value = useSetupAnimatedValues();\n return (\n \n {children}\n \n );\n}\n\nexport function useAnimatedValues() {\n const value = useContext(AnimatedValueContext);\n if (!value) {\n throw new Error(\n \"useAnimatedValues must be called from within AnimatedValueProvider!\"\n );\n }\n return value;\n}\n\nfunction useSetupAnimatedValues() {\n const props = useProps();\n\n const DEFAULT_VAL = useSharedValue(0);\n\n const containerSize = useSharedValue(0);\n const scrollViewSize = useSharedValue(0);\n\n const panGestureState = useSharedValue(\n GestureState.UNDETERMINED\n );\n const touchTranslate = useSharedValue(0);\n\n const isTouchActiveNative = useSharedValue(false);\n\n const hasMoved = useSharedValue(0);\n const disabled = useSharedValue(false);\n\n const horizontalAnim = useSharedValue(!!props.horizontal);\n\n const activeIndexAnim = useSharedValue(-1); // Index of hovering cell\n const spacerIndexAnim = useSharedValue(-1); // Index of hovered-over cell\n\n const activeCellSize = useSharedValue(0); // Height or width of acctive cell\n const activeCellOffset = useSharedValue(0); // Distance between active cell and edge of container\n\n const scrollOffset = useSharedValue(0);\n const scrollInit = useSharedValue(0);\n\n const viewableIndexMin = useSharedValue(0);\n const viewableIndexMax = useSharedValue(0);\n\n // If list is nested there may be an outer scrollview\n const outerScrollOffset = props.outerScrollOffset || DEFAULT_VAL;\n const outerScrollInit = useSharedValue(0);\n\n useAnimatedReaction(\n () => {\n return activeIndexAnim.value;\n },\n (cur, prev) => {\n if (cur !== prev && cur >= 0) {\n scrollInit.value = scrollOffset.value;\n outerScrollInit.value = outerScrollOffset.value;\n }\n },\n [outerScrollOffset]\n );\n\n const placeholderOffset = useSharedValue(0);\n\n const isDraggingCell = useDerivedValue(() => {\n return isTouchActiveNative.value && activeIndexAnim.value >= 0;\n }, []);\n\n const autoScrollDistance = useDerivedValue(() => {\n if (!isDraggingCell.value) return 0;\n const innerScrollDiff = scrollOffset.value - scrollInit.value;\n // If list is nested there may be an outer scroll diff\n const outerScrollDiff = outerScrollOffset.value - outerScrollInit.value;\n const scrollDiff = innerScrollDiff + outerScrollDiff;\n return scrollDiff;\n }, []);\n\n const touchPositionDiff = useDerivedValue(() => {\n const extraTranslate = isTouchActiveNative.value\n ? autoScrollDistance.value\n : 0;\n return touchTranslate.value + extraTranslate;\n }, []);\n\n const touchPositionDiffConstrained = useDerivedValue(() => {\n const containerMinusActiveCell =\n containerSize.value - activeCellSize.value + scrollOffset.value;\n\n const offsetRelativeToScrollTop =\n touchPositionDiff.value + activeCellOffset.value;\n const constrained = Math.min(\n containerMinusActiveCell,\n Math.max(scrollOffset.value, offsetRelativeToScrollTop)\n );\n\n const maxTranslateNegative = -activeCellOffset.value;\n const maxTranslatePositive =\n scrollViewSize.value - (activeCellOffset.value + activeCellSize.value);\n\n // Only constrain the touch position while the finger is on the screen. This allows the active cell\n // to snap above/below the fold once let go, if the drag ends at the top/bottom of the screen.\n const constrainedBase = isTouchActiveNative.value\n ? constrained - activeCellOffset.value\n : touchPositionDiff.value;\n\n // Make sure item is constrained to the boundaries of the scrollview\n return Math.min(\n Math.max(constrainedBase, maxTranslateNegative),\n maxTranslatePositive\n );\n }, []);\n\n const hoverAnim = useDerivedValue(() => {\n if (activeIndexAnim.value < 0) return 0;\n return dragItemOverflow\n ? touchPositionDiff.value\n : touchPositionDiffConstrained.value;\n }, []);\n\n const hoverOffset = useDerivedValue(() => {\n return hoverAnim.value + activeCellOffset.value;\n }, [hoverAnim, activeCellOffset]);\n\n useDerivedValue(() => {\n // Reset spacer index when we stop hovering\n const isHovering = activeIndexAnim.value >= 0;\n if (!isHovering && spacerIndexAnim.value >= 0) {\n spacerIndexAnim.value = -1;\n }\n }, []);\n\n // Note: this could use a refactor as it combines touch state + cell animation\n const resetTouchedCell = useCallback(() => {\n activeCellOffset.value = 0;\n hasMoved.value = 0;\n }, []);\n\n const value = useMemo(\n () => ({\n activeCellOffset,\n activeCellSize,\n activeIndexAnim,\n containerSize,\n disabled,\n horizontalAnim,\n hoverAnim,\n hoverOffset,\n isDraggingCell,\n isTouchActiveNative,\n panGestureState,\n placeholderOffset,\n resetTouchedCell,\n scrollOffset,\n scrollViewSize,\n spacerIndexAnim,\n touchPositionDiff,\n touchTranslate,\n autoScrollDistance,\n viewableIndexMin,\n viewableIndexMax,\n }),\n [\n activeCellOffset,\n activeCellSize,\n activeIndexAnim,\n containerSize,\n disabled,\n horizontalAnim,\n hoverAnim,\n hoverOffset,\n isDraggingCell,\n isTouchActiveNative,\n panGestureState,\n placeholderOffset,\n resetTouchedCell,\n scrollOffset,\n scrollViewSize,\n spacerIndexAnim,\n touchPositionDiff,\n touchTranslate,\n autoScrollDistance,\n viewableIndexMin,\n viewableIndexMax,\n ]\n );\n\n useEffect(() => {\n props.onAnimValInit?.(value);\n }, [value]);\n\n return value;\n}\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,OAAhB,EAAyBC,SAAzB,EAAoCC,WAApC,EAAiDC,UAAjD,QAAmE,OAAnE;AACA,SACEC,mBADF,EAEEC,eAFF,EAGEC,cAHF,QAIO,yBAJP;AAKA,SAASC,KAAK,IAAIC,YAAlB,QAAsC,8BAAtC;AACA,SAASC,QAAT,QAAyB,gBAAzB;AAEA,MAAMC,oBAAoB,gBAAGX,KAAK,CAACY,aAAN,CAE3BC,SAF2B,CAA7B;AAIA,eAAe,SAASC,qBAAT,OAIZ;EAAA,IAJ2C;IAC5CC;EAD4C,CAI3C;EACD,MAAMC,KAAK,GAAGC,sBAAsB,EAApC;EACA,oBACE,oBAAC,oBAAD,CAAsB,QAAtB;IAA+B,KAAK,EAAED;EAAtC,GACGD,QADH,CADF;AAKD;AAED,OAAO,SAASG,iBAAT,GAA6B;EAClC,MAAMF,KAAK,GAAGZ,UAAU,CAACO,oBAAD,CAAxB;;EACA,IAAI,CAACK,KAAL,EAAY;IACV,MAAM,IAAIG,KAAJ,CACJ,qEADI,CAAN;EAGD;;EACD,OAAOH,KAAP;AACD;;AAED,SAASC,sBAAT,GAAqC;EACnC,MAAMG,KAAK,GAAGV,QAAQ,EAAtB;EAEA,MAAMW,WAAW,GAAGd,cAAc,CAAC,CAAD,CAAlC;EAEA,MAAMe,aAAa,GAAGf,cAAc,CAAC,CAAD,CAApC;EACA,MAAMgB,cAAc,GAAGhB,cAAc,CAAC,CAAD,CAArC;EAEA,MAAMiB,eAAe,GAAGjB,cAAc,CACpCE,YAAY,CAACgB,YADuB,CAAtC;EAGA,MAAMC,cAAc,GAAGnB,cAAc,CAAC,CAAD,CAArC;EAEA,MAAMoB,mBAAmB,GAAGpB,cAAc,CAAC,KAAD,CAA1C;EAEA,MAAMqB,QAAQ,GAAGrB,cAAc,CAAC,CAAD,CAA/B;EACA,MAAMsB,QAAQ,GAAGtB,cAAc,CAAC,KAAD,CAA/B;EAEA,MAAMuB,cAAc,GAAGvB,cAAc,CAAC,CAAC,CAACa,KAAK,CAACW,UAAT,CAArC;EAEA,MAAMC,eAAe,GAAGzB,cAAc,CAAC,CAAC,CAAF,CAAtC,CApBmC,CAoBS;;EAC5C,MAAM0B,eAAe,GAAG1B,cAAc,CAAC,CAAC,CAAF,CAAtC,CArBmC,CAqBS;;EAE5C,MAAM2B,cAAc,GAAG3B,cAAc,CAAC,CAAD,CAArC,CAvBmC,CAuBO;;EAC1C,MAAM4B,gBAAgB,GAAG5B,cAAc,CAAC,CAAD,CAAvC,CAxBmC,CAwBS;;EAE5C,MAAM6B,YAAY,GAAG7B,cAAc,CAAC,CAAD,CAAnC;EACA,MAAM8B,UAAU,GAAG9B,cAAc,CAAC,CAAD,CAAjC;EAEA,MAAM+B,gBAAgB,GAAG/B,cAAc,CAAC,CAAD,CAAvC;EACA,MAAMgC,gBAAgB,GAAGhC,cAAc,CAAC,CAAD,CAAvC,CA9BmC,CAgCnC;;EACA,MAAMiC,iBAAiB,GAAGpB,KAAK,CAACoB,iBAAN,IAA2BnB,WAArD;EACA,MAAMoB,eAAe,GAAGlC,cAAc,CAAC,CAAD,CAAtC;EAEAF,mBAAmB,CACjB,MAAM;IACJ,OAAO2B,eAAe,CAAChB,KAAvB;EACD,CAHgB,EAIjB,CAAC0B,GAAD,EAAMC,IAAN,KAAe;IACb,IAAID,GAAG,KAAKC,IAAR,IAAgBD,GAAG,IAAI,CAA3B,EAA8B;MAC5BL,UAAU,CAACrB,KAAX,GAAmBoB,YAAY,CAACpB,KAAhC;MACAyB,eAAe,CAACzB,KAAhB,GAAwBwB,iBAAiB,CAACxB,KAA1C;IACD;EACF,CATgB,EAUjB,CAACwB,iBAAD,CAViB,CAAnB;EAaA,MAAMI,iBAAiB,GAAGrC,cAAc,CAAC,CAAD,CAAxC;EAEA,MAAMsC,cAAc,GAAGvC,eAAe,CAAC,MAAM;IAC3C,OAAOqB,mBAAmB,CAACX,KAApB,IAA6BgB,eAAe,CAAChB,KAAhB,IAAyB,CAA7D;EACD,CAFqC,EAEnC,EAFmC,CAAtC;EAIA,MAAM8B,kBAAkB,GAAGxC,eAAe,CAAC,MAAM;IAC/C,IAAI,CAACuC,cAAc,CAAC7B,KAApB,EAA2B,OAAO,CAAP;IAC3B,MAAM+B,eAAe,GAAGX,YAAY,CAACpB,KAAb,GAAqBqB,UAAU,CAACrB,KAAxD,CAF+C,CAG/C;;IACA,MAAMgC,eAAe,GAAGR,iBAAiB,CAACxB,KAAlB,GAA0ByB,eAAe,CAACzB,KAAlE;IACA,MAAMiC,UAAU,GAAGF,eAAe,GAAGC,eAArC;IACA,OAAOC,UAAP;EACD,CAPyC,EAOvC,EAPuC,CAA1C;EASA,MAAMC,iBAAiB,GAAG5C,eAAe,CAAC,MAAM;IAC9C,MAAM6C,cAAc,GAAGxB,mBAAmB,CAACX,KAApB,GACnB8B,kBAAkB,CAAC9B,KADA,GAEnB,CAFJ;IAGA,OAAOU,cAAc,CAACV,KAAf,GAAuBmC,cAA9B;EACD,CALwC,EAKtC,EALsC,CAAzC;EAOA,MAAMC,4BAA4B,GAAG9C,eAAe,CAAC,MAAM;IACzD,MAAM+C,wBAAwB,GAC5B/B,aAAa,CAACN,KAAd,GAAsBkB,cAAc,CAAClB,KAArC,GAA6CoB,YAAY,CAACpB,KAD5D;IAGA,MAAMsC,yBAAyB,GAC7BJ,iBAAiB,CAAClC,KAAlB,GAA0BmB,gBAAgB,CAACnB,KAD7C;IAEA,MAAMuC,WAAW,GAAGC,IAAI,CAACC,GAAL,CAClBJ,wBADkB,EAElBG,IAAI,CAACE,GAAL,CAAStB,YAAY,CAACpB,KAAtB,EAA6BsC,yBAA7B,CAFkB,CAApB;IAKA,MAAMK,oBAAoB,GAAG,CAACxB,gBAAgB,CAACnB,KAA/C;IACA,MAAM4C,oBAAoB,GACxBrC,cAAc,CAACP,KAAf,IAAwBmB,gBAAgB,CAACnB,KAAjB,GAAyBkB,cAAc,CAAClB,KAAhE,CADF,CAZyD,CAezD;IACA;;IACA,MAAM6C,eAAe,GAAGlC,mBAAmB,CAACX,KAApB,GACpBuC,WAAW,GAAGpB,gBAAgB,CAACnB,KADX,GAEpBkC,iBAAiB,CAAClC,KAFtB,CAjByD,CAqBzD;;IACA,OAAOwC,IAAI,CAACC,GAAL,CACLD,IAAI,CAACE,GAAL,CAASG,eAAT,EAA0BF,oBAA1B,CADK,EAELC,oBAFK,CAAP;EAID,CA1BmD,EA0BjD,EA1BiD,CAApD;EA4BA,MAAME,SAAS,GAAGxD,eAAe,CAAC,MAAM;IACtC,IAAI0B,eAAe,CAAChB,KAAhB,GAAwB,CAA5B,EAA+B,OAAO,CAAP;IAC/B,OAAOI,KAAK,CAAC2C,gBAAN,GACHb,iBAAiB,CAAClC,KADf,GAEHoC,4BAA4B,CAACpC,KAFjC;EAGD,CALgC,EAK9B,EAL8B,CAAjC;EAOA,MAAMgD,WAAW,GAAG1D,eAAe,CAAC,MAAM;IACxC,OAAOwD,SAAS,CAAC9C,KAAV,GAAkBmB,gBAAgB,CAACnB,KAA1C;EACD,CAFkC,EAEhC,CAAC8C,SAAD,EAAY3B,gBAAZ,CAFgC,CAAnC;EAIA7B,eAAe,CAAC,MAAM;IACpB;IACA,MAAM2D,UAAU,GAAGjC,eAAe,CAAChB,KAAhB,IAAyB,CAA5C;;IACA,IAAI,CAACiD,UAAD,IAAehC,eAAe,CAACjB,KAAhB,IAAyB,CAA5C,EAA+C;MAC7CiB,eAAe,CAACjB,KAAhB,GAAwB,CAAC,CAAzB;IACD;EACF,CANc,EAMZ,EANY,CAAf,CA9GmC,CAsHnC;;EACA,MAAMkD,gBAAgB,GAAG/D,WAAW,CAAC,MAAM;IACzCgC,gBAAgB,CAACnB,KAAjB,GAAyB,CAAzB;IACAY,QAAQ,CAACZ,KAAT,GAAiB,CAAjB;EACD,CAHmC,EAGjC,EAHiC,CAApC;EAKA,MAAMA,KAAK,GAAGf,OAAO,CACnB,OAAO;IACLkC,gBADK;IAELD,cAFK;IAGLF,eAHK;IAILV,aAJK;IAKLO,QALK;IAMLC,cANK;IAOLgC,SAPK;IAQLE,WARK;IASLnB,cATK;IAULlB,mBAVK;IAWLH,eAXK;IAYLoB,iBAZK;IAaLsB,gBAbK;IAcL9B,YAdK;IAeLb,cAfK;IAgBLU,eAhBK;IAiBLiB,iBAjBK;IAkBLxB,cAlBK;IAmBLoB,kBAnBK;IAoBLR,gBApBK;IAqBLC;EArBK,CAAP,CADmB,EAwBnB,CACEJ,gBADF,EAEED,cAFF,EAGEF,eAHF,EAIEV,aAJF,EAKEO,QALF,EAMEC,cANF,EAOEgC,SAPF,EAQEE,WARF,EASEnB,cATF,EAUElB,mBAVF,EAWEH,eAXF,EAYEoB,iBAZF,EAaEsB,gBAbF,EAcE9B,YAdF,EAeEb,cAfF,EAgBEU,eAhBF,EAiBEiB,iBAjBF,EAkBExB,cAlBF,EAmBEoB,kBAnBF,EAoBER,gBApBF,EAqBEC,gBArBF,CAxBmB,CAArB;EAiDArC,SAAS,CAAC,MAAM;IAAA;;IACd,wBAAAkB,KAAK,CAAC+C,aAAN,mFAAA/C,KAAK,EAAiBJ,KAAjB,CAAL;EACD,CAFQ,EAEN,CAACA,KAAD,CAFM,CAAT;EAIA,OAAOA,KAAP;AACD"} \ No newline at end of file +diff --git a/node_modules/react-native-draggable-flatlist/src/components/CellRendererComponent.tsx b/node_modules/react-native-draggable-flatlist/src/components/CellRendererComponent.tsx +index d7b833b..e4e861a 100644 +--- a/node_modules/react-native-draggable-flatlist/src/components/CellRendererComponent.tsx ++++ b/node_modules/react-native-draggable-flatlist/src/components/CellRendererComponent.tsx +@@ -4,7 +4,6 @@ import { + LayoutChangeEvent, + MeasureLayoutOnSuccessCallback, + StyleProp, +- StyleSheet, + ViewStyle, + } from "react-native"; + import Animated, { +@@ -163,11 +162,7 @@ function CellRendererComponent(props: Props) { + ? itemLayoutAnimation + : undefined + } +- style={[ +- props.style, +- baseStyle, +- activeKey ? animStyle : styles.zeroTranslate, +- ]} ++ style={[props.style, baseStyle, animStyle]} + pointerEvents={activeKey ? "none" : "auto"} + > + {children} +@@ -177,12 +172,6 @@ function CellRendererComponent(props: Props) { + + export default typedMemo(CellRendererComponent); + +-const styles = StyleSheet.create({ +- zeroTranslate: { +- transform: [{ translateX: 0 }, { translateY: 0 }], +- }, +-}); +- + declare global { + namespace NodeJS { + interface Global { +diff --git a/node_modules/react-native-draggable-flatlist/src/components/DraggableFlatList.tsx b/node_modules/react-native-draggable-flatlist/src/components/DraggableFlatList.tsx +index d7d98c2..8882e03 100644 +--- a/node_modules/react-native-draggable-flatlist/src/components/DraggableFlatList.tsx ++++ b/node_modules/react-native-draggable-flatlist/src/components/DraggableFlatList.tsx +@@ -6,7 +6,12 @@ import React, { + useRef, + useState, + } from "react"; +-import { ListRenderItem, FlatListProps, LayoutChangeEvent } from "react-native"; ++import { ++ ListRenderItem, ++ FlatListProps, ++ LayoutChangeEvent, ++ InteractionManager, ++} from "react-native"; + import { + FlatList, + Gesture, +@@ -20,7 +25,7 @@ import Animated, { + withSpring, + } from "react-native-reanimated"; + import CellRendererComponent from "./CellRendererComponent"; +-import { DEFAULT_PROPS, isWeb } from "../constants"; ++import { DEFAULT_PROPS } from "../constants"; + import PlaceholderItem from "./PlaceholderItem"; + import RowItem from "./RowItem"; + import { DraggableFlatListProps } from "../types"; +@@ -114,6 +119,9 @@ function DraggableFlatListInner(props: DraggableFlatListProps) { + if (dataHasChanged) { + // When data changes make sure `activeKey` is nulled out in the same render pass + activeKey = null; ++ InteractionManager.runAfterInteractions(() => { ++ reset(); ++ }); + } + + useEffect(() => { +@@ -221,7 +229,8 @@ function DraggableFlatListInner(props: DraggableFlatListProps) { + } + + onDragEnd?.({ from, to, data: newData }); +- reset(); ++ ++ setActiveKey(null); + } + ); + diff --git a/node_modules/react-native-draggable-flatlist/src/context/animatedValueContext.tsx b/node_modules/react-native-draggable-flatlist/src/context/animatedValueContext.tsx index 6ff1ed5..5f7d9bc 100644 --- a/node_modules/react-native-draggable-flatlist/src/context/animatedValueContext.tsx diff --git a/react-native-logs.config.ts b/react-native-logs.config.ts index 8383d5b06..422c1a793 100644 --- a/react-native-logs.config.ts +++ b/react-native-logs.config.ts @@ -22,7 +22,6 @@ RNFS.exists( logFileDirectory ).then( exists => ( exists const sharedConfig = { dateFormat: "iso", - // eslint-disable-next-line no-undef severity: __DEV__ ? "debug" : "info", diff --git a/src/api/log/index.ts b/src/api/log/index.ts index 983f2d8f9..ec4e0e6d4 100644 --- a/src/api/log/index.ts +++ b/src/api/log/index.ts @@ -75,7 +75,6 @@ type iNatLogstashTransportOptions = object; // Custom transport for posting to iNat API logging const iNatLogstashTransport: transportFunctionType = async props => { // Don't bother to log from dev builds - // eslint-disable-next-line no-undef if ( __DEV__ ) return; // Note on `console.errors`: we use logging to report errors, so validating input diff --git a/src/api/types.d.ts b/src/api/types.d.ts index 9a11e451f..0c24ae418 100644 --- a/src/api/types.d.ts +++ b/src/api/types.d.ts @@ -18,17 +18,32 @@ export interface ApiPlace { } export interface ApiPost { - id: number; - title: string; body: string; + id: number; published_at: string; + title: string; + parent: { + id: number; + icon_url: string | null; + }; +} + +export interface ProjectRulePreference { + field: string; + value: string | null; } export interface ApiProject { - icon?: string; - id?: number; - project_type?: "collection" | "umbrella" | ""; // FYI "" means "traditional" - title?: string; + description: string; + header_image_url: string | null; + icon: string; + id: number; + membership_model: "inviteonly" | "open" | null; + place_id: number | null; + project_type: "collection" | "umbrella" | ""; // FYI "" means "traditional" + rule_preferences: ProjectRulePreference[]; + title: string; + user_ids: number[]; } export interface ApiResponse { @@ -193,8 +208,16 @@ export interface ApiSuggestion { combined_score: number; } +export interface ApiTotalBounds { + swlat: number; + swlng: number; + nelat: number; + nelng: number; +} + export interface ApiObservationsSearchResponse extends ApiResponse { results: ApiObservation[]; + total_bounds?: ApiTotalBounds; } export const ORDER_BY_CREATED_AT = "created_at"; diff --git a/src/components/About.tsx b/src/components/About.tsx index fd86f74cd..71b67eb1d 100644 --- a/src/components/About.tsx +++ b/src/components/About.tsx @@ -10,8 +10,10 @@ import { } from "components/SharedComponents"; import { Image, Pressable, View } from "components/styledComponents"; import { t } from "i18next"; +import type { TabStackScreenProps } from "navigation/types"; import React, { useState } from "react"; import { getBuildNumber, getVersion } from "react-native-device-info"; +import { ReactNativeLegal } from "react-native-legal"; import { useDebugMode } from "sharedHooks"; import useStore from "stores/useStore"; @@ -19,7 +21,7 @@ const aboutID = "about"; const teamID = "team"; const About = ( ) => { - const navigation = useNavigation(); + const navigation = useNavigation["navigation"]>(); const [activeTab, setActiveTab] = useState( aboutID ); const [count, setCount] = useState( 0 ); const appVersion = getVersion(); @@ -61,6 +63,10 @@ const About = ( ) => { setCount( count + 1 ); }; + const onMorePressed = () => { + ReactNativeLegal.launchLicenseListScreen( t( "Licenses" ) ); + }; + return ( { onVersionPressed()} > { t( "Version-app-build", { appVersion, buildVersion } )} + onMorePressed()} + > + {t( "Licenses" )} + {isDebug && (