diff --git a/android/app/build.gradle b/android/app/build.gradle index 763665e4..2b5f1845 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -27,10 +27,6 @@ if (keystorePropertiesFile.exists()) { keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) } apply plugin: 'com.android.application' -// START: FlutterFire Configuration -apply plugin: 'com.google.gms.google-services' -apply plugin: 'com.google.firebase.crashlytics' -// END: FlutterFire Configuration apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" diff --git a/android/app/google-services.json b/android/app/google-services.json deleted file mode 100644 index 5ed094a8..00000000 --- a/android/app/google-services.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "project_info": { - "project_number": "372003342382", - "project_id": "hiddify-flutter", - "storage_bucket": "hiddify-flutter.appspot.com" - }, - "client": [ - { - "client_info": { - "mobilesdk_app_id": "1:372003342382:android:c33c6eb99da7ceb76fb7bf", - "android_client_info": { - "package_name": "app.hiddify.com" - } - }, - "oauth_client": [ - { - "client_id": "372003342382-hlkjtgug97q8melqpkvat5f9mi7nj3s8.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyDhiPAfkcUkQKcNXCUUcKL51K5UqRd7WXA" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "372003342382-hlkjtgug97q8melqpkvat5f9mi7nj3s8.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 b4fec929..52648854 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -7,10 +7,6 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:7.3.0' - // START: FlutterFire Configuration - classpath 'com.google.gms:google-services:4.3.10' - classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1' - // END: FlutterFire Configuration classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/assets/translations/strings.i18n.json b/assets/translations/strings.i18n.json index 39c685ca..448709d6 100644 --- a/assets/translations/strings.i18n.json +++ b/assets/translations/strings.i18n.json @@ -9,6 +9,9 @@ "sort": "Sort", "sortBy": "Sort by" }, + "intro": { + "start": "Start" + }, "home": { "pageTitle": "Home", "emptyProfilesMsg": "Begin by adding a subscription profile", @@ -101,6 +104,7 @@ }, "settings": { "pageTitle": "Settings", + "requiresRestartMsg": "for this to take effect restart the app", "general": { "sectionTitle": "General", "locale": "Language", @@ -110,6 +114,8 @@ "dark": "Dark mode", "light": "Light mode" }, + "enableAnalytics": "Enable Analytics", + "enableAnalyticsMsg": "Give permission to collect analytics and send crash reports to improve the app", "trueBlack": "Pure Black", "autoStart": "Start on Boot", "silentStart": "Silent Start", diff --git a/assets/translations/strings_fa.i18n.json b/assets/translations/strings_fa.i18n.json index 9144aadb..91b4b90b 100644 --- a/assets/translations/strings_fa.i18n.json +++ b/assets/translations/strings_fa.i18n.json @@ -8,6 +8,9 @@ }, "sort": "مرتب‌سازی", "sortBy": "مرتب‌سازی براساس" + }, + "intro": { + "start": "شروع" }, "home": { "pageTitle": "خانه", @@ -101,6 +104,7 @@ }, "settings": { "pageTitle": "تنظیمات", + "requiresRestartMsg": "برای اعمال این تنظیم برنامه را بازنشانی کنید", "general": { "sectionTitle": "اصلی", "locale": "زبان", @@ -110,6 +114,8 @@ "dark": "تم تیره", "light": "تم روشن" }, + "enableAnalytics": "فعال‌سازی آنالیتیکز", + "enableAnalyticsMsg": "ارائه دسترسی آنالیز و گزارش خطا برای بهبود عملکرد برنامه", "trueBlack": "کاملا سیاه", "autoStart": "اجرا با روشن شدن سیستم", "silentStart": "اجرای ساکت", diff --git a/ios/Runner/GoogleService-Info.plist b/ios/Runner/GoogleService-Info.plist deleted file mode 100644 index b69ac067..00000000 --- a/ios/Runner/GoogleService-Info.plist +++ /dev/null @@ -1,30 +0,0 @@ - - - - - API_KEY - AIzaSyDs7pee9vjdKfUYFbJvHo8rDwqp36dkPRI - GCM_SENDER_ID - 372003342382 - PLIST_VERSION - 1 - BUNDLE_ID - com.hiddify.hiddify - PROJECT_ID - hiddify-flutter - STORAGE_BUCKET - hiddify-flutter.appspot.com - IS_ADS_ENABLED - - IS_ANALYTICS_ENABLED - - IS_APPINVITE_ENABLED - - IS_GCM_ENABLED - - IS_SIGNIN_ENABLED - - GOOGLE_APP_ID - 1:372003342382:ios:a579c1abfc54046a6fb7bf - - \ No newline at end of file diff --git a/ios/firebase_app_id_file.json b/ios/firebase_app_id_file.json deleted file mode 100644 index 777fcea3..00000000 --- a/ios/firebase_app_id_file.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "file_generated_by": "FlutterFire CLI", - "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory", - "GOOGLE_APP_ID": "1:372003342382:ios:a579c1abfc54046a6fb7bf", - "FIREBASE_PROJECT_ID": "hiddify-flutter", - "GCM_SENDER_ID": "372003342382" -} \ No newline at end of file diff --git a/lib/bootstrap.dart b/lib/bootstrap.dart index f79eb9f7..4a0e26b8 100644 --- a/lib/bootstrap.dart +++ b/lib/bootstrap.dart @@ -1,8 +1,6 @@ import 'dart:async'; import 'dart:io'; -import 'package:firebase_core/firebase_core.dart'; -import 'package:firebase_crashlytics/firebase_crashlytics.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_native_splash/flutter_native_splash.dart'; @@ -21,18 +19,17 @@ import 'package:hiddify/services/service_providers.dart'; import 'package:hiddify/utils/utils.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:loggy/loggy.dart'; +import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:window_manager/window_manager.dart'; final _loggy = Loggy('bootstrap'); -final _stopWatch = Stopwatch(); +const _testCrashReport = false; Future lazyBootstrap( WidgetsBinding widgetsBinding, Environment env, ) async { - _stopWatch.start(); - FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding); if (PlatformUtils.isDesktop) await windowManager.ensureInitialized(); @@ -45,11 +42,28 @@ Future lazyBootstrap( ], ); - if (container.read(autoCrashReportProvider) && !kDebugMode) { - _loggy.debug("initializing crashlytics"); - await initCrashlytics(); - } + final enableAnalytics = container.read(enableAnalyticsProvider); + await SentryFlutter.init( + (options) { + if ((enableAnalytics && !kDebugMode) || _testCrashReport) { + options.dsn = Environment.sentryDSN; + } else { + options.dsn = ""; + } + + options.environment = env.toString(); + options.debug = kDebugMode; + }, + appRunner: () => _lazyBootstrap(widgetsBinding, container, env), + ); +} + +Future _lazyBootstrap( + WidgetsBinding widgetsBinding, + ProviderContainer container, + Environment env, +) async { final debug = container.read(debugModeNotifierProvider) || kDebugMode; final filesEditor = container.read(filesEditorServiceProvider); @@ -59,7 +73,6 @@ Future lazyBootstrap( _loggy.info( "os: [${Platform.operatingSystem}](${Platform.operatingSystemVersion}), processor count [${Platform.numberOfProcessors}]", ); - _loggy.info("basic setup took [${_stopWatch.elapsedMilliseconds}]ms"); final silentStart = container.read(silentStartNotifierProvider); if (silentStart) { @@ -81,8 +94,6 @@ Future lazyBootstrap( ); if (!silentStart) FlutterNativeSplash.remove(); - _stopWatch.stop(); - _loggy.info("bootstrapping took [${_stopWatch.elapsedMilliseconds}]ms"); } void initLoggers( @@ -102,18 +113,6 @@ void initLoggers( ); } -Future initCrashlytics() async { - switch (Platform.operatingSystem) { - case "android" || "ios" || "macos": - await Firebase.initializeApp(); - FlutterError.onError = - FirebaseCrashlytics.instance.recordFlutterFatalError; - default: - _loggy.debug("platform is not supported for crashlytics"); - return; - } -} - Future initAppServices( Result Function(ProviderListenable) read, ) async { diff --git a/lib/core/prefs/general_prefs.dart b/lib/core/prefs/general_prefs.dart index 0b559125..0242724e 100644 --- a/lib/core/prefs/general_prefs.dart +++ b/lib/core/prefs/general_prefs.dart @@ -7,6 +7,23 @@ import 'package:riverpod_annotation/riverpod_annotation.dart'; part 'general_prefs.g.dart'; +@Riverpod(keepAlive: true) +class IntroCompleted extends _$IntroCompleted { + late final _pref = Pref( + ref.watch(sharedPreferencesProvider), + "intro_completed", + false, + ); + + @override + bool build() => _pref.getValue(); + + Future update(bool value) { + state = value; + return _pref.update(value); + } +} + @Riverpod(keepAlive: true) class SilentStartNotifier extends _$SilentStartNotifier { late final _pref = @@ -22,11 +39,11 @@ class SilentStartNotifier extends _$SilentStartNotifier { } @Riverpod(keepAlive: true) -class AutoCrashReport extends _$AutoCrashReport { +class EnableAnalytics extends _$EnableAnalytics { late final _pref = Pref( ref.watch(sharedPreferencesProvider), - "auto_crash_report", - false, + "enable_analytics", + true, ); @override diff --git a/lib/domain/environment.dart b/lib/domain/environment.dart index 27b5b4c1..169b29a6 100644 --- a/lib/domain/environment.dart +++ b/lib/domain/environment.dart @@ -3,6 +3,8 @@ import 'package:dartx/dartx.dart'; enum Environment { prod, dev; + + static const sentryDSN = String.fromEnvironment("sentry_dsn"); } enum Release { diff --git a/lib/features/common/common.dart b/lib/features/common/common.dart index b4eaf530..aca01a77 100644 --- a/lib/features/common/common.dart +++ b/lib/features/common/common.dart @@ -1,5 +1,6 @@ export 'app_update_notifier.dart'; export 'confirmation_dialogs.dart'; export 'custom_app_bar.dart'; +export 'general_pref_tiles.dart'; export 'profile_tile.dart'; export 'qr_code_scanner_screen.dart'; diff --git a/lib/features/common/general_pref_tiles.dart b/lib/features/common/general_pref_tiles.dart new file mode 100644 index 00000000..eb4f8c91 --- /dev/null +++ b/lib/features/common/general_pref_tiles.dart @@ -0,0 +1,87 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_localized_locales/flutter_localized_locales.dart'; +import 'package:go_router/go_router.dart'; +import 'package:hiddify/core/core_providers.dart'; +import 'package:hiddify/core/prefs/prefs.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; + +class LocalePrefTile extends HookConsumerWidget { + const LocalePrefTile({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final t = ref.watch(translationsProvider); + + final locale = ref.watch(localeNotifierProvider); + + return ListTile( + title: Text(t.settings.general.locale), + subtitle: Text( + LocaleNamesLocalizationsDelegate.nativeLocaleNames[locale.name] ?? + locale.name, + ), + leading: const Icon(Icons.language), + onTap: () async { + final selectedLocale = await showDialog( + context: context, + builder: (context) { + return SimpleDialog( + title: Text(t.settings.general.locale), + children: AppLocale.values + .map( + (e) => RadioListTile( + title: Text( + LocaleNamesLocalizationsDelegate + .nativeLocaleNames[e.name] ?? + e.name, + ), + value: e, + groupValue: locale, + onChanged: (e) => context.pop(e), + ), + ) + .toList(), + ); + }, + ); + if (selectedLocale != null) { + await ref + .read(localeNotifierProvider.notifier) + .update(selectedLocale); + } + }, + ); + } +} + +class EnableAnalyticsPrefTile extends HookConsumerWidget { + const EnableAnalyticsPrefTile({ + super.key, + this.onChanged, + }); + + final ValueChanged? onChanged; + + @override + Widget build(BuildContext context, WidgetRef ref) { + final t = ref.watch(translationsProvider); + + final autoReport = ref.watch(enableAnalyticsProvider); + + return SwitchListTile( + title: Text(t.settings.general.enableAnalytics), + subtitle: Text( + t.settings.general.enableAnalyticsMsg, + style: Theme.of(context).textTheme.bodySmall, + ), + secondary: const Icon(Icons.bug_report), + value: autoReport, + onChanged: (value) async { + if (onChanged != null) { + return onChanged!(value); + } + return ref.read(enableAnalyticsProvider.notifier).update(value); + }, + ); + } +} diff --git a/lib/features/settings/widgets/general_setting_tiles.dart b/lib/features/settings/widgets/general_setting_tiles.dart index a2baf48c..f8b76249 100644 --- a/lib/features/settings/widgets/general_setting_tiles.dart +++ b/lib/features/settings/widgets/general_setting_tiles.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:flutter_localized_locales/flutter_localized_locales.dart'; import 'package:go_router/go_router.dart'; import 'package:hiddify/core/core_providers.dart'; import 'package:hiddify/core/prefs/prefs.dart'; +import 'package:hiddify/features/common/common.dart'; import 'package:hiddify/features/settings/widgets/theme_mode_switch_button.dart'; import 'package:hiddify/services/auto_start_service.dart'; import 'package:hiddify/utils/utils.dart'; @@ -15,47 +15,31 @@ class GeneralSettingTiles extends HookConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { final t = ref.watch(translationsProvider); - final locale = ref.watch(localeNotifierProvider); - final theme = ref.watch(themeProvider); return Column( children: [ - ListTile( - title: Text(t.settings.general.locale), - subtitle: Text( - LocaleNamesLocalizationsDelegate.nativeLocaleNames[locale.name] ?? - locale.name, - ), - leading: const Icon(Icons.language), - onTap: () async { - final selectedLocale = await showDialog( + const LocalePrefTile(), + EnableAnalyticsPrefTile( + onChanged: (value) async { + await showDialog( context: context, builder: (context) { - return SimpleDialog( - title: Text(t.settings.general.locale), - children: AppLocale.values - .map( - (e) => RadioListTile( - title: Text( - LocaleNamesLocalizationsDelegate - .nativeLocaleNames[e.name] ?? - e.name, - ), - value: e, - groupValue: locale, - onChanged: (e) => context.pop(e), - ), - ) - .toList(), + return AlertDialog( + title: Text(t.settings.general.enableAnalytics), + content: Text(t.settings.requiresRestartMsg), + actions: [ + TextButton( + onPressed: () => context.pop(true), + child: Text( + MaterialLocalizations.of(context).okButtonLabel, + ), + ), + ], ); }, ); - if (selectedLocale != null) { - await ref - .read(localeNotifierProvider.notifier) - .update(selectedLocale); - } + return ref.read(enableAnalyticsProvider.notifier).update(value); }, ), ListTile( diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index 08565b49..d183c590 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -7,6 +7,7 @@ #include "generated_plugin_registrant.h" #include +#include #include #include #include @@ -16,6 +17,9 @@ void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) screen_retriever_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "ScreenRetrieverPlugin"); screen_retriever_plugin_register_with_registrar(screen_retriever_registrar); + g_autoptr(FlPluginRegistrar) sentry_flutter_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "SentryFlutterPlugin"); + sentry_flutter_plugin_register_with_registrar(sentry_flutter_registrar); g_autoptr(FlPluginRegistrar) sqlite3_flutter_libs_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "Sqlite3FlutterLibsPlugin"); sqlite3_flutter_libs_plugin_register_with_registrar(sqlite3_flutter_libs_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index fa081fc5..e1759bc3 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -4,6 +4,7 @@ list(APPEND FLUTTER_PLUGIN_LIST screen_retriever + sentry_flutter sqlite3_flutter_libs tray_manager url_launcher_linux diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 8e108f0b..6234da8d 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,14 +5,13 @@ import FlutterMacOS import Foundation -import firebase_core -import firebase_crashlytics import flutter_local_notifications import mobile_scanner import package_info_plus import path_provider_foundation import protocol_handler import screen_retriever +import sentry_flutter import share_plus import shared_preferences_foundation import sqlite3_flutter_libs @@ -21,14 +20,13 @@ import url_launcher_macos import window_manager func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { - FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) - FLTFirebaseCrashlyticsPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCrashlyticsPlugin")) FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin")) MobileScannerPlugin.register(with: registry.registrar(forPlugin: "MobileScannerPlugin")) FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) ProtocolHandlerPlugin.register(with: registry.registrar(forPlugin: "ProtocolHandlerPlugin")) ScreenRetrieverPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverPlugin")) + SentryFlutterPlugin.register(with: registry.registrar(forPlugin: "SentryFlutterPlugin")) SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) Sqlite3FlutterLibsPlugin.register(with: registry.registrar(forPlugin: "Sqlite3FlutterLibsPlugin")) diff --git a/macos/Podfile.lock b/macos/Podfile.lock index 7433b5cc..0f69469c 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -1,79 +1,25 @@ PODS: - - Firebase/CoreOnly (10.12.0): - - FirebaseCore (= 10.12.0) - - Firebase/Crashlytics (10.12.0): - - Firebase/CoreOnly - - FirebaseCrashlytics (~> 10.12.0) - - firebase_core (2.15.1): - - Firebase/CoreOnly (~> 10.12.0) - - FlutterMacOS - - firebase_crashlytics (3.3.5): - - Firebase/CoreOnly (~> 10.12.0) - - Firebase/Crashlytics (~> 10.12.0) - - firebase_core - - FlutterMacOS - - FirebaseCore (10.12.0): - - FirebaseCoreInternal (~> 10.0) - - GoogleUtilities/Environment (~> 7.8) - - GoogleUtilities/Logger (~> 7.8) - - FirebaseCoreExtension (10.15.0): - - FirebaseCore (~> 10.0) - - FirebaseCoreInternal (10.15.0): - - "GoogleUtilities/NSData+zlib (~> 7.8)" - - FirebaseCrashlytics (10.12.0): - - FirebaseCore (~> 10.5) - - FirebaseInstallations (~> 10.0) - - FirebaseSessions (~> 10.5) - - GoogleDataTransport (~> 9.2) - - GoogleUtilities/Environment (~> 7.8) - - nanopb (< 2.30910.0, >= 2.30908.0) - - PromisesObjC (~> 2.1) - - FirebaseInstallations (10.15.0): - - FirebaseCore (~> 10.0) - - GoogleUtilities/Environment (~> 7.8) - - GoogleUtilities/UserDefaults (~> 7.8) - - PromisesObjC (~> 2.1) - - FirebaseSessions (10.15.0): - - FirebaseCore (~> 10.5) - - FirebaseCoreExtension (~> 10.0) - - FirebaseInstallations (~> 10.0) - - GoogleDataTransport (~> 9.2) - - GoogleUtilities/Environment (~> 7.10) - - nanopb (< 2.30910.0, >= 2.30908.0) - - PromisesSwift (~> 2.1) - flutter_local_notifications (0.0.1): - FlutterMacOS - FlutterMacOS (1.0.0) - - GoogleDataTransport (9.2.5): - - GoogleUtilities/Environment (~> 7.7) - - nanopb (< 2.30910.0, >= 2.30908.0) - - PromisesObjC (< 3.0, >= 1.2) - - GoogleUtilities/Environment (7.11.5): - - PromisesObjC (< 3.0, >= 1.2) - - GoogleUtilities/Logger (7.11.5): - - GoogleUtilities/Environment - - "GoogleUtilities/NSData+zlib (7.11.5)" - - GoogleUtilities/UserDefaults (7.11.5): - - GoogleUtilities/Logger - mobile_scanner (3.0.0): - FlutterMacOS - - nanopb (2.30909.0): - - nanopb/decode (= 2.30909.0) - - nanopb/encode (= 2.30909.0) - - nanopb/decode (2.30909.0) - - nanopb/encode (2.30909.0) - package_info_plus (0.0.1): - FlutterMacOS - path_provider_foundation (0.0.1): - Flutter - FlutterMacOS - - PromisesObjC (2.3.1) - - PromisesSwift (2.3.1): - - PromisesObjC (= 2.3.1) - protocol_handler (0.0.1): - FlutterMacOS - screen_retriever (0.0.1): - FlutterMacOS + - Sentry/HybridSDK (8.11.0): + - SentryPrivate (= 8.11.0) + - sentry_flutter (0.0.1): + - Flutter + - FlutterMacOS + - Sentry/HybridSDK (= 8.11.0) + - SentryPrivate (8.11.0) - share_plus (0.0.1): - FlutterMacOS - shared_preferences_foundation (0.0.1): @@ -102,8 +48,6 @@ PODS: - FlutterMacOS DEPENDENCIES: - - firebase_core (from `Flutter/ephemeral/.symlinks/plugins/firebase_core/macos`) - - firebase_crashlytics (from `Flutter/ephemeral/.symlinks/plugins/firebase_crashlytics/macos`) - flutter_local_notifications (from `Flutter/ephemeral/.symlinks/plugins/flutter_local_notifications/macos`) - FlutterMacOS (from `Flutter/ephemeral`) - mobile_scanner (from `Flutter/ephemeral/.symlinks/plugins/mobile_scanner/macos`) @@ -111,6 +55,7 @@ DEPENDENCIES: - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) - protocol_handler (from `Flutter/ephemeral/.symlinks/plugins/protocol_handler/macos`) - screen_retriever (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos`) + - sentry_flutter (from `Flutter/ephemeral/.symlinks/plugins/sentry_flutter/macos`) - share_plus (from `Flutter/ephemeral/.symlinks/plugins/share_plus/macos`) - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) - sqlite3_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/macos`) @@ -120,25 +65,11 @@ DEPENDENCIES: SPEC REPOS: trunk: - - Firebase - - FirebaseCore - - FirebaseCoreExtension - - FirebaseCoreInternal - - FirebaseCrashlytics - - FirebaseInstallations - - FirebaseSessions - - GoogleDataTransport - - GoogleUtilities - - nanopb - - PromisesObjC - - PromisesSwift + - Sentry + - SentryPrivate - sqlite3 EXTERNAL SOURCES: - firebase_core: - :path: Flutter/ephemeral/.symlinks/plugins/firebase_core/macos - firebase_crashlytics: - :path: Flutter/ephemeral/.symlinks/plugins/firebase_crashlytics/macos flutter_local_notifications: :path: Flutter/ephemeral/.symlinks/plugins/flutter_local_notifications/macos FlutterMacOS: @@ -153,6 +84,8 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral/.symlinks/plugins/protocol_handler/macos screen_retriever: :path: Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos + sentry_flutter: + :path: Flutter/ephemeral/.symlinks/plugins/sentry_flutter/macos share_plus: :path: Flutter/ephemeral/.symlinks/plugins/share_plus/macos shared_preferences_foundation: @@ -167,27 +100,16 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral/.symlinks/plugins/window_manager/macos SPEC CHECKSUMS: - Firebase: 07150e75d142fb9399f6777fa56a187b17f833a0 - firebase_core: 559d892df9267acc6b7254d46fb3041866777509 - firebase_crashlytics: 5c146808f99644445d69c3dc2eb20324717edd00 - FirebaseCore: f86a1394906b97ac445ae49c92552a9425831bed - FirebaseCoreExtension: d3f1ea3725fb41f56e8fbfb29eeaff54e7ffb8f6 - FirebaseCoreInternal: 2f4bee5ed00301b5e56da0849268797a2dd31fb4 - FirebaseCrashlytics: c4d111b7430c49744c74bcc6346ea00868661ac8 - FirebaseInstallations: cae95cab0f965ce05b805189de1d4c70b11c76fb - FirebaseSessions: ee59a7811bef4c15f65ef6472f3210faa293f9c8 flutter_local_notifications: 3805ca215b2fb7f397d78b66db91f6a747af52e4 FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 - GoogleDataTransport: 54dee9d48d14580407f8f5fbf2f496e92437a2f2 - GoogleUtilities: 13e2c67ede716b8741c7989e26893d151b2b2084 mobile_scanner: ed7618fb749adc6574563e053f3b8e5002c13994 - nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431 package_info_plus: 02d7a575e80f194102bef286361c6c326e4c29ce path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943 - PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4 - PromisesSwift: 28dca69a9c40779916ac2d6985a0192a5cb4a265 protocol_handler: 587e1caf6c0b92ce351ab14081968dae49cb8cc6 screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38 + Sentry: 39d57e691e311bdb73bc1ab5bbebbd6bc890050d + sentry_flutter: b2feefdad5b0f06602347172bc7257e8e9da5562 + SentryPrivate: 48712023cdfd523735c2edb6b06bedf26c4730a3 share_plus: 76dd39142738f7a68dd57b05093b5e8193f220f7 shared_preferences_foundation: e2dae3258e06f44cc55f49d42024fd8dd03c590c sqlite3: 7afcf055d3700254769a4dcba56f27d26b5515c9 diff --git a/macos/Runner/GoogleService-Info.plist b/macos/Runner/GoogleService-Info.plist deleted file mode 100644 index d29f32df..00000000 --- a/macos/Runner/GoogleService-Info.plist +++ /dev/null @@ -1,30 +0,0 @@ - - - - - API_KEY - AIzaSyDs7pee9vjdKfUYFbJvHo8rDwqp36dkPRI - GCM_SENDER_ID - 372003342382 - PLIST_VERSION - 1 - BUNDLE_ID - com.hiddify.hiddify.RunnerTests - PROJECT_ID - hiddify-flutter - STORAGE_BUCKET - hiddify-flutter.appspot.com - IS_ADS_ENABLED - - IS_ANALYTICS_ENABLED - - IS_APPINVITE_ENABLED - - IS_GCM_ENABLED - - IS_SIGNIN_ENABLED - - GOOGLE_APP_ID - 1:372003342382:ios:dd40035472392b346fb7bf - - \ No newline at end of file diff --git a/macos/firebase_app_id_file.json b/macos/firebase_app_id_file.json deleted file mode 100644 index 95ec1070..00000000 --- a/macos/firebase_app_id_file.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "file_generated_by": "FlutterFire CLI", - "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory", - "GOOGLE_APP_ID": "1:372003342382:ios:dd40035472392b346fb7bf", - "FIREBASE_PROJECT_ID": "hiddify-flutter", - "GCM_SENDER_ID": "372003342382" -} \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index dc6eaff8..0c3767c3 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "60.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "1a5e13736d59235ce0139621b4bbe29bc89839e202409081bc667eb3cd20674c" - url: "https://pub.dev" - source: hosted - version: "1.3.5" accessibility_tools: dependency: "direct main" description: @@ -377,46 +369,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" - firebase_core: - dependency: "direct main" - description: - name: firebase_core - sha256: c78132175edda4bc532a71e01a32964e4b4fcf53de7853a422d96dac3725f389 - url: "https://pub.dev" - source: hosted - version: "2.15.1" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b63e3be6c96ef5c33bdec1aab23c91eb00696f6452f0519401d640938c94cba2 - url: "https://pub.dev" - source: hosted - version: "4.8.0" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "4cf4d2161530332ddc3c562f19823fb897ff37a9a774090d28df99f47370e973" - url: "https://pub.dev" - source: hosted - version: "2.7.0" - firebase_crashlytics: - dependency: "direct main" - description: - name: firebase_crashlytics - sha256: fd9e1a1cb7cce3f9dd2358d8363d235f25f056981e23a333db1e57eca693913f - url: "https://pub.dev" - source: hosted - version: "3.3.5" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "0d19ef23cf7a917a357d2eb1807338ec536ec3232e729ebd769f5bb2aba9e085" - url: "https://pub.dev" - source: hosted - version: "3.6.5" fixnum: dependency: transitive description: @@ -1093,6 +1045,22 @@ packages: url: "https://pub.dev" source: hosted version: "0.1.9" + sentry: + dependency: transitive + description: + name: sentry + sha256: "830667eadc0398fea3a3424ed1b74568e2db603a42758d0922e2f2974ce55a60" + url: "https://pub.dev" + source: hosted + version: "7.10.1" + sentry_flutter: + dependency: "direct main" + description: + name: sentry_flutter + sha256: "6730f41b304c6fb0fa590dacccaf73ba11082fc64b274cfe8a79776f2b95309c" + url: "https://pub.dev" + source: hosted + version: "7.10.1" share_plus: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 9c175a6e..6ddadd64 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -54,6 +54,7 @@ dependencies: url_launcher: ^6.1.14 vclibs: ^0.1.0 launch_at_startup: ^0.2.2 + sentry_flutter: ^7.10.1 # utils combine: ^0.5.6 @@ -78,8 +79,6 @@ dependencies: sliver_tools: ^0.2.12 flutter_adaptive_scaffold: ^0.1.7+1 humanizer: ^2.2.0 - firebase_crashlytics: ^3.3.5 - firebase_core: ^2.15.1 dev_dependencies: flutter_test: diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index f1ddd719..01d8a783 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -6,9 +6,9 @@ #include "generated_plugin_registrant.h" -#include #include #include +#include #include #include #include @@ -17,12 +17,12 @@ #include void RegisterPlugins(flutter::PluginRegistry* registry) { - FirebaseCorePluginCApiRegisterWithRegistrar( - registry->GetRegistrarForPlugin("FirebaseCorePluginCApi")); ProtocolHandlerPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("ProtocolHandlerPlugin")); ScreenRetrieverPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("ScreenRetrieverPlugin")); + SentryFlutterPluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("SentryFlutterPlugin")); SharePlusWindowsPluginCApiRegisterWithRegistrar( registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi")); Sqlite3FlutterLibsPluginRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 3e5c6592..0bd3c28a 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -3,9 +3,9 @@ # list(APPEND FLUTTER_PLUGIN_LIST - firebase_core protocol_handler screen_retriever + sentry_flutter share_plus sqlite3_flutter_libs tray_manager