TF-4269 Integrate Sentry into iOS NSE and automate dSYM upload in CI
This commit is contained in:
+5
-1
@@ -234,6 +234,7 @@ import 'package:tmail_ui_user/main/universal_import/html_stub.dart' as html;
|
||||
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
||||
import 'package:tmail_ui_user/main/utils/email_receive_manager.dart';
|
||||
import 'package:tmail_ui_user/main/utils/ios_notification_manager.dart';
|
||||
import 'package:tmail_ui_user/main/utils/ios_sharing_manager.dart';
|
||||
import 'package:tmail_ui_user/main/utils/toast_manager.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
@@ -406,7 +407,10 @@ class MailboxDashBoardController extends ReloadableController
|
||||
@override
|
||||
void onInit() {
|
||||
if (PlatformInfo.isMobile) {
|
||||
_sentryEcosystem = SentryEcosystem(getBinding<SentryConfigurationCacheManager>());
|
||||
_sentryEcosystem = SentryEcosystem(
|
||||
getBinding<SentryConfigurationCacheManager>(),
|
||||
getBinding<IOSSharingManager>(),
|
||||
);
|
||||
_registerReceivingFileSharingStream();
|
||||
_registerDeepLinks();
|
||||
}
|
||||
|
||||
@@ -1,18 +1,21 @@
|
||||
import 'package:core/presentation/extensions/string_extension.dart';
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:core/utils/platform_info.dart';
|
||||
import 'package:core/utils/sentry/sentry_config.dart';
|
||||
import 'package:core/utils/sentry/sentry_manager.dart';
|
||||
import 'package:sentry_flutter/sentry_flutter.dart';
|
||||
import 'package:tmail_ui_user/features/caching/extensions/sentry_cache_extensions.dart';
|
||||
import 'package:tmail_ui_user/features/caching/manager/sentry_configuration_cache_manager.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/linagora_ecosystem/sentry_config_linagora_ecosystem.dart';
|
||||
import 'package:tmail_ui_user/main/utils/ios_sharing_manager.dart';
|
||||
|
||||
class SentryEcosystem {
|
||||
final SentryConfigurationCacheManager? _cacheManager;
|
||||
final IOSSharingManager? _iosSharingManager;
|
||||
|
||||
SentryUser? _sentryUser;
|
||||
|
||||
SentryEcosystem(this._cacheManager);
|
||||
SentryEcosystem(this._cacheManager, this._iosSharingManager);
|
||||
|
||||
void initUser(SentryUser? user) {
|
||||
_sentryUser = user;
|
||||
@@ -40,6 +43,10 @@ class SentryEcosystem {
|
||||
_applyUser();
|
||||
|
||||
await _cacheData(sentryConfig, _sentryUser);
|
||||
|
||||
if (PlatformInfo.isIOS) {
|
||||
await _saveSentryConfigToKeychain(sentryConfig);
|
||||
}
|
||||
}
|
||||
|
||||
void _applyUser() {
|
||||
@@ -64,4 +71,8 @@ class SentryEcosystem {
|
||||
await _cacheManager!.clearSentryConfiguration().catchError((_) {});
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _saveSentryConfigToKeychain(SentryConfig sentryConfig) async {
|
||||
await _iosSharingManager?.saveSentryConfigToKeychain(sentryConfig);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:core/utils/sentry/sentry_config.dart';
|
||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:model/extensions/account_id_extensions.dart';
|
||||
@@ -11,11 +12,16 @@ class KeychainSharingManager {
|
||||
|
||||
KeychainSharingManager(this._secureStorage);
|
||||
|
||||
Future<void> save(KeychainSharingSession keychainSharingSession) => _secureStorage.write(
|
||||
Future<void> saveSharingSession(KeychainSharingSession keychainSharingSession) => _secureStorage.write(
|
||||
key: keychainSharingSession.accountId.asString,
|
||||
value: jsonEncode(keychainSharingSession.toJson()),
|
||||
);
|
||||
|
||||
Future<void> saveSentryConfig(SentryConfig sentryConfig) => _secureStorage.write(
|
||||
key: SentryConfig.sentryConfigKeyChain,
|
||||
value: jsonEncode(sentryConfig.toJson()),
|
||||
);
|
||||
|
||||
Future<bool> isSessionExist(AccountId accountId) =>
|
||||
_secureStorage.containsKey(key: accountId.asString);
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:core/utils/sentry/sentry_config.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
@@ -103,7 +104,7 @@ class IOSSharingManager {
|
||||
isTWP: tokenRecords?.isTWP ?? false,
|
||||
);
|
||||
|
||||
await _keychainSharingManager.save(keychainSharingSession);
|
||||
await _keychainSharingManager.saveSharingSession(keychainSharingSession);
|
||||
|
||||
log('IOSSharingManager::_saveKeyChainSharingSession: COMPLETED');
|
||||
} catch (e) {
|
||||
@@ -194,7 +195,7 @@ class IOSSharingManager {
|
||||
return;
|
||||
}
|
||||
final newKeychain = keychainSharingStored.updating(emailState: newEmailState);
|
||||
await _keychainSharingManager.save(newKeychain);
|
||||
await _keychainSharingManager.saveSharingSession(newKeychain);
|
||||
}
|
||||
|
||||
Future<bool> isExistMailboxIdsBlockNotificationInKeyChain(AccountId accountId) async {
|
||||
@@ -217,7 +218,7 @@ class IOSSharingManager {
|
||||
return;
|
||||
}
|
||||
final newKeychain = keychainSharingStored.updating(mailboxIdsBlockNotification: mailboxIds);
|
||||
await _keychainSharingManager.save(newKeychain);
|
||||
await _keychainSharingManager.saveSharingSession(newKeychain);
|
||||
} catch (e) {
|
||||
logWarning('IOSSharingManager::updateMailboxIdsBlockNotificationInKeyChain: Exception = $e');
|
||||
}
|
||||
@@ -240,4 +241,14 @@ class IOSSharingManager {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> saveSentryConfigToKeychain(SentryConfig sentryConfig) async {
|
||||
log('IOSSharingManager::saveSentryConfigToKeychain: START');
|
||||
try {
|
||||
await _keychainSharingManager.saveSentryConfig(sentryConfig);
|
||||
log('IOSSharingManager::saveSentryConfigToKeychain: COMPLETED');
|
||||
} catch (e) {
|
||||
logWarning('IOSSharingManager::saveSentryConfigToKeychain: Exception: $e');
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user