Recently we faced a very strange issue while releasing our ReactNative App to Apple App Store. We were unable to submit the app to iOS app store because we were failing to generate iOS Archive. XCode always generating Generic XCode Archive rather than iOS App Archive.
Since XCode was generating Generic XCode Archive, Validate button was always disabled ( grayed out). We were failing to proceed further to submit the app. After exploring the issue we came across an apple help page which was suggesting following fixes to be done for our app.
Your archive contains header files.
If your app links against a static library, then your archive contains header files because the library probably uses a Headers build phase to export these files as shown in Figure 4. Headers build phases do not work correctly with static library targets when archiving in Xcode. Delete this phase, add a Copy Files build phase to your library, and use it to export your header files. See Copying Files While Building a Productfor more information about adding a Copy File build phase to your project.
2. Your archive contains static libraries or frameworks.
You must set “Skip Install” to YES to prevent your static libraries or framework from being added to your archive.
the second step was little easy , however the first step was a big headache, a react native app will be having lot of static libraries, in that changing all header build phase to copy files build phase is a big manual work and we will get lot of compilation errors like Redenition of MethodDescriptor in NativeModule.h kind of.
Errors we see after moving header files from headers build phase to copy files build phase
Redefinition of iOS errors
You can see a stackoverflow question on this : xcode is creating generic xcode archive instead of iOS App Archive -> SO-Question
Solution:
How to release iOS app to app store when archive is troubling in XCode v11.x.x
if you are using XCode v11.x then apple has removed Application Loader from XCode Developer tools. Now the alternative to that is Apple’s Transporter Application
Again the steps are same as given below to submit your app to app store,
Essentially, after you do the Clean Build Folder, and then Build, you find the .app file in: ~/Library/Developer/Xcode/DerivedData//Build/Products/Release-iphoneos/
Create a new folder on your desktop named Payload (this name is case-sensitive)
Copy your .app file and paste the copy in this Payload folder.
Right click the folder and choose “Compress Payload”
When you save this, do not save it with the .zip extension, but instead save it with a .ipa extension.
This is now your .ipa file for your app, and you can upload this through Xcode Transporter App
How to release iOS app to app store when archive is troubling in XCode v10.x.x
We have to follow different approach to release the app.
There is another way to upload your app build to the app store: by creating an .ipa file of your app, and uploading it through Application Loader in Xcode ( just click cmd + space in your mac machine and search Application Loader ).
Essentially, after you do the Clean Build Folder, and then Build, you find the .app file in: ~/Library/Developer/Xcode/DerivedData//Build/Products/Release-iphoneos/
Create a new folder on your desktop named Payload (this name is case-sensitive)
Copy your .app file and paste the copy in this Payload folder.
Right click the folder and choose “Compress Payload”
When you save this, do not save it with the .zip extension, but instead save it with a .ipa extension.
This is now your .ipa file for your app, and you can upload this through Xcode Application Loader.
The upload process will tell you if there is anything wrong with your build, but if there is not, it will upload to the app store and you should be able to find it in App Store Connect in a few moments.
Any one facing react native build issue? I am trying to generate debug build but its crashing when the app is launched . The exception has no useful information. I was facing the same issue with
sudo react-native run-android
But that got resolved after upgrading RN from 0.48 to 0.55(latest Stable Version). But the crash remain same for the apk generated using
sudo gradlew assembleDebug
The crash is similar to https://github.com/facebook/react-native/issues/16745
please see screenshot
ReactNative Undefined Not an object evaluating
Solution: Generating React Native Android Release and Debug Builds
1. If any one facing issue with generating ReactNative android build then do not forget to follow below steps
Note: for release build I am facing another issue as follows
Error in Release build :
FAILURE: Build failed with an exception.
* What went wrong: Failed to capture snapshot of input files for task ‘bundleReleaseJsAndAssets’ property ‘$1’ during up-to-date check. > Failed to create MD5 hash for file ‘/Development/SourceCode/MobApp/testApp/root-state/sock’.
* Try: Run with –stacktrace option to get the stack trace. Run with –info or –debug option to get more log output.
Rather than writing a detailed article here, I would like to point out very few performance tuning technique with respect to React Native Navigation using react-navigation package.
1. Few check you have to do before blaming react-navigation library, Check whether are you calling any location api to fetch current location.
If you are fetching current location on component mount or will mount then consider my suggestion , fetch the current location on launch of app and save the location, then onwards use the saved location rather than fetching current location every time.
Find the code here to do so
import { AsyncStorage } from 'react-native';
let instance = null;
class SharedPreferences {
constructor() {
if (!instance) {
instance = this;
}
return instance;
}
async put(key, val) {
try {
await AsyncStorage.setItem(key, val);
} catch (error) {
console.error('Unable to save in preferences: ', error);
}
}
async get(key) {
try {
return await AsyncStorage.getItem(key);
} catch (error) {
console.error('Unable to get from preferences: ', error);
}
}
getMultiple(keys, callback) {
AsyncStorage.multiGet(keys, (err, stores) => {
if (!err) {
const keyVals = {};
stores.map((result, i, store) => {
keyVals[`${result[0]}`] = result[1];
});
callback(keyVals);
} else {
callback([]);
}
});
}
}
const sharedPreference = new SharedPreferences();
export const SHARED_PREFERENCE = {
accessor: sharedPreference
};
React Native Social Authentication Using Firebase: Google+ and Facebook Signin, Signup – A Step by Step Guide
One has to go through following steps to enable social authentication in their react native mobile apps. In this tutorial we will see how to enable react native social login for android applications.
React Native Google Plus Signup/Signin Using Firebase Authentication
1. Create Project in Google Cloud Platform :Try free trail
2. Enable Google+ API for your project and generate API Key
GCloudApiKey1
3. Set YourSHA-1 key and package name (as given in AndroidManifest.xml ) of your android project
To generate your own SHA-1 use the command -> keytool -list -v -keystore mystore.keystore
NOTE : If Your build is debug build then theSHA-1 generated with above command won’t work, kindly check your adb logs carefully, theSHA-1 being used by your android debug build will be logged in the device log. To check device log run the below command from your /Users/<YourSystemUserName>/Library/Android/sdk/platform-tools —> adb logcat
APIKey&SHA1
4. Import the same project in firebase
ImportProjectFirebase
5. Setup android project in your firebase project, then setup authentication methods being used in your app.
firebaseAuthMethods
6. Then setup sameSHA-1 Key for your firebase project: Navigate to Project setting from side bar and click on general , select android app and set SHA-1 key
NOTE: Once SHA-1 is setup, download google-services.json file in the same page. and keep the file under your android project director app folder /ReactNativeProjectFolder/android/app
Till this your google cloud and firebase setup is done, now we have to do lot of changes in code.
7. add ‘react-native-google-signin’ and ‘firebase’ modules
npm install react-native-google-signin –save
npm install firebase –save
8. Add dependency in your /app/bundle.gradle
Note : in below code those excludes are most important, or else you will encounter strange linking errors.
9. your android/bundle.gradle file should look as follows
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'com.google.gms:google-services:3.0.0' // <--- add this
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenLocal()
jcenter()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
}
}
ext {
compileSdkVersion = 23
targetSdkVersion = 23
buildToolsVersion = "23.0.1"
googlePlayServicesVersion = "10.2.4"
androidMapsUtilsVersion = "0.5+"
}
10. run below commands
npm install
react-native link
11. Once you run react native link – check android/settings.gradle file , cross check that there should not be duplicate lines of content.
So far we have done project level configurations, now let us see code changes
12. React Native Google sign-in/sign-up using firebase code
import { GoogleSignin } from 'react-native-google-signin';
import firebase from 'firebase';
function googleAuthConfig(successCallback, failureCallback) {
/*
Web Client id
Get the client_id from Google-services.json file, in that file under
"client": [
"oauth_client": [
{
"client_id": "", //This you have to use as webClientId and the same for android
"client_type": 3
}
*/
GoogleSignin.configure({
iosClientId: CLIENT_IDS.GOOGLE_IOS_CLIENT_ID,
webClientId: '',
hostedDomain: '', // specifies a hosted domain restriction
forceConsentPrompt: true, // [Android] if you want to show the authorization prompt at each login
accountName: '' // [Android] specifies an account name on the device that should be used
})
.then(() => {
console.log('Google Config Success');
successCallback();
})
.catch((err) => {
console.log('Google Config Error');
failureCallback(err);
});
}
function googleSignin() {
googleAuthConfig(() => {
GoogleSignin.signIn()
.then((user) => {
const { accessToken } = user;
var credentials = firebase.auth.GoogleAuthProvider.credential(null, accessToken);
firebase.auth().signInWithCredential(credentials)
.then((firebaseResult) => {
loginToSG(dispatch, firebaseResult, props, 'Google', registerCallback);
})
.catch(error => console.log('error while checking with firebase', error));
})
.catch((err) => {
console.log(err);
});
}, (googleConfigErr) => {
console.log(googleConfigErr);
});
}
13. Finally the most important step is -> once do npm cache clean, delete your existing app from device, delete build folders then run the app
React Native: Ejecting Expo To Regular React Native Project.
Before explaining the steps for eject from expo, I would like to thank the expo community who has done really a great job, it was nightmare for us to start with ReactNative initially without expo. Expo has done remarkable job and simplified the whole process to us. So we should thank expo community for that. But Expo has come up with its own limitations, it is really difficult to go forward with those limitations, hence ejecting from expo is must.
Follow below steps and find the issues listed in each step and the solutions for the issues faced during eject process. Follow all the below steps
1. npm run eject
<span style="color: #000000;">? How would you like to eject from create-react-native-app? (Use arrow keys)
❯ React Native: I'd like a regular React Native project.
ExpoKit: I'll create or log in with an Expo account to use React Native and the Expo SDK.
Cancel: I'll continue with my current project structure.
Choose 1st option</span>
2. then run the command
react-native run-android Building and installing the app on the device (cd android && ./gradlew installDebug)…
Problem: FAILURE: Build failed with an exception.
* What went wrong: A problem occurred configuring project ‘:app’. > SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.
* Try: Run with –stacktrace option to get the stack trace. Run with –info or –debug option to get more log output.
BUILD FAILED
Total time: 45.174 secs Could not install the app on the device, read the error above for details. Make sure you have an Android emulator running or a device connected and have set up your Android development environment: https://facebook.github.io/react-native/docs/android-setup.html
Solution: Create local.properties in the andoid project folder and save the below content in that sdk.dir = /Users/USERNAME/Library/Android/sdk USERNAME: USERNAME should be your maachine user name
3. run the command
$ sudo react-native run-android
Problem:
FAILURE: Build failed with an exception.
* What went wrong: Execution failed for task ‘:app:installDebug’. > com.android.builder.testing.api.DeviceException: No connected devices!
* Try: Run with –stacktrace option to get the stack trace. Run with –info or –debug option to get more log output.
BUILD FAILED
Total time: 6.945 secs Could not install the app on the device, read the error above for details. Make sure you have an Android emulator running or a device connected and have set up your Android development environment: https://facebook.github.io/react-native/docs/android-setup.html
Solution : Use proper cable and connect your device, enable debug mode in your android device. this is problem with some devices, do not spend time on this, because you will face bigger problems later 🙂 so either change the device or try with different cable.
4. Problem com.android.ddmlib.InstallException: Failed to install all at com.android.ddmlib.SplitApkInstaller.install(SplitApkInstaller.java:89) at com.android.ddmlib.Device.installPackages(Device.java:904) at com.android.builder.testing.ConnectedDevice.installPackages(ConnectedDevice.java:137) at com.android.build.gradle.internal.tasks.InstallVariantTask.install(InstallVariantTask.java:134) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:228) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:221) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:210) at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:621) at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:604) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46) at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:66) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53) at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110) at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37) at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23) at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43) at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30) at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:153) at org.gradle.internal.Factories$1.create(Factories.java:22) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:53) at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:150) at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32) at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:98) at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:92) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:63) at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:92) at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:83) at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:99) at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28) at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:48) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:30) at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:81) at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:46) at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:51) at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:28) at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:43) at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:173) at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:239) at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:212) at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35) at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24) at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33) at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22) at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:205) at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169) at org.gradle.launcher.Main.doAction(Main.java:33) at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:55) at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:36) at org.gradle.launcher.GradleMain.main(GradleMain.java:23) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30) at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:127) at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61) :app:installDebug FAILED
Solution: update gradle version in build.gradle file of your android project classpath ‘com.android.tools.build:gradle:3.0.1’
5.
Problem Building and installing the app on the device (cd android && ./gradlew installDebug)…
FAILURE: Build failed with an exception.
* What went wrong: A problem occurred configuring root project ‘testApp’. > Could not resolve all dependencies for configuration ‘:classpath’. > Could not find com.android.tools.build:gradle:3.0.1. Searched in the following locations: https://jcenter.bintray.com/com/android/tools/build/gradle/3.0.1/gradle-3.0.1.pom https://jcenter.bintray.com/com/android/tools/build/gradle/3.0.1/gradle-3.0.1.jar Required by: :testApp:unspecified
* Try: Run with –stacktrace option to get the stack trace. Run with –info or –debug option to get more log output.
BUILD FAILED
Total time: 10.721 secs Could not install the app on the device, read the error above for details. Make sure you have an Android emulator running or a device connected and have set up your Android development environment: https://facebook.github.io/react-native/docs/android-setup.html
Solution: add google() to your build script, as follows
* What went wrong: A problem occurred evaluating root project ‘testApp’. > Could not find method google() for arguments [] on repository container.
* Try: Run with –stacktrace option to get the stack trace. Run with –info or –debug option to get more log output.
BUILD FAILED
Total time: 1.973 secs Could not install the app on the device, read the error above for details. Make sure you have an Android emulator running or a device connected and have set up your Android development environment: https://facebook.github.io/react-native/docs/android-setup.html
Solution: in your android/gradle/wrapper/gradle-wrapper.properties file check whether you have gradle distribution version 4, it should be as follow.
React Native Android Build: Exception After Ejecting(Detaching) Expo
After so much struggle resolved all the build issues for React Native Android build after ejecting expo but using ExpoKit. Now getting android runtime exception, the app crashes as soon as it is launched. Exception is as follows.
React Native Android Runtime Exception
E/AndroidRuntime(17278): Process: com.company.testapp, PID: 17278
E/AndroidRuntime(17278): java.lang.NoClassDefFoundError: Failed resolution of: Lbolts/AppLinks;
E/AndroidRuntime(17278): at com.facebook.appevents.internal.SourceApplicationInfo$Factory.create(SourceApplicationInfo.java:131)
E/AndroidRuntime(17278): at com.facebook.appevents.internal.ActivityLifecycleTracker.onActivityCreated(ActivityLifecycleTracker.java:131)
E/AndroidRuntime(17278): at com.facebook.appevents.internal.ActivityLifecycleTracker$1.onActivityCreated(ActivityLifecycleTracker.java:77)
E/AndroidRuntime(17278): at android.app.Application.dispatchActivityCreated(Application.java:189)
E/AndroidRuntime(17278): at android.app.Activity.onCreate(Activity.java:952)
E/AndroidRuntime(17278): at android.support.v4.app.SupportActivity.onCreate(SupportActivity.java:66)
E/AndroidRuntime(17278): at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:297)
E/AndroidRuntime(17278): at host.exp.exponent.experience.ReactNativeActivity.onCreate(ReactNativeActivity.java:130)
E/AndroidRuntime(17278): at host.exp.expoview.ExponentActivity.onCreate(ExponentActivity.java:69)
E/AndroidRuntime(17278): at android.app.Activity.performCreate(Activity.java:6120)
E/AndroidRuntime(17278): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1112)
E/AndroidRuntime(17278): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2467)
E/AndroidRuntime(17278): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2600)
E/AndroidRuntime(17278): at android.app.ActivityThread.access$800(ActivityThread.java:177)
E/AndroidRuntime(17278): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1469)
E/AndroidRuntime(17278): at android.os.Handler.dispatchMessage(Handler.java:111)
E/AndroidRuntime(17278): at android.os.Looper.loop(Looper.java:194)
E/AndroidRuntime(17278): at android.app.ActivityThread.main(ActivityThread.java:5622)
E/AndroidRuntime(17278): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(17278): at java.lang.reflect.Method.invoke(Method.java:372)
E/AndroidRuntime(17278): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
E/AndroidRuntime(17278): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
E/AndroidRuntime(17278): Caused by: java.lang.ClassNotFoundException: Didn't find class "bolts.AppLinks" on path: DexPathList[[zip file "/data/app/com.company.testapp-1/base.apk"],nativeLibraryDirectories=[/data/app/com.company.testapp-1/lib/arm, /vendor/lib, /system/lib]]
E/AndroidRuntime(17278): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
E/AndroidRuntime(17278): at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
E/AndroidRuntime(17278): at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
E/AndroidRuntime(17278): ... 22 more
E/AndroidRuntime(17278): Suppressed: java.lang.ClassNotFoundException: bolts.AppLinks
E/AndroidRuntime(17278): at java.lang.Class.classForName(Native Method)
E/AndroidRuntime(17278): at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
E/AndroidRuntime(17278): at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
E/AndroidRuntime(17278): at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
E/AndroidRuntime(17278): ... 23 more
E/AndroidRuntime(17278): Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
V/SettingsInterface( 765): from settings cache , name = dropbox:data_app_crash , value = null
V/SettingsInterface( 765): from settings cache , name = send_action_app_error , value = 1
D/ActivityManager( 765): SVC-mBroadcastQueues: com.android.server.am.BroadcastQueue@29a56dae
D/ActivityManager( 765): SVC-mBroadcastQueues: com.android.server.am.BroadcastQueue@256ee74f
W/ActivityManager( 765): Force finishing activity 1 com.company.testapp/.MainActivity
React Native Building In Android and iOS: After Ejecting(Detaching) Expo
I am trying to build React Native app for android and iOS but keep finding one and other issues. After so much struggle I succeeded with initial hickups but now struck at one point where I am not finding any solution.
Problems I am facing with React Native Build For Android and iOS , before encountering the issue I followed the below steps
1. Install Cocoapods (https://cocoapods.org/) 2. Run pod install from your project’s ios directory. 3. Run ‘react-native run-ios’ in the project root folder. 4. Run ‘react-native run-android’ in the project root folder.
After running react-native run-android I am getting below error.
:app:transformClassesWithJarMergingForDebug
FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/google/android/gms/auth/api/signin/zzc.class
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 25.103 secs
Could not install the app on the device, read the error above for details.
Make sure you have an Android emulator running or a device connected and have
set up your Android development environment:
https://facebook.github.io/react-native/docs/android-setup.html
The solution is to find the conflicting dependencies using following command inside your app/android folder
$ ./gradlew app:dependencies
Closely observe the dependency hierarchy and check the conflicted dependency for com.google.android.gms. To resolve this you have to exclude it for specific dependency as follows, see the updated build.gradle file
React Native Android Build Failure : failed to find Build Tools revision 26.0.1 or failed to find Build Tools revision 23.0.1
If you are facing following exception
FAILURE: Build failed with an exception.
* What went wrong:
A problem occurred configuring project ':app'.
> A problem occurred configuring project ':react-native-vector-icons'.
> failed to find Build Tools revision 26.0.1
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 2 mins 44.097 secs
Could not install the app on the device, read the error above for details.
Make sure you have an Android emulator running or a device connected and have
set up your Android development environment:
https://facebook.github.io/react-native/docs/android-setup.html
Or the exception may be for Build Tools revision 23.0.1
Then Kindly install build tools versions from your android studio.
Go to android studio Preferences, select second tab SDK Tools, Install respective build tool version. Do not forget to check mark Show Package Details in the dailog box. Refer below screenshot