Skip to content

[v6][Realtime Database] Native crash when querying by boolean (orderByChild, equalTo) #2833

Closed
@barbsicle

Description

Issue

Querying the database with orderByChild and equalTo(true) or equalTo(false) will lead to a native-side crash when we run the query through an on() event listener. Interesting to also note that if we change the call to .once() it no longer crashes with an error.

iOS crash log (click to expand)

Exception 'When using queryOrderedByPriority, values provided to queryStartingAtValue:, queryEndingAtValue:, or queryEqualToValue: must be valid priorities.' was thrown while invoking on on target RNFBDatabaseQueryModule with params (
    "[DEFAULT]",
    "https://test-crash.firebaseio.com",
        {
        appName = "[DEFAULT]";
        eventType = value;
        hasCancellationCallback = 0;
        key = "$https://test-crash.firebaseio.com$/test$[DEFAULT]${filter-endAt:false:,filter-startAt:false:,order-orderByChild:disabled}";
        modifiers =         (
                        {
                id = "filter-endAt:false:";
                name = endAt;
                type = filter;
                value = 0;
                valueType = boolean;
            },
                        {
                id = "filter-startAt:false:";
                name = startAt;
                type = filter;
                value = 0;
                valueType = boolean;
            },
                        {
                id = "order-orderByChild:disabled";
                key = disabled;
                name = orderByChild;
                type = orderBy;
            }
        );
        path = "test";
        registration =         {
            eventRegistrationKey = "$https://test-crash.firebaseio.com$/test$[DEFAULT]${filter-endAt:false:,filter-startAt:false:,order-orderByChild:disabled}$4$value";
            key = "$https://test-crash.firebaseio.com$/test$[DEFAULT]${filter-endAt:false:,filter-startAt:false:,order-orderByChild:disabled}";
            registrationCancellationKey = "$https://test-crash.firebaseio.com$/test$[DEFAULT]${filter-endAt:false:,filter-startAt:false:,order-orderByChild:disabled}$4$value$cancelled";
        };
    }
)
callstack: (
	0   CoreFoundation                      0x00007fff23b98bde __exceptionPreprocess + 350
	1   libobjc.A.dylib                     0x00007fff503b5b20 objc_exception_throw + 48
	2   CoreFoundation                      0x00007fff23b98a1c +[NSException raise:format:] + 188
	3   Audit                               0x000000010e3130a7 -[FIRDatabaseQuery validateQueryEndpointsForParams:] + 1719
	4   Audit                               0x000000010e313d8a -[FIRDatabaseQuery queryEndingAtInternal:childKey:from:priorityMethod:] + 474
	5   Audit                               0x000000010e3139e0 -[FIRDatabaseQuery queryEndingAtValue:] + 96
	6   Audit                               0x000000010e31a55d -[FIRDatabaseReference queryEndingAtValue:] + 93
	7   Audit                               0x000000010eaa51d7 -[RNFBDatabaseQuery buildQueryWithModifiers:modifiers:] + 2935
	8   Audit                               0x000000010eaa45be -[RNFBDatabaseQuery initWithReferenceAndModifiers:modifiers:] + 174
	9   Audit                               0x000000010eaa617b -[RNFBDatabaseQueryModule getDatabaseQueryInstance:reference:modifiers:] + 219
	10  Audit                               0x000000010eaa77f4 -[RNFBDatabaseQueryModule on:::] + 436
	11  CoreFoundation                      0x00007fff23b9f95c __invoking___ + 140
	12  CoreFoundation                      0x00007fff23b9cd8f -[NSInvocation invoke] + 287
	13  CoreFoundation                      0x00007fff23b9d1f4 -[NSInvocation invokeWithTarget:] + 68
	14  Audit                               0x000000010ec05782 -[RCTModuleMethod invokeWithBridge:module:arguments:] + 2658
	15  Audit                               0x000000010ec098b7 _ZN8facebook5reactL11invokeInnerEP9RCTBridgeP13RCTModuleDatajRKN5folly7dynamicE + 791
	16  Audit                               0x000000010ec093c3 _ZZN8facebook5react15RCTNativeModule6invokeEjON5folly7dynamicEiENK3$_0clEv + 131
	17  Audit                               0x000000010ec09339 ___ZN8facebook5react15RCTNativeModule6invokeEjON5folly7dynamicEi_block_invoke + 25
	18  libdispatch.dylib                   0x00007fff511fb888 _dispatch_call_block_and_release + 12
	19  libdispatch.dylib                   0x00007fff511fc7f9 _dispatch_client_callout + 8
	20  libdispatch.dylib                   0x00007fff51202566 _dispatch_lane_serial_drain + 707
	21  libdispatch.dylib                   0x00007fff51202f9c _dispatch_lane_invoke + 388
	22  libdispatch.dylib                   0x00007fff5120d06c _dispatch_workloop_worker_thread + 626
	23  libsystem_pthread.dylib             0x00007fff5141c611 _pthread_wqthread + 421
	24  libsystem_pthread.dylib             0x00007fff5141c3fd start_wqthread + 13
)

