Giter Club home page Giter Club logo

flutter_crashlytics's Introduction

flutter_crashlytics

pub package

Flutter plugin to enable Crashlytics reporting.

Setup

Firebase Crashlytics

If you're using Firebase instead of Fabric, you must first setup your app to use Firebase as per this tutorial. https://codelabs.developers.google.com/codelabs/flutter-firebase/#4

The instructions are the same for Fabric and Firebase, except that for Firebase, you don't get an API key so you don't have to add it anywhere.

Android

To setup Crashlytics on Android side, you need to set the Fabric ID in your manifest like this: (Only do this if using Fabric, not Firebase as you will not have an API Key)

 <meta-data
            android:name="io.fabric.ApiKey"
            android:value="YOUR_ID_HERE" />

You also need to change your build.gradle file like this:

buildscript {
    repositories {
        ...
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
        ...
    }
}

And apply the fabric plugin apply plugin: 'io.fabric'

Nothing more.

Symbolicating Native Android Crashes

Unfortunately, even pure Dart projects can't always protect you from native crashes. Without the following setup, a native crash like SIGSEGV will appear as a blank stacktrace in Crashlytics. Here's how to get some symbols:

Add the following to build.gradle, after apply plugin: 'io.fabric':

crashlytics {
    enableNdk true
    androidNdkOut "../../debugSymbols"
    androidNdkLibsOut "../../build/app/intermediates/transforms/stripDebugSymbol/release/0/lib"
}

Ensure that the NDK bundle is installed or the stripDebugSymbol directory won't get created.

Now setup a release script to populate the debugSymbols directory, guided by the instructions from https://github.com/flutter/flutter/wiki/Crashes

# Build our app like usual
flutter -v build apk --release

### BEGIN MODIFICATIONS

# Copy mergeJniLibs to debugSymbols
cp -R ./build/app/intermediates/transforms/mergeJniLibs/release/0/lib debugSymbols

# The libflutter.so here is the same as in the artifacts.zip found with symbols.zip
cd debugSymbols/armeabi-v7a

# Download the corresponding libflutter.so with debug symbols
ENGINE_VERSION=`cat $HOME/flutter/bin/internal/engine.version`
gsutil cp gs://flutter_infra/flutter/${ENGINE_VERSION}/android-arm-release/symbols.zip .

# Replace libflutter.so
unzip -o symbols.zip
rm -rf symbols.zip

# Upload symbols to Crashlytics
cd ../../android
./gradlew crashlyticsUploadSymbolsRelease

### END MODIFICATIONS

# Release your app like usual
cd ../..
fastlane submit_playalpha

iOS

On iOS side you need to set your Fabric ID under your Info.plist like: (Only do this if using Fabric, not Firebase as you will not have an API Key)

<key>Fabric</key>
    <dict>
        <key>APIKey</key>
        <string>YOUR_ID_HERE</string>
        <key>Kits</key>
        <array>
            <dict>
                <key>KitInfo</key>
                <dict/>
                <key>KitName</key>
                <string>Crashlytics</string>
            </dict>
        </array>
    </dict>

Turn off automatic collection with a new key to your Info.plist file (GDPR compliency if you want it):

Key: firebase_crashlytics_collection_enabled

Value: false

Don't forget to add your Run Script step (with any version of Xcode) on the build phases tab. If using Xcode 10, you also must add your app's built Info.plist location to the Build Phase's Input Files field:

$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)

ios run script

That's it :)

Flutter

All you need to do under your code is to let the plugin handle the Flutter crashes.

Your main method should look like:

void main() async {
  bool isInDebugMode = false;

  FlutterError.onError = (FlutterErrorDetails details) {
    if (isInDebugMode) {
      // In development mode simply print to console.
      FlutterError.dumpErrorToConsole(details);
    } else {
      // In production mode report to the application zone to report to
      // Crashlytics.
      Zone.current.handleUncaughtError(details.exception, details.stack);
    }
  };

  await FlutterCrashlytics().initialize();

  runZoned<Future<Null>>(() async {
    runApp(MyApp());
  }, onError: (error, stackTrace) async {
    // Whenever an error occurs, call the `reportCrash` function. This will send
    // Dart errors to our dev console or Crashlytics depending on the environment.
    await FlutterCrashlytics().reportCrash(error, stackTrace, forceCrash: false);
  });
}

forceCrash allows you to have a real crash instead of the red screen, in that case the exception will be tagged as fatal.

API available

  • Add log to crash reporting with log(String msg, {int priority, String tag})
  • Add manual log to crash reporting with logException(Error/Exception exception, Stacktrace stack)
  • Add user info to crash reporting with setUserInfo(String identifier, String email, String name)
  • Add general info to crash reporting with setInfo(String key, dyncamic value)

Limitation

This plugin uses Crashlytics SDK to log manual dart crashes, all manually logged crashes are tagged as non fatal under Crashlytics, that's a limitation of the SDK.

You can bypass that limitation with the forceCrash parameter, instead of the red screen an actual crash will be appended, the crash will be tagged as fatal.

On iOS fatal crash has their dart stacktrace under the Logs tab of Crashlytics, that's a limitation of iOS that prevents developers to set a custom stacktrace to an exception.

Contribution

We love contributions! Don't hesitate to open issues and make pull request to help improve this plugin.

flutter_crashlytics's People

Contributors

charafau avatar eggnstone avatar ened avatar holyspidoo avatar jaggernod avatar jaumard avatar jfoutts avatar ko2ic avatar long1eu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

flutter_crashlytics's Issues

iOS build errors - v0.1.1

Am encountering a couple of issues when trying to build iOS.
Any tips/suggestions appreciated.

Crashlytics Configuration steps done

  1. Info.plist updated with Fabric ID
  2. Podfile: use_frameworks! (at top of file)
  3. Run script (last entry in list) added using snippet provided by Fabric e.g. "${PODS_ROOT}/Fabric/run" xxxxxx yyyyyy
  4. Info plist location configured for Run script entry above e.g. $(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)

General config details**

  • Legacy build system being used

Build CMD

flutter build ios -t lib/config/production.dart --release --no-codesign

Output:

Starting Xcode build...
├─Building Dart code... 38.0s

├─Generating dSYM file... 0.2s

├─Stripping debug symbols... 0.1s

├─Assembling Flutter resources... 1.9s

└─Compiling, linking and signing... 4.8s

Xcode build done. 47.9s
Failed to build iOS app
Error output from Xcode build:

** BUILD FAILED **

Xcode's output:

