Flutter应用iOS真机运行编译报错 安卓及iOS模拟器运行正常
问题根因
你遇到的报错分为两类:
- Starscream相关的都是非致命语法警告,由该依赖旧版本的Swift语法不符合新Xcode编译规范导致,通常不会直接导致编译失败
- 核心致命错误是
video_player 1.0.1旧版本适配问题:Xcode 12.4+的iPhone真机SDK中AVFoundation框架的头文件结构调整,旧版video_player没有适配该结构,而模拟器SDK的头文件结构未发生变化,所以出现模拟器正常、真机编译失败的情况。
解决步骤
1. 升级video_player依赖
你当前使用的
video_player 1.0.1版本过旧,将pubspec.yaml中的依赖升级到2.4.0以上的稳定版本即可解决AVFoundation编译问题:dependencies: video_player: ^2.7.2 # 可替换为当前最新稳定版保存后依次执行命令清理并重新拉取依赖:
flutter clean flutter pub get2. 重置iOS端Pods缓存
进入项目的ios目录,执行以下命令清理旧的Pods配置和缓存:
pod deintegrate rm -f Podfile.lock rm -rf ~/Library/Developer/Xcode/DerivedData/* pod install --repo-update3. 处理Starscream警告(可选,仅编译仍失败时操作)
如果执行完前两步后编译仍然因为Starscream的语法问题失败,在Podfile末尾添加以下配置,屏蔽Starscream的编译警告同时统一Swift版本:
post_install do |installer| installer.pods_project.targets.each do |target| # 适配Starscream编译配置 if target.name == 'Starscream' target.build_configurations.each do |config| config.build_settings['SWIFT_VERSION'] = '5.0' config.build_settings['SWIFT_SUPPRESS_WARNINGS'] = 'YES' end end # 统一所有依赖的最低iOS部署版本,和你项目的配置保持一致即可 target.build_configurations.each do |config| config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0' end end end修改完成后重新执行
pod install生效。4. Xcode配置校验(可选)
如果以上操作都完成后仍然报错,打开Xcode运行项目的Runner.xcworkspace,做如下检查:
- 确认Build Settings中的
IPHONEOS_DEPLOYMENT_TARGET配置,真机和模拟器的最低版本保持一致,且不低于12.0 - 确认Build Phases的Link Binary With Libraries列表中存在
AVFoundation.framework,状态为Required
- 确认Build Settings中的
内容的提问来源于stack exchange,提问作者Samir Shaikh
相关产品推荐
相关产品推荐