Android crash log (click to expand)

11-06 16:20:05.543 30358 30402 E unknown:ReactNative: Exception in native call
11-06 16:20:05.543 30358 30402 E unknown:ReactNative: java.lang.IllegalArgumentException: When using orderByPriority(), values provided to startAt(), endAt(), or equalTo() must be valid priorities.
11-06 16:20:05.543 30358 30402 E unknown:ReactNative: 	at com.google.firebase.database.Query.validateQueryEndpoints(com.google.firebase:firebase-database@@18.0.1:107)
11-06 16:20:05.543 30358 30402 E unknown:ReactNative: 	at com.google.firebase.database.Query.endAt(com.google.firebase:firebase-database@@18.0.1:482)
11-06 16:20:05.543 30358 30402 E unknown:ReactNative: 	at com.google.firebase.database.Query.endAt(com.google.firebase:firebase-database@@18.0.1:468)
11-06 16:20:05.543 30358 30402 E unknown:ReactNative: 	at com.google.firebase.database.Query.endAt(com.google.firebase:firebase-database@@18.0.1:420)
11-06 16:20:05.543 30358 30402 E unknown:ReactNative: 	at io.invertase.firebase.database.ReactNativeFirebaseDatabaseQuery.applyEndAtFilter(ReactNativeFirebaseDatabaseQuery.java:254)
11-06 16:20:05.543 30358 30402 E unknown:ReactNative: 	at io.invertase.firebase.database.ReactNativeFirebaseDatabaseQuery.applyFilterModifier(ReactNativeFirebaseDatabaseQuery.java:230)
11-06 16:20:05.543 30358 30402 E unknown:ReactNative: 	at io.invertase.firebase.database.ReactNativeFirebaseDatabaseQuery.<init>(ReactNativeFirebaseDatabaseQuery.java:52)
11-06 16:20:05.543 30358 30402 E unknown:ReactNative: 	at io.invertase.firebase.database.ReactNativeFirebaseDatabaseQueryModule.getDatabaseQueryInstance(ReactNativeFirebaseDatabaseQueryModule.java:85)
11-06 16:20:05.543 30358 30402 E unknown:ReactNative: 	at io.invertase.firebase.database.ReactNativeFirebaseDatabaseQueryModule.on(ReactNativeFirebaseDatabaseQueryModule.java:388)
11-06 16:20:05.543 30358 30402 E unknown:ReactNative: 	at java.lang.reflect.Method.invoke(Native Method)
11-06 16:20:05.543 30358 30402 E unknown:ReactNative: 	at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)
11-06 16:20:05.543 30358 30402 E unknown:ReactNative: 	at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:158)
11-06 16:20:05.543 30358 30402 E unknown:ReactNative: 	at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
11-06 16:20:05.543 30358 30402 E unknown:ReactNative: 	at android.os.Handler.handleCallback(Handler.java:873)
11-06 16:20:05.543 30358 30402 E unknown:ReactNative: 	at android.os.Handler.dispatchMessage(Handler.java:99)
11-06 16:20:05.543 30358 30402 E unknown:ReactNative: 	at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:29)
11-06 16:20:05.543 30358 30402 E unknown:ReactNative: 	at android.os.Looper.loop(Looper.java:214)
11-06 16:20:05.543 30358 30402 E unknown:ReactNative: 	at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:232)
11-06 16:20:05.543 30358 30402 E unknown:ReactNative: 	at java.lang.Thread.run(Thread.java:764)