=== BUILD TARGET Runner OF PROJECT Runner WITH CONFIGURATION Release ===
ld: warning: Could not find auto-linked library 'swiftObjectiveC'
ld: warning: Could not find auto-linked library 'swiftCoreGraphics'
ld: warning: Could not find auto-linked library 'swiftCore'
ld: warning: Could not find auto-linked library 'swiftQuartzCore'
ld: warning: Could not find auto-linked library 'swiftCoreFoundation'
ld: warning: Could not find auto-linked library 'swiftDarwin'
ld: warning: Could not find auto-linked library 'swiftUIKit'
ld: warning: Could not find auto-linked library 'swiftCoreMedia'
ld: warning: Could not find auto-linked library 'swiftDispatch'
ld: warning: Could not find auto-linked library 'swiftFoundation'
ld: warning: Could not find auto-linked library 'swiftMetal'
ld: warning: Could not find auto-linked library 'swiftCoreImage'
ld: warning: Could not find auto-linked library 'swiftCoreAudio'
Undefined symbols for architecture arm64:
"dispatch thunk of Swift.Error._code.getter : Swift.Int", referenced from:
resilient protocol witness table for flutter_crashlytics.FlutterException : Swift.Error in flutter_crashlytics in
flutter_crashlytics(SwiftFlutterCrashlyticsPlugin.o)
resilient protocol witness table for flutter_crashlytics.FlutterCrash : Swift.Error in flutter_crashlytics in
flutter_crashlytics(SwiftFlutterCrashlyticsPlugin.o)
...

Environment details:

[✓] Flutter (Channel dev, v0.11.9, on Mac OS X 10.14.1 18B75, locale en-NZ)
• Flutter version 0.11.9 at /Users/greg/Library/Developer/flutter
• Framework revision d48e6e433c (6 days ago), 2018-11-20 22:05:23 -0500
• Engine revision 5c8147450d
• Dart version 2.1.0 (build 2.1.0-dev.9.4 f9ebf21297)

[✓] Android toolchain - develop for Android devices (Android SDK 28.0.3)
• Android SDK at /Users/greg/Library/Android/sdk
• Android NDK at /Users/greg/Library/Android/sdk/ndk-bundle
• Platform android-28, build-tools 28.0.3
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1136-b06)
• All Android licenses accepted.

[✓] iOS toolchain - develop for iOS devices (Xcode 10.1)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 10.1, Build version 10B61
• ios-deploy 1.9.4
• CocoaPods version 1.5.3

[✓] Android Studio (version 3.2)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin version 30.0.1
• Dart plugin version 181.5656
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1136-b06)

[✓] VS Code (version 1.29.1)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 2.20.0

[✓] Connected device (2 available)
• SM G570Y • 42008566cef5540b • android-arm • Android 8.0.0 (API 26) (emulator)
• Android SDK built for x86 • emulator-5554 • android-x86 • Android 9 (API 28) (emulator)

• No issues found!

Readme update for Firebase Crashlytics?

Love this plugin so much!!

Maybe the readme could be updated for using Firebase Crashlytics? When doing so, the API keys parts are not needed. Everything else is the same and works great.

fatal error: 'Fabric.h' file not found

I'm not able to build in iOS after flutter upgrade. I'm not fabric, but I'm getting an error like this

`Running pod install...
Starting Xcode build...
Xcode build done. 22.9s
Failed to build iOS app
Error output from Xcode build:

** BUILD FAILED **

Xcode's output:

=== BUILD TARGET shared_preferences OF PROJECT Pods WITH CONFIGURATION Debug ===
/Users/mobile-di/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_crashlytics-0.2.1/ios/Classes/FlutterCrashlyticsPlugin.m:2:9: fatal error: 'Fabric.h' file not found
#import "Fabric.h"
^~~~~~~~~~
1 error generated.`

Crashlytics dashboard not showing any crashes

I have setup my app as it is in the docs . But when I manually create a crash , I get error in my console and in the logcat , it says report upload complete but I don't see any crashes mentioned in my dashboard. I have implemented it using the below code.In logcat it also says
com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization.

//My code
RaisedButton(
onPressed: () {
try {
throw FormatException();

              } catch (exception, stack) {
                debugPrint(exception.toString());
                debugPrint(stack.toString());
                FlutterCrashlytics().setUserInfo('user', userDetails.email, userDetails.user_first_name);
                FlutterCrashlytics().logException(exception, stack);
                FlutterCrashlytics().initialize();
                FlutterCrashlytics().reportCrash(exception, stack);
              }
            },
            child: Text('Manual exception log'),
          ),

broken in ios

First throw call stack:
(
0 CoreFoundation 0x000000010d9931bb __exceptionPreprocess + 331
1 libobjc.A.dylib 0x000000010cf31735 objc_exception_throw + 48
2 CoreFoundation 0x000000010d993015 +[NSException raise:format:] + 197
3 Runner 0x000000010abace16 -[Fabric validFabricConfigFromInfoPlist:] + 659
4 Runner 0x000000010abac8b2 -[Fabric fabricConfig] + 127
5 Runner 0x000000010abac9ff -[Fabric APIKey] + 285
6 Runner 0x000000010abab747 __15+[Fabric with:]_block_invoke + 89
7 libdispatch.dylib 0x000000010deed54b _dispatch_client_callout + 8
8 libdispatch.dylib 0x000000010deeed52 _dispatch_once_callout + 20
9 Runne<…>

v0.3.0 causing crash on Android

The crash only happens when you run the app in Release Mode. A user has reported this log https://del.dog/zataziliwi but I am not 100% sure if it's related to this package. I've also tried running flutter run --release --verbose and I don't see any issue related to crashlytics

Flutter Doctor

`[✓] Flutter (Channel master, v1.3.14-pre.7, on Mac OS X 10.14.3 18D109, locale en-US)
• Flutter version 1.3.14-pre.7 at /Users/nemory/Development/flutter
• Framework revision ee3e621f02 (3 days ago), 2019-03-18 21:40:21 -0700
• Engine revision 5088735e5f
• Dart version 2.2.1 (build 2.2.1-dev.1.0 None)

[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
• Android SDK at /Users/nemory/Library/Android/sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-28, build-tools 28.0.3
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)
• All Android licenses accepted.

[✓] iOS toolchain - develop for iOS devices (Xcode 10.1)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 10.1, Build version 10B61
• ios-deploy 1.9.4
• CocoaPods version 1.6.1

[✓] Android Studio (version 3.3)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin version 32.0.1
• Dart plugin version 182.5124
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)

[✓] VS Code (version 1.32.3)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 2.24.0

[✓] Connected device (1 available)
• BBF100 2 • 5000013362 • android-arm64 • Android 8.1.0 (API 27)

• No issues found!`

Application not running in iOS

I am trying to run my app into iOS simulator and I am getting following error.

Terminating app due to uncaught exception 'FABException', reason: '[Fabric] Value of Info.plist key "Fabric" must be a NSDictionary.'

I have integated Firebase crashlytics and not Fabric so I am not able to understand what is causing this error. Any help will be appreciated.

Add crashlytics-ndk support

I'm getting a SIGSEGV in libflutter.so that flutter_crashlytics doesn't catch.

All that's needed to also catch Android native crashes is to add the gradle dependency com.crashlytics.sdk.android:crashlytics-ndk

And then import com.crashlytics.android.ndk.CrashlyticsNdk, and call Fabric.with(context, Crashlytics(), CrashlyticsNdk())

For now I'll fork flutter_crashlytics and add it myself. Hopefully resulting in fixing whatever bug is causing a native crash.

Crash reports are ignored without error if Fabric is not initialized

Problem

I managed to produce a situation where I had a crash very soon after the launch of the app when Fabric wasn't fully initialized yet. In such case, a call to FlutterCrashlytics().reportCrash() returns successfully even though it doesn't actually report the crash.

The problem is the else branch here:

if (Fabric.isInitialized()) {
onInitialisedMethodCall(methodCall, result);
} else {
result.success(null);
}

As can be seen, it always returns succesully, even when Fabric is not initialized.

Possible solution

Instead of calling result.success(null), do something like this so that the caller can retry later if they want to:

if (Fabric.isInitialized()) {
  onInitialisedMethodCall(methodCall, result);
} else {
  result.error('CRASHLYTICS_NOT_FULLY_INITIALIZED_YET');
}

Crashed on Huawei android OS 8.1.0

Hi,
I tried on Huawei with android OS 8.1.0 and it crashed. Please find the log below.
Thank you :)

Caused by com.kiwi.fluttercrashlytics.b: 'package:flutter/src/semantics/semantics.dart': Failed assertion: line 2492 pos 12: 'handler != null': is not true.
       at _AssertionError._doThrowNew(liberrors_patch.dart:40)
       at _AssertionError._throwNew(liberrors_patch.dart:36)
       at SemanticsConfiguration._addArgumentlessAction(semantics.dart:2492)
       at SemanticsConfiguration.onTap=(semantics.dart:2522)
       at RenderParagraph.assembleSemanticsNode(paragraph.dart:521)
       at _SwitchableSemanticsFragment.compileChildren(object.dart:3361)
       at _SyncIterator.moveNext(libcore_patch.dart:151)
       at List.addAll(libgrowable_array.dart:192)
       at _SwitchableSemanticsFragment.compileChildren(object.dart:3358)
       at _SyncIterator.moveNext(libcore_patch.dart:151)
       at List.addAll(libgrowable_array.dart:192)
       at _SwitchableSemanticsFragment.compileChildren(object.dart:3358)
       at _SyncIterator.moveNext(libcore_patch.dart:151)
       at List.addAll(libgrowable_array.dart:192)
       at _SwitchableSemanticsFragment.compileChildren(object.dart:3358)
       at _SyncIterator.moveNext(libcore_patch.dart:151)
       at List.addAll(libgrowable_array.dart:192)
       at _RootSemanticsFragment.compileChildren(object.dart:3252)
       at _SyncIterator.moveNext(libcore_patch.dart:151)
       at Iterable.single(iterable.dart:552)
       at RenderObject._updateSemantics(object.dart:2394)
       at PipelineOwner.flushSemantics(object.dart:948)
       at _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding.drawFrame(binding.dart:274)
       at _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame(binding.dart:674)
       at _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback(binding.dart:208)
       at _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback(binding.dart:990)
       at _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame(binding.dart:930)
       at _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame(binding.dart:842)
       at ._rootRun._rootRun(zone.dart:1124)
       at _CustomZone.run(zone.dart:1021)
       at _CustomZone.runGuarded(zone.dart:923)
       at ._invoke._invoke(hooks.dart:141)
       at ._drawFrame._drawFrame(hooks.dart:128)

Bypass Crashlytics non fatal exception limitation

One way to fix the limitation would be to force the app to crash once a flutter error occurs (meaning no more red screen) it will force Crashlytics to report the exception as Fatal instead.

Any thought on this ?

[!] CocoaPods could not find compatible versions for pod "Fabric":

[!] CocoaPods could not find compatible versions for pod "Fabric":
In snapshot (Podfile.lock):
Fabric (= 1.7.13, ~> 1.7.13)

In Podfile:
flutter_crashlytics (from .symlinks/plugins/flutter_crashlytics/ios) was resolved to 0.0.1, which depends on
Fabric

It seems like you've changed the constraints of dependency Fabric inside your development pod flutter_crashlytics.
You should run pod update Fabric to apply changes you've made.

ReadMe is incomplete & confusing

I found the ReadMe.md file to be very confusing. Here are some of the issues with it:

  1. Fabric & Firebase instructions are intermingled. Consider having 2 separate installation sections. One for Fabric & one for Firebase
  2. What does this mean? Where does it go? Just run this in a terminal? "And apply the fabric plugin apply plugin: 'io.fabric'"
  3. Does this instruction apply to ALL of the iOS instructions? Or just the top part? "On iOS side your need to set your Fabric ID under your Info.plist like: (Only do this if using Fabric, not Firebase as you will not have an Api Key)"
  4. In the Flutter implementation instructions, it says this "Your main method should look like:" but it doesn't say anything about including this import statement: "import "dart:async";" I had to find it by googling to figure out what Zone meant

Gradle Error loading the Android project (not the flutter project)

When I try to load the Android Project in Android Studio, I get these gradle errors. Normal? Any ideas?

Unable to resolve dependency for ':app@dynamicProfile/compileClasspath': Could not resolve project :flutter_crashlytics.
Open File
Show Details

Unable to resolve dependency for ':app@dynamicProfileUnitTest/compileClasspath': Could not resolve project :flutter_crashlytics.
Open File
Show Details

Unable to resolve dependency for ':app@profile/compileClasspath': Could not resolve project :flutter_crashlytics.
Open File
Show Details

Unable to resolve dependency for ':app@profileUnitTest/compileClasspath': Could not resolve project :flutter_crashlytics.
Open File
Show Details

Unable to resolve dependency for ':app@dynamicRelease/compileClasspath': Could not resolve project :flutter_crashlytics.
Open File
Show Details

[!] Unable to determine Swift version for the following pods:

I tried to add the pod using Xcode10, but I got this error:

[!] Unable to determine Swift version for the following pods:

  • flutter_crashlytics does not specify a Swift version and none of the targets (Runner) integrating it have the SWIFT_VERSION attribute set. Please contact the author or set the SWIFT_VERSION attribute in at least one of the targets that integrate this pod.

Crash in background isolate

My flutter app is running in background, so activity is null, only context available
On start (push notification) it crashes app with NPE

flutter_crashlytics issue: MissingPluginException

Steps to Reproduce

I've been trying to use fluter_crashlytics as explained at https://pub.dartlang.org/packages/flutter_crashlytics

But when it tried to initialize with FlutterCrashlytics().initialize(), it returns Dart Error:

Unhandled exception:
MissingPluginException(No implementation found for method initialize on channel flutter_crashlytics).

Which is coming from platfom_channel.dart

    final dynamic result = await BinaryMessages.send(
      name,
      codec.encodeMethodCall(MethodCall(method, arguments)),
    );
    if (result == null)
      throw MissingPluginException('No implementation found for method $method on channel $name');
    return codec.decodeEnvelope(result);

That means should I implement "flutter_crashlytics" channel?
The page didn't mention about that.
So I thought the plugin should provide that implementation.
Or Maybe I am missing a big basic thing here.
Thanks.

No issue from Doctor.
I am using version 1.0.0

[✓] Flutter (Channel beta, v1.0.0, on Mac OS X 10.14 18A391, locale en-US)

