diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n.dart b/.dart_tool/flutter_gen/gen_l10n/l10n.dart index a24f4c1f..73f428c3 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n.dart @@ -614,6 +614,12 @@ abstract class S { /// **'request failed, status code: {code}'** String httpFailedWithCode(Object code); + /// No description provided for @icloudSynced. + /// + /// In en, this message translates to: + /// **'iCloud wird synchronisiert und einige Einstellungen erfordern möglicherweise einen Neustart der App, um wirksam zu werden.'** + String get icloudSynced; + /// No description provided for @image. /// /// In en, this message translates to: diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_de.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_de.dart index a67a10be..02c750d3 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_de.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_de.dart @@ -278,6 +278,9 @@ class SDe extends S { return 'Anfrage fehlgeschlagen, Statuscode: $code'; } + @override + String get icloudSynced => 'iCloud wird synchronisiert und einige Einstellungen erfordern möglicherweise einen Neustart der App, um wirksam zu werden.'; + @override String get image => 'Image'; diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart index 1e10ed53..8acffddf 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart @@ -278,6 +278,9 @@ class SEn extends S { return 'request failed, status code: $code'; } + @override + String get icloudSynced => 'iCloud wird synchronisiert und einige Einstellungen erfordern möglicherweise einen Neustart der App, um wirksam zu werden.'; + @override String get image => 'Image'; diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_id.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_id.dart index ec03061c..aaed40f2 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_id.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_id.dart @@ -278,6 +278,9 @@ class SId extends S { return 'Permintaan gagal, kode status: $code'; } + @override + String get icloudSynced => 'iCloud disinkronkan dan beberapa pengaturan mungkin memerlukan pengaktifan ulang aplikasi agar dapat diterapkan.'; + @override String get image => 'Gambar'; diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart index 9d426386..9b4bd3ba 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart @@ -278,6 +278,9 @@ class SZh extends S { return '请求失败, 状态码: $code'; } + @override + String get icloudSynced => 'iCloud已同步,某些设置可能需要重启才能生效。'; + @override String get image => '镜像'; @@ -1013,6 +1016,9 @@ class SZhTw extends SZh { return '請求失敗, 狀態碼: $code'; } + @override + String get icloudSynced => 'iCloud已同步,某些設置可能需要重啟才能生效。'; + @override String get image => '鏡像'; diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 42c3c6bf..dc6424aa 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -6,6 +6,8 @@ PODS: - Flutter (1.0.0) - flutter_native_splash (0.0.1): - Flutter + - icloud_storage (0.0.1): + - Flutter - path_provider_foundation (0.0.1): - Flutter - FlutterMacOS @@ -26,6 +28,7 @@ DEPENDENCIES: - file_picker (from `.symlinks/plugins/file_picker/ios`) - Flutter (from `Flutter`) - flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`) + - icloud_storage (from `.symlinks/plugins/icloud_storage/ios`) - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - plain_notification_token (from `.symlinks/plugins/plain_notification_token/ios`) - r_upgrade (from `.symlinks/plugins/r_upgrade/ios`) @@ -42,6 +45,8 @@ EXTERNAL SOURCES: :path: Flutter flutter_native_splash: :path: ".symlinks/plugins/flutter_native_splash/ios" + icloud_storage: + :path: ".symlinks/plugins/icloud_storage/ios" path_provider_foundation: :path: ".symlinks/plugins/path_provider_foundation/darwin" plain_notification_token: @@ -60,6 +65,7 @@ SPEC CHECKSUMS: file_picker: 1d63c4949e05e386da864365f8c13e1e64787675 Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 flutter_native_splash: 52501b97d1c0a5f898d687f1646226c1f93c56ef + icloud_storage: d9ac7a33ced81df08ba7ea1bf3099cc0ee58f60a path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943 plain_notification_token: b36467dc91939a7b6754267c701bbaca14996ee1 r_upgrade: 44d715c61914cce3d01ea225abffe894fd51c114 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 6331a629..198ceef1 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -472,7 +472,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 539; + CURRENT_PROJECT_VERSION = 542; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -480,7 +480,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.539; + MARKETING_VERSION = 1.0.542; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -604,7 +604,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/RunnerDebug.entitlements; - CURRENT_PROJECT_VERSION = 539; + CURRENT_PROJECT_VERSION = 542; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -612,7 +612,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.539; + MARKETING_VERSION = 1.0.542; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -630,7 +630,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 539; + CURRENT_PROJECT_VERSION = 542; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -638,7 +638,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.539; + MARKETING_VERSION = 1.0.542; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -659,7 +659,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 539; + CURRENT_PROJECT_VERSION = 542; DEVELOPMENT_TEAM = BA88US33G6; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -672,7 +672,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.539; + MARKETING_VERSION = 1.0.542; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; @@ -698,7 +698,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 539; + CURRENT_PROJECT_VERSION = 542; DEVELOPMENT_TEAM = BA88US33G6; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -711,7 +711,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.539; + MARKETING_VERSION = 1.0.542; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -734,7 +734,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 539; + CURRENT_PROJECT_VERSION = 542; DEVELOPMENT_TEAM = BA88US33G6; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -747,7 +747,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.539; + MARKETING_VERSION = 1.0.542; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/ios/Runner/Runner.entitlements b/ios/Runner/Runner.entitlements index 28c29bf6..86d341a8 100644 --- a/ios/Runner/Runner.entitlements +++ b/ios/Runner/Runner.entitlements @@ -4,5 +4,17 @@ aps-environment production + com.apple.developer.icloud-container-identifiers + + iCloud.tech.lolli.serverbox + + com.apple.developer.icloud-services + + CloudDocuments + + com.apple.developer.ubiquity-container-identifiers + + iCloud.tech.lolli.serverbox + diff --git a/lib/core/utils/icloud.dart b/lib/core/utils/icloud.dart index 38133505..dae1799c 100644 --- a/lib/core/utils/icloud.dart +++ b/lib/core/utils/icloud.dart @@ -13,7 +13,7 @@ final _logger = Logger('iCloud'); class ICloud { static const _containerId = 'iCloud.tech.lolli.serverbox'; - const ICloud(); + const ICloud._(); /// Upload file to iCloud /// @@ -148,7 +148,6 @@ class ICloud { errs.add(err); } } - _logger.info('Errs: $errs'); return errs.isEmpty ? null : errs; } catch (e, s) { diff --git a/lib/core/utils/ui.dart b/lib/core/utils/ui.dart index 295cc96e..3a1eb5b3 100644 --- a/lib/core/utils/ui.dart +++ b/lib/core/utils/ui.dart @@ -43,11 +43,11 @@ void showSnackBarWithAction( )); } -void showRestartSnackbar(BuildContext context, S s) { +void showRestartSnackbar(BuildContext context, {String? btn, String? msg}) { showSnackBarWithAction( context, - '${s.success}\n${s.needRestart}', - s.restart, + msg ?? 'Need restart to take effect', + btn ?? 'Restart', () => rebuildAll(context), ); } diff --git a/lib/data/res/build_data.dart b/lib/data/res/build_data.dart index 9714f190..3a3dc328 100644 --- a/lib/data/res/build_data.dart +++ b/lib/data/res/build_data.dart @@ -2,9 +2,9 @@ class BuildData { static const String name = "ServerBox"; - static const int build = 539; + static const int build = 542; static const String engine = "3.13.2"; - static const String buildAt = "2023-09-08 20:40:50.892853"; - static const int modifications = 6; + static const String buildAt = "2023-09-11 22:08:36.399180"; + static const int modifications = 23; static const int script = 14; } diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index cdfceac9..a0929e8b 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -86,6 +86,7 @@ "homeWidgetUrlConfig": "Home-Widget-Link konfigurieren", "host": "Host", "httpFailedWithCode": "Anfrage fehlgeschlagen, Statuscode: {code}", + "icloudSynced": "iCloud wird synchronisiert und einige Einstellungen erfordern möglicherweise einen Neustart der App, um wirksam zu werden.", "image": "Image", "imagesList": "Images", "import": "Importieren", diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 17250386..6a6c3fb1 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -86,6 +86,7 @@ "homeWidgetUrlConfig": "Config home widget url", "host": "Host", "httpFailedWithCode": "request failed, status code: {code}", + "icloudSynced": "iCloud wird synchronisiert und einige Einstellungen erfordern möglicherweise einen Neustart der App, um wirksam zu werden.", "image": "Image", "imagesList": "Images list", "import": "Import", diff --git a/lib/l10n/app_id.arb b/lib/l10n/app_id.arb index e30e6a02..d5fe7a1c 100644 --- a/lib/l10n/app_id.arb +++ b/lib/l10n/app_id.arb @@ -86,6 +86,7 @@ "homeWidgetUrlConfig": "Konfigurasi URL Widget Rumah", "host": "Host", "httpFailedWithCode": "Permintaan gagal, kode status: {code}", + "icloudSynced": "iCloud disinkronkan dan beberapa pengaturan mungkin memerlukan pengaktifan ulang aplikasi agar dapat diterapkan.", "image": "Gambar", "imagesList": "Daftar gambar", "import": "Impor", diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index 36a6a4c6..23c9aceb 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -86,6 +86,7 @@ "homeWidgetUrlConfig": "桌面部件链接配置", "host": "主机", "httpFailedWithCode": "请求失败, 状态码: {code}", + "icloudSynced": "iCloud已同步,某些设置可能需要重启才能生效。", "image": "镜像", "imagesList": "镜像列表", "import": "导入", diff --git a/lib/l10n/app_zh_tw.arb b/lib/l10n/app_zh_tw.arb index 19ec2517..cfdc1b08 100644 --- a/lib/l10n/app_zh_tw.arb +++ b/lib/l10n/app_zh_tw.arb @@ -86,6 +86,7 @@ "homeWidgetUrlConfig": "桌面部件鏈接配置", "host": "主機", "httpFailedWithCode": "請求失敗, 狀態碼: {code}", + "icloudSynced": "iCloud已同步,某些設置可能需要重啟才能生效。", "image": "鏡像", "imagesList": "鏡像列表", "import": "導入", diff --git a/lib/main.dart b/lib/main.dart index 68c2f8d0..c565e56a 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -7,11 +7,10 @@ import 'package:logging/logging.dart'; import 'package:macos_window_utils/window_manipulator.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; -import 'package:toolbox/core/utils/icloud.dart'; -import 'package:toolbox/data/res/path.dart'; import 'app.dart'; import 'core/analysis.dart'; +import 'core/utils/icloud.dart'; import 'core/utils/platform.dart'; import 'core/utils/ui.dart'; import 'data/model/app/net_view.dart'; @@ -29,6 +28,7 @@ import 'data/provider/snippet.dart'; import 'data/provider/virtual_keyboard.dart'; import 'data/res/color.dart'; import 'data/res/misc.dart'; +import 'data/res/path.dart'; import 'data/store/setting.dart'; import 'locator.dart'; import 'view/widget/custom_appbar.dart'; @@ -96,9 +96,7 @@ Future initApp() async { loadFontFile(settings.fontPath.fetch()); primaryColor = Color(settings.primaryColor.fetch()); - if (isIOS || isMacOS) { - if (settings.icloudSync.fetch()) _syncApple(); - } + if (settings.icloudSync.fetch()) _syncApple(); if (isAndroid) { // Only start service when [bgRun] is true. @@ -152,11 +150,14 @@ Future _initMacOSWindow() async { await CustomAppBar.updateTitlebarHeight(); } -Future _syncApple() async { +// Don't call it via `await`, it will block the main thread. +void _syncApple() async { + if (!isIOS && !isMacOS) return; final docPath = await docDir; final dir = Directory(docPath); final files = await dir.list().toList(); + // filter out non-hive(db) files files.removeWhere((e) => !e.path.endsWith('.hive')); final paths = files.map((e) => e.path.replaceFirst('$docPath/', '')); - ICloud.sync(relativePaths: paths); + await ICloud.sync(relativePaths: paths); } diff --git a/lib/view/page/backup.dart b/lib/view/page/backup.dart index 8b179f68..de5a0b75 100644 --- a/lib/view/page/backup.dart +++ b/lib/view/page/backup.dart @@ -151,7 +151,7 @@ class BackupPage extends StatelessWidget { onPressed: () async { restore(backup); context.pop(); - showRestartSnackbar(context, s); + showRestartSnackbar(context, btn: s.restart, msg: s.needRestart); }, child: Text(s.ok), ), diff --git a/lib/view/page/setting/entry.dart b/lib/view/page/setting/entry.dart index fa4d4606..dd3ebd16 100644 --- a/lib/view/page/setting/entry.dart +++ b/lib/view/page/setting/entry.dart @@ -368,7 +368,7 @@ class _SettingPageState extends State { _setting.primaryColor.put(_selectedColorValue.value); primaryColor = color; context.pop(); - showRestartSnackbar(context, _s); + showRestartSnackbar(context, btn: _s.restart, msg: _s.needRestart); } // Widget _buildLaunchPage() { @@ -560,7 +560,11 @@ class _SettingPageState extends State { onPressed: () { _setting.fontPath.delete(); context.pop(); - showRestartSnackbar(context, _s); + showRestartSnackbar( + context, + btn: _s.restart, + msg: _s.needRestart, + ); }, child: Text(_s.clear), ) @@ -584,7 +588,7 @@ class _SettingPageState extends State { } context.pop(); - showRestartSnackbar(context, _s); + showRestartSnackbar(context, btn: _s.restart, msg: _s.needRestart); return; } showSnackBar(context, Text(_s.failed)); @@ -671,7 +675,7 @@ class _SettingPageState extends State { onSelected: (String idx) { _localeCode.value = idx; _setting.locale.put(idx); - showRestartSnackbar(context, _s); + showRestartSnackbar(context, btn: _s.restart, msg: _s.needRestart); }, child: Text( _s.languageName, @@ -762,7 +766,11 @@ class _SettingPageState extends State { trailing: buildSwitch( context, _setting.fullScreen, - func: (_) => showRestartSnackbar(context, _s), + func: (_) => showRestartSnackbar( + context, + btn: _s.restart, + msg: _s.needRestart, + ), ), ); } diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index 6eec5e99..565753be 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -476,9 +476,9 @@ baseConfigurationReference = C1C758C41C4E208965A68933 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 539; + CURRENT_PROJECT_VERSION = 542; GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0.539; + MARKETING_VERSION = 1.0.542; PRODUCT_BUNDLE_IDENTIFIER = tech.lolli.serverBox.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -491,9 +491,9 @@ baseConfigurationReference = 15AF97DF993E8968098D6EBE /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 539; + CURRENT_PROJECT_VERSION = 542; GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0.539; + MARKETING_VERSION = 1.0.542; PRODUCT_BUNDLE_IDENTIFIER = tech.lolli.serverBox.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -506,9 +506,9 @@ baseConfigurationReference = 7CFA7DE7FABA75685DFB6948 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 539; + CURRENT_PROJECT_VERSION = 542; GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0.539; + MARKETING_VERSION = 1.0.542; PRODUCT_BUNDLE_IDENTIFIER = tech.lolli.serverBox.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; diff --git a/macos/Runner/DebugProfile.entitlements b/macos/Runner/DebugProfile.entitlements index 08c3ab17..6ff1c43c 100644 --- a/macos/Runner/DebugProfile.entitlements +++ b/macos/Runner/DebugProfile.entitlements @@ -2,13 +2,25 @@ + com.apple.developer.icloud-container-identifiers + + iCloud.tech.lolli.serverbox + + com.apple.developer.icloud-services + + CloudDocuments + + com.apple.developer.ubiquity-container-identifiers + + iCloud.tech.lolli.serverbox + com.apple.security.app-sandbox com.apple.security.cs.allow-jit - com.apple.security.network.server - com.apple.security.network.client + com.apple.security.network.server + diff --git a/macos/Runner/Release.entitlements b/macos/Runner/Release.entitlements index ee95ab7e..d1f7ec7e 100644 --- a/macos/Runner/Release.entitlements +++ b/macos/Runner/Release.entitlements @@ -2,9 +2,23 @@ + com.apple.developer.icloud-container-identifiers + + iCloud.tech.lolli.serverbox + + com.apple.developer.icloud-services + + CloudDocuments + + com.apple.developer.ubiquity-container-identifiers + + iCloud.tech.lolli.serverbox + com.apple.security.app-sandbox com.apple.security.network.client + com.apple.security.network.server +