Browse Source

编译iOS 的修复

newdev_shunjiawei
liwei1dao 5 months ago
parent
commit
0ebb8a9daa
  1. 25
      ios/Podfile
  2. 2
      lib/data/models/appconfig.dart
  3. 13
      lib/data/services/ble_manager.dart
  4. 1
      lib/modules/pairing/controllers/pairing_controller.dart
  5. 8
      local_plugins/chat_api/ios/chat_api/Package.swift
  6. 2
      pubspec.yaml

25
ios/Podfile

@ -40,6 +40,31 @@ target 'Runner' do
end end
post_install do |installer| post_install do |installer|
# ---- Auto patch: bridge symlink for swift_sdk_local ----
# local_plugins/chat_api/ios/chat_api/Package.swift 用 path 引用
# `../../../swift_sdk_local`。Flutter 会把 chat_api 软链进
# ios/Flutter/ephemeral/Packages/.packages/chat_api,SwiftPM 解析这条相对路径时
# 用的是软链路径,会去 ios/Flutter/ephemeral/swift_sdk_local 找包。
# 这里建一条桥接软链让它能找到 local_plugins/swift_sdk_local。
ephemeral_dir = File.expand_path('Flutter/ephemeral', __dir__)
if Dir.exist?(ephemeral_dir)
bridge_link = File.join(ephemeral_dir, 'swift_sdk_local')
bridge_target = '../../../local_plugins/swift_sdk_local'
# 已存在且指向正确就跳过;否则重建
needs_create = true
if File.symlink?(bridge_link)
current = File.readlink(bridge_link)
needs_create = (current != bridge_target)
File.delete(bridge_link) if needs_create
elsif File.exist?(bridge_link)
raise "[Podfile patch] #{bridge_link} 已存在但不是软链,无法替换;请手动处理"
end
if needs_create
File.symlink(bridge_target, bridge_link)
puts "[Podfile patch] Created swift_sdk_local bridge symlink: #{bridge_link} -> #{bridge_target}"
end
end
# ---- Auto patch: bump FlutterGeneratedPluginSwiftPackage iOS platform ---- # ---- Auto patch: bump FlutterGeneratedPluginSwiftPackage iOS platform ----
# Flutter 生成的中介包总是写死 .iOS("12.0"),与 Podfile 中的 # Flutter 生成的中介包总是写死 .iOS("12.0"),与 Podfile 中的
# platform :ios, '16.0' 不一致,会报 # platform :ios, '16.0' 不一致,会报

2
lib/data/models/appconfig.dart

@ -7,7 +7,7 @@ class AppConfig {
// true => 首页/发现页切换为精简布局,新手引导跳过 AI 引导步骤 // true => 首页/发现页切换为精简布局,新手引导跳过 AI 引导步骤
// false => 保持原有布局 // false => 保持原有布局
// TODO: 后续接入 BLE PID 判断逻辑,B017 设备连接时自动置 true // TODO: 后续接入 BLE PID 判断逻辑,B017 设备连接时自动置 true
static bool hideAiAssistant = false; static bool hideAiAssistant = true;
static late UserGetAppConfigResp config; static late UserGetAppConfigResp config;

13
lib/data/services/ble_manager.dart

@ -1000,6 +1000,19 @@ class BleManager extends GetxService {
final stsProductKey = _storage.read<String>('sts_product_key') ?? ''; final stsProductKey = _storage.read<String>('sts_product_key') ?? '';
// 使用当前连接设备的 SN(配对时写入),认证失败由原生层上报 credential_failed 事件 // 使用当前连接设备的 SN(配对时写入),认证失败由原生层上报 credential_failed 事件
final stsDeviceNo = _storage.read<String>('device_sts_code') ?? ''; final stsDeviceNo = _storage.read<String>('device_sts_code') ?? '';
// 启动前自检:若上次认证下发的 deviceNo 与当前设备 SN 不一致,
// 说明用户换了设备(或在多台已绑设备间切换),清掉旧凭据强制重新认证。
// 仅在 STS 模式且两端都有值时做比对,避免误清。
if (agentMode == 'sts' && stsDeviceNo.isNotEmpty) {
final lastAuthNo = _storage.read<String>('sts_device_no') ?? '';
if (lastAuthNo.isNotEmpty && lastAuthNo != stsDeviceNo) {
_storage.remove('sts_device_id');
_storage.remove('sts_device_secret');
_storage.remove('sts_device_no');
Logger.i('BleManager',
'STS 设备 SN 变更($lastAuthNo → $stsDeviceNo),已清除旧凭据,强制重新认证');
}
}
final stsDeviceId = _storage.read<String>('sts_device_id') ?? ''; final stsDeviceId = _storage.read<String>('sts_device_id') ?? '';
final stsDeviceSecret = _storage.read<String>('sts_device_secret') ?? ''; final stsDeviceSecret = _storage.read<String>('sts_device_secret') ?? '';
// 从 UserDevice 获取当前连接设备的 CMEI // 从 UserDevice 获取当前连接设备的 CMEI

1
lib/modules/pairing/controllers/pairing_controller.dart

@ -1312,6 +1312,7 @@ class PairingController extends GetxController with WidgetsBindingObserver {
_storage.remove('device_sts_code'); _storage.remove('device_sts_code');
_storage.remove('sts_device_id'); _storage.remove('sts_device_id');
_storage.remove('sts_device_secret'); _storage.remove('sts_device_secret');
_storage.remove('sts_device_no');
_storage.remove('sts_product_id'); _storage.remove('sts_product_id');
_storage.remove('sts_product_key'); _storage.remove('sts_product_key');
_storage.remove('sts_tui'); _storage.remove('sts_tui');

8
local_plugins/chat_api/ios/chat_api/Package.swift

@ -17,12 +17,18 @@ let package = Package(
// 改用本地副本:上游 swift-sdk 0.9.0 的 Package.swift 声明 swift-tools-version:6.0 // 改用本地副本:上游 swift-sdk 0.9.0 的 Package.swift 声明 swift-tools-version:6.0
// 会在 Xcode 16 上把 sending 警告升级为错误;且上游 0.10+ 已修改 Tool.Content // 会在 Xcode 16 上把 sending 警告升级为错误;且上游 0.10+ 已修改 Tool.Content
// 的 case 签名,会导致 MCPClient.swift tuple 解构编译失败。本地副本锁定为 0.9.0 + 5.10。 // 的 case 签名,会导致 MCPClient.swift tuple 解构编译失败。本地副本锁定为 0.9.0 + 5.10。
//
// 路径 `../../../swift_sdk_local` 是从本插件真实位置 local_plugins/chat_api/ios/chat_api/
// 算的。Flutter 构建会把本插件软链进 ios/Flutter/ephemeral/Packages/.packages/chat_api,
// SwiftPM 解析此相对路径时基于软链位置 → 会去 ios/Flutter/ephemeral/swift_sdk_local 找。
// 因此 ios/Podfile 的 post_install 钩子会自动建一条
// ios/Flutter/ephemeral/swift_sdk_local → local_plugins/swift_sdk_local 的桥接软链。
.package(path: "../../../swift_sdk_local"), .package(path: "../../../swift_sdk_local"),
.package(path: "../../../location_service/ios/location_service"), .package(path: "../../../location_service/ios/location_service"),
.package(path: "../../../music_service/ios/music_service"), .package(path: "../../../music_service/ios/music_service"),
.package(path: "../../../qq_music/ios/qq_music"), .package(path: "../../../qq_music/ios/qq_music"),
], ],
targets: [ targets: [
.target( .target(

2
pubspec.yaml

@ -1,7 +1,7 @@
name: voitrans name: voitrans
description: "Voitrans - AI Voice Assistant." description: "Voitrans - AI Voice Assistant."
publish_to: "none" publish_to: "none"
version: 1.0.29+104 version: 1.0.30+105
environment: environment:
sdk: ">=3.3.0 <4.0.0" sdk: ">=3.3.0 <4.0.0"

Loading…
Cancel
Save