Logs

Dart Error: Unhandled exception:
MissingPluginException(No implementation found for method initialize on channel flutter_crashlytics)
#0      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:291:7)
<asynchronous suspension>
#1      FlutterCrashlytics.initialize (package:flutter_crashlytics/flutter_crashlytics.dart:18:53)
<asynchronous suspension>
#2      main (package:my_package/main.dart:24:30)
<asynchronous suspension>
#3      _startIsolate.<anonymous closure> (dart:isolate/runtime/libisolate_patch.dart:289:19)
#4      _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:171:12)

[iOS] says I need to invoke FirebaseApp.configure()

I followed the instructions in the readme, Android works fine, but on iOS I get the following message:

The default Firebase app has not yet been configured. Add `[FIRApp configure];` (`FirebaseApp.configure()` in Swift) to your application initialization. Read more: https://goo.gl/ctyzm8.

Calling FirebaseApp.configure() in the AppDelegate's didFinishLaunchingWithOptions makes this error go away, but leads to another problem which I'm still debugging as it might not be to do with this plugin. Are we expected to add this line, or is this indicative of me doing something wrong?

dependency mismatch after upgrading to android studio 3.3

buildscript {
ext.kotlin_version = '1.2.71' ==> 1.3.11
repositories {
google()
jcenter()
}

dependencies {
    classpath 'com.android.tools.build:gradle:3.2.1'  ==> **3.3.0**
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}

}

Plugin not building for objective-c based Flutter iOS projects

Plugin is building fine following the setup instructions for Swift based Flutter iOS code. But get "The “Swift Language Version” (SWIFT_VERSION) build setting must be set to a supported value for targets which use Swift. This setting can be set in the build settings editor." when adding the plugin to an objective-c based Flutter iOS code. Please advise on how to use with objective-c based Flutter iOS code.

Android release fails

I try to create android release but it fails.

FAILURE: Build failed with an exception.

What went wrong:
Execution failed for task ':app:lintVitalRelease'.
Could not resolve all artifacts for configuration ':app:dynamicProfileRuntimeClasspath'.
Could not resolve project :flutter_crashlytics.
Required by:
project :app
java.lang.NullPointerException (no error message)

But it builds debug and runs properly.

Kotlin Version : 1.2.71

It is asking for Fabric in Firebase Crashlytics.

I get exception when setup this plugin:

This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up,
install an Android build tool and ask a team member to invite you to this app's organization.

I am using only Firebase Crashlytics and not Fabric. Am I supposed to use both, I guess not.

Steps I followed.

  • Create android app on firebase
  • Save google-services.json file in app folder.
  • Install plugin
  • Change main() to below snippet
void main() async {
  bool isInDebugMode = false;

  FlutterError.onError = (FlutterErrorDetails details) {
    if (isInDebugMode) {
      // In development mode simply print to console.
      FlutterError.dumpErrorToConsole(details);
    } else {
      // In production mode report to the application zone to report to
      // Crashlytics.
      Zone.current.handleUncaughtError(details.exception, details.stack);
    }
  };

  await FlutterCrashlytics().initialize();

  runZoned<Future<Null>>(() async {
    runApp(MyApp());
  }, onError: (error, stackTrace) async {
    // Whenever an error occurs, call the `reportCrash` function. This will send
    // Dart errors to our dev console or Crashlytics depending on the environment.
    await FlutterCrashlytics()
        .reportCrash(error, stackTrace, forceCrash: false);
  });
}

Logs:

Launching lib/main.dart on Lenovo K33a42 in debug mode...
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
Built build/app/outputs/apk/debug/app-debug.apk.
I/OpenGLRenderer(30155): Initialized EGL, version 1.4
D/OpenGLRenderer(30155): Swap behavior 1
I/Choreographer(30155): Skipped 34 frames!  The application may be doing too much work on its main thread.
E/CrashlyticsCore(30155): .
E/CrashlyticsCore(30155): .     |  |
E/CrashlyticsCore(30155): .     |  |
E/CrashlyticsCore(30155): .     |  |
E/CrashlyticsCore(30155): .   \ |  | /
E/CrashlyticsCore(30155): .    \    /
E/CrashlyticsCore(30155): .     \  /
E/CrashlyticsCore(30155): .      \/
E/CrashlyticsCore(30155): .
E/CrashlyticsCore(30155): This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up,
E/CrashlyticsCore(30155): install an Android build tool and ask a team member to invite you to this app's organization.
E/CrashlyticsCore(30155): .
E/CrashlyticsCore(30155): .      /\
E/CrashlyticsCore(30155): .     /  \
E/CrashlyticsCore(30155): .    /    \
E/CrashlyticsCore(30155): .   / |  | \
E/CrashlyticsCore(30155): .     |  |
E/CrashlyticsCore(30155): .     |  |
E/CrashlyticsCore(30155): .     |  |
E/CrashlyticsCore(30155): .
E/MethodChannel#flutter_crashlytics(30155): Failed to handle method call
E/MethodChannel#flutter_crashlytics(30155): io.fabric.sdk.android.services.concurrency.UnmetDependencyException: This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up,
E/MethodChannel#flutter_crashlytics(30155): install an Android build tool and ask a team member to invite you to this app's organization.
E/MethodChannel#flutter_crashlytics(30155): 	at com.crashlytics.android.core.CrashlyticsCore.onPreExecute(CrashlyticsCore.java:241)
E/MethodChannel#flutter_crashlytics(30155): 	at com.crashlytics.android.core.CrashlyticsCore.onPreExecute(CrashlyticsCore.java:209)
E/MethodChannel#flutter_crashlytics(30155): 	at io.fabric.sdk.android.InitializationTask.onPreExecute(InitializationTask.java:44)
E/MethodChannel#flutter_crashlytics(30155): 	at io.fabric.sdk.android.services.concurrency.AsyncTask.executeOnExecutor(AsyncTask.java:611)
E/MethodChannel#flutter_crashlytics(30155): 	at io.fabric.sdk.android.services.concurrency.PriorityAsyncTask.executeOnExecutor(PriorityAsyncTask.java:43)
E/MethodChannel#flutter_crashlytics(30155): 	at io.fabric.sdk.android.Kit.initialize(Kit.java:69)
E/MethodChannel#flutter_crashlytics(30155): 	at io.fabric.sdk.android.Fabric.initializeKits(Fabric.java:466)
E/MethodChannel#flutter_crashlytics(30155): 	at io.fabric.sdk.android.Fabric.init(Fabric.java:410)
E/MethodChannel#flutter_crashlytics(30155): 	at io.fabric.sdk.android.Fabric.setFabric(Fabric.java:368)
E/MethodChannel#flutter_crashlytics(30155): 	at io.fabric.sdk.android.Fabric.with(Fabric.java:339)
E/MethodChannel#flutter_crashlytics(30155): 	at com.kiwi.fluttercrashlytics.FlutterCrashlyticsPlugin.onMethodCall(FlutterCrashlyticsPlugin.kt:27)
E/MethodChannel#flutter_crashlytics(30155): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:200)
E/MethodChannel#flutter_crashlytics(30155): 	at io.flutter.view.FlutterNativeView.handlePlatformMessage(FlutterNativeView.java:163)
E/MethodChannel#flutter_crashlytics(30155): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#flutter_crashlytics(30155): 	at android.os.MessageQueue.next(MessageQueue.java:323)
E/MethodChannel#flutter_crashlytics(30155): 	at android.os.Looper.loop(Looper.java:136)
E/MethodChannel#flutter_crashlytics(30155): 	at android.app.ActivityThread.main(ActivityThread.java:6077)
E/MethodChannel#flutter_crashlytics(30155): 	at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#flutter_crashlytics(30155): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
E/MethodChannel#flutter_crashlytics(30155): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
D/NetworkSecurityConfig(30155): No Network Security Config specified, using platform default
I/DpmTcmClient(30155): RegisterTcmMonitor from: com.android.okhttp.TcmIdleTimerMonitor
W/Fabric  (30155): Could not call getId on com.google.android.gms.ads.identifier.AdvertisingIdClient$Info
W/Fabric  (30155): Could not call isLimitAdTrackingEnabled on com.google.android.gms.ads.identifier.AdvertisingIdClient$Info

Flutter Doctor:

[✓] Flutter (Channel beta, v1.0.0, on Linux, locale en_US.UTF-8)
    • Flutter version 1.0.0 at /home/arnold/installed/flutter
    • Framework revision 5391447fae (8 weeks ago), 2018-11-29 19:41:26 -0800
    • Engine revision 7375a0f414
    • Dart version 2.1.0 (build 2.1.0-dev.9.4 f9ebf21297)

[!] Android toolchain - develop for Android devices (Android SDK 28.0.3)
    • Android SDK at /home/arnold/Android/Sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-28, build-tools 28.0.3
    • Java binary at: /home/arnold/installed/android-studio/jre/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-915-b01)
    ✗ Android license status unknown.

[✓] Android Studio (version 3.0)
    • Android Studio at /home/arnold/installed/android-studio
    • Flutter plugin version 23.2.1
    • Dart plugin version 171.4424
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-915-b01)

[✓] Connected device (1 available)
    • Lenovo K33a42 • 192.168.0.6:5555 • android-arm • Android 7.0 (API 24)

Logging non-fatal exceptions

Sometimes there are exceptions that do/should not crash the applications.
Would be great if there was the possibility of logging it with Crashlitics::logException.

PlatformException during app launch

While launching the app, I get the below error. I want to use Firebase only and not with crashlytics. But it looks for some Crashlytics details.

E/flutter (28577): [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception:
E/flutter (28577): PlatformException(error, This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up,
E/flutter (28577): install an Android build tool and ask a team member to invite you to this app's organization., null)
E/flutter (28577): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:551:7)
E/flutter (28577): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:292:18)
E/flutter (28577): <asynchronous suspension>
E/flutter (28577): #2      FlutterCrashlytics.initialize (package:flutter_crashlytics/flutter_crashlytics.dart:17:53)
E/flutter (28577): <asynchronous suspension>
E/flutter (28577): #3      main (package:silkthread/main.dart:37:30)
E/flutter (28577): <asynchronous suspension>
E/flutter (28577): #4      _startIsolate.<anonymous closure> (dart:isolate/runtime/libisolate_patch.dart:289:19)
E/flutter (28577): #5      _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:171:12)

Should I be changing the gradle build file even when not using Crashlytics?

Using log

I have an issue with sending log to crashlytics from Android. Crashes are sent just fine. But I can't manage to work sending logs.

Using the code:
FlutterCrashlytics().log('some Message');

But nothing is sent.

Not compiling on Android: Execution failed for task ':flutter_crashlytics'.

[✓] Flutter (Channel dev, v0.11.5, on Mac OS X 10.13.6 17G65, locale en-DE)
[✓] Android toolchain - develop for Android devices (Android SDK 28.0.2)
[✓] iOS toolchain - develop for iOS devices (Xcode 10.0)
[✓] Android Studio (version 3.2)
[!] VS Code (version 1.29.1)
[✓] Connected device (2 available)

* What went wrong:
A problem occurred configuring project ':flutter_crashlytics'.
> Failed to notify project evaluation listener.
   > java.lang.AbstractMethodError (no error message)

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':flutter_crashlytics'.
        at org.gradle.configuration.project.LifecycleProjectEvaluator.addConfigurationFailure(LifecycleProjectEvaluator.java:94)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:89)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.doConfigure(LifecycleProjectEvaluator.java:70)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.access$100(LifecycleProjectEvaluator.java:34)
        at org.gradle.configuration.project.LifecycleProjectEvaluator$ConfigureProject.run(LifecycleProjectEvaluator.java:110)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:50)
        at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:666)
        at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:135)
        at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:35)
        at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:62)
        at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:38)
        at org.gradle.initialization.DefaultGradleLauncher$ConfigureBuild.run(DefaultGradleLauncher.java:249)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
        at org.gradle.initialization.DefaultGradleLauncher.configureBuild(DefaultGradleLauncher.java:167)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:126)
        at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:109)
        at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:78)
        at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:75)
        at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:152)
        at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:100)
        at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:75)
        at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
        at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
        at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$1.run(RunAsBuildOperationBuildActionRunner.java:43)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:40)
        at org.gradle.tooling.internal.provider.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:51)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:47)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:30)
        at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:39)
        at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:25)
        at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:80)
        at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:53)
        at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:57)
        at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:32)
        at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:36)
        at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:25)
        at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
        at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
        at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:69)
        at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:30)
        at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:59)
        at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:44)
        at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:45)
        at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:30)
        at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
        at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
        at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
        at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
        at org.gradle.util.Swapper.swap(Swapper.java:38)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
        at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
        at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:62)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
        at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:82)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
        at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
        at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:295)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: org.gradle.internal.event.ListenerNotificationException: Failed to notify project evaluation listener.
        at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:86)
        at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:324)
        at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:234)
        at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:140)
        at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:37)
        at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
        at com.sun.proxy.$Proxy26.afterEvaluate(Unknown Source)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:76)
        ... 81 more
Caused by: java.lang.AbstractMethodError
        at org.jetbrains.kotlin.gradle.plugin.KotlinPluginKt.resolveSubpluginArtifacts(KotlinPlugin.kt:793)
        at org.jetbrains.kotlin.gradle.plugin.KotlinPluginKt.loadSubplugins(KotlinPlugin.kt:767)
        at org.jetbrains.kotlin.gradle.plugin.KotlinPluginKt.access$loadSubplugins(KotlinPlugin.kt:1)
        at org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler$handleProject$2.execute(KotlinPlugin.kt:566)
        at org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler$handleProject$2.execute(KotlinPlugin.kt:501)
        at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:91)
        at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:80)
        at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:42)
        at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:230)
        at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:149)
        at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:58)