In order to reproduce, simply use the quick-start project with database

{
  "test": {
    "test1": {
      "disabled": true,
      "name": "Test True 1"
    },
    "test2": {
      "disabled": false,
      "name": "Test False 1"
    },
    "test3": {
      "disabled": false,
      "name": "Test False 2"
    }
  }
}

run the scripts below to quick-start a project

npx @react-native-community/cli init --template=@react-native-firebase/template crashtest
cd crashtest
yarn add @react-native-firebase/database

and in App.js add a quick test database call

/**
 * Sample React Native App with Firebase
 * https://github.com/invertase/react-native-firebase
 *
 * @format
 * @flow
 */

import React, { Component } from 'react';
import { Platform, StyleSheet, Text, View } from 'react-native';

import firebase from '@react-native-firebase/app';
import database from '@react-native-firebase/database';

...
...

export default class App extends Component {
  componentDidMount() {
    const testRef = database()
      .ref()
      .child('/test')
      .orderByChild('disabled')
      .equalTo(false);
    testRef.on('value', (snapshot: any) => {
      console.log(snapshot.val());
    });
  }

  render() {
    return (
      ...
      ...
    }
  }
}

Project Files

iOS

Click To Expand

ios/Podfile:

  • I'm not using Pods
  • I'm using Pods and my Podfile looks like:
platform :ios, '10.0'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'

# To override the React Native Firebase iOS SDK versions used uncomment any of the below and change the version
# $FirebaseSDKVersion = '6.8.1'
# $FabricSDKVersion = '1.6.0'
# $CrashlyticsSDKVersion = '3.1.0'

target 'crashtest' do
  # Pods for crashtest
  pod 'React', :path => '../node_modules/react-native/'
  pod 'React-Core', :path => '../node_modules/react-native/React'
  pod 'React-DevSupport', :path => '../node_modules/react-native/React'
  pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS'
  pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation'
  pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob'
  pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image'
  pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS'
  pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network'
  pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings'
  pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text'
  pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration'
  pod 'React-RCTWebSocket', :path => '../node_modules/react-native/Libraries/WebSocket'
  pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact'
  pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi'
  pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor'
  pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector'
  pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'
  pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
  pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
  pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'

  target 'crashtestTests' do
    inherit! :search_paths
    # Pods for testing
  end

  use_native_modules!
end

target 'crashtest-tvOS' do
  # Pods for crashtest-tvOS

  target 'crashtest-tvOSTests' do
    inherit! :search_paths
    # Pods for testing
  end

end

AppDelegate.m:

/**
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

#import "AppDelegate.h"

#import <React/RCTBridge.h>
#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
  RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
                                                   moduleName:@"rn61fb"
                                            initialProperties:nil];

  rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];

  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
  UIViewController *rootViewController = [UIViewController new];
  rootViewController.view = rootView;
  self.window.rootViewController = rootViewController;
  [self.window makeKeyAndVisible];
  return YES;
}

- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
#if DEBUG
  return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
#else
  return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#endif
}

@end


Android

Click To Expand

Have you converted to AndroidX?

  • my application is an AndroidX application?
  • I am using android/gradle.settings jetifier=true for Android compatibility?
  • I am using the NPM package jetifier for react-native compatibility?

android/build.gradle:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ext {
        buildToolsVersion = "28.0.3"
        minSdkVersion = 16
        compileSdkVersion = 28
        targetSdkVersion = 28
        supportLibVersion = "28.0.0"
    }
    repositories {
        google()
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.0'
        classpath 'com.google.gms:google-services:4.2.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        mavenLocal()
        maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url("$rootDir/../node_modules/react-native/android")
        }
        maven {
            // Android JSC is installed from npm
            url("$rootDir/../node_modules/jsc-android/dist")
        }

        jcenter()
    }
}

android/app/build.gradle:

apply plugin: "com.android.application"

import com.android.build.OutputFile

/**
 * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
 * and bundleReleaseJsAndAssets).
 * These basically call `react-native bundle` with the correct arguments during the Android build
 * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
 * bundle directly from the development server. Below you can see all the possible configurations
 * and their defaults. If you decide to add a configuration block, make sure to add it before the
 * `apply from: "../../node_modules/react-native/react.gradle"` line.
 *
 * project.ext.react = [
 *   // the name of the generated asset file containing your JS bundle
 *   bundleAssetName: "index.android.bundle",
 *
 *   // the entry file for bundle generation
 *   entryFile: "index.android.js",
 *
 *   // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format
 *   bundleCommand: "ram-bundle",
 *
 *   // whether to bundle JS and assets in debug mode
 *   bundleInDebug: false,
 *
 *   // whether to bundle JS and assets in release mode
 *   bundleInRelease: true,
 *
 *   // whether to bundle JS and assets in another build variant (if configured).
 *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
 *   // The configuration property can be in the following formats
 *   //         'bundleIn${productFlavor}${buildType}'
 *   //         'bundleIn${buildType}'
 *   // bundleInFreeDebug: true,
 *   // bundleInPaidRelease: true,
 *   // bundleInBeta: true,
 *
 *   // whether to disable dev mode in custom build variants (by default only disabled in release)
 *   // for example: to disable dev mode in the staging build type (if configured)
 *   devDisabledInStaging: true,
 *   // The configuration property can be in the following formats
 *   //         'devDisabledIn${productFlavor}${buildType}'
 *   //         'devDisabledIn${buildType}'
 *
 *   // the root of your project, i.e. where "package.json" lives
 *   root: "../../",
 *
 *   // where to put the JS bundle asset in debug mode
 *   jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
 *
 *   // where to put the JS bundle asset in release mode
 *   jsBundleDirRelease: "$buildDir/intermediates/assets/release",
 *
 *   // where to put drawable resources / React Native assets, e.g. the ones you use via
 *   // require('./image.png')), in debug mode
 *   resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
 *
 *   // where to put drawable resources / React Native assets, e.g. the ones you use via
 *   // require('./image.png')), in release mode
 *   resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
 *
 *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means
 *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
 *   // date; if you have any other folders that you want to ignore for performance reasons (gradle
 *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
 *   // for example, you might want to remove it from here.
 *   inputExcludes: ["android/**", "ios/**"],
 *
 *   // override which node gets called and with what additional arguments
 *   nodeExecutableAndArgs: ["node"],
 *
 *   // supply additional arguments to the packager
 *   extraPackagerArgs: []
 * ]
 */

project.ext.react = [
    entryFile: "index.js"
]

apply from: "../../node_modules/react-native/react.gradle"

/**
 * Set this to true to create two separate APKs instead of one:
 *   - An APK that only works on ARM devices
 *   - An APK that only works on x86 devices
 * The advantage is the size of the APK is reduced by about 4MB.
 * Upload all the APKs to the Play Store and people will download
 * the correct one based on the CPU architecture of their device.
 */
def enableSeparateBuildPerCPUArchitecture = false

/**
 * Run Proguard to shrink the Java bytecode in release builds.
 */
def enableProguardInReleaseBuilds = false

/**
 * Use international variant JavaScriptCore
 * International variant includes ICU i18n library and necessary data allowing to use
 * e.g. Date.toLocaleString and String.localeCompare that give correct results
 * when using with locales other than en-US.
 * Note that this variant is about 6MiB larger per architecture than default.
 */
def useIntlJsc = false

android {
    compileSdkVersion rootProject.ext.compileSdkVersion

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    defaultConfig {
        applicationId "com.crashtest"
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 1
        versionName "1.0"
    }
    splits {
        abi {
            reset()
            enable enableSeparateBuildPerCPUArchitecture
            universalApk false  // If true, also generate a universal APK
            include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
        }
    }
    signingConfigs {
        debug {
            storeFile file('debug.keystore')
            storePassword 'android'
            keyAlias 'androiddebugkey'
            keyPassword 'android'
        }
    }
    buildTypes {
        debug {
            signingConfig signingConfigs.debug
        }
        release {
            // Caution! In production, you need to generate your own keystore file.
            // see https://facebook.github.io/react-native/docs/signed-apk-android.
            signingConfig signingConfigs.debug
            minifyEnabled enableProguardInReleaseBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        }
    }
    // applicationVariants are e.g. debug, release
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            // For each separate APK per architecture, set a unique version code as described here:
            // https://developer.android.com/studio/build/configure-apk-splits.html
            def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
            def abi = output.getFilter(OutputFile.ABI)
            if (abi != null) {  // null for the universal-debug, universal-release variants
                output.versionCodeOverride =
                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
            }
        }
    }

    packagingOptions {
        pickFirst '**/armeabi-v7a/libc++_shared.so'
        pickFirst '**/x86/libc++_shared.so'
        pickFirst '**/arm64-v8a/libc++_shared.so'
        pickFirst '**/x86_64/libc++_shared.so'
        pickFirst '**/x86/libjsc.so'
        pickFirst '**/armeabi-v7a/libjsc.so'
    }
}

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "com.facebook.react:react-native:+"  // From node_modules

    // JSC from node_modules
    if (useIntlJsc) {
        implementation 'org.webkit:android-jsc-intl:+'
    } else {
        implementation 'org.webkit:android-jsc:+'
    }
}

// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) {
    from configurations.compile
    into 'libs'
}

apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
apply plugin: 'com.google.gms.google-services'

android/settings.gradle:

rootProject.name = 'crashtest'
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
include ':app'

MainApplication.java:

package com.crashtest;

import android.app.Application;

import com.facebook.react.ReactApplication;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.shell.MainReactPackage;
import com.facebook.soloader.SoLoader;
import com.facebook.react.PackageList;

import java.util.List;

public class MainApplication extends Application implements ReactApplication {

  private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
    @Override
    public boolean getUseDeveloperSupport() {
      return BuildConfig.DEBUG;
    }

    @Override
    protected List<ReactPackage> getPackages() {
      @SuppressWarnings("UnnecessaryLocalVariable")
      List<ReactPackage> packages = new PackageList(this).getPackages();
      // additional non auto detected packages can still be added here:
      // packages.add(new SomeReactNativePackage());
      return packages;
    }

    @Override
    protected String getJSMainModuleName() {
      return "index";
    }
  };

  @Override
  public ReactNativeHost getReactNativeHost() {
    return mReactNativeHost;
  }

  @Override
  public void onCreate() {
    super.onCreate();
    SoLoader.init(this, /* native exopackage */ false);
  }
}

AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.crashtest">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
      android:name=".MainApplication"
      android:label="@string/app_name"
      android:icon="@mipmap/ic_launcher"
      android:roundIcon="@mipmap/ic_launcher_round"
      android:allowBackup="false"
      android:theme="@style/AppTheme">
      <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="adjustResize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
      </activity>
      <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
    </application>

</manifest>


Environment

Click To Expand

react-native info output:

System:
    OS: macOS Mojave 10.14.4
    CPU: (8) x64 Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
    Memory: 310.84 MB / 16.00 GB
    Shell: 5.3 - /bin/zsh
  Binaries:
    Node: 10.16.3 - ~/.nvm/versions/node/v10.16.3/bin/node
    Yarn: 1.19.1 - /usr/local/bin/yarn
    npm: 6.9.0 - ~/.nvm/versions/node/v10.16.3/bin/npm
    Watchman: 4.9.0 - /usr/local/bin/watchman
  SDKs:
    iOS SDK:
      Platforms: iOS 13.0, DriverKit 19.0, macOS 10.15, tvOS 13.0, watchOS 6.0
  IDEs:
    Android Studio: 3.5 AI-191.8026.42.35.5900203
    Xcode: 11.0/11A420a - /usr/bin/xcodebuild
  npmPackages:
    @react-native-community/cli: ^2.9.0 => 2.9.0 
    react: 16.8.6 => 16.8.6 
    react-native: 0.60.5 => 0.60.5 
  npmGlobalPackages:
    react-native-cli: 2.0.1
  • Platform that you're experiencing the issue on:
    • iOS
    • Android
    • iOS but have not tested behavior on Android
    • Android but have not tested behavior on iOS
    • Both
  • react-native-firebase version you're using that has this issue:
    • 6.0.3
  • Firebase module(s) you're using that has the issue:
    • Realtime Database
  • Are you using TypeScript?
    • Not for the example repo


Think react-native-firebase is great? Please consider supporting all of the project maintainers and contributors by donating via our Open Collective where all contributors can submit expenses. [Learn More]

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    help: needs-testsNeeds a test case adding to the project tests.plugin: databaseFirebase Realtime Databasetype: bugNew bug report

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions