Flutter 3.10.0更新后iOS模拟器出现通道连接PlatformException错误
问题现象
将Flutter升级至3.10.0稳定版后,运行actify_app时iOS模拟器出现以下错误,Android模拟器可正常运行:
[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel., null, null)
#0 FirebaseCoreHostApi.initializeCore (package:firebase_core_platform_interface/src/pigeon/messages.pigeon.dart:210:7)
#1 MethodChannelFirebase._initializeCore (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:29:44)
#2 MethodChannelFirebase.initializeApp (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:73:7)
#3 Firebase.initializeApp (package:firebase_core/src/firebase.dart:43:31)
#4 main (package:actify_app/main.dart:49:3)
Syncing files to device iPhone 14 Plus... 385ms
已尝试相关方案未解决,以下是环境信息、pubspec.yaml及Podfile内容,求解决思路。
环境信息
- ✅ Flutter(稳定版通道,3.10.0,运行于macOS 13.3.1 22E772610a darwin-x64,语言区域en-DE)
- Flutter版本3.10.0,路径:/Users/tristanwieser/Developer/flutter
- 框架版本:84a1e904f4(8天前,2023-05-09 07:41:44 -0700)
- 引擎版本:d44b5a94c9
- Dart版本:3.0.0
- DevTools版本:2.23.1
- ✅ Android开发工具链(Android SDK版本33.0.1)
- Android SDK路径:/Users/tristanwieser/Library/Android/sdk
- 平台:android-33,构建工具:33.0.1
- Java路径:/Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
- Java版本:OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b802.4-9586694)
- 已接受所有Android许可证
- ✅ Xcode(iOS和macOS开发,Xcode 14.3)
- Xcode路径:/Applications/Xcode.app/Contents/Developer
- 构建版本:14E222b
- CocoaPods版本:1.12.1
- ✅ Chrome(Web开发)
- Chrome路径:/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
- ✅ Android Studio(版本2022.2)
- Android Studio路径:/Applications/Android Studio.app/Contents
- Flutter插件可安装
- Dart插件可安装
- Java版本:OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b802.4-9586694)
- ✅ 已连接设备(3台)
- iPhone 14 Plus(模拟器):1E7952C8-0AC1-48E2-A90D-C76C1606EEE7,iOS版本16.4
- macOS(桌面):darwin-x64,macOS 13.3.1 22E772610a
- Chrome(Web):Google Chrome 113.0.5672.126
- ✅ 网络资源:所有预期网络资源可用
- 无其他问题
pubspec.yaml内容
# 以下行防止包被意外发布到pub.dev,私有包推荐使用 publish_to: 'none' # 如需发布到pub.dev请删除此行 # 以下定义应用的版本和构建号 # 版本号为三个点分隔的数字,如1.2.43,后面可跟可选的构建号(用+分隔) # 在Flutter构建时,可通过--build-name和--build-number分别覆盖版本和构建号 # Android中,build-name作为versionName,build-number作为versionCode # 查看Android版本控制详情 # iOS中,build-name作为CFBundleShortVersionString,build-number作为CFBundleVersion # 查看iOS版本控制详情 version: 1.0.0+1 environment: sdk: ">=2.17.0 <3.0.0" dependencies: geocoding: ^2.0.0 geolocator: ^9.0.2 flutter_typeahead: ^4.3.8 google_sign_in: flutter_facebook_auth: ^5.0.9 flutter: sdk: flutter flutter_localizations: sdk: flutter adobe_xd: ^2.0.1 google_fonts: ^4.0.3 firebase_core: ^2.13.0 firebase_core_platform_interface: ^4.8.0 firebase_analytics: ^10.1.0 firebase_auth: ^4.6.1 firebase_storage: ^11.0.10 firebase_messaging: ^14.6.1 cloud_firestore: ^4.7.1 google_maps_flutter: ^2.1.1 smooth_star_rating_null_safety: ^1.0.4+2 image_picker: ^0.8.3+2 dropdown_search: ^5.0.5 filter_list: ^1.0.2 camera: path_provider: ^2.0.15 path: ^1.8.2 table_calendar: ^3.0.0 url_launcher: ^6.0.20 dependency_overrides: firebase_core_platform_interface: ^4.8.0 # 以下将Cupertino Icons字体添加到应用中 # 使用CupertinoIcons类调用iOS风格图标 cupertino_icons: ^1.0.2 mailto: ^2.0.0 flutter_rating_bar: ^4.0.1 font_awesome_flutter: ^10.4.0 google_places_flutter: ^2.0.5 dev_dependencies: flutter_test: sdk: flutter test: # 关于pubspec的通用Dart部分信息,请查看相关文档 # 以下部分是Flutter专属配置 flutter: # 以下行确保Material Icons字体包含在应用中,以便使用material Icons类的图标 uses-material-design: true # 如需添加资源,请添加assets部分,示例如下: assets: assets/images/ assets/logos/ # 图片资源可包含一个或多个分辨率特定的"变体",查看相关文档 # 关于从包依赖中添加资源的详情,查看相关文档 # 如需添加自定义字体,请在此"flutter"部分添加fonts部分 # 列表中的每个条目应包含"family"键(字体家族名称)和"fonts"键(包含资源和其他描述符的列表) # 示例: fonts: family: Schyler fonts: asset: fonts/Schyler-Regular.ttf asset: fonts/Schyler-Italic.ttf style: italic family: Trajan Pro fonts: asset: fonts/TrajanPro.ttf asset: fonts/TrajanPro_Bold.ttf weight: 700 # 关于从包依赖中添加字体的详情,查看相关文档
Podfile内容
# 取消注释此行以定义项目的全局平台 # platform :ios, '13.0' # CocoaPods分析会同步发送网络统计信息,影响Flutter构建延迟 ENV['COCOAPODS_DISABLE_STATS'] = 'true' project 'Runner', { 'Debug' => :debug, 'Profile' => :release, 'Release' => :release, } def flutter_root generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) unless File.exist?(generated_xcode_build_settings_path) raise "#{generated_xcode_build_settings_path}必须存在。如果手动运行pod install,请确保先执行flutter pub get" end File.foreach(generated_xcode_build_settings_path) do |line| matches = line.match(/FLUTTER_ROOT\=(.*)/) return matches[1].strip if matches end raise "在#{generated_xcode_build_settings_path}中未找到FLUTTER_ROOT。尝试删除Generated.xcconfig,然后运行flutter pub get" end require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) flutter_ios_podfile_setup target 'Runner' do use_frameworks! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) end pod 'GooglePlaces' post_install do |installer| installer.pods_project.targets.each do |target| flutter_additional_ios_build_settings(target) target.build_configurations.each do |config| config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0' end end end
解决思路
检查Firebase配置文件
- 确认iOS项目根目录下是否存在
GoogleService-Info.plist,且已正确添加到Xcode的Runner目标中(需勾选"Copy items if needed") - 对比配置文件中的Bundle ID与Xcode项目的Bundle ID是否完全一致
- 确认iOS项目根目录下是否存在
更新Firebase依赖与CocoaPods
- 执行
flutter pub upgrade firebase_core firebase_auth cloud_firestore更新所有Firebase相关依赖 - 进入ios目录,执行
pod deintegrate清除现有Pod依赖,再执行pod install --repo-update重新安装并更新Pod仓库
- 执行
修复Dart SDK版本冲突
- pubspec中
environment.sdk指定的是<3.0.0,但Flutter 3.10.0已使用Dart 3.0.0,需将其修改为">=3.0.0 <4.0.0",然后执行flutter pub get
- pubspec中
调整Podfile配置
- 取消注释
platform :ios, '13.0',确保平台版本明确 - 将
use_frameworks!改为use_frameworks! :linkage => :static,Flutter 3.10.0对静态框架支持更好,避免通道连接问题
- 取消注释
清理构建缓存
- 执行
flutter clean清除Flutter缓存 - 在Xcode中执行
Product > Clean Build Folder清除iOS构建缓存 - 重启iOS模拟器,再重新运行项目
- 执行
检查Firebase Core初始化代码
- 确保
main.dart中Firebase.initializeApp()的调用正确,可添加错误捕获:void main() async { WidgetsFlutterBinding.ensureInitialized(); try { await Firebase.initializeApp(); } catch (e) { print("Firebase初始化错误: $e"); } runApp(const MyApp()); }
- 确保
内容的提问来源于stack exchange,提问作者Troxic