in iOS - Fabric called multiple times

  • I didnt make Fabric setup

  • I only use Firebase plugins (flutter_crashlytics, firebase_analytics, firebase_auth vs.)

  • In iOS emulator it shows the message:
    [Fabric] [Fabric +with] called multiple times. Only the first call is honored, please pass all kits you wish to initialize
    Is it a known issue ? or analytics may cause problem sending data ?

  • Also in iOS setup enabled (dwarf with dsym file) but in crash reports i can not see error line
    Should i run in release mode or missing something ? any help is appreciated.

Screen Shot 2019-03-21 at 16 25 39

Screen Shot 2019-03-21 at 16 25 55

  • In Android setup there is no kind of this error. (called multiple times)
  • In Android crash logs i can see error lines correctly.

Screen Shot 2019-03-21 at 16 27 01

Cannot build project when add library - v0.2.0

After adding flutter_crashlytics: ^0.2.0 in pubspec.yaml, my project cannot build. Seem the problem is android project sync gradle file failed (app:properties task run fail)

Some detail information about the project:

  • Using kotlin: v.1.2.30
  • Google service: classpath 'com.google.gms:google-services:4.0.2'
  • Firebase core: implementation 'com.google.firebase:firebase-core:16.0.1'

Stacktrace when run gradlew app:properties

> Configure project :app 
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)


FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':flutter_crashlytics'.
> Failed to notify project evaluation listener.
   > java.lang.AbstractMethodError (no error message)

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':flutter_crashlytics'.
        at org.gradle.configuration.project.LifecycleProjectEvaluator.addConfigurationFailure(LifecycleProjectEvaluator.java:94)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:89)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.doConfigure(LifecycleProjectEvaluator.java:70)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.access$100(LifecycleProjectEvaluator.java:34)
        at org.gradle.configuration.project.LifecycleProjectEvaluator$ConfigureProject.run(LifecycleProjectEvaluator.java:110)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:50)
        at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:666)
        at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:135)
        at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:35)
        at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:62)
        at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:38)
        at org.gradle.initialization.DefaultGradleLauncher$ConfigureBuild.run(DefaultGradleLauncher.java:249)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
        at org.gradle.initialization.DefaultGradleLauncher.configureBuild(DefaultGradleLauncher.java:167)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:126)
        at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:109)
        at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:78)
        at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:75)
        at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:152)
        at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:100)
        at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:75)
        at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
        at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
        at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$1.run(RunAsBuildOperationBuildActionRunner.java:43)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:40)
        at org.gradle.tooling.internal.provider.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:51)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:47)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:30)
        at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:39)
        at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:25)
        at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:80)
        at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:53)
        at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:57)
        at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:32)
        at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:36)
        at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:25)
        at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
        at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
        at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:69)
        at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:30)
        at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:59)
        at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:44)
        at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:45)
        at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:30)
        at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
        at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
        at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
        at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
        at org.gradle.util.Swapper.swap(Swapper.java:38)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
        at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
        at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:62)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
        at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:82)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
        at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
        at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:295)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: org.gradle.internal.event.ListenerNotificationException: Failed to notify project evaluation listener.
        at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:86)
        at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:324)
        at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:234)
        at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:140)
        at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:37)
        at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
        at com.sun.proxy.$Proxy24.afterEvaluate(Unknown Source)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:76)
        ... 81 more
Caused by: java.lang.AbstractMethodError
        at org.jetbrains.kotlin.gradle.plugin.KotlinPluginKt.resolveSubpluginArtifacts(KotlinPlugin.kt:793)
        at org.jetbrains.kotlin.gradle.plugin.KotlinPluginKt.loadSubplugins(KotlinPlugin.kt:767)
        at org.jetbrains.kotlin.gradle.plugin.KotlinPluginKt.access$loadSubplugins(KotlinPlugin.kt:1)
        at org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler$handleProject$2.execute(KotlinPlugin.kt:566)
        at org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler$handleProject$2.execute(KotlinPlugin.kt:501)
        at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:91)
        at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:80)
        at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:42)
        at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:230)
        at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:149)
        at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:58)
        ... 88 more


* Get more help at https://help.gradle.org

BUILD FAILED in 2s

Cannot run in iOS

↳
=== BUILD TARGET Runner OF PROJECT Runner WITH CONFIGURATION Debug ===
ld: warning: Could not find auto-linked library 'swiftCoreFoundation'
ld: warning: Could not find auto-linked library 'swiftSwiftOnoneSupport'
ld: warning: Could not find auto-linked library 'swiftFoundation'
ld: warning: Could not find auto-linked library 'swiftDarwin'
ld: warning: Could not find auto-linked library 'swiftUIKit'
ld: warning: Could not find auto-linked library 'swiftQuartzCore'
ld: warning: Could not find auto-linked library 'swiftCore'
ld: warning: Could not find auto-linked library 'swiftCoreGraphics'
ld: warning: Could not find auto-linked library 'swiftObjectiveC'
ld: warning: Could not find auto-linked library 'swiftCoreMedia'
ld: warning: Could not find auto-linked library 'swiftDispatch'
ld: warning: Could not find auto-linked library 'swiftMetal'
ld: warning: Could not find auto-linked library 'swiftCoreImage'
ld: warning: Could not find auto-linked library 'swiftCoreAudio'
Undefined symbols for architecture arm64:
"protocol descriptor for Swift.Hashable", referenced from:

I already add use_frameworks! still not working.
I already add config.build_settings['SWIFT_VERSION'] = '4.2' still not working

this is my flutter doctor

[✓] Android toolchain - develop for Android devices (Android SDK 28.0.3)
    • Android SDK at /Users/ekoprasetyo/Library/Android/sdk
    • Android NDK at /Users/ekoprasetyo/Library/Android/sdk/ndk-bundle
    • Platform android-28, build-tools 28.0.3
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1136-b06)
    • All Android licenses accepted.

[✓] iOS toolchain - develop for iOS devices (Xcode 10.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 10.1, Build version 10B61
    • ios-deploy 1.9.4
    • CocoaPods version 1.5.3

[!] Android Studio (version 3.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    ✗ Flutter plugin not installed; this adds Flutter specific functionality.
    ✗ Dart plugin not installed; this adds Dart specific functionality.
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1136-b06)

[✓] VS Code (version 1.30.0)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 2.21.1

[✓] Connected device (1 available)
    • Eko Prasetyo Lukman Nur’s iPhone • 37e053b536e8662eb1beaf01726e3da0def34749 • ios • iOS 12.1.1

! Doctor found issues in 1 category.

iOS ** BUILD FAILED ** >>Need to provide more explicit setup instructions

I implemented the plugin and got it working under Android. I set it up with Fabric which was then 'automagically' imported into Firebase. I struggled with the iOS implementation to the point where I had to rollback all my changes (I'm not an XCode guy!). Can you provide step-by-step instructions on setting up iOS? Podfile, build phases tab - could really use screen shots for a Noob!

Exception when pass StackTrace - kotlin.TypeCastException: null cannot be cast to non-null type kotlin.Int

Hello, I use flutter_crashlytics 0.0.6 in my project. I also use Firebase Auth for flutter.
When I do user registration with Email which is already in use I got exception. This is expected behaviour and I handle it in "catchError" block like this:

.catchError((error, stackTrace) {
   FlutterCrashlytics().reportCrash(error, stackTrace, forceCrash: false);
}

But I see crash inside FlutterCrashlytics and I don't see my non-fatal in Fabric account. My logs are:

E/MethodChannel#flutter_crashlytics( 7262): Failed to handle method call
E/MethodChannel#flutter_crashlytics( 7262): kotlin.TypeCastException: null cannot be cast to non-null type kotlin.Int
E/MethodChannel#flutter_crashlytics( 7262): 	at com.kiwi.fluttercrashlytics.Utils.stackTraceElement(Utils.kt:21)
E/MethodChannel#flutter_crashlytics( 7262): 	at com.kiwi.fluttercrashlytics.Utils.create(Utils.kt:11)
E/MethodChannel#flutter_crashlytics( 7262): 	at com.kiwi.fluttercrashlytics.FlutterCrashlyticsPlugin.onMethodCall(FlutterCrashlyticsPlugin.kt:69)
E/MethodChannel#flutter_crashlytics( 7262): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:191)
E/MethodChannel#flutter_crashlytics( 7262): 	at io.flutter.view.FlutterNativeView.handlePlatformMessage(FlutterNativeView.java:163)
E/MethodChannel#flutter_crashlytics( 7262): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#flutter_crashlytics( 7262): 	at android.os.MessageQueue.next(MessageQueue.java:331)
E/MethodChannel#flutter_crashlytics( 7262): 	at android.os.Looper.loop(Looper.java:219)
E/MethodChannel#flutter_crashlytics( 7262): 	at android.app.ActivityThread.main(ActivityThread.java:6274)
E/MethodChannel#flutter_crashlytics( 7262): 	at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#flutter_crashlytics( 7262): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
E/MethodChannel#flutter_crashlytics( 7262): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
E/flutter ( 7262): [ERROR:flutter/shell/common/shell.cc(181)] Dart Error: Unhandled exception:
E/flutter ( 7262): PlatformException(error, null cannot be cast to non-null type kotlin.Int, null)
E/flutter ( 7262): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:551:7)
E/flutter ( 7262): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:279:18)
E/flutter ( 7262): <asynchronous suspension>
E/flutter ( 7262): #2      FlutterCrashlytics.reportCrash (package:flutter_crashlytics/flutter_crashlytics.dart:42:27)
E/flutter ( 7262): <asynchronous suspension>
E/flutter ( 7262): #3      AuthPresenterImpl._onCatchError (package:app/ui/auth/auth_presenter.dart:109:26)

IOS stacktrace is in multiple logs

When IOS app crashes, stacktrace is separated into multiple logs.
Maybe it should be under one log for better readability?

Log example:
screenshot 2019-01-08 at 16 49 29

Opt Out option due to GDPR and Play Store

I have just gotten a mail from Play Store that my app is sending Advertisement ID.
I do not have ads in my application.
After further investigation, I noticed that Crashlytics is collecting the ID.
There is no way of disabling the behaviour.
The only way is to have Opt-Out/In feature implemented.

@jaumard I can implement it for Android but I do not own Mac so cannot check it for iOS. Would you implement it there? I'm sure that lots of European devs will have the same issue soon.

Invalid argument(s): Cannot create a Trace from null

Invalid argument(s): Cannot create a Trace from null.
#0      new Trace.from (package:stack_trace/src/trace.dart:105:7)
#1      FlutterCrashlytics._cause (package:flutter_crashlytics/flutter_crashlytics.dart:75:12)
#2      FlutterCrashlytics.reportCrash (package:flutter_crashlytics/flutter_crashlytics.dart:37:16)
<asynchronous suspension>
#3      main.<anonymous closure> (package:student_app/main.dart:59:10)
<asynchronous suspension>
#4      _rootRunBinary (dart:async/zone.dart:1148:13)
#5      _RootZone.runBinary (dart:async/zone.dart:1385:12)
#6      runZoned.<anonymous closure> (dart:async/zone.dart:1479:21)
#7      _CustomZone.handleUncaughtError (dart:async/zone.dart:1003:19)
#8      _nullErrorHandler (dart:async/stream_impl.dart:572:16)
#9      _rootRunBinary (dart:async/zone.dart:1144:38)
#10     _CustomZone.runBinary (dart:async/zone.dart:1037:19)
#11     _CustomZone.runBinaryGuarded (dart:async/zone.dart:939:7)
#12     _BufferingStreamSubscription._sendError.sendError (dart:async/stream_impl.dart:355:15)
#13     _BufferingStreamSubscription._sendError (dart:async/stream_impl.dart:373:16)
#14     _BufferingStreamSubscription._addError (dart:async/stream_impl.dart:272:7)
#15     _SyncStreamController._sendError (dart:async/stream_controller.dart:767:19)
#16     _StreamController._addError (dart:async/stream_controller.dart:647:7)
#17     _StreamController.addError (dart:async/stream_controller.dart:599:5)
#18     _AsyncDirectoryLister.error (dart:io/directory_impl.dart:442:18)
#19     _AsyncDirectoryLister.next.<anonymous closure> (dart:io/directory_impl.dart:391:15)
#20     _rootRunUnary (dart:async/zone.dart:1132:38)
#21     _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#22     _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
#23     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
#24     Future._propagateToListeners (dart:async/future_impl.dart:671:32)
#25     Future._completeWithValue (dart:async/future_impl.dart:486:5)
#26     Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:516:7)
#27     _rootRun (dart:async/zone.dart:1124:13)
#28     _CustomZone.run (dart:async/zone.dart:1021:19)
#29     _CustomZone.runGuarded (dart:async/zone.dart:923:7)
#30     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:963:23)
#31     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
#32     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)

Not compiling on Android: Execution failed for task ':flutter_crashlytics:compileDebugKotlin'.

Note: /Users/user/development/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-0.2.5/android/src/main/java/io/flutter/plugins/firebase/core/FirebaseCorePlugin.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
/Users/user/development/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_storage-1.0.1/android/src/main/java/io/flutter/plugins/firebase/storage/FirebaseStoragePlugin.java:293: warning: [unchecked] unchecked cast
Map<String, String> customMetadata = (Map<String, String>) map.get("customMetadata");
^
required: Map<String,String>
found: Object
1 warning
e: java.lang.NoClassDefFoundError: org/jetbrains/kotlin/resolve/checkers/DeclarationCheckerContext
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetPublicMethods(Class.java:2902)
at java.lang.Class.getMethods(Class.java:1615)
at org.jetbrains.kotlin.container.CacheKt.getSetterInfos(Cache.kt:64)
at org.jetbrains.kotlin.container.CacheKt.traverseClass(Cache.kt:59)
at org.jetbrains.kotlin.container.CacheKt.access$traverseClass(Cache.kt:1)
at org.jetbrains.kotlin.container.ClassTraversalCache.getClassInfo(Cache.kt:29)
at org.jetbrains.kotlin.container.CacheKt.getInfo(Cache.kt:38)
at org.jetbrains.kotlin.container.InstanceComponentDescriptor.getRegistrations(Components.kt:24)
at org.jetbrains.kotlin.container.ComponentRegistry.buildRegistrationMap(Registry.kt:26)
at org.jetbrains.kotlin.container.ComponentRegistry.addAll(Registry.kt:36)
at org.jetbrains.kotlin.container.ComponentStorage.composeDescriptors(Storage.kt:124)
at org.jetbrains.kotlin.container.ComponentStorage.compose(Storage.kt:118)
at org.jetbrains.kotlin.container.StorageComponentContainer.compose(Container.kt:55)
at org.jetbrains.kotlin.container.DslKt.composeContainer(Dsl.kt:24)
at org.jetbrains.kotlin.resolve.TargetPlatformKt.createContainer(TargetPlatform.kt:145)
at org.jetbrains.kotlin.frontend.java.di.InjectionKt.createContainerForLazyResolveWithJava(injection.kt:85)
at org.jetbrains.kotlin.frontend.java.di.InjectionKt.createContainerForTopDownAnalyzerForJvm(injection.kt:128)
at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.createContainer(TopDownAnalyzerFacadeForJVM.kt:172)
at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:85)
at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:83)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:377)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:68)
at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:96)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:368)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules(KotlinToJVMBytecodeCompiler.kt:133)
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:154)
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:58)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:103)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:51)
at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:92)
at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:303)
at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:85)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally(IncrementalCompilerRunner.kt:213)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.access$compileIncrementally(IncrementalCompilerRunner.kt:37)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner$compile$2.invoke(IncrementalCompilerRunner.kt:74)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:87)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.execIncrementalCompiler(CompileServiceImpl.kt:512)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.access$execIncrementalCompiler(CompileServiceImpl.kt:96)
at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:399)
at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:96)
at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:889)
at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:96)
at org.jetbrains.kotlin.daemon.common.DummyProfiler.withMeasure(PerfUtils.kt:137)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.checkedCompile(CompileServiceImpl.kt:916)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.doCompile(CompileServiceImpl.kt:888)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:398)
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 sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:346)
at sun.rmi.transport.Transport$1.run(Transport.java:200)
at sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.jetbrains.kotlin.resolve.checkers.DeclarationCheckerContext
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.jetbrains.kotlin.cli.jvm.plugins.PluginURLClassLoader$SelfThenParentURLClassLoader.findClass(PluginURLClassLoader.kt:50)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 65 more

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':flutter_crashlytics:compileDebugKotlin'.

Internal compiler error. See log for more details

log() Priority Levels

What are the correct values for setting multi-platform supported priority levels when calling:

Future<void> log(String msg, {int priority, String tag})?

The Android logging reference (https://developer.android.com/reference/android/util/Log.html) defines their platform's priority levels:

Verbose = 2
Debug = 3
Info = 4
Warn = 5
Error = 6

The iOS logging reference (https://developer.apple.com/documentation/os/oslogtype) defines their platform's priority levels:

Default (0?)
Info (1?)
Debug (2?)
Error (3?)
Fault (4?)

The example provided for Flutter Crashlytics (https://github.com/kiwi-bop/flutter_crashlytics/blob/master/example/lib/main.dart) uses a priority level of 200.

Thank you.

AdMob crashlytics Warning

Wanted to know if we should worry about this. I'm using Crashlytics, and Admob, and your awesome flutter_crashlytics. I get this while running the app on iOS simulator:

[Crashlytics:Crash] Warning: NSUncaughtExceptionHandler is 'GADOCategories_GADOSlot_AdEvents'

Should I worry or can I just safely ignore? Everything seems to be working fine so I'm ignoring right now :)

Could not find google-services.json

When I configure flutter_crashlytics according to the README the following error is thrown when running on Android:

Launching lib/main.dart on Android SDK built for x86 in debug mode...
Initializing gradle...
Resolving dependencies...
* Error running Gradle:
Exit code 1 from: /Users/anton.fenske/github/foodie/android/gradlew app:properties:
Could not find google-services.json while looking in [src/nullnull/debug, src/debug/nullnull, src/nullnull, src/debug, src/nullnullDebug]
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
Could not find google-services.json while looking in [src/nullnull/dynamicProfile, src/dynamicProfile/nullnull, src/nullnull, src/dynamicProfile, src/nullnullDynamicProfile]
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
Could not find google-services.json while looking in [src/nullnull/release, src/release/nullnull, src/nullnull, src/release, src/nullnullRelease]
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
Could not find google-services.json while looking in [src/nullnull/profile, src/profile/nullnull, src/nullnull, src/profile, src/nullnullProfile]
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
Could not find google-services.json while looking in [src/nullnull/dynamicRelease, src/dynamicRelease/nullnull, src/nullnull, src/dynamicRelease, src/nullnullDynamicRelease]
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)


FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':flutter_crashlytics'.
> Failed to notify project evaluation listener.
   > java.lang.AbstractMethodError (no error message)

I do have google-services.json under android/app and without the flutter_crashlytics changes, everything works just fine.

Error occurred sending report com.crashlytics.android.core.SessionReport

I keep getting these errors in my logs
E/Fabric (15406): Settings request failed.
E/Fabric (15406): Error performing auto configuration.
E/CrashlyticsCore(15406): Error occurred sending report com.crashlytics.android.core.SessionReport@e335cb3
E/CrashlyticsCore(15406): Error occurred sending report com.crashlytics.android.core.SessionReport@78f3270
E/CrashlyticsCore(15406): Error occurred sending report com.crashlytics.android.core.SessionReport@bf6c9e9
E/CrashlyticsCore(15406): Error occurred sending report com.crashlytics.android.core.SessionReport@ccf266e
E/CrashlyticsCore(15406): Error occurred sending report com.crashlytics.android.core.SessionReport@8fd110f
E/CrashlyticsCore(15406): Error occurred sending report com.crashlytics.android.core.SessionReport@f8d059c

These my doctor logs
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel dev, v1.1.5, on Mac OS X 10.14.2 18C54, locale en-IS)
[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[✓] iOS toolchain - develop for iOS devices (Xcode 10.1)
[✓] Android Studio (version 3.2)
[✓] Connected device (2 available)

• No issues found!
➜ ~

I'm using firebase instead of fabric.

Not Reporting "Logs" in Android

Hello,

we are able to see the stacktraces, but The plugin is not reporting logs and setuserinfo to the firebase console of android crashes even after using log(String msg, {int priority, String tag}) - It is working perfectly fine in ios.
Also how to set and report multiple key/value pairs ?

my code in main.dart:

await FlutterCrashlytics()
       .reportCrash( error, stackTrace, forceCrash: true /* ConstantUtil.force_crash */);
   await FlutterCrashlytics().setInfo('Handle_Id', prefer.getString("handle"));
   await FlutterCrashlytics().setUserInfo('PageName_handle', 'Search_User',prefer.getString("handle"));
   await FlutterCrashlytics().log("error.toString()",priority: 1);

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.