diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index cbcbc2de7..0a7a4df09 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -514,7 +514,7 @@ NEW_SETTING = ""; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; + TARGETED_DEVICE_FAMILY = 1; VALIDATE_PRODUCT = YES; }; name = Profile; @@ -539,8 +539,14 @@ MARKETING_VERSION = 1.0.1; PRODUCT_BUNDLE_IDENTIFIER = com.saitong.voitrans; PRODUCT_NAME = "$(TARGET_NAME)"; + REGISTER_APP_GROUPS = NO; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = YES; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = YES; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; }; name = Profile; @@ -572,6 +578,7 @@ BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = K39FB49XKY; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 18.0; MARKETING_VERSION = 1.0; @@ -589,6 +596,7 @@ BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = K39FB49XKY; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 18.0; MARKETING_VERSION = 1.0; @@ -654,7 +662,7 @@ NEW_SETTING = ""; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; + TARGETED_DEVICE_FAMILY = 1; }; name = Debug; }; @@ -709,7 +717,7 @@ SUPPORTED_PLATFORMS = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_OPTIMIZATION_LEVEL = "-O"; - TARGETED_DEVICE_FAMILY = "1,2"; + TARGETED_DEVICE_FAMILY = 1; VALIDATE_PRODUCT = YES; }; name = Release; @@ -734,9 +742,15 @@ MARKETING_VERSION = 1.0.1; PRODUCT_BUNDLE_IDENTIFIER = com.saitong.voitrans; PRODUCT_NAME = "$(TARGET_NAME)"; + REGISTER_APP_GROUPS = NO; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = YES; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = YES; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; }; name = Debug; @@ -761,8 +775,14 @@ MARKETING_VERSION = 1.0.1; PRODUCT_BUNDLE_IDENTIFIER = com.saitong.voitrans; PRODUCT_NAME = "$(TARGET_NAME)"; + REGISTER_APP_GROUPS = NO; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = YES; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = YES; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; }; name = Release; diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 3d78b7eda..f1195f0fc 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -57,12 +57,6 @@ FacebookClientToken 193d0a2b1757c41cfa557ea8e8f21c33 - - SKAdNetworkItems - - - NSAdvertisingAttributionReportEndpoint - LSApplicationQueriesSchemes weixin @@ -86,6 +80,8 @@ LSRequiresIPhoneOS + NSAdvertisingAttributionReportEndpoint + NSAppTransportSecurity NSAllowsArbitraryLoads @@ -94,23 +90,27 @@ NSBluetoothAlwaysUsageDescription - 需要蓝牙权限用于连接和管理音频设备 + Bluetooth permission is required to connect and manage audio devices NSBluetoothPeripheralUsageDescription - 需要蓝牙权限用于连接和管理音频设备 + Bluetooth permission is required to connect and manage audio devices NSCalendarsUsageDescription - 需要日历权限用于安排和管理您的音频会议和录音任务 + Calendar permission is required to schedule and manage your audio meetings and recording tasks NSCameraUsageDescription - 需要相机权限用于扫描二维码和视频通话功能 + Camera permission is required for QR code scanning and video calling functions NSLocationAlwaysAndWhenInUseUsageDescription - 语音助手需要位置权限来为您提供基于位置的信息和服务 + Location access enables the app to provide location-based voice translation services, such as translating local place names and providing contextual information relevant to your current location during conversations. NSLocationWhenInUseUsageDescription - 语音助手需要位置权限来为您提供基于位置的信息和服务 + Location access enables the app to provide location-based voice translation services, such as translating local place names and providing contextual information relevant to your current location during conversations. NSMicrophoneUsageDescription - 需要麦克风权限用于语音识别和录音功能 + Our app's voice AI interaction features (such as voice wake-up for AI, issuing commands, and real-time conversations) require microphone access. With this permission, you can interact with AI directly through speech, improving operational efficiency. We strictly protect your voice data—only used for real-time processing of interaction requests, and raw audio will not be stored. NSMotionUsageDescription - 我们需要访问您的运动数据以提供更精准的导航服务 + This app uses motion and fitness data to detect when you're walking or moving, which helps optimize voice recognition accuracy and automatically adjust microphone sensitivity for better audio recording quality during different activities. NSPhotoLibraryUsageDescription - 需要相册权限用于保存录音文件和导入音频文件 + Photo library permission is required to save recording files and import audio files + NSUserTrackingUsageDescription + This identifier will be used to deliver personalized ads to you. + SKAdNetworkItems + UIApplicationSupportsIndirectInputEvents UIBackgroundModes @@ -119,22 +119,20 @@ audio location + UIDeviceFamily + + 1 + UILaunchStoryboardName LaunchScreen UIMainStoryboardFile Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - UISupportedInterfaceOrientations~ipad - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight UIViewControllerBasedStatusBarAppearance diff --git a/ios/Runner/Runner.entitlements b/ios/Runner/Runner.entitlements index ed86a9636..f05d7901a 100644 --- a/ios/Runner/Runner.entitlements +++ b/ios/Runner/Runner.entitlements @@ -2,6 +2,10 @@ + com.apple.developer.applesignin + + Default + com.apple.developer.associated-domains applinks:voitrans.net @@ -10,9 +14,21 @@ com.apple.external-accessory.wireless-configuration - com.apple.developer.applesignin - - Default - + com.apple.security.app-sandbox + + com.apple.security.device.audio-input + + com.apple.security.device.bluetooth + + com.apple.security.device.camera + + com.apple.security.network.client + + com.apple.security.personal-information.calendars + + com.apple.security.personal-information.location + + com.apple.security.personal-information.photos-library + diff --git a/lib/core/translations/language/en_us.dart b/lib/core/translations/language/en_us.dart index bf95c258d..f529e2a7a 100644 --- a/lib/core/translations/language/en_us.dart +++ b/lib/core/translations/language/en_us.dart @@ -742,7 +742,7 @@ const Map enUS = { // 配对模块 // 配对页面 "devicePairing": "Device Pairing", - "connectYourDeepSoundHeadset": "Connect Your DeepSound Headset", + "connectYourDeepSoundHeadset": "Connect Your Voitrans Headset", "bind": "Bind", "authorizeBind": "Authorize Binding", "enterCode": "Please enter code", diff --git a/lib/core/translations/language/ru_ru.dart b/lib/core/translations/language/ru_ru.dart index eb613e7ae..c96599c05 100644 --- a/lib/core/translations/language/ru_ru.dart +++ b/lib/core/translations/language/ru_ru.dart @@ -702,7 +702,7 @@ const Map ruRU = { // 配对模块 // 配对页面 (pairing_view.dart & pairing_view_new.dart) "devicePairing": "Сопряжение устройства", - "connectYourDeepSoundHeadset": "Подключите ваши наушники DeepSound", + "connectYourDeepSoundHeadset": "Подключите ваши наушники Voitrans", "bind": "Привязать", "authorizeBind": "Авторизовать привязку", "enterCode": "Пожалуйста, введите код", diff --git a/lib/core/translations/language/th_th.dart b/lib/core/translations/language/th_th.dart index e6604304c..f037318e9 100644 --- a/lib/core/translations/language/th_th.dart +++ b/lib/core/translations/language/th_th.dart @@ -736,7 +736,7 @@ const Map thTH = { 'retryAuthorization': 'ลองอนุญาตอีกครั้ง', 'pleaseGrantNecessaryPermissions': 'กรุณาให้สิทธิ์ที่จำเป็น', 'checkFailedRetry': 'การตรวจสอบล้มเหลว โปรดลองอีกครั้ง', - 'pleaseConnectDeepSoundDevice': 'กรุณาเชื่อมต่ออุปกรณ์ DeepSound', + 'pleaseConnectDeepSoundDevice': 'กรุณาเชื่อมต่ออุปกรณ์ Voitrans', 'verificationFailedRetry': 'การตรวจสอบล้มเหลว โปรดลองอีกครั้ง', 'invalidDeviceAddress': 'ที่อยู่อุปกรณ์ไม่ถูกต้อง', 'bleDeviceAssociationFailed': 'การเชื่อมโยงอุปกรณ์ BLE ล้มเหลว', diff --git a/lib/core/translations/language/tr_tr.dart b/lib/core/translations/language/tr_tr.dart index 44ba8ec2c..b2d537d51 100644 --- a/lib/core/translations/language/tr_tr.dart +++ b/lib/core/translations/language/tr_tr.dart @@ -695,7 +695,7 @@ const Map trTR = { // 配对模块 // 配对页面 (pairing_view.dart & pairing_view_new.dart) "devicePairing": "Cihaz Eşleştirme", - "connectYourDeepSoundHeadset": "DeepSound Kulaklığınızı Bağlayın", + "connectYourDeepSoundHeadset": "Voitrans Kulaklığınızı Bağlayın", "bind": "Bağla", "authorizeBind": "Bağlamayı Yetkilendir", "enterCode": "Lütfen kodu girin", diff --git a/lib/core/translations/language/uk_ua.dart b/lib/core/translations/language/uk_ua.dart index 65e2ac2fd..95ea53215 100644 --- a/lib/core/translations/language/uk_ua.dart +++ b/lib/core/translations/language/uk_ua.dart @@ -702,7 +702,7 @@ const Map ukUA = { // 配对模块 // 配对页面 (pairing_view.dart & pairing_view_new.dart) "devicePairing": "Спарювання пристрою", - "connectYourDeepSoundHeadset": "Підключіть ваші навушники DeepSound", + "connectYourDeepSoundHeadset": "Підключіть ваші навушники Voitrans", "bind": "Прив'язати", "authorizeBind": "Авторизувати прив'язку", "enterCode": "Будь ласка, введіть код", @@ -757,7 +757,7 @@ const Map ukUA = { 'retryAuthorization': 'Повторити авторизацію', 'pleaseGrantNecessaryPermissions': 'Будь ласка, надайте необхідні дозволи', 'checkFailedRetry': 'Перевірка не вдалася, спробуйте ще раз', - 'pleaseConnectDeepSoundDevice': 'Будь ласка, підключіть пристрій DeepSound', + 'pleaseConnectDeepSoundDevice': 'Будь ласка, підключіть пристрій Voitrans', 'verificationFailedRetry': 'Перевірка не вдалася, спробуйте ще раз', 'invalidDeviceAddress': 'Недійсна адреса пристрою', 'bleDeviceAssociationFailed': 'Не вдалося асоціювати пристрій BLE', diff --git a/lib/core/translations/language/zh_cn.dart b/lib/core/translations/language/zh_cn.dart index da9628b86..52a3cc093 100644 --- a/lib/core/translations/language/zh_cn.dart +++ b/lib/core/translations/language/zh_cn.dart @@ -684,7 +684,7 @@ const Map zhCN = { // 配对模块 // 配对页面 (pairing_view.dart & pairing_view_new.dart) "devicePairing": "设备配对", - "connectYourDeepSoundHeadset": "连接您的 DeepSound 耳机", + "connectYourDeepSoundHeadset": "连接您的 Voitrans 耳机", "bind": "绑定", "authorizeBind": "授权绑定", "enterCode": "请输入代码", @@ -736,7 +736,7 @@ const Map zhCN = { 'retryAuthorization': '重新授权', 'pleaseGrantNecessaryPermissions': '请授予必要权限', 'checkFailedRetry': '检查失败,请重试', - 'pleaseConnectDeepSoundDevice': '请连接 DeepSound 设备', + 'pleaseConnectDeepSoundDevice': '请连接 Voitrans 设备', 'verificationFailedRetry': '验证失败,请重试', 'invalidDeviceAddress': '设备地址无效', 'bleDeviceAssociationFailed': 'BLE设备关联失败', diff --git a/lib/core/translations/language/zh_hk.dart b/lib/core/translations/language/zh_hk.dart index af7a90433..aa83a2427 100644 --- a/lib/core/translations/language/zh_hk.dart +++ b/lib/core/translations/language/zh_hk.dart @@ -648,7 +648,7 @@ const Map zhHK = { // 配對模塊 // 配對頁面 (pairing_view.dart & pairing_view_new.dart) "devicePairing": "設備配對", - "connectYourDeepSoundHeadset": "連接您的 DeepSound 耳機", + "connectYourDeepSoundHeadset": "連接您的 Voitrans 耳機", "bind": "綁定", "authorizeBind": "授權綁定", "enterCode": "請輸入代碼", @@ -695,7 +695,7 @@ const Map zhHK = { 'retryAuthorization': '重新授權', 'pleaseGrantNecessaryPermissions': '請授予必要權限', 'checkFailedRetry': '檢查失敗,請重試', - 'pleaseConnectDeepSoundDevice': '請連接 DeepSound 設備', + 'pleaseConnectDeepSoundDevice': '請連接 Voitrans 設備', 'verificationFailedRetry': '驗證失敗,請重試', 'invalidDeviceAddress': '設備地址無效', 'bleDeviceAssociationFailed': 'BLE設備關聯失敗', diff --git a/lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart b/lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart index 896e5bcf8..55086266f 100644 --- a/lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart +++ b/lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart @@ -103,7 +103,7 @@ class _ShareBottomSheetState extends State { final result = await SharePlus.instance.share(ShareParams( title: _controller.meetingData.value.title, subject: - 'DeepSound WEB,由DeepSound.Ai提供支持-实时记录会议纪要,多语言翻译。', + 'Voitrans WEB,由DeepSound.Ai提供支持-实时记录会议纪要,多语言翻译。', uri: Uri.parse( 'http://web.ideapsound.com/share/$id/$token', ), @@ -281,7 +281,8 @@ class _ShareBottomSheetState extends State { title, style: TextStyle( fontSize: 14.sp, - color: Colors.black87.withValues(alpha: onTap != null ? 1 : 0.5), + color: + Colors.black87.withValues(alpha: onTap != null ? 1 : 0.5), ), ), ), diff --git a/lib/modules/pairing/controllers/pairing_controller.dart b/lib/modules/pairing/controllers/pairing_controller.dart index a68b4b62b..d267211f3 100644 --- a/lib/modules/pairing/controllers/pairing_controller.dart +++ b/lib/modules/pairing/controllers/pairing_controller.dart @@ -181,7 +181,8 @@ class PairingController extends GetxController { /// 处理蓝牙开关状态变化 void _handleBluetoothStateChange(String state) { if (state == 'off') { - _setError(ErrorType.bluetoothOff, 'pleaseEnableBluetooth'.tr); + _setError( + ErrorType.bluetoothOff, 'connectDeepSoundViaSystemBluetooth'.tr); } else if (state == 'on' && _errorType.value == ErrorType.bluetoothOff) { // 蓝牙重新开启,恢复流程 Logger.i(_tag, '检测到蓝牙已开启,自动恢复配对流程'); @@ -336,7 +337,7 @@ class PairingController extends GetxController { switch (_errorType.value) { case ErrorType.bluetoothOff: showConnectButton.value = true; - connectButtonText.value = 'enableBluetooth'.tr; //开启蓝牙 + connectButtonText.value = 'goToBluetoothSettings'.tr; //开启蓝牙 break; case ErrorType.noClassicDevice: showConnectButton.value = true; @@ -400,7 +401,8 @@ class PairingController extends GetxController { final arePermissionsOk = results[1] as bool; if (!isBluetoothOk) { - _setError(ErrorType.bluetoothOff, 'pleaseEnableBluetooth'.tr); + _setError( + ErrorType.bluetoothOff, 'connectDeepSoundViaSystemBluetooth'.tr); return; } diff --git a/lib/modules/pairing/views/pairing_view.dart b/lib/modules/pairing/views/pairing_view.dart index f4c90113c..1151eeecf 100644 --- a/lib/modules/pairing/views/pairing_view.dart +++ b/lib/modules/pairing/views/pairing_view.dart @@ -481,7 +481,7 @@ class _PairingViewState extends State final errorType = controller.errorType; switch (errorType) { case ErrorType.bluetoothOff: - return 'bluetoothTurnedOff'.tr; // 蓝牙已关闭,请打开蓝牙 + return 'connectDeepSoundViaSystemBluetooth'.tr; // 蓝牙已关闭,请打开蓝牙 case ErrorType.noPermission: return 'lackPermissions'.tr; // 缺少蓝牙权限 case ErrorType.noClassicDevice: diff --git a/lib/modules/splash/controllers/splash_controller.dart b/lib/modules/splash/controllers/splash_controller.dart index ef031b871..ce47bff7e 100644 --- a/lib/modules/splash/controllers/splash_controller.dart +++ b/lib/modules/splash/controllers/splash_controller.dart @@ -1,5 +1,7 @@ import 'dart:async'; import 'dart:io'; +import 'package:app_tracking_transparency/app_tracking_transparency.dart'; + import '../../../data/models/appconfig.dart'; import '../../../data/models/appconfig_model.dart'; import 'package:flutter/material.dart'; @@ -47,6 +49,12 @@ class SplashController extends GetxController { _startNormalFlow(); } }); + + //弹出用户追中问题 + WidgetsFlutterBinding.ensureInitialized().addPostFrameCallback((_) async { + final status = + await AppTrackingTransparency.requestTrackingAuthorization(); + }); } void _startNormalFlow() { diff --git a/local_plugins/amap_service/ios/Classes/AmapService.swift b/local_plugins/amap_service/ios/Classes/AmapService.swift index c962cc002..def1aa308 100644 --- a/local_plugins/amap_service/ios/Classes/AmapService.swift +++ b/local_plugins/amap_service/ios/Classes/AmapService.swift @@ -24,7 +24,7 @@ public class AmapService: NSObject, AMapNaviDriveManagerDelegate { // 设置高德地图服务 // 1. 设置隐私合规 AMapServices.shared()?.enableHTTPS = true - AMapServices.shared()?.apiKey = "0b704e172b7ade5a7a18728e8f517a05" + AMapServices.shared()?.apiKey = "6144a636c24dc9f2e1e57f7597849cf7" } public func startNavigation(from start: String, to end: String) { diff --git a/local_plugins/amap_service/ios/Classes/AmapServicePlugin.swift b/local_plugins/amap_service/ios/Classes/AmapServicePlugin.swift index 4be2e55a8..d23e467cb 100644 --- a/local_plugins/amap_service/ios/Classes/AmapServicePlugin.swift +++ b/local_plugins/amap_service/ios/Classes/AmapServicePlugin.swift @@ -22,7 +22,7 @@ public class AmapServicePlugin: NSObject, FlutterPlugin, FlutterStreamHandler { // 高德SDK初始化 DispatchQueue.main.async { - AMapServices.shared()?.apiKey = "0b704e172b7ade5a7a18728e8f517a05" + AMapServices.shared()?.apiKey = "6144a636c24dc9f2e1e57f7597849cf7" AMapServices.shared()?.enableHTTPS = true if #available(iOS 13.0, *) { diff --git a/local_plugins/spotify_sdk/ios/spotify_sdk.podspec b/local_plugins/spotify_sdk/ios/spotify_sdk.podspec index dbb91fa4b..8f96b27c5 100644 --- a/local_plugins/spotify_sdk/ios/spotify_sdk.podspec +++ b/local_plugins/spotify_sdk/ios/spotify_sdk.podspec @@ -20,7 +20,7 @@ Unofficial Spotify Flutter SDK. # Flutter.framework does not contain a i386 slice. Only x86_64 simulators are supported. s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS[sdk=iphonesimulator*]' => 'x86_64' } s.swift_version = '5.0' - s.prepare_command = './prepare-iOS-SDK.sh' + # s.prepare_command = './prepare-iOS-SDK.sh' s.vendored_frameworks = 'ios-sdk/SpotifyiOS.xcframework' s.preserve_paths = 'ios-sdk/SpotifyiOS.xcframework' end diff --git a/pubspec.yaml b/pubspec.yaml index e9dc6dabe..17c616de7 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -69,6 +69,7 @@ dependencies: flutter_image_compress: ^2.4.0 common_utils: ^2.1.0 image_gallery_saver_plus: ^4.0.1 + app_tracking_transparency: ^2.0.1 dio: ^5.8.0+1 sqflite: ^2.4.2 path: ^1.9.1