From 1ea8438a5d6fbd64311e39cfd82a45548e107562 Mon Sep 17 00:00:00 2001 From: Ian VanSchooten Date: Fri, 25 Oct 2024 08:53:07 -0400 Subject: [PATCH] Add Sentry for error tracking (#189) --- .github/workflows/release.yml | 6 ++++++ ios/Podfile.lock | 11 +++++++++++ ios/Runner.xcodeproj/project.pbxproj | 4 ++++ lib/main.dart | 22 +++++++++++++++++----- pubspec.lock | 16 ++++++++++++++++ pubspec.yaml | 1 + 6 files changed, 55 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3d66aa4..12808a5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -169,3 +169,9 @@ jobs: asset_name: MobileNebula.ipa asset_content_type: text/plain + - name: Create Sentry release + uses: getsentry/action-release@v1 + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + SENTRY_ORG: ${{ secrets.SENTRY_ORG }} + SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 673d6ae..6cfdee6 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -60,6 +60,11 @@ PODS: - Flutter - FlutterMacOS - PromisesObjC (2.4.0) + - Sentry/HybridSDK (8.36.0) + - sentry_flutter (8.9.0): + - Flutter + - FlutterMacOS + - Sentry/HybridSDK (= 8.36.0) - share_plus (0.0.1): - Flutter - SwiftyJSON (5.0.2) @@ -72,6 +77,7 @@ DEPENDENCIES: - mobile_scanner (from `.symlinks/plugins/mobile_scanner/ios`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) + - sentry_flutter (from `.symlinks/plugins/sentry_flutter/ios`) - share_plus (from `.symlinks/plugins/share_plus/ios`) - SwiftyJSON (~> 5.0) - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) @@ -90,6 +96,7 @@ SPEC REPOS: - MLKitVision - nanopb - PromisesObjC + - Sentry - SwiftyJSON EXTERNAL SOURCES: @@ -103,6 +110,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/package_info_plus/ios" path_provider_foundation: :path: ".symlinks/plugins/path_provider_foundation/darwin" + sentry_flutter: + :path: ".symlinks/plugins/sentry_flutter/ios" share_plus: :path: ".symlinks/plugins/share_plus/ios" url_launcher_ios: @@ -126,6 +135,8 @@ SPEC CHECKSUMS: package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 + Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57 + sentry_flutter: 0eb93e5279eb41e2392212afe1ccd2fecb4f8cbe share_plus: 8875f4f2500512ea181eef553c3e27dba5135aad SwiftyJSON: f5b1bf1cd8dd53cd25887ac0eabcfd92301c6a5a url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 3e15957..39fbbd9 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -356,11 +356,13 @@ "${BUILT_PRODUCTS_DIR}/GoogleToolboxForMac/GoogleToolboxForMac.framework", "${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework", "${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework", + "${BUILT_PRODUCTS_DIR}/Sentry/Sentry.framework", "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework", "${BUILT_PRODUCTS_DIR}/file_picker/file_picker.framework", "${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework", "${BUILT_PRODUCTS_DIR}/package_info_plus/package_info_plus.framework", "${BUILT_PRODUCTS_DIR}/path_provider_foundation/path_provider_foundation.framework", + "${BUILT_PRODUCTS_DIR}/sentry_flutter/sentry_flutter.framework", "${BUILT_PRODUCTS_DIR}/share_plus/share_plus.framework", "${BUILT_PRODUCTS_DIR}/url_launcher_ios/url_launcher_ios.framework", ); @@ -371,11 +373,13 @@ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleToolboxForMac.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sentry.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyJSON.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/file_picker.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/package_info_plus.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider_foundation.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sentry_flutter.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/share_plus.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/url_launcher_ios.framework", ); diff --git a/lib/main.dart b/lib/main.dart index 9cb6745..b75685e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -11,14 +11,26 @@ import 'package:mobile_nebula/screens/MainScreen.dart'; import 'package:mobile_nebula/screens/EnrollmentScreen.dart'; import 'package:mobile_nebula/services/settings.dart'; import 'package:flutter_web_plugins/url_strategy.dart'; +import 'package:sentry_flutter/sentry_flutter.dart'; + +Future main() async { + usePathUrlStrategy(); + await SentryFlutter.init( + (options) { + options.dsn = 'https://96106df405ade3f013187dfc8e4200e7@o920269.ingest.us.sentry.io/4508132321001472'; + // Capture all traces. May need to adjust if overwhelming + options.tracesSampleRate = 1.0; + // For each trace, capture all profiles + options.profilesSampleRate = 1.0; + }, + appRunner: () => runApp(Main()), + ); + + // or define SENTRY_DSN via Dart environment variable (--dart-define) +} //TODO: EventChannel might be better than the stream controller we are using now -void main() { - usePathUrlStrategy(); - runApp(Main()); -} - class Main extends StatelessWidget { // This widget is the root of your application. @override diff --git a/pubspec.lock b/pubspec.lock index 606c9c8..d44d097 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -352,6 +352,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.0" + sentry: + dependency: transitive + description: + name: sentry + sha256: "033287044a6644a93498969449d57c37907e56f5cedb17b88a3ff20a882261dd" + url: "https://pub.dev" + source: hosted + version: "8.9.0" + sentry_flutter: + dependency: "direct main" + description: + name: sentry_flutter + sha256: "3780b5a0bb6afd476857cfbc6c7444d969c29a4d9bd1aa5b6960aa76c65b737a" + url: "https://pub.dev" + source: hosted + version: "8.9.0" share_plus: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 3513187..50d21bf 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -33,6 +33,7 @@ dependencies: flutter_svg: ^2.0.10+1 intl: ^0.19.0 share_plus: ^10.0.2 + sentry_flutter: ^8.9.0 mobile_scanner: ^5.2.2 dev_dependencies: