So I'm trying to start an app using the Detached Expokit and React Native Firebase (v3)
I made a fresh project with exp cli, followed all the instructions at https://invertase.io/react-native-firebase/ to set up ios, and it runs fine followed all the instructions to set up on android, went through some dependency hell between the expo dependencies and firebase dependencies
And now there are no more warnings, and no more errors, but when i try to run the app (either emulator or physical), it loads the js bundle to 100%, then crashes. No errors, or messages, just crash.
Ive tried everything i can think of (clean, rebuild, clear cache, reinstall npm, downgrading to RNFirebase 2x)
has anyone run into this issue before, or know how to fix? Thanks in advance
project info (ask for more if needed)
package.json:
"dependencies": {
"expo": "^21.0.0",
"react": "16.0.0-alpha.12",
"react-native": "https://github.com/expo/react-native/archive/sdk-21.0.2.tar.gz",
"react-native-firebase": "^3.0.2"
}
app.json:
{
"expo": {
"name": "xxx",
"description": "An empty new project",
"slug": "xxx",
"privacy": "unlisted",
"sdkVersion": "20.0.0",
"version": "1.0.0",
"orientation": "portrait",
"primaryColor": "#cccccc",
"icon": "./assets/icons/app-icon.png",
"loading": {
"icon": "./assets/icons/loading-icon.png"
},
"packagerOpts": {
"assetExts": [
"ttf",
"mp4"
]
},
"ios": {
"supportsTablet": true,
"bundleIdentifier": "xxx",
"publishBundlePath": "ios/xxx/Supporting/shell-app.bundle",
"publishManifestPath": "ios/xxx/Supporting/shell-app-manifest.json"
},
"android": {
"package": "xxx"
},
"isDetached": true,
"detach": {
"scheme": "exp7d16843de771498786f3beabce0d6439",
"iosExpoViewUrl": "https://s3.amazonaws.com/exp-exponent-view-code/ios-v1.20.5-sdk21.0.0-xxx.tar.gz",
"androidExpoViewUrl": "https://s3.amazonaws.com/exp-exponent-view-code/android-v1.20.0-sdk21.0.0-xxx.tar.gz"
}
}
}
project build.gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'com.google.gms:google-services:3.1.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenLocal()
jcenter()
maven {
// Point to local maven repository
url "$rootDir/../.expo-source/android/maven"
}
maven {
url 'https://maven.google.com'
}
maven {
url "https://jitpack.io"
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
app build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion '25.0.2'
defaultConfig {
applicationId "xxx"
minSdkVersion 19
targetSdkVersion 25
versionCode 1
versionName "1.0"
multiDexEnabled true
ndk {
abiFilters 'armeabi-v7a', 'x86'
}
manifestPlaceholders = [
'appAuthRedirectScheme': 'xxx'
]
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dexOptions {
javaMaxHeapSize "8g"
}
packagingOptions {
pickFirst 'META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.properties'
pickFirst 'META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.xml'
pickFirst 'META-INF/services/com.fasterxml.jackson.core.JsonFactory'
pickFirst 'META-INF/maven/com.squareup.okhttp/okhttp/pom.properties'
pickFirst 'META-INF/maven/com.squareup.okhttp/okhttp/pom.xml'
pickFirst 'META-INF/maven/com.squareup.okio/okio/pom.properties'
pickFirst 'META-INF/maven/com.squareup.okio/okio/pom.xml'
pickFirst 'META-INF/LICENSE'
}
}
task exponentPrebuildStep(type: Exec) {
workingDir '../../'
if (System.getProperty('os.name').toLowerCase().contains('windows')) {
commandLine 'cmd', '/c', '.\\.expo-source\\android\\detach-scripts\\prepare-detached-build.bat'
} else {
commandLine './.expo-source/android/detach-scripts/prepare-detached-build.sh'
}
}
preBuild.dependsOn exponentPrebuildStep
repositories{
flatDir{
dirs 'libs'
}
mavenLocal()
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
compile(project(':react-native-firebase')) {
// exclude group: 'com.google.android.gms'
// exclude group: 'com.google.firebase'
transitive = false
}
// RNFirebase required dependencies
compile "com.google.firebase:firebase-core:11.4.2"
// RNFirebase optional dependencies
// compile "com.google.firebase:firebase-ads:11.4.2"
// compile "com.google.firebase:firebase-auth:11.4.2"
// compile "com.google.firebase:firebase-config:11.4.2"
// compile "com.google.firebase:firebase-crash:11.4.2"
compile "com.google.firebase:firebase-database:11.4.2"
// compile "com.google.firebase:firebase-firestore:11.4.2"
// compile "com.google.firebase:firebase-messaging:11.4.2"
// compile "com.google.firebase:firebase-perf:11.4.2"
// compile "com.google.firebase:firebase-storage:11.4.2"
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile ('com.android.support:appcompat-v7:25.3.1') {
force = true
}
compile ('com.android.support:recyclerview-v7:25.3.1') {
force= true
}
compile ('com.android.support:animated-vector-drawable:25.3.1') {
force= true
}
// compile 'com.android.support:multidex:1.0.1'
compile('host.exp.exponent:expoview:21.0.0@aar') {
exclude group: 'com.google.android.gms'
exclude group: 'com.facebook.android', module: 'facebook-android-sdk'
exclude group: 'com.facebook.android', module: 'audience-network-sdk'
exclude group: 'io.nlopez.smartlocation', module: 'library'
transitive = true;
}
compile ("com.google.android.gms:play-services-base:11.4.2") {
force = true
}
compile ("com.google.android.gms:play-services-maps:11.4.2") {
force = true
}
compile ('com.facebook.android:facebook-android-sdk:4.+') {
exclude module: 'bolts-android'
}
compile('com.facebook.android:audience-network-sdk:4.+') {
exclude module: 'play-services-ads'
}
compile('io.nlopez.smartlocation:library:3.2.11') {
transitive = false
}
}
apply plugin: 'com.google.gms.google-services'
mainApplication.java:
package xxx;
import android.support.multidex.MultiDexApplication;
import com.facebook.react.ReactPackage;
import java.util.Arrays;
import java.util.List;
// Needed for `react-native link`
// import com.facebook.react.ReactApplication;
// React Native Firebase
import io.invertase.firebase.RNFirebasePackage; // <-- This should be added already
// Optional packages - add as appropriate
// import io.invertase.firebase.admob.RNFirebaseAdMobPackage; //Firebase AdMob
// import io.invertase.firebase.analytics.RNFirebaseAnalyticsPackage; // Firebase Analytics
// import io.invertase.firebase.auth.RNFirebaseAuthPackage; // Firebase Auth
// import io.invertase.firebase.config.RNFirebaseRemoteConfigPackage; // Firebase Remote Config
// import io.invertase.firebase.crash.RNFirebaseCrashPackage; // Firebase Crash Reporting
import io.invertase.firebase.database.RNFirebaseDatabasePackage; // Firebase Realtime Database
// import io.invertase.firebase.firestore.RNFirebaseFirestorePackage; // Firebase Firestore
// import io.invertase.firebase.messaging.RNFirebaseMessagingPackage; // Firebase Cloud Messaging
// import io.invertase.firebase.perf.RNFirebasePerformancePackage; // Firebase Performance
// import io.invertase.firebase.storage.RNFirebaseStoragePackage; // Firebase Storage
public class MainApplication extends MultiDexApplication {
// Needed for `react-native link`
public List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
// Add your own packages here!
// TODO: add cool native modules
// Needed for `react-native link`
// new MainReactPackage(),
new RNFirebasePackage(),
// Add these packages as appropriate
// new RNFirebaseAdMobPackage(),
// new RNFirebaseAnalyticsPackage(),
// new RNFirebaseAuthPackage(),
// new RNFirebaseRemoteConfigPackage(),
// new RNFirebaseCrashPackage(),
new RNFirebaseDatabasePackage()
// new RNFirebaseFirestorePackage(),
// new RNFirebaseMessagingPackage(),
// new RNFirebasePerformancePackage(),
// new RNFirebaseStoragePackage()
);
}
}
Co-Author of RNFirebase here,
We've never really supported Expo other than after a full ejection - without Detached ExpoKit due to the subsequent
dependency hell
that comes with ExpoKit on android.That said though, I'm glad you powered through it and got it working, what would be helpful for others is if you could provide detailed steps you took to get it working (i.e was it just manually overriding those versions above?) and we can possibly document it for anyone else wanting risk their sanity :)
after days of fiddling, i finally got it to run!
The trick was, i had to manually compile each google play service modules that had a version mismatch.
(You can see the version mismatches as a warning when you hover over the dependency)