diff --git a/android/app/build.gradle b/android/app/build.gradle index 9f63df150..815d1b0a1 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -78,3 +78,6 @@ dependencies { androidTestImplementation 'androidx.test:runner:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' } + +apply plugin: 'io.fabric' +apply plugin: 'com.google.gms.google-services' diff --git a/android/app/google-services.json b/android/app/google-services.json new file mode 100644 index 000000000..e91e48823 --- /dev/null +++ b/android/app/google-services.json @@ -0,0 +1,40 @@ +{ + "project_info": { + "project_number": "115334189746", + "firebase_url": "https://ente-photos-d18bb.firebaseio.com", + "project_id": "ente-photos-d18bb", + "storage_bucket": "ente-photos-d18bb.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:115334189746:android:58d17810efc8f7610b6fab", + "android_client_info": { + "package_name": "io.ente.photos" + } + }, + "oauth_client": [ + { + "client_id": "115334189746-aa3bsingrkb3jp8e3lh48lupeabbkbpj.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDiWlE9VAVD2RptqWrmCcbF_i5ZowUoOko" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "115334189746-aa3bsingrkb3jp8e3lh48lupeabbkbpj.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle index 3100ad2d5..ab0205a18 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -3,11 +3,17 @@ buildscript { repositories { google() jcenter() + maven { + url 'https://maven.fabric.io/public' + } } dependencies { classpath 'com.android.tools.build:gradle:3.5.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath 'com.android.tools.build:gradle:3.3.2' + classpath 'com.google.gms:google-services:4.2.0' + classpath 'io.fabric.tools:gradle:1.26.1' } } diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 33bac8761..387e39775 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -4,8 +4,47 @@ PODS: - Reachability - connectivity_macos (0.0.1): - Flutter + - Crashlytics (3.14.0): + - Fabric (~> 1.10.2) - esys_flutter_share (0.0.1): - Flutter + - Fabric (1.10.2) + - Firebase/Core (6.23.0): + - Firebase/CoreOnly + - FirebaseAnalytics (= 6.4.2) + - Firebase/CoreOnly (6.23.0): + - FirebaseCore (= 6.6.7) + - firebase_crashlytics (0.0.1): + - Crashlytics + - Fabric + - Firebase/Core + - Flutter + - FirebaseAnalytics (6.4.2): + - FirebaseCore (~> 6.6) + - FirebaseInstallations (~> 1.2) + - GoogleAppMeasurement (= 6.4.2) + - GoogleUtilities/AppDelegateSwizzler (~> 6.0) + - GoogleUtilities/MethodSwizzler (~> 6.0) + - GoogleUtilities/Network (~> 6.0) + - "GoogleUtilities/NSData+zlib (~> 6.0)" + - nanopb (= 0.3.9011) + - FirebaseCore (6.6.7): + - FirebaseCoreDiagnostics (~> 1.2) + - FirebaseCoreDiagnosticsInterop (~> 1.2) + - GoogleUtilities/Environment (~> 6.5) + - GoogleUtilities/Logger (~> 6.5) + - FirebaseCoreDiagnostics (1.2.4): + - FirebaseCoreDiagnosticsInterop (~> 1.2) + - GoogleDataTransportCCTSupport (~> 3.0) + - GoogleUtilities/Environment (~> 6.5) + - GoogleUtilities/Logger (~> 6.5) + - nanopb (~> 0.3.901) + - FirebaseCoreDiagnosticsInterop (1.2.0) + - FirebaseInstallations (1.2.0): + - FirebaseCore (~> 6.6) + - GoogleUtilities/Environment (~> 6.6) + - GoogleUtilities/UserDefaults (~> 6.6) + - PromisesObjC (~> 1.2) - Flutter (1.0.0) - flutter_image_compress (0.0.1): - Flutter @@ -14,6 +53,35 @@ PODS: - FMDB (2.7.5): - FMDB/standard (= 2.7.5) - FMDB/standard (2.7.5) + - GoogleAppMeasurement (6.4.2): + - GoogleUtilities/AppDelegateSwizzler (~> 6.0) + - GoogleUtilities/MethodSwizzler (~> 6.0) + - GoogleUtilities/Network (~> 6.0) + - "GoogleUtilities/NSData+zlib (~> 6.0)" + - nanopb (= 0.3.9011) + - GoogleDataTransport (6.0.0) + - GoogleDataTransportCCTSupport (3.0.0): + - GoogleDataTransport (~> 6.0) + - nanopb (~> 0.3.901) + - GoogleUtilities/AppDelegateSwizzler (6.6.0): + - GoogleUtilities/Environment + - GoogleUtilities/Logger + - GoogleUtilities/Network + - GoogleUtilities/Environment (6.6.0): + - PromisesObjC (~> 1.2) + - GoogleUtilities/Logger (6.6.0): + - GoogleUtilities/Environment + - GoogleUtilities/MethodSwizzler (6.6.0): + - GoogleUtilities/Logger + - GoogleUtilities/Network (6.6.0): + - GoogleUtilities/Logger + - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Reachability + - "GoogleUtilities/NSData+zlib (6.6.0)" + - GoogleUtilities/Reachability (6.6.0): + - GoogleUtilities/Logger + - GoogleUtilities/UserDefaults (6.6.0): + - GoogleUtilities/Logger - libwebp (1.1.0): - libwebp/demux (= 1.1.0) - libwebp/mux (= 1.1.0) @@ -28,12 +96,18 @@ PODS: - Mantle (2.1.1): - Mantle/extobjc (= 2.1.1) - Mantle/extobjc (2.1.1) + - nanopb (0.3.9011): + - nanopb/decode (= 0.3.9011) + - nanopb/encode (= 0.3.9011) + - nanopb/decode (0.3.9011) + - nanopb/encode (0.3.9011) - path_provider (0.0.1): - Flutter - path_provider_macos (0.0.1): - Flutter - photo_manager (0.0.1): - Flutter + - PromisesObjC (1.2.8) - Reachability (3.2) - SDWebImage/Core (5.7.3) - SDWebImageWebPCoder (0.6.1): @@ -53,6 +127,7 @@ DEPENDENCIES: - connectivity (from `.symlinks/plugins/connectivity/ios`) - connectivity_macos (from `.symlinks/plugins/connectivity_macos/ios`) - esys_flutter_share (from `.symlinks/plugins/esys_flutter_share/ios`) + - firebase_crashlytics (from `.symlinks/plugins/firebase_crashlytics/ios`) - Flutter (from `Flutter`) - flutter_image_compress (from `.symlinks/plugins/flutter_image_compress/ios`) - local_image_provider (from `.symlinks/plugins/local_image_provider/ios`) @@ -66,9 +141,23 @@ DEPENDENCIES: SPEC REPOS: trunk: + - Crashlytics + - Fabric + - Firebase + - FirebaseAnalytics + - FirebaseCore + - FirebaseCoreDiagnostics + - FirebaseCoreDiagnosticsInterop + - FirebaseInstallations - FMDB + - GoogleAppMeasurement + - GoogleDataTransport + - GoogleDataTransportCCTSupport + - GoogleUtilities - libwebp - Mantle + - nanopb + - PromisesObjC - Reachability - SDWebImage - SDWebImageWebPCoder @@ -80,6 +169,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/connectivity_macos/ios" esys_flutter_share: :path: ".symlinks/plugins/esys_flutter_share/ios" + firebase_crashlytics: + :path: ".symlinks/plugins/firebase_crashlytics/ios" Flutter: :path: Flutter flutter_image_compress: @@ -104,16 +195,31 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: connectivity: 6e94255659cc86dcbef1d452ad3e0491bb1b3e75 connectivity_macos: e2e9731b6b22dda39eb1b128f6969d574460e191 + Crashlytics: 540b7e5f5da5a042647227a5e3ac51d85eed06df esys_flutter_share: 403498dab005b36ce1f8d7aff377e81f0621b0b4 + Fabric: 706c8b8098fff96c33c0db69cbf81f9c551d0d74 + Firebase: 585ae467b3edda6a5444e788fda6888f024d8d6f + firebase_crashlytics: bd8c58df07f107cb7e1a20cb190b9a468e0a69fd + FirebaseAnalytics: 558f7a03d19de451093032c806f39d5f9dff096e + FirebaseCore: a2788a0d5f6c1dff17b8f79b4a73654a8d4bfdbd + FirebaseCoreDiagnostics: b59c024493a409f8aecba02c99928d0d8431d159 + FirebaseCoreDiagnosticsInterop: 296e2c5f5314500a850ad0b83e9e7c10b011a850 + FirebaseInstallations: 2119fb3e46b0a88bfdbf12562f855ee3252462fa Flutter: 0e3d915762c693b495b44d77113d4970485de6ec flutter_image_compress: 082f8daaf6c1b0c9fe798251c750ef0ecd98d7ae FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a + GoogleAppMeasurement: 2253e99c1f22638cf234c059144660c338ad76c3 + GoogleDataTransport: 061fe7d9b476710e3cd8ea51e8e07d8b67c2b420 + GoogleDataTransportCCTSupport: 0f39025e8cf51f168711bd3fb773938d7e62ddb5 + GoogleUtilities: 39530bc0ad980530298e9c4af8549e991fd033b1 libwebp: 946cb3063cea9236285f7e9a8505d806d30e07f3 local_image_provider: cf979b81bc1cacc81867d3511a1b6b7216411e93 Mantle: 35238ae6f2e2b2d474fa7b67fee82a59fea71915 + nanopb: 18003b5e52dab79db540fe93fe9579f399bd1ccd path_provider: fb74bd0465e96b594bb3b5088ee4a4e7bb1f2a9d path_provider_macos: f760a3c5b04357c380e2fddb6f9db6f3015897e0 photo_manager: f7c619c2cc8c2adb8d85c63363babac477de9c67 + PromisesObjC: c119f3cd559f50b7ae681fa59dc1acd19173b7e6 Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 SDWebImage: 97351f6582ceca541ea294ba66a1fcb342a331c2 SDWebImageWebPCoder: d0dac55073088d24b2ac1b191a71a8f8d0adac21 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 5b7269afd..4ae04b97f 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -9,6 +9,7 @@ /* Begin PBXBuildFile section */ 06CC0CFA92976FDBA53FAAE5 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB5F531E492C7002EAC4CE42 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 273B87E0245CB55700052ECF /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 273B87DF245CB55700052ECF /* GoogleService-Info.plist */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; @@ -32,6 +33,7 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 273B87DF245CB55700052ECF /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "../../../../../Downloads/GoogleService-Info.plist"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 6A8718E36D8B0CC6360ADB0D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; @@ -94,6 +96,7 @@ 97C146F01CF9000F007C117D /* Runner */ = { isa = PBXGroup; children = ( + 273B87DF245CB55700052ECF /* GoogleService-Info.plist */, 97C146FA1CF9000F007C117D /* Main.storyboard */, 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, @@ -147,6 +150,7 @@ 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 481FE5B058006945E0569431 /* [CP] Embed Pods Frameworks */, + 273B87DE245CA5F200052ECF /* ShellScript */, ); buildRules = ( ); @@ -199,6 +203,7 @@ files = ( 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 273B87E0245CB55700052ECF /* GoogleService-Info.plist in Resources */, 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, ); @@ -207,6 +212,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 273B87DE245CA5F200052ECF /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "${PODS_ROOT}/Fabric/run\n"; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -270,7 +292,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n"; }; /* End PBXShellScriptBuildPhase section */ diff --git a/lib/main.dart b/lib/main.dart index 8d3cd9c63..240adead1 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:logger/logger.dart'; import 'core/configuration.dart'; @@ -5,12 +7,18 @@ import 'photo_loader.dart'; import 'photo_sync_manager.dart'; import 'ui/home_widget.dart'; import 'package:provider/provider.dart'; +import 'package:firebase_crashlytics/firebase_crashlytics.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); - runApp(MyApp()); Configuration.instance.init(); PhotoSyncManager.instance.sync(); + + Crashlytics.instance.enableInDevMode = true; + FlutterError.onError = Crashlytics.instance.recordFlutterError; + runZoned(() { + runApp(MyApp()); + }, onError: Crashlytics.instance.recordError); } class MyApp extends StatelessWidget with WidgetsBindingObserver { diff --git a/pubspec.lock b/pubspec.lock index 8d97f26f3..31ea07a15 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -113,6 +113,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.1" + firebase_crashlytics: + dependency: "direct main" + description: + name: firebase_crashlytics + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.3+3" flutter: dependency: "direct main" description: flutter diff --git a/pubspec.yaml b/pubspec.yaml index 13e88e17d..3829933fd 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -41,6 +41,7 @@ dependencies: visibility_detector: ^0.1.4 connectivity: ^0.4.8+2 event_bus: ^1.1.1 + firebase_crashlytics: ^0.1.3+3 dev_dependencies: flutter_test: